@multiplayer-app/ai-agent-node 0.1.0-beta.12 → 0.1.0-beta.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/cjs/config.cjs +88 -50
  2. package/dist/cjs/config.cjs.map +1 -1
  3. package/dist/cjs/config.d.ts +58 -31
  4. package/dist/cjs/config.d.ts.map +1 -1
  5. package/dist/cjs/helpers/AIHelper.cjs +36 -38
  6. package/dist/cjs/helpers/AIHelper.cjs.map +1 -1
  7. package/dist/cjs/helpers/AIHelper.d.ts +16 -11
  8. package/dist/cjs/helpers/AIHelper.d.ts.map +1 -1
  9. package/dist/cjs/helpers/AIHelper.test.cjs +19 -12
  10. package/dist/cjs/helpers/AIHelper.test.cjs.map +1 -1
  11. package/dist/cjs/helpers/FileHelper.cjs +131 -151
  12. package/dist/cjs/helpers/FileHelper.cjs.map +1 -1
  13. package/dist/cjs/helpers/FileHelper.d.ts +19 -25
  14. package/dist/cjs/helpers/FileHelper.d.ts.map +1 -1
  15. package/dist/cjs/helpers/index.cjs +0 -1
  16. package/dist/cjs/helpers/index.cjs.map +1 -1
  17. package/dist/cjs/helpers/index.d.ts +0 -1
  18. package/dist/cjs/helpers/index.d.ts.map +1 -1
  19. package/dist/cjs/index.cjs +108 -26
  20. package/dist/cjs/index.cjs.map +1 -1
  21. package/dist/cjs/index.d.ts +37 -10
  22. package/dist/cjs/index.d.ts.map +1 -1
  23. package/dist/cjs/libs/s3/index.cjs +3 -39
  24. package/dist/cjs/libs/s3/index.cjs.map +1 -1
  25. package/dist/cjs/libs/s3/index.d.ts +1 -2
  26. package/dist/cjs/libs/s3/index.d.ts.map +1 -1
  27. package/dist/cjs/libs/s3/s3.lib.cjs +173 -186
  28. package/dist/cjs/libs/s3/s3.lib.cjs.map +1 -1
  29. package/dist/cjs/libs/s3/s3.lib.d.ts +29 -22
  30. package/dist/cjs/libs/s3/s3.lib.d.ts.map +1 -1
  31. package/dist/cjs/processors/ChatProcessor.cjs +40 -37
  32. package/dist/cjs/processors/ChatProcessor.cjs.map +1 -1
  33. package/dist/cjs/processors/ChatProcessor.d.ts +17 -1
  34. package/dist/cjs/processors/ChatProcessor.d.ts.map +1 -1
  35. package/dist/cjs/services/AIService.cjs +8 -8
  36. package/dist/cjs/services/AIService.cjs.map +1 -1
  37. package/dist/cjs/services/AIService.d.ts +3 -1
  38. package/dist/cjs/services/AIService.d.ts.map +1 -1
  39. package/dist/cjs/services/InternalEventsHandler.cjs +3 -3
  40. package/dist/cjs/services/InternalEventsHandler.cjs.map +1 -1
  41. package/dist/cjs/services/InternalEventsHandler.d.ts +3 -1
  42. package/dist/cjs/services/InternalEventsHandler.d.ts.map +1 -1
  43. package/dist/cjs/services/ModelFetcher.cjs +2 -8
  44. package/dist/cjs/services/ModelFetcher.cjs.map +1 -1
  45. package/dist/cjs/services/ModelFetcher.d.ts +2 -7
  46. package/dist/cjs/services/ModelFetcher.d.ts.map +1 -1
  47. package/dist/cjs/services/RedisService.cjs +20 -16
  48. package/dist/cjs/services/RedisService.cjs.map +1 -1
  49. package/dist/cjs/services/RedisService.d.ts +5 -2
  50. package/dist/cjs/services/RedisService.d.ts.map +1 -1
  51. package/dist/cjs/services/SocketService.cjs +6 -8
  52. package/dist/cjs/services/SocketService.cjs.map +1 -1
  53. package/dist/cjs/services/SocketService.d.ts +6 -3
  54. package/dist/cjs/services/SocketService.d.ts.map +1 -1
  55. package/dist/cjs/store/AgentStore.cjs +3 -4
  56. package/dist/cjs/store/AgentStore.cjs.map +1 -1
  57. package/dist/cjs/store/AgentStore.d.ts +2 -1
  58. package/dist/cjs/store/AgentStore.d.ts.map +1 -1
  59. package/dist/cjs/store/ConfigStore.cjs +1 -3
  60. package/dist/cjs/store/ConfigStore.cjs.map +1 -1
  61. package/dist/cjs/store/ConfigStore.d.ts.map +1 -1
  62. package/dist/cjs/tools/proposeFormValuesTool.d.ts +2 -2
  63. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  64. package/dist/esm/config.d.ts +58 -31
  65. package/dist/esm/config.d.ts.map +1 -1
  66. package/dist/esm/config.js +88 -48
  67. package/dist/esm/config.js.map +1 -1
  68. package/dist/esm/helpers/AIHelper.d.ts +16 -11
  69. package/dist/esm/helpers/AIHelper.d.ts.map +1 -1
  70. package/dist/esm/helpers/AIHelper.js +38 -38
  71. package/dist/esm/helpers/AIHelper.js.map +1 -1
  72. package/dist/esm/helpers/AIHelper.test.js +19 -12
  73. package/dist/esm/helpers/AIHelper.test.js.map +1 -1
  74. package/dist/esm/helpers/FileHelper.d.ts +19 -25
  75. package/dist/esm/helpers/FileHelper.d.ts.map +1 -1
  76. package/dist/esm/helpers/FileHelper.js +131 -146
  77. package/dist/esm/helpers/FileHelper.js.map +1 -1
  78. package/dist/esm/helpers/index.d.ts +0 -1
  79. package/dist/esm/helpers/index.d.ts.map +1 -1
  80. package/dist/esm/helpers/index.js +0 -1
  81. package/dist/esm/helpers/index.js.map +1 -1
  82. package/dist/esm/index.d.ts +37 -10
  83. package/dist/esm/index.d.ts.map +1 -1
  84. package/dist/esm/index.js +78 -10
  85. package/dist/esm/index.js.map +1 -1
  86. package/dist/esm/libs/s3/index.d.ts +1 -2
  87. package/dist/esm/libs/s3/index.d.ts.map +1 -1
  88. package/dist/esm/libs/s3/index.js +1 -2
  89. package/dist/esm/libs/s3/index.js.map +1 -1
  90. package/dist/esm/libs/s3/s3.lib.d.ts +29 -22
  91. package/dist/esm/libs/s3/s3.lib.d.ts.map +1 -1
  92. package/dist/esm/libs/s3/s3.lib.js +177 -172
  93. package/dist/esm/libs/s3/s3.lib.js.map +1 -1
  94. package/dist/esm/processors/ChatProcessor.d.ts +17 -1
  95. package/dist/esm/processors/ChatProcessor.d.ts.map +1 -1
  96. package/dist/esm/processors/ChatProcessor.js +46 -39
  97. package/dist/esm/processors/ChatProcessor.js.map +1 -1
  98. package/dist/esm/services/AIService.d.ts +3 -1
  99. package/dist/esm/services/AIService.d.ts.map +1 -1
  100. package/dist/esm/services/AIService.js +12 -11
  101. package/dist/esm/services/AIService.js.map +1 -1
  102. package/dist/esm/services/InternalEventsHandler.d.ts +3 -1
  103. package/dist/esm/services/InternalEventsHandler.d.ts.map +1 -1
  104. package/dist/esm/services/InternalEventsHandler.js +4 -3
  105. package/dist/esm/services/InternalEventsHandler.js.map +1 -1
  106. package/dist/esm/services/ModelFetcher.d.ts +2 -7
  107. package/dist/esm/services/ModelFetcher.d.ts.map +1 -1
  108. package/dist/esm/services/ModelFetcher.js +2 -8
  109. package/dist/esm/services/ModelFetcher.js.map +1 -1
  110. package/dist/esm/services/RedisService.d.ts +5 -2
  111. package/dist/esm/services/RedisService.d.ts.map +1 -1
  112. package/dist/esm/services/RedisService.js +21 -14
  113. package/dist/esm/services/RedisService.js.map +1 -1
  114. package/dist/esm/services/SocketService.d.ts +6 -3
  115. package/dist/esm/services/SocketService.d.ts.map +1 -1
  116. package/dist/esm/services/SocketService.js +8 -6
  117. package/dist/esm/services/SocketService.js.map +1 -1
  118. package/dist/esm/store/AgentStore.d.ts +2 -1
  119. package/dist/esm/store/AgentStore.d.ts.map +1 -1
  120. package/dist/esm/store/AgentStore.js +4 -2
  121. package/dist/esm/store/AgentStore.js.map +1 -1
  122. package/dist/esm/store/ConfigStore.d.ts.map +1 -1
  123. package/dist/esm/store/ConfigStore.js +1 -3
  124. package/dist/esm/store/ConfigStore.js.map +1 -1
  125. package/dist/esm/tools/proposeFormValuesTool.d.ts +2 -2
  126. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  127. package/package.json +3 -3
  128. package/dist/cjs/helpers/SetupHelper.cjs +0 -34
  129. package/dist/cjs/helpers/SetupHelper.cjs.map +0 -1
  130. package/dist/cjs/helpers/SetupHelper.d.ts +0 -4
  131. package/dist/cjs/helpers/SetupHelper.d.ts.map +0 -1
  132. package/dist/cjs/libs/logger/config.cjs +0 -9
  133. package/dist/cjs/libs/logger/config.cjs.map +0 -1
  134. package/dist/cjs/libs/logger/config.d.ts +0 -5
  135. package/dist/cjs/libs/logger/config.d.ts.map +0 -1
  136. package/dist/cjs/libs/s3/config.cjs +0 -8
  137. package/dist/cjs/libs/s3/config.cjs.map +0 -1
  138. package/dist/cjs/libs/s3/config.d.ts +0 -4
  139. package/dist/cjs/libs/s3/config.d.ts.map +0 -1
  140. package/dist/esm/helpers/SetupHelper.d.ts +0 -4
  141. package/dist/esm/helpers/SetupHelper.d.ts.map +0 -1
  142. package/dist/esm/helpers/SetupHelper.js +0 -29
  143. package/dist/esm/helpers/SetupHelper.js.map +0 -1
  144. package/dist/esm/libs/logger/config.d.ts +0 -5
  145. package/dist/esm/libs/logger/config.d.ts.map +0 -1
  146. package/dist/esm/libs/logger/config.js +0 -6
  147. package/dist/esm/libs/logger/config.js.map +0 -1
  148. package/dist/esm/libs/s3/config.d.ts +0 -4
  149. package/dist/esm/libs/s3/config.d.ts.map +0 -1
  150. package/dist/esm/libs/s3/config.js +0 -5
  151. package/dist/esm/libs/s3/config.js.map +0 -1
@@ -1,13 +1,40 @@
1
- export { redisService } from './services/RedisService';
2
- export { socketService } from './services/SocketService';
3
- export { agentStore, AgentProcessEventType } from './store/AgentStore';
1
+ export { createProposeFormValuesTool, proposeFormValuesToolName } from './tools/proposeFormValuesTool';
2
+ export type { Config } from './config';
4
3
  export type { AgentProcessEvent, AgentProcessListener, AgentProcess, AgentProcessEventPayload } from './store/AgentStore';
4
+ export type { AgentLogger } from './libs/logger';
5
5
  export { ConfigStore } from './store/ConfigStore';
6
- export { ModelStore } from './store/ModelStore';
7
- export { ArtifactStore } from './store/ArtifactStore';
8
- export { ChatProcessor, ModelsProcessor } from './processors';
9
- export { startServices, stopServices } from './helpers/SetupHelper';
10
- export { createProposeFormValuesTool, proposeFormValuesToolName } from './tools/proposeFormValuesTool';
11
- export { s3 } from './libs/s3';
12
- export { setLogger, getLogger, logger, type AgentLogger } from './libs/logger';
6
+ import { Config } from './config';
7
+ import { S3Lib } from './libs/s3';
8
+ import { Server as HTTPServer } from 'http';
9
+ import { AgentChatRepository, AgentMessageRepository } from '@multiplayer-app/ai-agent-db';
10
+ import { ConfigStore } from './store/ConfigStore';
11
+ import { type AgentLogger } from './libs/logger';
12
+ import { ArtifactStore } from './store/ArtifactStore';
13
+ import { ChatProcessor, ModelsProcessor } from './processors';
14
+ import { Middleware } from './services/SocketService';
15
+ export interface AIAgentServiceOptions {
16
+ chatRepository: AgentChatRepository;
17
+ messageRepository: AgentMessageRepository;
18
+ setupAgents: (agentStore: ConfigStore) => void;
19
+ artifactStore?: ArtifactStore;
20
+ config?: Partial<Config>;
21
+ logger?: AgentLogger;
22
+ }
23
+ export declare class AIAgentService {
24
+ private chatProcessor;
25
+ private modelsProcessor;
26
+ private s3;
27
+ private socketService;
28
+ private redisService;
29
+ private agentStore;
30
+ constructor(options: AIAgentServiceOptions);
31
+ start(): Promise<[void, void, void]>;
32
+ stop(): Promise<[void]>;
33
+ getS3(): S3Lib;
34
+ stopAgentProcess(chatId: string): Promise<void>;
35
+ initSocketSupport(httpServer: HTTPServer, authorizationMiddleware?: Middleware): Promise<void>;
36
+ getChatProcessor(): ChatProcessor;
37
+ getModelProcessor(): ModelsProcessor;
38
+ private fetchModels;
39
+ }
13
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC1H,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AACvG,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AACvG,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC1H,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAkB,MAAM,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAe,EAAa,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,MAAM,WAAW,qBAAqB;IAClC,cAAc,EAAE,mBAAmB,CAAC;IACpC,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,WAAW,EAAE,CAAC,UAAU,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,qBAAa,cAAc;IACvB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,EAAE,CAAQ;IAClB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAa;gBAEnB,OAAO,EAAE,qBAAqB;IAyB1C,KAAK;IAQL,IAAI;IAIJ,KAAK;IAIC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,uBAAuB,CAAC,EAAE,UAAU;IAI9E,gBAAgB;IAIhB,iBAAiB;YAIH,WAAW;CAU5B"}
package/dist/esm/index.js CHANGED
@@ -1,12 +1,80 @@
1
- export { redisService } from './services/RedisService';
2
- export { socketService } from './services/SocketService';
3
- export { agentStore, AgentProcessEventType } from './store/AgentStore';
4
- export { ConfigStore } from './store/ConfigStore';
5
- export { ModelStore } from './store/ModelStore';
6
- export { ArtifactStore } from './store/ArtifactStore';
7
- export { ChatProcessor, ModelsProcessor } from './processors';
8
- export { startServices, stopServices } from './helpers/SetupHelper';
9
1
  export { createProposeFormValuesTool, proposeFormValuesToolName } from './tools/proposeFormValuesTool';
10
- export { s3 } from './libs/s3';
11
- export { setLogger, getLogger, logger } from './libs/logger';
2
+ export { ConfigStore } from './store/ConfigStore';
3
+ import { ConfigProvider } from './config';
4
+ import { S3Lib } from './libs/s3';
5
+ import { SocketService } from './services/SocketService';
6
+ import { AgentStore, AgentProcessEventType } from './store/AgentStore';
7
+ import { ConfigStore } from './store/ConfigStore';
8
+ import logger, { setLogger } from './libs/logger';
9
+ import { RedisService } from './services/RedisService';
10
+ import { ArtifactStore } from './store/ArtifactStore';
11
+ import { ChatProcessor, ModelsProcessor } from './processors';
12
+ import { ModelStore } from './store';
13
+ import { ModelFetcher } from './services';
14
+ export class AIAgentService {
15
+ chatProcessor;
16
+ modelsProcessor;
17
+ s3;
18
+ socketService;
19
+ redisService;
20
+ agentStore;
21
+ constructor(options) {
22
+ if (options.config) {
23
+ ConfigProvider.getInstance().setConfig(options.config);
24
+ }
25
+ this.s3 = new S3Lib(ConfigProvider.getInstance().getConfig().s3);
26
+ this.redisService = new RedisService(ConfigProvider.getInstance().getConfig().redis);
27
+ this.socketService = new SocketService(ConfigProvider.getInstance().getConfig().socket, this.redisService);
28
+ this.modelsProcessor = new ModelsProcessor();
29
+ options.setupAgents(ConfigStore.getInstance());
30
+ this.agentStore = new AgentStore(this.redisService);
31
+ if (options.logger)
32
+ setLogger(options.logger);
33
+ this.chatProcessor = new ChatProcessor({
34
+ agentStore: this.agentStore,
35
+ chatRepository: options.chatRepository,
36
+ messageRepository: options.messageRepository,
37
+ artifactStore: options.artifactStore || new ArtifactStore(),
38
+ s3Lib: this.s3,
39
+ config: ConfigProvider.getInstance().getConfig(),
40
+ socketService: this.socketService
41
+ });
42
+ }
43
+ start() {
44
+ return Promise.all([
45
+ this.agentStore.initialize(),
46
+ this.fetchModels(ConfigProvider.getInstance().getConfig().ai),
47
+ this.s3.ensureBucketExists(ConfigProvider.getInstance().getConfig().s3.bucket ?? '').catch((err) => logger.error("Unable to auto create s3 bucket")),
48
+ ]);
49
+ }
50
+ stop() {
51
+ return Promise.all([this.redisService.disconnect()]);
52
+ }
53
+ getS3() {
54
+ return this.s3;
55
+ }
56
+ async stopAgentProcess(chatId) {
57
+ await this.agentStore.shareAgentProcessEvent(chatId, { type: AgentProcessEventType.Stop, data: undefined });
58
+ }
59
+ initSocketSupport(httpServer, authorizationMiddleware) {
60
+ return this.socketService.initialize(httpServer, authorizationMiddleware);
61
+ }
62
+ getChatProcessor() {
63
+ return this.chatProcessor;
64
+ }
65
+ getModelProcessor() {
66
+ return this.modelsProcessor;
67
+ }
68
+ async fetchModels(config) {
69
+ try {
70
+ const modelFetcher = new ModelFetcher(config);
71
+ const models = await modelFetcher.fetchAllModels();
72
+ ModelStore.getInstance().setModels(models);
73
+ }
74
+ catch (error) {
75
+ logger.error('Failed to fetch models on startup:', error);
76
+ throw error;
77
+ }
78
+ }
79
+ }
12
80
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AACvG,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAoB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
1
  export { ObjectCannedACL } from '@aws-sdk/client-s3';
2
- export * as s3 from './s3.lib';
3
- export * from './config';
2
+ export { S3Lib } from './s3.lib';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libs/s3/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,UAAU,CAAA;AAC9B,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libs/s3/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA"}
@@ -1,4 +1,3 @@
1
1
  export { ObjectCannedACL } from '@aws-sdk/client-s3';
2
- export * as s3 from './s3.lib';
3
- export * from './config';
2
+ export { S3Lib } from './s3.lib';
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/libs/s3/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,UAAU,CAAA;AAC9B,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/libs/s3/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA"}
@@ -1,25 +1,32 @@
1
1
  import { CompleteMultipartUploadOutput, ObjectCannedACL, GetObjectOutput, GetObjectCommandOutput, ListObjectsV2CommandOutput } from '@aws-sdk/client-s3';
2
2
  import stream from 'stream';
3
- export declare const uploadFile: (Key: string, Bucket: string, Body: any, Expires?: Date) => Promise<import("@aws-sdk/client-s3").PutObjectCommandOutput>;
4
- export declare const downloadFile: (Key: string, Bucket: string) => Promise<GetObjectOutput>;
5
- export declare const downloadFileAsString: (Key: string, Bucket: string) => Promise<string | undefined>;
6
- export declare const downloadFileAsByteArray: (Key: string, Bucket: string) => Promise<Uint8Array | undefined>;
7
- export declare const streamUpload: (Key: string, Bucket: string, ACL?: ObjectCannedACL) => {
8
- writeStream: stream.PassThrough;
9
- promise: Promise<CompleteMultipartUploadOutput>;
10
- };
11
- export declare const getPresignedUploadUrl: (Key: string, Bucket: string, expiresIn?: number) => Promise<string>;
12
- export declare const getPresignedDownloadUrl: (Key: string, Bucket: string) => Promise<string>;
13
- export declare const getDownloadUrl: (Key: string, Bucket: string) => string;
14
- export declare const copy: (Bucket: string, KeyFrom: string, KeyTo: string) => Promise<import("@aws-sdk/client-s3").CopyObjectCommandOutput>;
15
- export declare const copyBetweenBuckets: (BucketFrom: string, KeyFrom: string, BucketTo: string, KeyTo: string) => Promise<import("@aws-sdk/client-s3").CopyObjectCommandOutput>;
16
- export declare const getObject: (Bucket: string, Key: string) => Promise<GetObjectCommandOutput>;
17
- export declare const listObjectsByPrefix: (Bucket: string, Prefix: string) => Promise<ListObjectsV2CommandOutput>;
18
- export declare const headObject: (Bucket: string, Key: string) => Promise<GetObjectCommandOutput>;
19
- export declare const deleteObject: (Bucket: string, Key: string) => Promise<GetObjectCommandOutput>;
20
- export declare const deleteObjectsByPrefix: (Bucket: string, Prefix: string, ContinuationToken?: string) => Promise<void>;
21
- /**
22
- * Ensures a bucket exists, creating it if it doesn't
23
- */
24
- export declare const ensureBucketExists: (Bucket: string) => Promise<void>;
3
+ import { Config } from '../../config';
4
+ export declare class S3Lib {
5
+ private readonly client;
6
+ private readonly signer;
7
+ private readonly config;
8
+ constructor(config: Config["s3"]);
9
+ uploadFile(Key: string, Bucket: string, Body: any, Expires?: Date): Promise<import("@aws-sdk/client-s3").PutObjectCommandOutput>;
10
+ downloadFile(Key: string, Bucket: string): Promise<GetObjectOutput>;
11
+ downloadFileAsString(Key: string, Bucket: string): Promise<string | undefined>;
12
+ downloadFileAsByteArray(Key: string, Bucket: string): Promise<Uint8Array | undefined>;
13
+ streamUpload(Key: string, Bucket: string, ACL?: ObjectCannedACL): {
14
+ writeStream: stream.PassThrough;
15
+ promise: Promise<CompleteMultipartUploadOutput>;
16
+ };
17
+ getPresignedUploadUrl(Key: string, Bucket: string, expiresIn?: number): Promise<string>;
18
+ getPresignedDownloadUrl(Key: string, Bucket: string): Promise<string>;
19
+ getDownloadUrl(Key: string, Bucket: string): string;
20
+ copy(Bucket: string, KeyFrom: string, KeyTo: string): Promise<import("@aws-sdk/client-s3").CopyObjectCommandOutput>;
21
+ copyBetweenBuckets(BucketFrom: string, KeyFrom: string, BucketTo: string, KeyTo: string): Promise<import("@aws-sdk/client-s3").CopyObjectCommandOutput>;
22
+ getObject(Bucket: string, Key: string): Promise<GetObjectCommandOutput>;
23
+ listObjectsByPrefix(Bucket: string, Prefix: string): Promise<ListObjectsV2CommandOutput>;
24
+ headObject(Bucket: string, Key: string): Promise<GetObjectCommandOutput>;
25
+ deleteObject(Bucket: string, Key: string): Promise<GetObjectCommandOutput>;
26
+ deleteObjectsByPrefix(Bucket: string, Prefix: string, ContinuationToken?: string): Promise<void>;
27
+ /**
28
+ * Ensures a bucket exists, creating it if it doesn't
29
+ */
30
+ ensureBucketExists(Bucket: string): Promise<void>;
31
+ }
25
32
  //# sourceMappingURL=s3.lib.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"s3.lib.d.ts","sourceRoot":"","sources":["../../../../src/libs/s3/s3.lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,6BAA6B,EAC7B,eAAe,EAAE,eAAe,EAChC,sBAAsB,EAAE,0BAA0B,EAInD,MAAM,oBAAoB,CAAA;AAK3B,OAAO,MAAM,MAAM,QAAQ,CAAA;AAoB3B,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAM,GAAG,EAAE,UAAU,IAAI,iEAOhF,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,eAAe,CAOjF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC/B,KAAK,MAAM,EACX,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,GAAG,SAAS,CAe5B,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAU,KAAK,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAezG,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAM,eAAe;;aAqBjD,OAAO,CAAC,6BAA6B,CAAC;CAEnE,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,KAAK,MAAM,EACX,QAAQ,MAAM,EACd,YAAY,MAAM,oBAenB,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAU,KAAK,MAAM,EAAE,QAAQ,MAAM,oBAgBxE,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,WAOzD,CAAA;AAED,eAAO,MAAM,IAAI,GACf,QAAQ,MAAM,EACd,SAAS,MAAM,EACf,OAAO,MAAM,kEAOd,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,YAAY,MAAM,EAClB,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,OAAO,MAAM,kEAOd,CAAA;AAED,eAAO,MAAM,SAAS,GACpB,QAAQ,MAAM,EACd,KAAK,MAAM,KACV,OAAO,CAAC,sBAAsB,CAKhC,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,QAAQ,MAAM,KACb,OAAO,CAAC,0BAA0B,CAOpC,CAAA;AAED,eAAO,MAAM,UAAU,GACrB,QAAQ,MAAM,EACd,KAAK,MAAM,KACV,OAAO,CAAC,sBAAsB,CAKhC,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,QAAQ,MAAM,EACd,KAAK,MAAM,KACV,OAAO,CAAC,sBAAsB,CAKhC,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,oBAAoB,MAAM,KACzB,OAAO,CAAC,IAAI,CAqBd,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAwBrE,CAAA"}
1
+ {"version":3,"file":"s3.lib.d.ts","sourceRoot":"","sources":["../../../../src/libs/s3/s3.lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,6BAA6B,EAC7B,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,0BAA0B,EAI3B,MAAM,oBAAoB,CAAA;AAK3B,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAI;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAE3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBACzB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;IAehC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,IAAI;IASjE,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAS7D,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAiB9E,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAiB3F,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,eAAe;;iBAqBjC,OAAO,CAAC,6BAA6B,CAAC;;IAI9D,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAcrE,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAgBzD,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAS1C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAQnD,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAQjF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAOvE,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IASxF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAOxE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAO1E,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBtG;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBxD"}
@@ -4,195 +4,200 @@ import { createRequest } from '@aws-sdk/util-create-request';
4
4
  import { formatUrl } from '@aws-sdk/util-format-url';
5
5
  import { Upload } from '@aws-sdk/lib-storage';
6
6
  import stream from 'stream';
7
- import { S3_HOST, S3_PRESIGNED_URL_EXPIRES, AWS_REGION, } from './config';
8
7
  import logger from '../logger';
9
- const S3Client = new S3({
10
- ...S3_HOST ? {
11
- endpoint: S3_HOST,
12
- forcePathStyle: true,
13
- }
14
- : {},
15
- });
16
- const signer = new S3RequestPresigner({
17
- ...S3Client.config,
18
- });
19
- export const uploadFile = (Key, Bucket, Body, Expires) => {
20
- return S3Client.putObject({
21
- Key,
22
- Bucket,
23
- Body,
24
- Expires,
25
- });
26
- };
27
- export const downloadFile = (Key, Bucket) => {
28
- const command = new GetObjectCommand({
29
- Bucket,
30
- Key,
31
- });
32
- return S3Client.send(command);
33
- };
34
- export const downloadFileAsString = async (Key, Bucket) => {
35
- try {
8
+ export class S3Lib {
9
+ client;
10
+ signer;
11
+ config;
12
+ constructor(config) {
13
+ this.config = config;
14
+ this.client = new S3({
15
+ ...this.config.host ? {
16
+ endpoint: this.config.host,
17
+ forcePathStyle: true,
18
+ }
19
+ : {},
20
+ });
21
+ this.signer = new S3RequestPresigner({
22
+ ...this.client.config,
23
+ });
24
+ }
25
+ uploadFile(Key, Bucket, Body, Expires) {
26
+ return this.client.putObject({
27
+ Key,
28
+ Bucket,
29
+ Body,
30
+ Expires,
31
+ });
32
+ }
33
+ downloadFile(Key, Bucket) {
36
34
  const command = new GetObjectCommand({
37
35
  Bucket,
38
36
  Key,
39
37
  });
40
- const response = await S3Client.send(command);
41
- return response.Body?.transformToString();
38
+ return this.client.send(command);
42
39
  }
43
- catch (err) {
44
- if (err?.name === 'NoSuchKey') {
45
- return undefined;
40
+ async downloadFileAsString(Key, Bucket) {
41
+ try {
42
+ const command = new GetObjectCommand({
43
+ Bucket,
44
+ Key,
45
+ });
46
+ const response = await this.client.send(command);
47
+ return response.Body?.transformToString();
48
+ }
49
+ catch (err) {
50
+ if (err?.name === 'NoSuchKey') {
51
+ return undefined;
52
+ }
53
+ throw err;
46
54
  }
47
- throw err;
48
55
  }
49
- };
50
- export const downloadFileAsByteArray = async (Key, Bucket) => {
51
- try {
52
- const command = new GetObjectCommand({
56
+ async downloadFileAsByteArray(Key, Bucket) {
57
+ try {
58
+ const command = new GetObjectCommand({
59
+ Bucket,
60
+ Key,
61
+ });
62
+ const response = await this.client.send(command);
63
+ return response.Body?.transformToByteArray();
64
+ }
65
+ catch (err) {
66
+ if (err?.name === 'NoSuchKey') {
67
+ return undefined;
68
+ }
69
+ throw err;
70
+ }
71
+ }
72
+ streamUpload(Key, Bucket, ACL) {
73
+ const passThroughStream = new stream.PassThrough();
74
+ const options = {
75
+ client: this.client,
76
+ params: {
77
+ Bucket,
78
+ Key,
79
+ Body: passThroughStream,
80
+ },
81
+ leavePartsOnError: false,
82
+ };
83
+ if (ACL) {
84
+ options.params.ACL = ACL;
85
+ }
86
+ const upload = new Upload(options);
87
+ return {
88
+ writeStream: passThroughStream,
89
+ promise: upload.done(),
90
+ };
91
+ }
92
+ async getPresignedUploadUrl(Key, Bucket, expiresIn) {
93
+ const request = await createRequest(this.client, new PutObjectCommand({ Key, Bucket }));
94
+ return formatUrl(await this.signer.presign(request, {
95
+ expiresIn: expiresIn || this.config.presignedUrlExpires || 120,
96
+ }));
97
+ }
98
+ async getPresignedDownloadUrl(Key, Bucket) {
99
+ const request = await createRequest(this.client, new GetObjectCommand({ Key, Bucket }));
100
+ return formatUrl(await this.signer.presign(request, {
101
+ expiresIn: this.config.presignedUrlExpires || 120,
102
+ }));
103
+ }
104
+ getDownloadUrl(Key, Bucket) {
105
+ if (this.config.host) {
106
+ return `${this.config.host}/${Bucket}/${Key}`;
107
+ }
108
+ const regionString = this.config.region?.includes('us-east-1') ? '' : '-' + this.config.region;
109
+ return `https://${Bucket}.s3${regionString}.amazonaws.com/${Key}`;
110
+ }
111
+ copy(Bucket, KeyFrom, KeyTo) {
112
+ return this.client.copyObject({
113
+ CopySource: `/${Bucket}/${KeyFrom}`,
114
+ Bucket,
115
+ Key: KeyTo,
116
+ });
117
+ }
118
+ copyBetweenBuckets(BucketFrom, KeyFrom, BucketTo, KeyTo) {
119
+ return this.client.copyObject({
120
+ CopySource: `/${BucketFrom}/${KeyFrom}`,
121
+ Bucket: BucketTo,
122
+ Key: KeyTo,
123
+ });
124
+ }
125
+ async getObject(Bucket, Key) {
126
+ return this.client.getObject({
53
127
  Bucket,
54
128
  Key,
55
129
  });
56
- const response = await S3Client.send(command);
57
- return response.Body?.transformToByteArray();
58
130
  }
59
- catch (err) {
60
- if (err?.name === 'NoSuchKey') {
61
- return undefined;
62
- }
63
- throw err;
64
- }
65
- };
66
- export const streamUpload = (Key, Bucket, ACL) => {
67
- const passThroughStream = new stream.PassThrough();
68
- const options = {
69
- client: S3Client,
70
- params: {
131
+ async listObjectsByPrefix(Bucket, Prefix) {
132
+ return this.client.send(new ListObjectsV2Command({
133
+ Bucket,
134
+ Prefix,
135
+ }));
136
+ }
137
+ async headObject(Bucket, Key) {
138
+ return this.client.headObject({
71
139
  Bucket,
72
140
  Key,
73
- Body: passThroughStream,
74
- },
75
- leavePartsOnError: false,
76
- };
77
- if (ACL) {
78
- options.params.ACL = ACL;
79
- }
80
- const upload = new Upload(options);
81
- return {
82
- writeStream: passThroughStream,
83
- promise: upload.done(),
84
- };
85
- };
86
- export const getPresignedUploadUrl = async (Key, Bucket, expiresIn) => {
87
- const request = await createRequest(S3Client, new PutObjectCommand({ Key, Bucket }));
88
- const signedUrl = formatUrl(await signer.presign(request, {
89
- expiresIn: expiresIn || S3_PRESIGNED_URL_EXPIRES,
90
- }));
91
- return signedUrl;
92
- };
93
- export const getPresignedDownloadUrl = async (Key, Bucket) => {
94
- const request = await createRequest(S3Client, new GetObjectCommand({ Key, Bucket }));
95
- const signedUrl = formatUrl(await signer.presign(request, {
96
- expiresIn: S3_PRESIGNED_URL_EXPIRES,
97
- }));
98
- return signedUrl;
99
- };
100
- export const getDownloadUrl = (Key, Bucket) => {
101
- if (S3_HOST) {
102
- return `${S3_HOST}/${Bucket}/${Key}`;
103
- }
104
- const regionString = AWS_REGION.includes('us-east-1') ? '' : '-' + AWS_REGION;
105
- return `https://${Bucket}.s3${regionString}.amazonaws.com/${Key}`;
106
- };
107
- export const copy = (Bucket, KeyFrom, KeyTo) => {
108
- return S3Client.copyObject({
109
- CopySource: `/${Bucket}/${KeyFrom}`,
110
- Bucket,
111
- Key: KeyTo,
112
- });
113
- };
114
- export const copyBetweenBuckets = (BucketFrom, KeyFrom, BucketTo, KeyTo) => {
115
- return S3Client.copyObject({
116
- CopySource: `/${BucketFrom}/${KeyFrom}`,
117
- Bucket: BucketTo,
118
- Key: KeyTo,
119
- });
120
- };
121
- export const getObject = async (Bucket, Key) => {
122
- return S3Client.getObject({
123
- Bucket,
124
- Key,
125
- });
126
- };
127
- export const listObjectsByPrefix = async (Bucket, Prefix) => {
128
- return S3Client.send(new ListObjectsV2Command({
129
- Bucket,
130
- Prefix,
131
- }));
132
- };
133
- export const headObject = async (Bucket, Key) => {
134
- return S3Client.headObject({
135
- Bucket,
136
- Key,
137
- });
138
- };
139
- export const deleteObject = async (Bucket, Key) => {
140
- return S3Client.deleteObject({
141
- Bucket,
142
- Key,
143
- });
144
- };
145
- export const deleteObjectsByPrefix = async (Bucket, Prefix, ContinuationToken) => {
146
- const objects = await S3Client.listObjectsV2({ Bucket, Prefix, ContinuationToken });
147
- if (!objects.Contents?.length)
148
- return;
149
- const deleteParams = {
150
- Bucket,
151
- Delete: { Objects: [] },
152
- };
153
- objects.Contents.forEach(({ Key }) => {
154
- if (!Key)
141
+ });
142
+ }
143
+ async deleteObject(Bucket, Key) {
144
+ return this.client.deleteObject({
145
+ Bucket,
146
+ Key,
147
+ });
148
+ }
149
+ async deleteObjectsByPrefix(Bucket, Prefix, ContinuationToken) {
150
+ const objects = await this.client.listObjectsV2({ Bucket, Prefix, ContinuationToken });
151
+ if (!objects.Contents?.length)
155
152
  return;
156
- deleteParams.Delete.Objects.push({ Key });
157
- });
158
- logger.info(deleteParams, '[S3] Deleting objects');
159
- const deletedResp = await S3Client.deleteObjects(deleteParams);
160
- if (deletedResp.Errors?.length) {
161
- logger.error(deletedResp.Errors, '[S3] Error during deleteObjectsByPrefix');
162
- }
163
- if (objects.IsTruncated) {
164
- await deleteObjectsByPrefix(Bucket, Prefix, objects.NextContinuationToken);
165
- }
166
- };
167
- /**
168
- * Ensures a bucket exists, creating it if it doesn't
169
- */
170
- export const ensureBucketExists = async (Bucket) => {
171
- try {
172
- await S3Client.send(new HeadBucketCommand({ Bucket }));
173
- // Bucket exists
174
- return;
175
- }
176
- catch (error) {
177
- // If bucket doesn't exist, create it
178
- if (error.$metadata?.httpStatusCode === 404) {
179
- try {
180
- await S3Client.send(new CreateBucketCommand({ Bucket }));
181
- logger.info({ Bucket }, '[S3] Created bucket');
182
- }
183
- catch (createError) {
184
- // Ignore if bucket was created by another process
185
- if (createError.$metadata?.httpStatusCode !== 409) {
186
- logger.error({ Bucket, error: createError }, '[S3] Failed to create bucket');
187
- throw createError;
153
+ const deleteParams = {
154
+ Bucket,
155
+ Delete: { Objects: [] },
156
+ };
157
+ objects.Contents.forEach(({ Key }) => {
158
+ if (!Key)
159
+ return;
160
+ deleteParams.Delete.Objects.push({ Key });
161
+ });
162
+ logger.info(deleteParams, '[S3] Deleting objects');
163
+ const deletedResp = await this.client.deleteObjects(deleteParams);
164
+ if (deletedResp.Errors?.length) {
165
+ logger.error(deletedResp.Errors, '[S3] Error during deleteObjectsByPrefix');
166
+ }
167
+ if (objects.IsTruncated) {
168
+ await this.deleteObjectsByPrefix(Bucket, Prefix, objects.NextContinuationToken);
169
+ }
170
+ }
171
+ /**
172
+ * Ensures a bucket exists, creating it if it doesn't
173
+ */
174
+ async ensureBucketExists(Bucket) {
175
+ try {
176
+ await this.client.send(new HeadBucketCommand({ Bucket }));
177
+ // Bucket exists
178
+ return;
179
+ }
180
+ catch (error) {
181
+ // If bucket doesn't exist, create it
182
+ if (error.$metadata?.httpStatusCode === 404) {
183
+ try {
184
+ await this.client.send(new CreateBucketCommand({ Bucket }));
185
+ logger.info({ Bucket }, '[S3] Created bucket');
186
+ }
187
+ catch (createError) {
188
+ // Ignore if bucket was created by another process
189
+ if (createError.$metadata?.httpStatusCode !== 409) {
190
+ logger.error({ Bucket, error: createError }, '[S3] Failed to create bucket');
191
+ throw createError;
192
+ }
188
193
  }
189
194
  }
190
- }
191
- else {
192
- // Some other error (permissions, etc.)
193
- logger.error({ Bucket, error }, '[S3] Failed to check bucket existence');
194
- throw error;
195
+ else {
196
+ // Some other error (permissions, etc.)
197
+ logger.error({ Bucket, error }, '[S3] Failed to check bucket existence');
198
+ throw error;
199
+ }
195
200
  }
196
201
  }
197
- };
202
+ }
198
203
  //# sourceMappingURL=s3.lib.js.map