@punks/backend-entity-manager 0.0.198 → 0.0.200

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 (36) hide show
  1. package/dist/cjs/index.js +171 -28
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/abstractions/index.d.ts +1 -0
  4. package/dist/cjs/types/abstractions/secrets.d.ts +22 -0
  5. package/dist/cjs/types/integrations/repository/typeorm/utils.d.ts +2 -0
  6. package/dist/cjs/types/platforms/nest/decorators/secrets.d.ts +4 -0
  7. package/dist/cjs/types/platforms/nest/decorators/symbols.d.ts +1 -0
  8. package/dist/cjs/types/platforms/nest/plugins/index.d.ts +1 -0
  9. package/dist/cjs/types/platforms/nest/plugins/secrets/aws-secrets-manager/index.d.ts +3 -0
  10. package/dist/cjs/types/platforms/nest/plugins/secrets/aws-secrets-manager/module.d.ts +5 -0
  11. package/dist/cjs/types/platforms/nest/plugins/secrets/aws-secrets-manager/provider/index.d.ts +1 -0
  12. package/dist/cjs/types/platforms/nest/plugins/secrets/aws-secrets-manager/provider/secrets.d.ts +12 -0
  13. package/dist/cjs/types/platforms/nest/plugins/secrets/aws-secrets-manager/settings/index.d.ts +8 -0
  14. package/dist/cjs/types/platforms/nest/plugins/secrets/index.d.ts +1 -0
  15. package/dist/cjs/types/platforms/nest/processors/initializer/index.d.ts +2 -0
  16. package/dist/cjs/types/providers/services.d.ts +3 -1
  17. package/dist/cjs/types/symbols/ioc.d.ts +1 -0
  18. package/dist/esm/index.js +172 -29
  19. package/dist/esm/index.js.map +1 -1
  20. package/dist/esm/types/abstractions/index.d.ts +1 -0
  21. package/dist/esm/types/abstractions/secrets.d.ts +22 -0
  22. package/dist/esm/types/integrations/repository/typeorm/utils.d.ts +2 -0
  23. package/dist/esm/types/platforms/nest/decorators/secrets.d.ts +4 -0
  24. package/dist/esm/types/platforms/nest/decorators/symbols.d.ts +1 -0
  25. package/dist/esm/types/platforms/nest/plugins/index.d.ts +1 -0
  26. package/dist/esm/types/platforms/nest/plugins/secrets/aws-secrets-manager/index.d.ts +3 -0
  27. package/dist/esm/types/platforms/nest/plugins/secrets/aws-secrets-manager/module.d.ts +5 -0
  28. package/dist/esm/types/platforms/nest/plugins/secrets/aws-secrets-manager/provider/index.d.ts +1 -0
  29. package/dist/esm/types/platforms/nest/plugins/secrets/aws-secrets-manager/provider/secrets.d.ts +12 -0
  30. package/dist/esm/types/platforms/nest/plugins/secrets/aws-secrets-manager/settings/index.d.ts +8 -0
  31. package/dist/esm/types/platforms/nest/plugins/secrets/index.d.ts +1 -0
  32. package/dist/esm/types/platforms/nest/processors/initializer/index.d.ts +2 -0
  33. package/dist/esm/types/providers/services.d.ts +3 -1
  34. package/dist/esm/types/symbols/ioc.d.ts +1 -0
  35. package/dist/index.d.ts +52 -1
  36. package/package.json +11 -9
package/dist/cjs/index.js CHANGED
@@ -18,6 +18,7 @@ var s3RequestPresigner = require('@aws-sdk/s3-request-presigner');
18
18
  var clientSes = require('@aws-sdk/client-ses');
19
19
  var require$$2 = require('fs');
20
20
  var mail = require('@sendgrid/mail');
21
+ var clientSecretsManager = require('@aws-sdk/client-secrets-manager');
21
22
 
22
23
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
24
 
@@ -1192,6 +1193,7 @@ const GlobalServices = {
1192
1193
  IEmailLogger: "IEmailLogger",
1193
1194
  IEmailTemplatesCollection: "IEmailTemplatesCollection",
1194
1195
  IBucketProvider: "IBucketProvider",
1196
+ ISecretsProvider: "ISecretsProvider",
1195
1197
  IFileProvider: "IFileProvider",
1196
1198
  },
1197
1199
  Settings: {
@@ -1414,6 +1416,13 @@ class EntitiesServiceLocator {
1414
1416
  this.provider.registerMultiple(GlobalServices.Plugins.IBucketProvider, name, instance);
1415
1417
  return this;
1416
1418
  }
1419
+ resolveSecretsProviders() {
1420
+ return this.provider.resolveMultiple(GlobalServices.Plugins.ISecretsProvider);
1421
+ }
1422
+ registerSecretsProvider(name, instance) {
1423
+ this.provider.registerMultiple(GlobalServices.Plugins.ISecretsProvider, name, instance);
1424
+ return this;
1425
+ }
1417
1426
  resolveAuthenticationMiddlewares() {
1418
1427
  return (this.provider.resolveMultiple(GlobalServices.Authentication.IAuthenticationMiddleware, {
1419
1428
  optional: true,
@@ -2844,6 +2853,35 @@ class PermissionsChecker {
2844
2853
  }
2845
2854
  }
2846
2855
 
2856
+ const mergeWhereClauses = (where1, where2) => {
2857
+ const mergedWhere = {};
2858
+ for (const key in where1) {
2859
+ if (where1.hasOwnProperty(key)) {
2860
+ mergedWhere[key] = where1[key];
2861
+ }
2862
+ }
2863
+ for (const key in where2) {
2864
+ if (where2.hasOwnProperty(key)) {
2865
+ if (mergedWhere.hasOwnProperty(key)) {
2866
+ if (typeof where2[key] === "object" &&
2867
+ typeof mergedWhere[key] === "object") {
2868
+ mergedWhere[key] = {
2869
+ ...mergedWhere[key],
2870
+ ...where2[key],
2871
+ };
2872
+ }
2873
+ else {
2874
+ mergedWhere[key] = where2[key];
2875
+ }
2876
+ }
2877
+ else {
2878
+ mergedWhere[key] = where2[key];
2879
+ }
2880
+ }
2881
+ }
2882
+ return mergedWhere;
2883
+ };
2884
+
2847
2885
  class TypeOrmQueryBuilder extends QueryBuilderBase {
2848
2886
  constructor(services) {
2849
2887
  super();
@@ -3026,22 +3064,13 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
3026
3064
  return result;
3027
3065
  }
3028
3066
  if (!Array.isArray(a) && !Array.isArray(b)) {
3029
- return {
3030
- ...a,
3031
- ...b,
3032
- };
3067
+ return mergeWhereClauses(a, b);
3033
3068
  }
3034
3069
  if (Array.isArray(a) && !Array.isArray(b)) {
3035
- return a.map((x) => ({
3036
- ...x,
3037
- ...b,
3038
- }));
3070
+ return a.map((x) => mergeWhereClauses(x, b));
3039
3071
  }
3040
3072
  if (!Array.isArray(a) && Array.isArray(b)) {
3041
- return b.map((x) => ({
3042
- ...a,
3043
- ...x,
3044
- }));
3073
+ return b.map((x) => mergeWhereClauses(a, x));
3045
3074
  }
3046
3075
  return {
3047
3076
  ...a,
@@ -3268,6 +3297,7 @@ const EntityManagerSymbols = {
3268
3297
  EmailTemplate: Symbol.for("WP:EMAIL_TEMPLATE"),
3269
3298
  EmailLogger: Symbol.for("WP:EMAIL_LOGGER"),
3270
3299
  BucketProvider: Symbol.for("WP:BUCKET_PROVIDER"),
3300
+ SecretsProvider: Symbol.for("WP:SECRETS_PROVIDER"),
3271
3301
  FileProvider: Symbol.for("WP:FILE_PROVIDER"),
3272
3302
  FileReferenceRepository: Symbol.for("WP:FILE_REFERENCE_REPO"),
3273
3303
  PipelineTemplate: Symbol.for("WP:PIPELINE_TEMPLATE"),
@@ -22179,6 +22209,7 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22179
22209
  await this.registerFileProviders();
22180
22210
  await this.registerGlobalAuthenticationMiddlewares();
22181
22211
  await this.registerBucketProviders();
22212
+ await this.registerSecretsProviders();
22182
22213
  await this.registerCacheInstances();
22183
22214
  await this.executeInitializers(app);
22184
22215
  await this.executeSeeders();
@@ -22293,6 +22324,20 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22293
22324
  this.logger.log(`Authentication middleware ${provider.discoveredClass.name} registered 🚜`);
22294
22325
  }
22295
22326
  }
22327
+ async registerSecretsProviders() {
22328
+ const providers = await this.discoverSecretsProviders();
22329
+ if (!providers.length) {
22330
+ this.logger.warn("No secrets providers found ⚠️");
22331
+ return;
22332
+ }
22333
+ for (const provider of providers) {
22334
+ this.registry
22335
+ .getContainer()
22336
+ .getEntitiesServicesLocator()
22337
+ .registerSecretsProvider(provider.meta.providerId, provider.discoveredClass.instance);
22338
+ this.logger.log(`Secrets provider ${provider.discoveredClass.name} registered 🚜`);
22339
+ }
22340
+ }
22296
22341
  async registerBucketProviders() {
22297
22342
  const providers = await this.discoverBucketProviders();
22298
22343
  if (!providers.length) {
@@ -22454,6 +22499,9 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22454
22499
  async discoverBucketProviders() {
22455
22500
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.BucketProvider);
22456
22501
  }
22502
+ async discoverSecretsProviders() {
22503
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.SecretsProvider);
22504
+ }
22457
22505
  async discoverCacheInstances() {
22458
22506
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.CacheInstance);
22459
22507
  }
@@ -22816,7 +22864,7 @@ AuthenticationMiddleware = __decorate([
22816
22864
  ], AuthenticationMiddleware);
22817
22865
 
22818
22866
  var AuthenticationModule_1;
22819
- const ModuleData$3 = {
22867
+ const ModuleData$4 = {
22820
22868
  imports: [exports.EntityManagerModule, jwt.JwtModule],
22821
22869
  providers: [
22822
22870
  AuthenticationServicesResolver,
@@ -22833,7 +22881,7 @@ exports.AuthenticationModule = AuthenticationModule_1 = class AuthenticationModu
22833
22881
  authSettings.initialize(input);
22834
22882
  return {
22835
22883
  module: AuthenticationModule_1,
22836
- ...ModuleData$3,
22884
+ ...ModuleData$4,
22837
22885
  };
22838
22886
  }
22839
22887
  configure(consumer) {
@@ -22846,7 +22894,7 @@ exports.AuthenticationModule = AuthenticationModule_1 = class AuthenticationModu
22846
22894
  };
22847
22895
  exports.AuthenticationModule = AuthenticationModule_1 = __decorate([
22848
22896
  common.Module({
22849
- ...ModuleData$3,
22897
+ ...ModuleData$4,
22850
22898
  })
22851
22899
  ], exports.AuthenticationModule);
22852
22900
 
@@ -23136,7 +23184,7 @@ class AwsS3BucketError extends Error {
23136
23184
 
23137
23185
  const awsBucketSettings = new AppInMemorySettings();
23138
23186
 
23139
- const createClient$1 = (settings) => new clientS3.S3Client({
23187
+ const createClient$2 = (settings) => new clientS3.S3Client({
23140
23188
  region: settings.region,
23141
23189
  credentials: settings.awsAccessKeyId && settings.awsSecretAccessKey
23142
23190
  ? {
@@ -23147,7 +23195,7 @@ const createClient$1 = (settings) => new clientS3.S3Client({
23147
23195
  });
23148
23196
  exports.AwsS3BucketProvider = class AwsS3BucketProvider {
23149
23197
  constructor() {
23150
- this.client = createClient$1(awsBucketSettings.value);
23198
+ this.client = createClient$2(awsBucketSettings.value);
23151
23199
  }
23152
23200
  async folderList(input) {
23153
23201
  try {
@@ -23303,7 +23351,7 @@ AwsS3FileProvider = __decorate([
23303
23351
  ], AwsS3FileProvider);
23304
23352
 
23305
23353
  var AwsBucketModule_1;
23306
- const ModuleData$2 = {
23354
+ const ModuleData$3 = {
23307
23355
  providers: [exports.AwsS3BucketProvider, AwsS3FileProvider],
23308
23356
  };
23309
23357
  exports.AwsBucketModule = AwsBucketModule_1 = class AwsBucketModule {
@@ -23311,13 +23359,13 @@ exports.AwsBucketModule = AwsBucketModule_1 = class AwsBucketModule {
23311
23359
  awsBucketSettings.initialize(input);
23312
23360
  return {
23313
23361
  module: AwsBucketModule_1,
23314
- ...ModuleData$2,
23362
+ ...ModuleData$3,
23315
23363
  };
23316
23364
  }
23317
23365
  };
23318
23366
  exports.AwsBucketModule = AwsBucketModule_1 = __decorate([
23319
23367
  common.Module({
23320
- ...ModuleData$2,
23368
+ ...ModuleData$3,
23321
23369
  })
23322
23370
  ], exports.AwsBucketModule);
23323
23371
 
@@ -28402,7 +28450,7 @@ const renderHandlebarsTemplate = (input) => {
28402
28450
 
28403
28451
  const newUuid = backendCore.newUuid;
28404
28452
 
28405
- const createClient = (settings) => new clientSes.SESClient({
28453
+ const createClient$1 = (settings) => new clientSes.SESClient({
28406
28454
  region: settings.region,
28407
28455
  credentials: settings.awsAccessKeyId && settings.awsSecretAccessKey
28408
28456
  ? {
@@ -28413,7 +28461,7 @@ const createClient = (settings) => new clientSes.SESClient({
28413
28461
  });
28414
28462
  let AwsSesEmailProvider = class AwsSesEmailProvider {
28415
28463
  constructor() {
28416
- this.client = createClient(awsSesSettings.value);
28464
+ this.client = createClient$1(awsSesSettings.value);
28417
28465
  }
28418
28466
  async sendTemplatedEmail(input, template) {
28419
28467
  const processedPayload = await template.processPayload(input.payload);
@@ -28461,7 +28509,7 @@ AwsSesEmailProvider = __decorate([
28461
28509
  ], AwsSesEmailProvider);
28462
28510
 
28463
28511
  var AwsEmailModule_1;
28464
- const ModuleData$1 = {
28512
+ const ModuleData$2 = {
28465
28513
  providers: [AwsSesEmailProvider],
28466
28514
  };
28467
28515
  exports.AwsEmailModule = AwsEmailModule_1 = class AwsEmailModule {
@@ -28469,13 +28517,13 @@ exports.AwsEmailModule = AwsEmailModule_1 = class AwsEmailModule {
28469
28517
  awsSesSettings.initialize(input);
28470
28518
  return {
28471
28519
  module: AwsEmailModule_1,
28472
- ...ModuleData$1,
28520
+ ...ModuleData$2,
28473
28521
  };
28474
28522
  }
28475
28523
  };
28476
28524
  exports.AwsEmailModule = AwsEmailModule_1 = __decorate([
28477
28525
  common.Module({
28478
- ...ModuleData$1,
28526
+ ...ModuleData$2,
28479
28527
  })
28480
28528
  ], exports.AwsEmailModule);
28481
28529
 
@@ -28628,7 +28676,7 @@ SendgridEmailProvider = __decorate([
28628
28676
  ], SendgridEmailProvider);
28629
28677
 
28630
28678
  var SendgridEmailModule_1;
28631
- const ModuleData = {
28679
+ const ModuleData$1 = {
28632
28680
  imports: [exports.EntityManagerModule],
28633
28681
  providers: [SendgridEmailProvider],
28634
28682
  };
@@ -28637,13 +28685,13 @@ exports.SendgridEmailModule = SendgridEmailModule_1 = class SendgridEmailModule
28637
28685
  sendgridSettings.initialize(input);
28638
28686
  return {
28639
28687
  module: SendgridEmailModule_1,
28640
- ...ModuleData,
28688
+ ...ModuleData$1,
28641
28689
  };
28642
28690
  }
28643
28691
  };
28644
28692
  exports.SendgridEmailModule = SendgridEmailModule_1 = __decorate([
28645
28693
  common.Module({
28646
- ...ModuleData,
28694
+ ...ModuleData$1,
28647
28695
  })
28648
28696
  ], exports.SendgridEmailModule);
28649
28697
 
@@ -28672,6 +28720,101 @@ exports.InMemoryEmailProvider = __decorate([
28672
28720
  WpEmailProvider("in-memory")
28673
28721
  ], exports.InMemoryEmailProvider);
28674
28722
 
28723
+ const awsSecretsSettings = new AppInMemorySettings();
28724
+
28725
+ const WpSecretsProvider = (providerId) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.SecretsProvider, {
28726
+ providerId,
28727
+ }));
28728
+
28729
+ const createClient = (settings) => new clientSecretsManager.SecretsManagerClient({
28730
+ region: settings.region,
28731
+ credentials: settings.awsAccessKeyId && settings.awsSecretAccessKey
28732
+ ? {
28733
+ accessKeyId: settings.awsAccessKeyId,
28734
+ secretAccessKey: settings.awsSecretAccessKey,
28735
+ }
28736
+ : undefined,
28737
+ });
28738
+ exports.AwsSecretsProvider = class AwsSecretsProvider {
28739
+ constructor() {
28740
+ this.client = createClient(awsSecretsSettings.value);
28741
+ }
28742
+ async getSecretValue(pageName, key) {
28743
+ const secretsPage = await this.getSecretsPage(pageName);
28744
+ return secretsPage[key]?.value;
28745
+ }
28746
+ async getSecrets(pageName) {
28747
+ const secretsPage = await this.getSecretsPage(pageName);
28748
+ return Object.keys(secretsPage).map((key) => ({
28749
+ key,
28750
+ ...secretsPage[key],
28751
+ }));
28752
+ }
28753
+ async setSecret(pageName, secret) {
28754
+ const secretsPage = await this.getSecretsPage(pageName);
28755
+ await this.saveSecretsPage(pageName, {
28756
+ ...secretsPage,
28757
+ [secret.key]: {
28758
+ value: secret.value,
28759
+ hidden: secret.hidden,
28760
+ timestamp: Date.now(),
28761
+ },
28762
+ });
28763
+ }
28764
+ async pageInitialize(pageName, metadata) {
28765
+ await this.client.send(new clientSecretsManager.CreateSecretCommand({
28766
+ Name: this.buildPagePath(pageName),
28767
+ Tags: metadata.tags
28768
+ ? metadata.tags.map((tag) => ({
28769
+ Key: tag.key,
28770
+ Value: tag.value,
28771
+ }))
28772
+ : [],
28773
+ }));
28774
+ }
28775
+ async saveSecretsPage(pageName, secretsPage) {
28776
+ await this.client.send(new clientSecretsManager.CreateSecretCommand({
28777
+ Name: this.buildPagePath(pageName),
28778
+ SecretString: JSON.stringify(secretsPage),
28779
+ }));
28780
+ }
28781
+ async getSecretsPage(pageName) {
28782
+ const secrets = await this.client.send(new clientSecretsManager.GetSecretValueCommand({
28783
+ SecretId: this.buildPagePath(pageName),
28784
+ }));
28785
+ if (!secrets.SecretString) {
28786
+ throw new Error("Secrets not found");
28787
+ }
28788
+ return JSON.parse(secrets.SecretString);
28789
+ }
28790
+ buildPagePath(pageName) {
28791
+ return `${awsSecretsSettings.value.secretsRootPath}-${pageName}`;
28792
+ }
28793
+ };
28794
+ exports.AwsSecretsProvider = __decorate([
28795
+ WpSecretsProvider("awsSecretsManager"),
28796
+ __metadata("design:paramtypes", [])
28797
+ ], exports.AwsSecretsProvider);
28798
+
28799
+ var AwsSecretsModule_1;
28800
+ const ModuleData = {
28801
+ providers: [exports.AwsSecretsProvider],
28802
+ };
28803
+ exports.AwsSecretsModule = AwsSecretsModule_1 = class AwsSecretsModule {
28804
+ static forRoot(input) {
28805
+ awsSecretsSettings.initialize(input);
28806
+ return {
28807
+ module: AwsSecretsModule_1,
28808
+ ...ModuleData,
28809
+ };
28810
+ }
28811
+ };
28812
+ exports.AwsSecretsModule = AwsSecretsModule_1 = __decorate([
28813
+ common.Module({
28814
+ ...ModuleData,
28815
+ })
28816
+ ], exports.AwsSecretsModule);
28817
+
28675
28818
  exports.AUTHENTICATION_EVENTS_NAMESPACE = AUTHENTICATION_EVENTS_NAMESPACE;
28676
28819
  exports.AppExceptionsFilterBase = AppExceptionsFilterBase;
28677
28820
  exports.AppInMemorySettings = AppInMemorySettings;