@solidstarters/solid-core 1.2.166 → 1.2.169

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 (80) hide show
  1. package/dist/config/iam.config.d.ts +2 -0
  2. package/dist/config/iam.config.d.ts.map +1 -1
  3. package/dist/config/iam.config.js +1 -0
  4. package/dist/config/iam.config.js.map +1 -1
  5. package/dist/dtos/create-ai-interaction.dto.d.ts +3 -0
  6. package/dist/dtos/create-ai-interaction.dto.d.ts.map +1 -1
  7. package/dist/dtos/create-ai-interaction.dto.js +19 -1
  8. package/dist/dtos/create-ai-interaction.dto.js.map +1 -1
  9. package/dist/dtos/post-chatter-message.dto.js.map +1 -1
  10. package/dist/dtos/update-ai-interaction.dto.d.ts +3 -0
  11. package/dist/dtos/update-ai-interaction.dto.d.ts.map +1 -1
  12. package/dist/dtos/update-ai-interaction.dto.js +19 -1
  13. package/dist/dtos/update-ai-interaction.dto.js.map +1 -1
  14. package/dist/entities/ai-interaction.entity.d.ts +3 -0
  15. package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
  16. package/dist/entities/ai-interaction.entity.js +13 -1
  17. package/dist/entities/ai-interaction.entity.js.map +1 -1
  18. package/dist/entities/chatter-message.entity.js.map +1 -1
  19. package/dist/filters/http-exception.filter.d.ts.map +1 -1
  20. package/dist/filters/http-exception.filter.js +2 -1
  21. package/dist/filters/http-exception.filter.js.map +1 -1
  22. package/dist/helpers/security.helper.d.ts +4 -2
  23. package/dist/helpers/security.helper.d.ts.map +1 -1
  24. package/dist/helpers/security.helper.js +38 -23
  25. package/dist/helpers/security.helper.js.map +1 -1
  26. package/dist/helpers/solid-core-error-codes-provider.service.js +3 -3
  27. package/dist/helpers/solid-core-error-codes-provider.service.js.map +1 -1
  28. package/dist/helpers/solid-registry.d.ts +0 -1
  29. package/dist/helpers/solid-registry.d.ts.map +1 -1
  30. package/dist/helpers/solid-registry.js +0 -1
  31. package/dist/helpers/solid-registry.js.map +1 -1
  32. package/dist/index.d.ts +0 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +0 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +2 -2
  37. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  38. package/dist/seeders/seed-data/solid-core-metadata.json +33 -0
  39. package/dist/services/authentication.service.d.ts +1 -5
  40. package/dist/services/authentication.service.d.ts.map +1 -1
  41. package/dist/services/authentication.service.js +22 -63
  42. package/dist/services/authentication.service.js.map +1 -1
  43. package/dist/services/chatter-message.service.d.ts.map +1 -1
  44. package/dist/services/chatter-message.service.js.map +1 -1
  45. package/dist/services/mcp-tool-response-handlers/solid-create-module-mcp-tool-response-handler.service.js +1 -1
  46. package/dist/services/mcp-tool-response-handlers/solid-create-module-mcp-tool-response-handler.service.js.map +1 -1
  47. package/dist/services/model-metadata.service.js +1 -1
  48. package/dist/services/model-metadata.service.js.map +1 -1
  49. package/dist/services/setting.service.d.ts.map +1 -1
  50. package/dist/services/setting.service.js +2 -1
  51. package/dist/services/setting.service.js.map +1 -1
  52. package/dist/solid-core.module.d.ts.map +1 -1
  53. package/dist/solid-core.module.js +0 -2
  54. package/dist/solid-core.module.js.map +1 -1
  55. package/dist/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +1 -1
  57. package/src/config/iam.config.ts +1 -0
  58. package/src/dtos/create-ai-interaction.dto.ts +15 -0
  59. package/src/dtos/post-chatter-message.dto.ts +1 -1
  60. package/src/dtos/update-ai-interaction.dto.ts +15 -0
  61. package/src/entities/ai-interaction.entity.ts +9 -0
  62. package/src/entities/chatter-message.entity.ts +3 -3
  63. package/src/filters/http-exception.filter.ts +5 -2
  64. package/src/helpers/security.helper.ts +95 -30
  65. package/src/helpers/solid-core-error-codes-provider.service.ts +4 -4
  66. package/src/helpers/solid-registry.ts +0 -1
  67. package/src/index.ts +0 -1
  68. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +2 -2
  69. package/src/seeders/seed-data/solid-core-metadata.json +35 -2
  70. package/src/services/authentication.service.ts +31 -142
  71. package/src/services/chatter-message.service.ts +373 -374
  72. package/src/services/mcp-tool-response-handlers/solid-create-module-mcp-tool-response-handler.service.ts +1 -1
  73. package/src/services/model-metadata.service.ts +1 -1
  74. package/src/services/setting.service.ts +2 -1
  75. package/src/solid-core.module.ts +0 -8
  76. package/dist/entities/user-password-history.entity.d.ts +0 -7
  77. package/dist/entities/user-password-history.entity.d.ts.map +0 -1
  78. package/dist/entities/user-password-history.entity.js +0 -35
  79. package/dist/entities/user-password-history.entity.js.map +0 -1
  80. package/src/entities/user-password-history.entity.ts +0 -14
@@ -19,6 +19,7 @@ export declare const iamConfig: (() => {
19
19
  callbackURL: string;
20
20
  redirectURL: string;
21
21
  };
22
+ iamAutoGeneratedPassword: string | boolean;
22
23
  }) & import("@nestjs/config").ConfigFactoryKeyHost<{
23
24
  passwordlessRegistration: boolean;
24
25
  iamPasswordRegistrationEnabled: boolean;
@@ -40,6 +41,7 @@ export declare const iamConfig: (() => {
40
41
  callbackURL: string;
41
42
  redirectURL: string;
42
43
  };
44
+ iamAutoGeneratedPassword: string | boolean;
43
45
  }>;
44
46
  export declare const jwtConfig: (() => {
45
47
  secret: string;
@@ -1 +1 @@
1
- {"version":3,"file":"iam.config.d.ts","sourceRoot":"","sources":["../../src/config/iam.config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBpB,CAAA;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;EAQpB,CAAC"}
1
+ {"version":3,"file":"iam.config.d.ts","sourceRoot":"","sources":["../../src/config/iam.config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBpB,CAAA;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;EAQpB,CAAC"}
@@ -24,6 +24,7 @@ exports.iamConfig = (0, config_1.registerAs)('iam', () => {
24
24
  callbackURL: process.env.IAM_GOOGLE_OAUTH_CALLBACK_URL,
25
25
  redirectURL: process.env.IAM_GOOGLE_OAUTH_REDIRECT_URL,
26
26
  },
27
+ iamAutoGeneratedPassword: process.env.IAM_AUTOGENERATED_PASSWORD || true
27
28
  };
28
29
  });
29
30
  exports.jwtConfig = (0, config_1.registerAs)('jwt', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"iam.config.js","sourceRoot":"","sources":["../../src/config/iam.config.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAE/B,QAAA,SAAS,GAAG,IAAA,mBAAU,EAAC,KAAK,EAAE,GAAG,EAAE;IAC5C,OAAO;QACH,wBAAwB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,OAAO,CAAC,KAAK,MAAM;QAC5F,8BAA8B,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,MAAM,CAAC,KAAK,MAAM;QACpG,oCAAoC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,4CAA4C,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjJ,uBAAuB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,MAAM,CAAC,KAAK,MAAM;QACzF,0BAA0B,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,MAAM,CAAC,KAAK,MAAM;QAChG,2BAA2B,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,OAAO,CAAC,KAAK,MAAM;QACpG,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC;QACvD,qCAAqC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,6CAA6C,IAAI,IAAI,CAAC;QAClH,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,QAAQ;QACrD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;QACnC,qCAAqC,EAAE,OAAO,CAAC,GAAG,CAAC,8CAA8C,IAAI,OAAO;QAC5G,+BAA+B,EAAC,IAAI;QACpC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,0DAA0D;QACxG,wBAAwB,EAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,qGAAqG;QACxK,WAAW,EAAE;YACT,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;YAChD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B;YACxD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B;YACtD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B;SACzD;KACJ,CAAC;AACN,CAAC,CAAC,CAAA;AAEW,QAAA,SAAS,GAAG,IAAA,mBAAU,EAAC,KAAK,EAAE,GAAG,EAAE;IAC5C,OAAO;QACH,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QAClC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;QAC5C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACxC,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,MAAM,EAAE,EAAE,CAAC;QAC5E,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,EAAE,EAAE,CAAC;KAClF,CAAC;AACN,CAAC,CAAC,CAAC","sourcesContent":["import { registerAs } from '@nestjs/config';\n\nexport const iamConfig = registerAs('iam', () => {\n return {\n passwordlessRegistration: (process.env.IAM_PASSWORD_LESS_REGISTRATION ?? 'false') === 'true',\n iamPasswordRegistrationEnabled: (process.env.IAM_PASSWORD_REGISTRATION_ENABLED ?? 'true') === 'true',\n passwordlessRegistrationValidateWhat: (process.env.IAM_PASSWORD_LESS_REGISTRATION_VALIDATE_WHAT ?? 'email').split(',').map((item) => item.trim()),\n allowPublicRegistration: (process.env.IAM_ALLOW_PUBLIC_REGISTRATION ?? 'true') === 'true',\n activateUserOnRegistration: (process.env.IAM_ACTIVATE_USER_ON_REGISTRATION ?? 'true') === 'true',\n autoLoginUserOnRegistration: (process.env.IAM_AUTO_LOGIN_USER_ON_REGISTRATION ?? 'false') === 'true',\n otpExpiry: parseInt(process.env.IAM_OTP_EXPIRY ?? '10'),\n forgotPasswordVerificationTokenExpiry: parseInt(process.env.IAM_FORGOT_PASSWORD_VERIFICATION_TOKEN_EXPIRY ?? '10'),\n defaultRole: process.env.IAM_DEFAULT_ROLE ?? 'Public',\n dummyOtp: process.env.IAM_OTP_DUMMY,\n forgotPasswordSendVerificationTokenOn: process.env.IAM_FORGOT_PASSWORD_SEND_VERIFICATION_TOKEN_ON ?? 'email',\n forceChangePasswordOnFirstLogin:true,\n PASSWORD_REGEX: process.env.PASSWORD_REGEX || '^$|^(?=.*[a-z])(?=.*[A-Z])(?=.*\\\\d)(?=.*[^\\\\da-zA-Z]).*$',\n PASSWORD_COMPLEXITY_DESC : process.env.PASSWORD_COMPLEXITY_DESC || 'Password must contain at least one uppercase, one lowercase, one number, and one special character.',\n googleOauth: {\n clientID: process.env.IAM_GOOGLE_OAUTH_CLIENT_ID,\n clientSecret: process.env.IAM_GOOGLE_OAUTH_CLIENT_SECRET,\n callbackURL: process.env.IAM_GOOGLE_OAUTH_CALLBACK_URL,\n redirectURL: process.env.IAM_GOOGLE_OAUTH_REDIRECT_URL,\n },\n };\n})\n\nexport const jwtConfig = registerAs('jwt', () => {\n return {\n secret: process.env.IAM_JWT_SECRET,\n audience: process.env.IAM_JWT_TOKEN_AUDIENCE,\n issuer: process.env.IAM_JWT_TOKEN_ISSUER,\n accessTokenTtl: parseInt(process.env.IAM_JWT_ACCESS_TOKEN_TTL ?? '3600', 10),\n refreshTokenTtl: parseInt(process.env.IAM_JWT_REFRESH_TOKEN_TTL ?? '86400', 10),\n };\n});\n"]}
1
+ {"version":3,"file":"iam.config.js","sourceRoot":"","sources":["../../src/config/iam.config.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAE/B,QAAA,SAAS,GAAG,IAAA,mBAAU,EAAC,KAAK,EAAE,GAAG,EAAE;IAC5C,OAAO;QACH,wBAAwB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,OAAO,CAAC,KAAK,MAAM;QAC5F,8BAA8B,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,MAAM,CAAC,KAAK,MAAM;QACpG,oCAAoC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,4CAA4C,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjJ,uBAAuB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,MAAM,CAAC,KAAK,MAAM;QACzF,0BAA0B,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,MAAM,CAAC,KAAK,MAAM;QAChG,2BAA2B,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,OAAO,CAAC,KAAK,MAAM;QACpG,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC;QACvD,qCAAqC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,6CAA6C,IAAI,IAAI,CAAC;QAClH,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,QAAQ;QACrD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;QACnC,qCAAqC,EAAE,OAAO,CAAC,GAAG,CAAC,8CAA8C,IAAI,OAAO;QAC5G,+BAA+B,EAAC,IAAI;QACpC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,0DAA0D;QACxG,wBAAwB,EAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,qGAAqG;QACxK,WAAW,EAAE;YACT,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;YAChD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B;YACxD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B;YACtD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B;SACzD;QACD,wBAAwB,EAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,IAAI;KAC1E,CAAC;AACN,CAAC,CAAC,CAAA;AAEW,QAAA,SAAS,GAAG,IAAA,mBAAU,EAAC,KAAK,EAAE,GAAG,EAAE;IAC5C,OAAO;QACH,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QAClC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;QAC5C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACxC,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,MAAM,EAAE,EAAE,CAAC;QAC5E,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,EAAE,EAAE,CAAC;KAClF,CAAC;AACN,CAAC,CAAC,CAAC","sourcesContent":["import { registerAs } from '@nestjs/config';\n\nexport const iamConfig = registerAs('iam', () => {\n return {\n passwordlessRegistration: (process.env.IAM_PASSWORD_LESS_REGISTRATION ?? 'false') === 'true',\n iamPasswordRegistrationEnabled: (process.env.IAM_PASSWORD_REGISTRATION_ENABLED ?? 'true') === 'true',\n passwordlessRegistrationValidateWhat: (process.env.IAM_PASSWORD_LESS_REGISTRATION_VALIDATE_WHAT ?? 'email').split(',').map((item) => item.trim()),\n allowPublicRegistration: (process.env.IAM_ALLOW_PUBLIC_REGISTRATION ?? 'true') === 'true',\n activateUserOnRegistration: (process.env.IAM_ACTIVATE_USER_ON_REGISTRATION ?? 'true') === 'true',\n autoLoginUserOnRegistration: (process.env.IAM_AUTO_LOGIN_USER_ON_REGISTRATION ?? 'false') === 'true',\n otpExpiry: parseInt(process.env.IAM_OTP_EXPIRY ?? '10'),\n forgotPasswordVerificationTokenExpiry: parseInt(process.env.IAM_FORGOT_PASSWORD_VERIFICATION_TOKEN_EXPIRY ?? '10'),\n defaultRole: process.env.IAM_DEFAULT_ROLE ?? 'Public',\n dummyOtp: process.env.IAM_OTP_DUMMY,\n forgotPasswordSendVerificationTokenOn: process.env.IAM_FORGOT_PASSWORD_SEND_VERIFICATION_TOKEN_ON ?? 'email',\n forceChangePasswordOnFirstLogin:true,\n PASSWORD_REGEX: process.env.PASSWORD_REGEX || '^$|^(?=.*[a-z])(?=.*[A-Z])(?=.*\\\\d)(?=.*[^\\\\da-zA-Z]).*$',\n PASSWORD_COMPLEXITY_DESC : process.env.PASSWORD_COMPLEXITY_DESC || 'Password must contain at least one uppercase, one lowercase, one number, and one special character.',\n googleOauth: {\n clientID: process.env.IAM_GOOGLE_OAUTH_CLIENT_ID,\n clientSecret: process.env.IAM_GOOGLE_OAUTH_CLIENT_SECRET,\n callbackURL: process.env.IAM_GOOGLE_OAUTH_CALLBACK_URL,\n redirectURL: process.env.IAM_GOOGLE_OAUTH_REDIRECT_URL,\n },\n iamAutoGeneratedPassword:process.env.IAM_AUTOGENERATED_PASSWORD || true\n };\n})\n\nexport const jwtConfig = registerAs('jwt', () => {\n return {\n secret: process.env.IAM_JWT_SECRET,\n audience: process.env.IAM_JWT_TOKEN_AUDIENCE,\n issuer: process.env.IAM_JWT_TOKEN_ISSUER,\n accessTokenTtl: parseInt(process.env.IAM_JWT_ACCESS_TOKEN_TTL ?? '3600', 10),\n refreshTokenTtl: parseInt(process.env.IAM_JWT_REFRESH_TOKEN_TTL ?? '86400', 10),\n };\n});\n"]}
@@ -14,5 +14,8 @@ export declare class CreateAiInteractionDto {
14
14
  parentInteractionId: number;
15
15
  parentInteractionUserKey: string;
16
16
  isAutoApply: boolean;
17
+ inputTokens: number;
18
+ outputTokens: number;
19
+ totalTokens: number;
17
20
  }
18
21
  //# sourceMappingURL=create-ai-interaction.dto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-ai-interaction.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/create-ai-interaction.dto.ts"],"names":[],"mappings":"AAKA,qBAAa,sBAAsB;IAI/B,MAAM,EAAE,MAAM,CAAC;IAIf,WAAW,EAAE,MAAM,CAAC;IAIpB,QAAQ,EAAE,MAAM,CAAC;IAIjB,IAAI,EAAE,MAAM,CAAC;IAIb,OAAO,EAAE,MAAM,CAAC;IAIhB,WAAW,EAAE,MAAM,CAAC;IAIpB,MAAM,EAAE,MAAM,CAAC;IAIf,YAAY,EAAE,MAAM,CAAC;IAIrB,SAAS,EAAE,MAAM,CAAC;IAIlB,cAAc,EAAE,MAAM,CAAC;IAIvB,QAAQ,EAAE,GAAG,CAAC;IAId,SAAS,EAAE,OAAO,CAAS;IAI3B,mBAAmB,EAAE,MAAM,CAAC;IAI5B,wBAAwB,EAAE,MAAM,CAAC;IAIjC,WAAW,EAAE,OAAO,CAAS;CAChC"}
1
+ {"version":3,"file":"create-ai-interaction.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/create-ai-interaction.dto.ts"],"names":[],"mappings":"AAKA,qBAAa,sBAAsB;IAI/B,MAAM,EAAE,MAAM,CAAC;IAIf,WAAW,EAAE,MAAM,CAAC;IAIpB,QAAQ,EAAE,MAAM,CAAC;IAIjB,IAAI,EAAE,MAAM,CAAC;IAIb,OAAO,EAAE,MAAM,CAAC;IAIhB,WAAW,EAAE,MAAM,CAAC;IAIpB,MAAM,EAAE,MAAM,CAAC;IAIf,YAAY,EAAE,MAAM,CAAC;IAIrB,SAAS,EAAE,MAAM,CAAC;IAIlB,cAAc,EAAE,MAAM,CAAC;IAIvB,QAAQ,EAAE,GAAG,CAAC;IAId,SAAS,EAAE,OAAO,CAAS;IAI3B,mBAAmB,EAAE,MAAM,CAAC;IAI5B,wBAAwB,EAAE,MAAM,CAAC;IAIjC,WAAW,EAAE,OAAO,CAAS;IAKjC,WAAW,EAAE,MAAM,CAAC;IAKpB,YAAY,EAAE,MAAM,CAAC;IAKrB,WAAW,EAAE,MAAM,CAAC;CACnB"}
@@ -21,7 +21,7 @@ class CreateAiInteractionDto {
21
21
  this.isAutoApply = false;
22
22
  }
23
23
  static _OPENAPI_METADATA_FACTORY() {
24
- return { userId: { required: true, type: () => Number }, userUserKey: { required: true, type: () => String }, threadId: { required: true, type: () => String }, role: { required: true, type: () => String }, message: { required: true, type: () => String }, contentType: { required: true, type: () => String }, status: { required: true, type: () => String }, errorMessage: { required: true, type: () => String }, modelUsed: { required: true, type: () => String }, responseTimeMs: { required: true, type: () => Number }, metadata: { required: true, type: () => Object }, isApplied: { required: true, type: () => Boolean, default: false }, parentInteractionId: { required: true, type: () => Number }, parentInteractionUserKey: { required: true, type: () => String }, isAutoApply: { required: true, type: () => Boolean, default: false } };
24
+ return { userId: { required: true, type: () => Number }, userUserKey: { required: true, type: () => String }, threadId: { required: true, type: () => String }, role: { required: true, type: () => String }, message: { required: true, type: () => String }, contentType: { required: true, type: () => String }, status: { required: true, type: () => String }, errorMessage: { required: true, type: () => String }, modelUsed: { required: true, type: () => String }, responseTimeMs: { required: true, type: () => Number }, metadata: { required: true, type: () => Object }, isApplied: { required: true, type: () => Boolean, default: false }, parentInteractionId: { required: true, type: () => Number }, parentInteractionUserKey: { required: true, type: () => String }, isAutoApply: { required: true, type: () => Boolean, default: false }, inputTokens: { required: true, type: () => Number }, outputTokens: { required: true, type: () => Number }, totalTokens: { required: true, type: () => Number } };
25
25
  }
26
26
  }
27
27
  exports.CreateAiInteractionDto = CreateAiInteractionDto;
@@ -115,4 +115,22 @@ __decorate([
115
115
  (0, swagger_1.ApiProperty)(),
116
116
  __metadata("design:type", Boolean)
117
117
  ], CreateAiInteractionDto.prototype, "isAutoApply", void 0);
118
+ __decorate([
119
+ (0, class_validator_2.IsOptional)(),
120
+ (0, class_validator_1.IsInt)(),
121
+ (0, swagger_1.ApiProperty)(),
122
+ __metadata("design:type", Number)
123
+ ], CreateAiInteractionDto.prototype, "inputTokens", void 0);
124
+ __decorate([
125
+ (0, class_validator_2.IsOptional)(),
126
+ (0, class_validator_1.IsInt)(),
127
+ (0, swagger_1.ApiProperty)(),
128
+ __metadata("design:type", Number)
129
+ ], CreateAiInteractionDto.prototype, "outputTokens", void 0);
130
+ __decorate([
131
+ (0, class_validator_2.IsOptional)(),
132
+ (0, class_validator_1.IsInt)(),
133
+ (0, swagger_1.ApiProperty)(),
134
+ __metadata("design:type", Number)
135
+ ], CreateAiInteractionDto.prototype, "totalTokens", void 0);
118
136
  //# sourceMappingURL=create-ai-interaction.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-ai-interaction.dto.js","sourceRoot":"","sources":["../../src/dtos/create-ai-interaction.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAwC;AACxC,qDAA6C;AAC7C,qDAA0E;AAE1E,MAAa,sBAAsB;IAAnC;QAgDI,cAAS,GAAY,KAAK,CAAC;QAY3B,gBAAW,GAAY,KAAK,CAAC;KAChC;;0nBAbwB,KAAK,gMAYH,KAAK;;CAC/B;AA7DD,wDA6DC;AAzDG;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;sDACC;AAIf;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,GAAE;;2DACM;AAIpB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;wDACG;AAIjB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;oDACD;AAIb;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;uDACE;AAIhB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;2DACM;AAIpB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;sDACC;AAIf;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;4DACO;AAIrB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;yDACI;AAIlB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;8DACS;AAIvB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,GAAE;IACR,IAAA,qBAAW,GAAE;;wDACA;AAId;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,qBAAW,GAAE;;yDACa;AAI3B;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;mEACc;AAI5B;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,GAAE;;wEACmB;AAIjC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,qBAAW,GAAE;;2DACe","sourcesContent":["import { ApiProperty } from '@nestjs/swagger';\nimport { IsInt } from 'class-validator';\nimport { IsOptional } from 'class-validator';\nimport { IsString, IsNotEmpty, IsJSON, IsBoolean } from 'class-validator';\n\nexport class CreateAiInteractionDto {\n @IsOptional()\n @IsInt()\n @ApiProperty()\n userId: number;\n @IsString()\n @IsOptional()\n @ApiProperty()\n userUserKey: string;\n @IsNotEmpty()\n @IsString()\n @ApiProperty()\n threadId: string;\n @IsNotEmpty()\n @IsString()\n @ApiProperty()\n role: string;\n @IsNotEmpty()\n @IsString()\n @ApiProperty()\n message: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n contentType: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n status: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n errorMessage: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n modelUsed: string;\n @IsOptional()\n @IsInt()\n @ApiProperty()\n responseTimeMs: number;\n @IsOptional()\n @IsJSON()\n @ApiProperty()\n metadata: any;\n @IsOptional()\n @IsBoolean()\n @ApiProperty()\n isApplied: boolean = false;\n @IsOptional()\n @IsInt()\n @ApiProperty()\n parentInteractionId: number;\n @IsString()\n @IsOptional()\n @ApiProperty()\n parentInteractionUserKey: string;\n @IsOptional()\n @IsBoolean()\n @ApiProperty()\n isAutoApply: boolean = false;\n}"]}
1
+ {"version":3,"file":"create-ai-interaction.dto.js","sourceRoot":"","sources":["../../src/dtos/create-ai-interaction.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAwC;AACxC,qDAA6C;AAC7C,qDAA0E;AAE1E,MAAa,sBAAsB;IAAnC;QAgDI,cAAS,GAAY,KAAK,CAAC;QAY3B,gBAAW,GAAY,KAAK,CAAC;KAgBhC;;0nBA5BwB,KAAK,gMAYH,KAAK;;CAgB/B;AA5ED,wDA4EC;AAxEG;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;sDACC;AAIf;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,GAAE;;2DACM;AAIpB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;wDACG;AAIjB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;oDACD;AAIb;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;uDACE;AAIhB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;2DACM;AAIpB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;sDACC;AAIf;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;4DACO;AAIrB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;yDACI;AAIlB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;8DACS;AAIvB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,GAAE;IACR,IAAA,qBAAW,GAAE;;wDACA;AAId;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,qBAAW,GAAE;;yDACa;AAI3B;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;mEACc;AAI5B;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,GAAE;;wEACmB;AAIjC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,qBAAW,GAAE;;2DACe;AAKjC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;2DACM;AAKpB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;4DACO;AAKrB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;2DACM","sourcesContent":["import { ApiProperty } from '@nestjs/swagger';\nimport { IsInt } from 'class-validator';\nimport { IsOptional } from 'class-validator';\nimport { IsString, IsNotEmpty, IsJSON, IsBoolean } from 'class-validator';\n\nexport class CreateAiInteractionDto {\n @IsOptional()\n @IsInt()\n @ApiProperty()\n userId: number;\n @IsString()\n @IsOptional()\n @ApiProperty()\n userUserKey: string;\n @IsNotEmpty()\n @IsString()\n @ApiProperty()\n threadId: string;\n @IsNotEmpty()\n @IsString()\n @ApiProperty()\n role: string;\n @IsNotEmpty()\n @IsString()\n @ApiProperty()\n message: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n contentType: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n status: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n errorMessage: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n modelUsed: string;\n @IsOptional()\n @IsInt()\n @ApiProperty()\n responseTimeMs: number;\n @IsOptional()\n @IsJSON()\n @ApiProperty()\n metadata: any;\n @IsOptional()\n @IsBoolean()\n @ApiProperty()\n isApplied: boolean = false;\n @IsOptional()\n @IsInt()\n @ApiProperty()\n parentInteractionId: number;\n @IsString()\n @IsOptional()\n @ApiProperty()\n parentInteractionUserKey: string;\n @IsOptional()\n @IsBoolean()\n @ApiProperty()\n isAutoApply: boolean = false;\n\n@IsOptional()\n@IsInt()\n@ApiProperty()\ninputTokens: number;\n\n@IsOptional()\n@IsInt()\n@ApiProperty()\noutputTokens: number;\n\n@IsOptional()\n@IsInt()\n@ApiProperty()\ntotalTokens: number;\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"post-chatter-message.dto.js","sourceRoot":"","sources":["../../src/dtos/post-chatter-message.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qDAA6E;AAE7E,MAAa,qBAAqB;;;;CAgBjC;AAhBD,sDAgBC;AAbG;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;8DACW;AAIxB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;0DACO;AAIpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;0DACO;AAIpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;6DACW","sourcesContent":["import { IsNotEmpty, IsNumber, IsString, IsOptional } from 'class-validator';\n\nexport class PostChatterMessageDto {\n @IsNumber()\n @IsNotEmpty()\n coModelEntityId: number;\n\n @IsString()\n @IsNotEmpty()\n coModelName: string;\n\n @IsString()\n @IsNotEmpty()\n messageBody: string;\n\n @IsString()\n @IsOptional()\n messageSubType?: string;\n} "]}
1
+ {"version":3,"file":"post-chatter-message.dto.js","sourceRoot":"","sources":["../../src/dtos/post-chatter-message.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qDAA6E;AAE7E,MAAa,qBAAqB;;;;CAgBjC;AAhBD,sDAgBC;AAbG;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;8DACW;AAIxB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;0DACO;AAIpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;0DACO;AAIpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;6DACW","sourcesContent":["import { IsNotEmpty, IsNumber, IsString, IsOptional } from 'class-validator';\n\nexport class PostChatterMessageDto {\n @IsNumber()\n @IsNotEmpty()\n coModelEntityId: number;\n\n @IsString()\n @IsNotEmpty()\n coModelName: string;\n\n @IsString()\n @IsNotEmpty()\n messageBody: string;\n\n @IsString()\n @IsOptional()\n messageSubType?: string;\n}"]}
@@ -15,5 +15,8 @@ export declare class UpdateAiInteractionDto {
15
15
  parentInteractionId: number;
16
16
  parentInteractionUserKey: string;
17
17
  isAutoApply: boolean;
18
+ inputTokens: number;
19
+ outputTokens: number;
20
+ totalTokens: number;
18
21
  }
19
22
  //# sourceMappingURL=update-ai-interaction.dto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-ai-interaction.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/update-ai-interaction.dto.ts"],"names":[],"mappings":"AAGA,qBAAa,sBAAsB;IAG/B,EAAE,EAAE,MAAM,CAAC;IAIX,MAAM,EAAE,MAAM,CAAC;IAIf,WAAW,EAAE,MAAM,CAAC;IAKpB,QAAQ,EAAE,MAAM,CAAC;IAKjB,IAAI,EAAE,MAAM,CAAC;IAKb,OAAO,EAAE,MAAM,CAAC;IAIhB,WAAW,EAAE,MAAM,CAAC;IAIpB,MAAM,EAAE,MAAM,CAAC;IAIf,YAAY,EAAE,MAAM,CAAC;IAIrB,SAAS,EAAE,MAAM,CAAC;IAIlB,cAAc,EAAE,MAAM,CAAC;IAIvB,QAAQ,EAAE,GAAG,CAAC;IAId,SAAS,EAAE,OAAO,CAAC;IAInB,mBAAmB,EAAE,MAAM,CAAC;IAI5B,wBAAwB,EAAE,MAAM,CAAC;IAIjC,WAAW,EAAE,OAAO,CAAC;CACxB"}
1
+ {"version":3,"file":"update-ai-interaction.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/update-ai-interaction.dto.ts"],"names":[],"mappings":"AAGA,qBAAa,sBAAsB;IAG/B,EAAE,EAAE,MAAM,CAAC;IAIX,MAAM,EAAE,MAAM,CAAC;IAIf,WAAW,EAAE,MAAM,CAAC;IAKpB,QAAQ,EAAE,MAAM,CAAC;IAKjB,IAAI,EAAE,MAAM,CAAC;IAKb,OAAO,EAAE,MAAM,CAAC;IAIhB,WAAW,EAAE,MAAM,CAAC;IAIpB,MAAM,EAAE,MAAM,CAAC;IAIf,YAAY,EAAE,MAAM,CAAC;IAIrB,SAAS,EAAE,MAAM,CAAC;IAIlB,cAAc,EAAE,MAAM,CAAC;IAIvB,QAAQ,EAAE,GAAG,CAAC;IAId,SAAS,EAAE,OAAO,CAAC;IAInB,mBAAmB,EAAE,MAAM,CAAC;IAI5B,wBAAwB,EAAE,MAAM,CAAC;IAIjC,WAAW,EAAE,OAAO,CAAC;IAKzB,WAAW,EAAE,MAAM,CAAC;IAKpB,YAAY,EAAE,MAAM,CAAC;IAKrB,WAAW,EAAE,MAAM,CAAC;CACnB"}
@@ -15,7 +15,7 @@ const class_validator_1 = require("class-validator");
15
15
  const swagger_1 = require("@nestjs/swagger");
16
16
  class UpdateAiInteractionDto {
17
17
  static _OPENAPI_METADATA_FACTORY() {
18
- return { id: { required: true, type: () => Number }, userId: { required: true, type: () => Number }, userUserKey: { required: true, type: () => String }, threadId: { required: true, type: () => String }, role: { required: true, type: () => String }, message: { required: true, type: () => String }, contentType: { required: true, type: () => String }, status: { required: true, type: () => String }, errorMessage: { required: true, type: () => String }, modelUsed: { required: true, type: () => String }, responseTimeMs: { required: true, type: () => Number }, metadata: { required: true, type: () => Object }, isApplied: { required: true, type: () => Boolean }, parentInteractionId: { required: true, type: () => Number }, parentInteractionUserKey: { required: true, type: () => String }, isAutoApply: { required: true, type: () => Boolean } };
18
+ return { id: { required: true, type: () => Number }, userId: { required: true, type: () => Number }, userUserKey: { required: true, type: () => String }, threadId: { required: true, type: () => String }, role: { required: true, type: () => String }, message: { required: true, type: () => String }, contentType: { required: true, type: () => String }, status: { required: true, type: () => String }, errorMessage: { required: true, type: () => String }, modelUsed: { required: true, type: () => String }, responseTimeMs: { required: true, type: () => Number }, metadata: { required: true, type: () => Object }, isApplied: { required: true, type: () => Boolean }, parentInteractionId: { required: true, type: () => Number }, parentInteractionUserKey: { required: true, type: () => String }, isAutoApply: { required: true, type: () => Boolean }, inputTokens: { required: true, type: () => Number }, outputTokens: { required: true, type: () => Number }, totalTokens: { required: true, type: () => Number } };
19
19
  }
20
20
  }
21
21
  exports.UpdateAiInteractionDto = UpdateAiInteractionDto;
@@ -117,4 +117,22 @@ __decorate([
117
117
  (0, swagger_1.ApiProperty)(),
118
118
  __metadata("design:type", Boolean)
119
119
  ], UpdateAiInteractionDto.prototype, "isAutoApply", void 0);
120
+ __decorate([
121
+ (0, class_validator_1.IsOptional)(),
122
+ (0, class_validator_1.IsInt)(),
123
+ (0, swagger_1.ApiProperty)(),
124
+ __metadata("design:type", Number)
125
+ ], UpdateAiInteractionDto.prototype, "inputTokens", void 0);
126
+ __decorate([
127
+ (0, class_validator_1.IsOptional)(),
128
+ (0, class_validator_1.IsInt)(),
129
+ (0, swagger_1.ApiProperty)(),
130
+ __metadata("design:type", Number)
131
+ ], UpdateAiInteractionDto.prototype, "outputTokens", void 0);
132
+ __decorate([
133
+ (0, class_validator_1.IsOptional)(),
134
+ (0, class_validator_1.IsInt)(),
135
+ (0, swagger_1.ApiProperty)(),
136
+ __metadata("design:type", Number)
137
+ ], UpdateAiInteractionDto.prototype, "totalTokens", void 0);
120
138
  //# sourceMappingURL=update-ai-interaction.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-ai-interaction.dto.js","sourceRoot":"","sources":["../../src/dtos/update-ai-interaction.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qDAA4F;AAC5F,6CAA8C;AAE9C,MAAa,sBAAsB;;;;CAmElC;AAnED,wDAmEC;AAhEG;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;;kDACG;AAIX;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;sDACC;AAIf;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,GAAE;;2DACM;AAKpB;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;wDACG;AAKjB;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;oDACD;AAKb;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;uDACE;AAIhB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;2DACM;AAIpB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;sDACC;AAIf;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;4DACO;AAIrB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;yDACI;AAIlB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;8DACS;AAIvB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,GAAE;IACR,IAAA,qBAAW,GAAE;;wDACA;AAId;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,qBAAW,GAAE;;yDACK;AAInB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;mEACc;AAI5B;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,GAAE;;wEACmB;AAIjC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,qBAAW,GAAE;;2DACO","sourcesContent":["import { IsInt,IsOptional, IsString, IsNotEmpty, IsJSON, IsBoolean } from 'class-validator';\nimport { ApiProperty } from '@nestjs/swagger';\n\nexport class UpdateAiInteractionDto {\n @IsOptional()\n @IsInt()\n id: number;\n @IsOptional()\n @IsInt()\n @ApiProperty()\n userId: number;\n @IsString()\n @IsOptional()\n @ApiProperty()\n userUserKey: string;\n @IsNotEmpty()\n @IsOptional()\n @IsString()\n @ApiProperty()\n threadId: string;\n @IsNotEmpty()\n @IsOptional()\n @IsString()\n @ApiProperty()\n role: string;\n @IsNotEmpty()\n @IsOptional()\n @IsString()\n @ApiProperty()\n message: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n contentType: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n status: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n errorMessage: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n modelUsed: string;\n @IsOptional()\n @IsInt()\n @ApiProperty()\n responseTimeMs: number;\n @IsOptional()\n @IsJSON()\n @ApiProperty()\n metadata: any;\n @IsOptional()\n @IsBoolean()\n @ApiProperty()\n isApplied: boolean;\n @IsOptional()\n @IsInt()\n @ApiProperty()\n parentInteractionId: number;\n @IsString()\n @IsOptional()\n @ApiProperty()\n parentInteractionUserKey: string;\n @IsOptional()\n @IsBoolean()\n @ApiProperty()\n isAutoApply: boolean;\n}"]}
1
+ {"version":3,"file":"update-ai-interaction.dto.js","sourceRoot":"","sources":["../../src/dtos/update-ai-interaction.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qDAA4F;AAC5F,6CAA8C;AAE9C,MAAa,sBAAsB;;;;CAkFlC;AAlFD,wDAkFC;AA/EG;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;;kDACG;AAIX;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;sDACC;AAIf;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,GAAE;;2DACM;AAKpB;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;wDACG;AAKjB;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;oDACD;AAKb;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;uDACE;AAIhB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;2DACM;AAIpB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;sDACC;AAIf;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;4DACO;AAIrB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAW,GAAE;;yDACI;AAIlB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;8DACS;AAIvB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,GAAE;IACR,IAAA,qBAAW,GAAE;;wDACA;AAId;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,qBAAW,GAAE;;yDACK;AAInB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;mEACc;AAI5B;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,GAAE;;wEACmB;AAIjC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,qBAAW,GAAE;;2DACO;AAKzB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;2DACM;AAKpB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;4DACO;AAKrB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAW,GAAE;;2DACM","sourcesContent":["import { IsInt,IsOptional, IsString, IsNotEmpty, IsJSON, IsBoolean } from 'class-validator';\nimport { ApiProperty } from '@nestjs/swagger';\n\nexport class UpdateAiInteractionDto {\n @IsOptional()\n @IsInt()\n id: number;\n @IsOptional()\n @IsInt()\n @ApiProperty()\n userId: number;\n @IsString()\n @IsOptional()\n @ApiProperty()\n userUserKey: string;\n @IsNotEmpty()\n @IsOptional()\n @IsString()\n @ApiProperty()\n threadId: string;\n @IsNotEmpty()\n @IsOptional()\n @IsString()\n @ApiProperty()\n role: string;\n @IsNotEmpty()\n @IsOptional()\n @IsString()\n @ApiProperty()\n message: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n contentType: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n status: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n errorMessage: string;\n @IsOptional()\n @IsString()\n @ApiProperty()\n modelUsed: string;\n @IsOptional()\n @IsInt()\n @ApiProperty()\n responseTimeMs: number;\n @IsOptional()\n @IsJSON()\n @ApiProperty()\n metadata: any;\n @IsOptional()\n @IsBoolean()\n @ApiProperty()\n isApplied: boolean;\n @IsOptional()\n @IsInt()\n @ApiProperty()\n parentInteractionId: number;\n @IsString()\n @IsOptional()\n @ApiProperty()\n parentInteractionUserKey: string;\n @IsOptional()\n @IsBoolean()\n @ApiProperty()\n isAutoApply: boolean;\n\n@IsOptional()\n@IsInt()\n@ApiProperty()\ninputTokens: number;\n\n@IsOptional()\n@IsInt()\n@ApiProperty()\noutputTokens: number;\n\n@IsOptional()\n@IsInt()\n@ApiProperty()\ntotalTokens: number;\n}"]}
@@ -15,5 +15,8 @@ export declare class AiInteraction extends CommonEntity {
15
15
  parentInteraction: AiInteraction;
16
16
  externalId: string;
17
17
  isAutoApply: boolean;
18
+ inputTokens: number;
19
+ outputTokens: number;
20
+ totalTokens: number;
18
21
  }
19
22
  //# sourceMappingURL=ai-interaction.entity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-interaction.entity.d.ts","sourceRoot":"","sources":["../../src/entities/ai-interaction.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAE/C,qBACa,aAAc,SAAQ,YAAY;IAI3C,IAAI,EAAE,IAAI,CAAC;IAGX,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,MAAM,CAAC;IAGpB,MAAM,EAAE,MAAM,CAAC;IAEf,YAAY,EAAE,MAAM,CAAC;IAErB,SAAS,EAAE,MAAM,CAAC;IAElB,cAAc,EAAE,MAAM,CAAC;IAEvB,QAAQ,EAAE,GAAG,CAAC;IAEd,SAAS,EAAE,OAAO,CAAS;IAI3B,iBAAiB,EAAE,aAAa,CAAC;IAGjC,UAAU,EAAE,MAAM,CAAC;IAEnB,WAAW,EAAE,OAAO,CAAS;CAChC"}
1
+ {"version":3,"file":"ai-interaction.entity.d.ts","sourceRoot":"","sources":["../../src/entities/ai-interaction.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAE/C,qBACa,aAAc,SAAQ,YAAY;IAI3C,IAAI,EAAE,IAAI,CAAC;IAGX,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,MAAM,CAAC;IAGpB,MAAM,EAAE,MAAM,CAAC;IAEf,YAAY,EAAE,MAAM,CAAC;IAErB,SAAS,EAAE,MAAM,CAAC;IAElB,cAAc,EAAE,MAAM,CAAC;IAEvB,QAAQ,EAAE,GAAG,CAAC;IAEd,SAAS,EAAE,OAAO,CAAS;IAI3B,iBAAiB,EAAE,aAAa,CAAC;IAGjC,UAAU,EAAE,MAAM,CAAC;IAEnB,WAAW,EAAE,OAAO,CAAS;IAGjC,WAAW,EAAE,MAAM,CAAC;IAGpB,YAAY,EAAE,MAAM,CAAC;IAGrB,WAAW,EAAE,MAAM,CAAC;CACnB"}
@@ -21,7 +21,7 @@ let AiInteraction = class AiInteraction extends common_entity_1.CommonEntity {
21
21
  this.isAutoApply = false;
22
22
  }
23
23
  static _OPENAPI_METADATA_FACTORY() {
24
- return { user: { required: true, type: () => require("./user.entity").User }, threadId: { required: true, type: () => String }, role: { required: true, type: () => String }, message: { required: true, type: () => String }, contentType: { required: true, type: () => String }, status: { required: true, type: () => String }, errorMessage: { required: true, type: () => String }, modelUsed: { required: true, type: () => String }, responseTimeMs: { required: true, type: () => Number }, metadata: { required: true, type: () => Object }, isApplied: { required: true, type: () => Boolean, default: false }, parentInteraction: { required: true, type: () => require("./ai-interaction.entity").AiInteraction }, externalId: { required: true, type: () => String }, isAutoApply: { required: true, type: () => Boolean, default: false } };
24
+ return { user: { required: true, type: () => require("./user.entity").User }, threadId: { required: true, type: () => String }, role: { required: true, type: () => String }, message: { required: true, type: () => String }, contentType: { required: true, type: () => String }, status: { required: true, type: () => String }, errorMessage: { required: true, type: () => String }, modelUsed: { required: true, type: () => String }, responseTimeMs: { required: true, type: () => Number }, metadata: { required: true, type: () => Object }, isApplied: { required: true, type: () => Boolean, default: false }, parentInteraction: { required: true, type: () => require("./ai-interaction.entity").AiInteraction }, externalId: { required: true, type: () => String }, isAutoApply: { required: true, type: () => Boolean, default: false }, inputTokens: { required: true, type: () => Number }, outputTokens: { required: true, type: () => Number }, totalTokens: { required: true, type: () => Number } };
25
25
  }
26
26
  };
27
27
  exports.AiInteraction = AiInteraction;
@@ -88,6 +88,18 @@ __decorate([
88
88
  (0, typeorm_1.Column)({ type: "boolean", nullable: true, default: false }),
89
89
  __metadata("design:type", Boolean)
90
90
  ], AiInteraction.prototype, "isAutoApply", void 0);
91
+ __decorate([
92
+ (0, typeorm_1.Column)({ type: "integer", nullable: true }),
93
+ __metadata("design:type", Number)
94
+ ], AiInteraction.prototype, "inputTokens", void 0);
95
+ __decorate([
96
+ (0, typeorm_1.Column)({ type: "integer", nullable: true }),
97
+ __metadata("design:type", Number)
98
+ ], AiInteraction.prototype, "outputTokens", void 0);
99
+ __decorate([
100
+ (0, typeorm_1.Column)({ type: "integer", nullable: true }),
101
+ __metadata("design:type", Number)
102
+ ], AiInteraction.prototype, "totalTokens", void 0);
91
103
  exports.AiInteraction = AiInteraction = __decorate([
92
104
  (0, typeorm_1.Entity)("ss_ai_interactions")
93
105
  ], AiInteraction);
@@ -1 +1 @@
1
- {"version":3,"file":"ai-interaction.entity.js","sourceRoot":"","sources":["../../src/entities/ai-interaction.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mDAAyD;AACzD,qCAAqE;AACrE,+CAA+C;AAGxC,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,4BAAY;IAAxC;;QA0BH,cAAS,GAAY,KAAK,CAAC;QAS3B,gBAAW,GAAY,KAAK,CAAC;KAChC;;0lBAVwB,KAAK,0NASH,KAAK;;CAC/B,CAAA;AApCY,sCAAa;AAItB;IAHC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC/D,IAAA,oBAAU,GAAE;8BACP,kBAAI;2CAAC;AAGX;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;+CACX;AAEjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;2CACf;AAEb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;8CACT;AAEhB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACxB;AAGpB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC7B;AAEf;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACpB;AAErB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDAC1B;AAElB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACrB;AAEvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CAC5B;AAEd;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;gDACjC;AAI3B;IAHC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxE,IAAA,oBAAU,GAAE;8BACM,aAAa;wDAAC;AAGjC;IAFC,IAAA,eAAK,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACvB,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;iDACT;AAEnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;kDAC/B;wBAnCpB,aAAa;IADzB,IAAA,gBAAM,EAAC,oBAAoB,CAAC;GAChB,aAAa,CAoCzB","sourcesContent":["import { CommonEntity } from 'src/entities/common.entity'\nimport {Entity, JoinColumn, ManyToOne, Index, Column} from 'typeorm';\nimport { User } from 'src/entities/user.entity'\n\n@Entity(\"ss_ai_interactions\")\nexport class AiInteraction extends CommonEntity {\n @Index()\n @ManyToOne(() => User, { onDelete: \"CASCADE\", nullable: false })\n @JoinColumn()\n user: User;\n @Index()\n @Column({ type: \"varchar\" })\n threadId: string;\n @Column({ type: \"varchar\" })\n role: string;\n @Column({ type: \"text\" })\n message: string;\n @Column({ type: \"varchar\", nullable: true })\n contentType: string;\n @Index()\n @Column({ type: \"varchar\", nullable: true })\n status: string;\n @Column({ type: \"text\", nullable: true })\n errorMessage: string;\n @Column({ type: \"varchar\", nullable: true })\n modelUsed: string;\n @Column({ type: \"integer\", nullable: true })\n responseTimeMs: number;\n @Column({ type: \"jsonb\", nullable: true })\n metadata: any;\n @Column({ type: \"boolean\", nullable: true, default: false })\n isApplied: boolean = false;\n @Index()\n @ManyToOne(() => AiInteraction, { onDelete: \"SET NULL\", nullable: true })\n @JoinColumn()\n parentInteraction: AiInteraction;\n @Index({ unique: true })\n @Column({ type: \"varchar\" })\n externalId: string;\n @Column({ type: \"boolean\", nullable: true, default: false })\n isAutoApply: boolean = false;\n}"]}
1
+ {"version":3,"file":"ai-interaction.entity.js","sourceRoot":"","sources":["../../src/entities/ai-interaction.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mDAAyD;AACzD,qCAAqE;AACrE,+CAA+C;AAGxC,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,4BAAY;IAAxC;;QA0BH,cAAS,GAAY,KAAK,CAAC;QAS3B,gBAAW,GAAY,KAAK,CAAC;KAUhC;;0lBAnBwB,KAAK,0NASH,KAAK;;CAU/B,CAAA;AA7CY,sCAAa;AAItB;IAHC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC/D,IAAA,oBAAU,GAAE;8BACP,kBAAI;2CAAC;AAGX;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;+CACX;AAEjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;2CACf;AAEb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;8CACT;AAEhB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACxB;AAGpB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC7B;AAEf;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACpB;AAErB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDAC1B;AAElB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACrB;AAEvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CAC5B;AAEd;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;gDACjC;AAI3B;IAHC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxE,IAAA,oBAAU,GAAE;8BACM,aAAa;wDAAC;AAGjC;IAFC,IAAA,eAAK,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACvB,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;iDACT;AAEnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;kDAC/B;AAGjC;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACxB;AAGpB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACvB;AAGrB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACxB;wBA5CP,aAAa;IADzB,IAAA,gBAAM,EAAC,oBAAoB,CAAC;GAChB,aAAa,CA6CzB","sourcesContent":["import { CommonEntity } from 'src/entities/common.entity'\nimport {Entity, JoinColumn, ManyToOne, Index, Column} from 'typeorm';\nimport { User } from 'src/entities/user.entity'\n\n@Entity(\"ss_ai_interactions\")\nexport class AiInteraction extends CommonEntity {\n @Index()\n @ManyToOne(() => User, { onDelete: \"CASCADE\", nullable: false })\n @JoinColumn()\n user: User;\n @Index()\n @Column({ type: \"varchar\" })\n threadId: string;\n @Column({ type: \"varchar\" })\n role: string;\n @Column({ type: \"text\" })\n message: string;\n @Column({ type: \"varchar\", nullable: true })\n contentType: string;\n @Index()\n @Column({ type: \"varchar\", nullable: true })\n status: string;\n @Column({ type: \"text\", nullable: true })\n errorMessage: string;\n @Column({ type: \"varchar\", nullable: true })\n modelUsed: string;\n @Column({ type: \"integer\", nullable: true })\n responseTimeMs: number;\n @Column({ type: \"jsonb\", nullable: true })\n metadata: any;\n @Column({ type: \"boolean\", nullable: true, default: false })\n isApplied: boolean = false;\n @Index()\n @ManyToOne(() => AiInteraction, { onDelete: \"SET NULL\", nullable: true })\n @JoinColumn()\n parentInteraction: AiInteraction;\n @Index({ unique: true })\n @Column({ type: \"varchar\" })\n externalId: string;\n @Column({ type: \"boolean\", nullable: true, default: false })\n isAutoApply: boolean = false;\n\n@Column({ type: \"integer\", nullable: true })\ninputTokens: number;\n\n@Column({ type: \"integer\", nullable: true })\noutputTokens: number;\n\n@Column({ type: \"integer\", nullable: true })\ntotalTokens: number;\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"chatter-message.entity.js","sourceRoot":"","sources":["../../src/entities/chatter-message.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mDAAyD;AACzD,qCAAqE;AACrE,+CAA+C;AAGxC,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,4BAAY;;;;CAgB/C,CAAA;AAhBY,wCAAc;AAGvB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;mDACR;AAEpB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;sDACL;AAEvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mDACL;AAGpB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;uDACJ;AAExB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;mDACR;AAGpB;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9D,IAAA,oBAAU,GAAE;8BACP,kBAAI;4CAAC;yBAfF,cAAc;IAD1B,IAAA,gBAAM,EAAC,oBAAoB,CAAC;GAChB,cAAc,CAgB1B","sourcesContent":["import { CommonEntity } from 'src/entities/common.entity'\nimport {Entity, Column, Index, JoinColumn, ManyToOne} from 'typeorm';\nimport { User } from 'src/entities/user.entity'\n\n@Entity(\"ss_chatter_message\")\nexport class ChatterMessage extends CommonEntity {\n @Index()\n @Column({ type: \"varchar\" })\n messageType: string;\n @Column({ type: \"varchar\" })\n messageSubType: string;\n @Column({ type: \"text\" })\n messageBody: string;\n @Index()\n @Column({ type: \"integer\" })\n coModelEntityId: number;\n @Column({ type: \"varchar\" })\n coModelName: string;\n @ManyToOne(() => User, { onDelete: \"CASCADE\", nullable: true })\n @JoinColumn()\n user: User;\n}"]}
1
+ {"version":3,"file":"chatter-message.entity.js","sourceRoot":"","sources":["../../src/entities/chatter-message.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mDAAyD;AACzD,qCAAuE;AACvE,+CAA+C;AAGxC,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,4BAAY;;;;CAgB/C,CAAA;AAhBY,wCAAc;AAGvB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;mDACR;AAEpB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;sDACL;AAEvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mDACL;AAGpB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;uDACJ;AAExB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;mDACR;AAGpB;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9D,IAAA,oBAAU,GAAE;8BACP,kBAAI;4CAAC;yBAfF,cAAc;IAD1B,IAAA,gBAAM,EAAC,oBAAoB,CAAC;GAChB,cAAc,CAgB1B","sourcesContent":["import { CommonEntity } from 'src/entities/common.entity'\nimport { Entity, Column, Index, JoinColumn, ManyToOne } from 'typeorm';\nimport { User } from 'src/entities/user.entity'\n\n@Entity(\"ss_chatter_message\")\nexport class ChatterMessage extends CommonEntity {\n @Index()\n @Column({ type: \"varchar\" })\n messageType: string; // audit | custom \n @Column({ type: \"varchar\" })\n messageSubType: string; // update | insert | delete | post_message\n @Column({ type: \"text\" })\n messageBody: string;\n @Index()\n @Column({ type: \"integer\" })\n coModelEntityId: number;\n @Column({ type: \"varchar\" })\n coModelName: string;\n @ManyToOne(() => User, { onDelete: \"CASCADE\", nullable: true })\n @JoinColumn()\n user: User;\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"http-exception.filter.d.ts","sourceRoot":"","sources":["../../src/filters/http-exception.filter.ts"],"names":[],"mappings":"AACA,OAAO,EACH,eAAe,EAEf,aAAa,EAIhB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAItE,qBAEa,mBAAoB,YAAW,eAAe;IAG3C,OAAO,CAAC,QAAQ,CAAC,WAAW;IAFxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;gBAElC,WAAW,EAAE,kBAAkB;IAI5D,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa;CAuC5C"}
1
+ {"version":3,"file":"http-exception.filter.d.ts","sourceRoot":"","sources":["../../src/filters/http-exception.filter.ts"],"names":[],"mappings":"AACA,OAAO,EACH,eAAe,EAEf,aAAa,EAIhB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAItE,qBAEa,mBAAoB,YAAW,eAAe;IAG3C,OAAO,CAAC,QAAQ,CAAC,WAAW;IAFxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;gBAElC,WAAW,EAAE,kBAAkB;IAI5D,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa;CA0C5C"}
@@ -28,7 +28,7 @@ let HttpExceptionFilter = HttpExceptionFilter_1 = class HttpExceptionFilter {
28
28
  const explicitStatus = isHttp ? exception.getStatus() : undefined;
29
29
  const code = this.errorMapper.mapException(exception);
30
30
  const defaultStatus = this.errorMapper.getHttpStatus(code);
31
- const message = this.errorMapper.getMessage(code);
31
+ const message = code === 'unknown-error' ? `${exception?.message}` : this.errorMapper.getMessage(code);
32
32
  const status = explicitStatus ?? defaultStatus ?? 500;
33
33
  this.logger.error(`[${status} ${logging_interceptor_1.HttpStatusCodeMessages[status] || 'Internal Server Error'}] ${request?.method} ${request?.url} - ${exception?.message || message} [code=${code}]`);
34
34
  if (exception?.stack) {
@@ -40,6 +40,7 @@ let HttpExceptionFilter = HttpExceptionFilter_1 = class HttpExceptionFilter {
40
40
  response.status(status).json({
41
41
  statusCode: status,
42
42
  statusCodeMessage: logging_interceptor_1.HttpStatusCodeMessages[status] || 'Internal Server Error',
43
+ message: message,
43
44
  errorCode: code,
44
45
  error: message,
45
46
  data: extra,
@@ -1 +1 @@
1
- {"version":3,"file":"http-exception.filter.js","sourceRoot":"","sources":["../../src/filters/http-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;;;;;AACA,2CAOwB;AAExB,6EAA6E;AAC7E,0EAAsE;AAM/D,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAG5B,YAA6B,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;QAF3C,WAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;QAG3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,SAAc,EAAE,IAAmB;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAW,CAAC;QAE1C,MAAM,MAAM,GAAG,SAAS,YAAY,sBAAa,CAAC;QAClD,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAGlE,MAAM,IAAI,GAAc,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,cAAc,IAAI,aAAa,IAAI,GAAG,CAAC;QAGtD,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,IAAI,MAAM,IAAI,4CAAsB,CAAC,MAAM,CAAC,IAAI,uBAAuB,KAAK,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,GAAG,MAAM,SAAS,EAAE,OAAO,IAAI,OAAO,UAAU,IAAI,GAAG,CAClK,CAAC;QACF,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAGD,MAAM,KAAK,GACP,CAAC,MAAM,IAAK,SAAS,CAAC,WAAW,EAAE,EAAU,CAAC;YAC9C,SAAS,EAAE,QAAQ;YACnB,EAAE,CAAC;QAGP,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YACzB,UAAU,EAAE,MAAM;YAClB,iBAAiB,EAAE,4CAAsB,CAAC,MAAM,CAAC,IAAI,uBAAuB;YAE5E,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AA9CY,kDAAmB;8BAAnB,mBAAmB;IAF/B,IAAA,cAAK,GAAE;IACP,IAAA,mBAAU,GAAE;qCAIiC,yCAAkB;GAHnD,mBAAmB,CA8C/B","sourcesContent":["// src/common/filters/http-exception.filter.ts\nimport {\n ExceptionFilter,\n Catch,\n ArgumentsHost,\n Logger,\n Injectable,\n HttpException,\n} from '@nestjs/common';\nimport { Response, Request } from 'express';\nimport { HttpStatusCodeMessages } from '../interceptors/logging.interceptor';\nimport { ErrorMapperService } from 'src/helpers/error-mapper.service';\nimport { ErrorCode } from 'src/interfaces';\n\n\n@Catch()\n@Injectable()\nexport class HttpExceptionFilter implements ExceptionFilter {\n private readonly logger = new Logger(HttpExceptionFilter.name);\n\n constructor(private readonly errorMapper: ErrorMapperService) {\n this.logger.debug('HttpExceptionFilter initialized');\n }\n\n catch(exception: any, host: ArgumentsHost) {\n const ctx = host.switchToHttp();\n const response = ctx.getResponse<Response>();\n const request = ctx.getRequest<Request>();\n\n const isHttp = exception instanceof HttpException;\n const explicitStatus = isHttp ? exception.getStatus() : undefined;\n\n // Canonical code + static message\n const code: ErrorCode = this.errorMapper.mapException(exception);\n const defaultStatus = this.errorMapper.getHttpStatus(code);\n const message = this.errorMapper.getMessage(code);\n\n const status = explicitStatus ?? defaultStatus ?? 500;\n\n // Logging\n this.logger.error(\n `[${status} ${HttpStatusCodeMessages[status] || 'Internal Server Error'}] ${request?.method} ${request?.url} - ${exception?.message || message} [code=${code}]`,\n );\n if (exception?.stack) {\n this.logger.error(exception.stack);\n }\n\n // Preserve any extra data the exception carried (optional)\n const extra =\n (isHttp && (exception.getResponse?.() as any)) ??\n exception?.response ??\n {};\n\n // Keep your legacy shape; add canonical code\n response.status(status).json({\n statusCode: status,\n statusCodeMessage: HttpStatusCodeMessages[status] || 'Internal Server Error',\n // message: [message],\n errorCode: code,\n error: message,\n data: extra,\n });\n }\n}"]}
1
+ {"version":3,"file":"http-exception.filter.js","sourceRoot":"","sources":["../../src/filters/http-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;;;;;AACA,2CAOwB;AAExB,6EAA6E;AAC7E,0EAAsE;AAM/D,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAG5B,YAA6B,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;QAF3C,WAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;QAG3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,SAAc,EAAE,IAAmB;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAW,CAAC;QAE1C,MAAM,MAAM,GAAG,SAAS,YAAY,sBAAa,CAAC;QAClD,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAGlE,MAAM,IAAI,GAAc,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEvG,MAAM,MAAM,GAAG,cAAc,IAAI,aAAa,IAAI,GAAG,CAAC;QAGtD,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,IAAI,MAAM,IAAI,4CAAsB,CAAC,MAAM,CAAC,IAAI,uBAAuB,KAAK,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,GAAG,MAAM,SAAS,EAAE,OAAO,IAAI,OAAO,UAAU,IAAI,GAAG,CAClK,CAAC;QACF,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAGD,MAAM,KAAK,GACP,CAAC,MAAM,IAAK,SAAS,CAAC,WAAW,EAAE,EAAU,CAAC;YAC9C,SAAS,EAAE,QAAQ;YACnB,EAAE,CAAC;QAGP,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YACzB,UAAU,EAAE,MAAM;YAClB,iBAAiB,EAAE,4CAAsB,CAAC,MAAM,CAAC,IAAI,uBAAuB;YAE5E,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO;YAGd,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAjDY,kDAAmB;8BAAnB,mBAAmB;IAF/B,IAAA,cAAK,GAAE;IACP,IAAA,mBAAU,GAAE;qCAIiC,yCAAkB;GAHnD,mBAAmB,CAiD/B","sourcesContent":["// src/common/filters/http-exception.filter.ts\nimport {\n ExceptionFilter,\n Catch,\n ArgumentsHost,\n Logger,\n Injectable,\n HttpException,\n} from '@nestjs/common';\nimport { Response, Request } from 'express';\nimport { HttpStatusCodeMessages } from '../interceptors/logging.interceptor';\nimport { ErrorMapperService } from 'src/helpers/error-mapper.service';\nimport { ErrorCode } from 'src/interfaces';\n\n\n@Catch()\n@Injectable()\nexport class HttpExceptionFilter implements ExceptionFilter {\n private readonly logger = new Logger(HttpExceptionFilter.name);\n\n constructor(private readonly errorMapper: ErrorMapperService) {\n this.logger.debug('HttpExceptionFilter initialized');\n }\n\n catch(exception: any, host: ArgumentsHost) {\n const ctx = host.switchToHttp();\n const response = ctx.getResponse<Response>();\n const request = ctx.getRequest<Request>();\n\n const isHttp = exception instanceof HttpException;\n const explicitStatus = isHttp ? exception.getStatus() : undefined;\n\n // Canonical code + static message\n const code: ErrorCode = this.errorMapper.mapException(exception);\n const defaultStatus = this.errorMapper.getHttpStatus(code);\n const message = code === 'unknown-error' ? `${exception?.message}` : this.errorMapper.getMessage(code);\n\n const status = explicitStatus ?? defaultStatus ?? 500;\n\n // Logging\n this.logger.error(\n `[${status} ${HttpStatusCodeMessages[status] || 'Internal Server Error'}] ${request?.method} ${request?.url} - ${exception?.message || message} [code=${code}]`,\n );\n if (exception?.stack) {\n this.logger.error(exception.stack);\n }\n\n // Preserve any extra data the exception carried (optional)\n const extra =\n (isHttp && (exception.getResponse?.() as any)) ??\n exception?.response ??\n {};\n\n // Keep your legacy shape; add canonical code\n response.status(status).json({\n statusCode: status,\n statusCodeMessage: HttpStatusCodeMessages[status] || 'Internal Server Error',\n // Keeping this for backward compatibility..\n message: message,\n errorCode: code,\n error: message,\n // We can make this conditional based on whether we are running in prod mode or dev mode...\n // errorStack: exception.stack,\n data: extra,\n });\n }\n}"]}
@@ -1,9 +1,11 @@
1
1
  import { HelmetOptions } from "helmet";
2
2
  export declare function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions>;
3
- type Source = 'self' | 'none' | string;
4
- type DirectiveConfig = 'self' | 'none' | Source[];
3
+ type Source = "self" | "none" | string;
4
+ type DirectiveConfig = "self" | "none" | Source[];
5
5
  export type PermissionsPolicyConfig = Record<string, DirectiveConfig>;
6
6
  export declare const DEFAULT_PERMISSIONS_POLICY: PermissionsPolicyConfig;
7
7
  export declare function buildPermissionsPolicyHeader(overrides?: Partial<PermissionsPolicyConfig>): string;
8
+ export declare const DEFAULT_CACHE_CONTROL = "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0";
9
+ export declare function setDefaultCacheControl(): (_req: import("express").Request, _res: import("express").Response, next: import("express").NextFunction) => void;
8
10
  export {};
9
11
  //# sourceMappingURL=security.helper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/security.helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,wBAAgB,iCAAiC,IAAI,QAAQ,CAAC,aAAa,CAAC,CAY3E;AAED,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACvC,KAAK,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAElD,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEtE,eAAO,MAAM,0BAA0B,EAAE,uBAaxC,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,SAAS,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAC/C,MAAM,CAKR"}
1
+ {"version":3,"file":"security.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/security.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAUvC,wBAAgB,iCAAiC,IAAI,QAAQ,CAAC,aAAa,CAAC,CAwC3E;AAID,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACvC,KAAK,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAClD,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEtE,eAAO,MAAM,0BAA0B,EAAE,uBAaxC,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,SAAS,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAC/C,MAAM,CAKR;AAeD,eAAO,MAAM,qBAAqB,iFAC8C,CAAC;AAEjF,wBAAgB,sBAAsB,WAE5B,OAAO,SAAS,EAAE,OAAO,QACzB,OAAO,SAAS,EAAE,QAAQ,QAC1B,OAAO,SAAS,EAAE,YAAY,UAKvC"}
@@ -1,46 +1,61 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_PERMISSIONS_POLICY = void 0;
3
+ exports.DEFAULT_CACHE_CONTROL = exports.DEFAULT_PERMISSIONS_POLICY = void 0;
4
4
  exports.buildDefaultSecurityHeaderOptions = buildDefaultSecurityHeaderOptions;
5
5
  exports.buildPermissionsPolicyHeader = buildPermissionsPolicyHeader;
6
+ exports.setDefaultCacheControl = setDefaultCacheControl;
6
7
  const disallow_in_production_decorator_1 = require("../decorators/disallow-in-production.decorator");
7
8
  function buildDefaultSecurityHeaderOptions() {
9
+ const isProd = process.env.ENV === disallow_in_production_decorator_1.Environment.Production;
8
10
  return {
9
- referrerPolicy: { policy: 'strict-origin-when-cross-origin' },
11
+ contentSecurityPolicy: {
12
+ useDefaults: true,
13
+ directives: {
14
+ "frame-ancestors": ["'none'"],
15
+ },
16
+ },
17
+ frameguard: { action: "deny" },
18
+ referrerPolicy: { policy: "strict-origin-when-cross-origin" },
10
19
  crossOriginEmbedderPolicy: false,
11
- crossOriginResourcePolicy: { policy: 'same-site' },
12
- frameguard: { action: 'sameorigin' },
13
- hsts: process.env.NODE_ENV === disallow_in_production_decorator_1.Environment.Production
20
+ crossOriginResourcePolicy: { policy: "same-site" },
21
+ hsts: isProd
14
22
  ? { maxAge: 31536000, includeSubDomains: true, preload: true }
15
23
  : false,
16
24
  };
17
25
  }
18
26
  exports.DEFAULT_PERMISSIONS_POLICY = {
19
- camera: 'none',
20
- microphone: 'none',
21
- geolocation: 'none',
22
- fullscreen: 'self',
23
- payment: 'none',
24
- accelerometer: 'none',
25
- autoplay: 'none',
26
- 'clipboard-read': 'none',
27
- 'clipboard-write': 'none',
28
- gyroscope: 'none',
29
- magnetometer: 'none',
30
- usb: 'none',
27
+ camera: "none",
28
+ microphone: "none",
29
+ geolocation: "none",
30
+ fullscreen: "self",
31
+ payment: "none",
32
+ accelerometer: "none",
33
+ autoplay: "none",
34
+ "clipboard-read": "none",
35
+ "clipboard-write": "none",
36
+ gyroscope: "none",
37
+ magnetometer: "none",
38
+ usb: "none",
31
39
  };
32
40
  function buildPermissionsPolicyHeader(overrides = {}) {
33
41
  const merged = { ...exports.DEFAULT_PERMISSIONS_POLICY, ...overrides };
34
42
  return Object.entries(merged)
35
43
  .map(([feature, value]) => `${feature}=${serializeValue(value)}`)
36
- .join(', ');
44
+ .join(", ");
37
45
  }
38
46
  function serializeValue(v) {
39
- if (v === 'none')
40
- return '()';
41
- if (v === 'self')
42
- return '(self)';
43
- const parts = v.map(src => (src === 'self' ? 'self' : src)).join(' ');
47
+ if (v === "none")
48
+ return "()";
49
+ if (v === "self")
50
+ return "(self)";
51
+ const parts = v.map((src) => (src === "self" ? "self" : src)).join(" ");
44
52
  return `(${parts})`;
45
53
  }
54
+ exports.DEFAULT_CACHE_CONTROL = "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0";
55
+ function setDefaultCacheControl() {
56
+ return function cacheControlMiddleware(_req, _res, next) {
57
+ _res.setHeader("Cache-Control", exports.DEFAULT_CACHE_CONTROL);
58
+ next();
59
+ };
60
+ }
46
61
  //# sourceMappingURL=security.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.helper.js","sourceRoot":"","sources":["../../src/helpers/security.helper.ts"],"names":[],"mappings":";;;AAGA,8EAYC;AAsBD,oEAOC;AA5CD,qGAA8E;AAG9E,SAAgB,iCAAiC;IAC7C,OAAO;QACP,cAAc,EAAE,EAAE,MAAM,EAAE,iCAAiC,EAAE;QAC7D,yBAAyB,EAAE,KAAK;QAChC,yBAAyB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QAClD,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;QAEpC,IAAI,EACF,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,8CAAW,CAAC,UAAU;YAC7C,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YAC9D,CAAC,CAAC,KAAK;KACZ,CAAA;AACH,CAAC;AAOY,QAAA,0BAA0B,GAA4B;IACjE,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,MAAM;IACrB,QAAQ,EAAE,MAAM;IAChB,gBAAgB,EAAE,MAAM;IACxB,iBAAiB,EAAE,MAAM;IACzB,SAAS,EAAE,MAAM;IACjB,YAAY,EAAE,MAAM;IACpB,GAAG,EAAE,MAAM;CACZ,CAAC;AAEF,SAAgB,4BAA4B,CAC1C,YAA8C,EAAE;IAEhD,MAAM,MAAM,GAA4B,EAAE,GAAG,kCAA0B,EAAE,GAAG,SAAS,EAAE,CAAC;IACxF,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;SAChE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,CAAkB;IACxC,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IAElC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtE,OAAO,IAAI,KAAK,GAAG,CAAC;AACtB,CAAC","sourcesContent":["import { Environment } from \"src/decorators/disallow-in-production.decorator\";\nimport { HelmetOptions } from \"helmet\"; \n\nexport function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions> {\n return {\n referrerPolicy: { policy: 'strict-origin-when-cross-origin' },\n crossOriginEmbedderPolicy: false,\n crossOriginResourcePolicy: { policy: 'same-site' },\n frameguard: { action: 'sameorigin' }, // or { action: 'deny' }\n // HSTS: send only in prod over HTTPS\n hsts:\n process.env.NODE_ENV === Environment.Production\n ? { maxAge: 31536000, includeSubDomains: true, preload: true } // 1 year\n : false,\n }\n}\n\ntype Source = 'self' | 'none' | string; // string = an origin like 'https://cdn.example.com'\ntype DirectiveConfig = 'self' | 'none' | Source[];\n\nexport type PermissionsPolicyConfig = Record<string, DirectiveConfig>;\n\nexport const DEFAULT_PERMISSIONS_POLICY: PermissionsPolicyConfig = {\n camera: 'none',\n microphone: 'none',\n geolocation: 'none',\n fullscreen: 'self', // allow same-origin fullscreen\n payment: 'none',\n accelerometer: 'none',\n autoplay: 'none',\n 'clipboard-read': 'none',\n 'clipboard-write': 'none',\n gyroscope: 'none',\n magnetometer: 'none',\n usb: 'none',\n};\n\nexport function buildPermissionsPolicyHeader(\n overrides: Partial<PermissionsPolicyConfig> = {}\n): string {\n const merged: PermissionsPolicyConfig = { ...DEFAULT_PERMISSIONS_POLICY, ...overrides };\n return Object.entries(merged)\n .map(([feature, value]) => `${feature}=${serializeValue(value)}`)\n .join(', ');\n}\n\nfunction serializeValue(v: DirectiveConfig): string {\n if (v === 'none') return '()';\n if (v === 'self') return '(self)';\n // array of sources: allow 'self' and/or explicit origins\n const parts = v.map(src => (src === 'self' ? 'self' : src)).join(' ');\n return `(${parts})`;\n}\n"]}
1
+ {"version":3,"file":"security.helper.js","sourceRoot":"","sources":["../../src/helpers/security.helper.ts"],"names":[],"mappings":";;;AAUA,8EAwCC;AAuBD,oEAOC;AAkBD,wDASC;AA1GD,qGAA8E;AAS9E,SAAgB,iCAAiC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,8CAAW,CAAC,UAAU,CAAC;IAE1D,OAAO;QAEL,qBAAqB,EAAE;YACrB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE;gBAQV,iBAAiB,EAAE,CAAC,QAAQ,CAAC;aAQ9B;SACF;QAID,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;QAG9B,cAAc,EAAE,EAAE,MAAM,EAAE,iCAAiC,EAAE;QAC7D,yBAAyB,EAAE,KAAK;QAChC,yBAAyB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QAGlD,IAAI,EAAE,MAAM;YACV,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YAC9D,CAAC,CAAC,KAAK;KACV,CAAC;AACJ,CAAC;AAQY,QAAA,0BAA0B,GAA4B;IACjE,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,MAAM;IACrB,QAAQ,EAAE,MAAM;IAChB,gBAAgB,EAAE,MAAM;IACxB,iBAAiB,EAAE,MAAM;IACzB,SAAS,EAAE,MAAM;IACjB,YAAY,EAAE,MAAM;IACpB,GAAG,EAAE,MAAM;CACZ,CAAC;AAEF,SAAgB,4BAA4B,CAC1C,YAA8C,EAAE;IAEhD,MAAM,MAAM,GAA4B,EAAE,GAAG,kCAA0B,EAAE,GAAG,SAAS,EAAE,CAAC;IACxF,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;SAChE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,CAAkB;IACxC,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxE,OAAO,IAAI,KAAK,GAAG,CAAC;AACtB,CAAC;AAQY,QAAA,qBAAqB,GAChC,8EAA8E,CAAC;AAEjF,SAAgB,sBAAsB;IACpC,OAAO,SAAS,sBAAsB,CACpC,IAA+B,EAC/B,IAAgC,EAChC,IAAoC;QAEpC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,6BAAqB,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { HelmetOptions } from \"helmet\";\nimport { Environment } from \"src/decorators/disallow-in-production.decorator\";\n\n/**\n * Default security headers for SolidX apps.\n * - HSTS only in prod over HTTPS\n * - CSP with frame-ancestors 'none' (prevents clickjacking)\n * - X-Frame-Options: DENY (legacy fallback)\n * - No X-XSS-Protection (deprecated)\n */\nexport function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions> {\n const isProd = process.env.ENV === Environment.Production;\n\n return {\n // Modern CSP. Add more directives as your app needs (script-src, connect-src, etc.)\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n // sensible secure defaults\n // \"default-src\": [\"'self'\"],\n // \"base-uri\": [\"'self'\"],\n // \"object-src\": [\"'none'\"],\n // \"form-action\": [\"'self'\"],\n\n // clickjacking defense (modern)\n \"frame-ancestors\": [\"'none'\"],\n\n // add/adjust as needed for your app:\n // \"script-src\": [\"'self'\"], // add hashes/nonces/CSPRO if needed\n // \"style-src\": [\"'self'\", \"'unsafe-inline'\"],\n // \"img-src\": [\"'self'\", \"data:\"],\n // \"connect-src\": [\"'self'\", \"https://api.example.com\"],\n // \"frame-src\": [\"'none'\"], // iframes you intentionally allow\n },\n },\n\n \n // Legacy clickjacking defense (kept for older UAs)\n frameguard: { action: \"deny\" },\n\n // Referrer/cross-origin policies\n referrerPolicy: { policy: \"strict-origin-when-cross-origin\" },\n crossOriginEmbedderPolicy: false,\n crossOriginResourcePolicy: { policy: \"same-site\" },\n\n // HSTS only when you’re on HTTPS in production\n hsts: isProd\n ? { maxAge: 31536000, includeSubDomains: true, preload: true }\n : false,\n };\n}\n\n/* ---------------- Permissions-Policy (formerly Feature-Policy) ---------------- */\n\ntype Source = \"self\" | \"none\" | string;\ntype DirectiveConfig = \"self\" | \"none\" | Source[];\nexport type PermissionsPolicyConfig = Record<string, DirectiveConfig>;\n\nexport const DEFAULT_PERMISSIONS_POLICY: PermissionsPolicyConfig = {\n camera: \"none\",\n microphone: \"none\",\n geolocation: \"none\",\n fullscreen: \"self\",\n payment: \"none\",\n accelerometer: \"none\",\n autoplay: \"none\",\n \"clipboard-read\": \"none\",\n \"clipboard-write\": \"none\",\n gyroscope: \"none\",\n magnetometer: \"none\",\n usb: \"none\",\n};\n\nexport function buildPermissionsPolicyHeader(\n overrides: Partial<PermissionsPolicyConfig> = {}\n): string {\n const merged: PermissionsPolicyConfig = { ...DEFAULT_PERMISSIONS_POLICY, ...overrides };\n return Object.entries(merged)\n .map(([feature, value]) => `${feature}=${serializeValue(value)}`)\n .join(\", \");\n}\n\nfunction serializeValue(v: DirectiveConfig): string {\n if (v === \"none\") return \"()\";\n if (v === \"self\") return \"(self)\";\n const parts = v.map((src) => (src === \"self\" ? \"self\" : src)).join(\" \");\n return `(${parts})`;\n}\n\n/* ---------------- Cache-Control helpers ---------------- */\n\n/**\n * Default: no-store for HTML/API responses unless you have a reason to cache.\n * Attach as a global middleware or on selected routes.\n */\nexport const DEFAULT_CACHE_CONTROL =\n \"no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0\";\n\nexport function setDefaultCacheControl() {\n return function cacheControlMiddleware(\n _req: import(\"express\").Request,\n _res: import(\"express\").Response,\n next: import(\"express\").NextFunction\n ) {\n _res.setHeader(\"Cache-Control\", DEFAULT_CACHE_CONTROL);\n next();\n };\n}\n\n/* ---------------- Example Express wiring ---------------- */\n// import express from \"express\";\n// const app = express();\n// app.use(helmet(buildDefaultSecurityHeaderOptions()));\n// app.use((req, res, next) => {\n// res.setHeader(\"Permissions-Policy\", buildPermissionsPolicyHeader());\n// next();\n// });\n// app.use(setDefaultCacheControl());"]}
@@ -26,7 +26,7 @@ let SolidCoreErrorCodesProvider = class SolidCoreErrorCodesProvider {
26
26
  },
27
27
  },
28
28
  {
29
- code: 'db-duplicate-key',
29
+ code: 'solidx-db-duplicate-key',
30
30
  priority: 90,
31
31
  match: (txt) => txt.includes('unique constraint') || txt.includes('duplicate key'),
32
32
  meta: {
@@ -35,7 +35,7 @@ let SolidCoreErrorCodesProvider = class SolidCoreErrorCodesProvider {
35
35
  },
36
36
  },
37
37
  {
38
- code: 'db-foreign-key-error',
38
+ code: 'solidx-db-foreign-key-error',
39
39
  priority: 90,
40
40
  match: (txt) => txt.includes('violates foreign key'),
41
41
  meta: {
@@ -44,7 +44,7 @@ let SolidCoreErrorCodesProvider = class SolidCoreErrorCodesProvider {
44
44
  },
45
45
  },
46
46
  {
47
- code: 'unknown-error',
47
+ code: 'solidx-unknown-error',
48
48
  priority: -1,
49
49
  match: (_txt) => true,
50
50
  meta: {
@@ -1 +1 @@
1
- {"version":3,"file":"solid-core-error-codes-provider.service.js","sourceRoot":"","sources":["../../src/helpers/solid-core-error-codes-provider.service.ts"],"names":[],"mappings":";;;;;;;;;AACA,2CAA4C;AAC5C,iGAAkF;AAM3E,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACpC,IAAI;QACA,OAAO,4BAA4B,CAAC;IACxC,CAAC;IAED,KAAK;QACD,OAAO;YACH;gBACI,IAAI,EAAE,+BAA+B;gBACrC,QAAQ,EAAE,GAAG;gBACb,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,GAAG,CAAC,QAAQ,CAAC,gCAAgC,CAAC;oBAC9C,GAAG,CAAC,QAAQ,CAAC,mDAAmD,CAAC;gBACrE,IAAI,EAAE;oBACF,OAAO,EAAE,mEAAmE;oBAC5E,UAAU,EAAE,GAAG;iBAClB;aACJ;YACD;gBACI,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAClF,IAAI,EAAE;oBACF,OAAO,EAAE,qEAAqE;oBAC9E,UAAU,EAAE,GAAG;iBAClB;aACJ;YACD;gBACI,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBACpD,IAAI,EAAE;oBACF,OAAO,EACH,wEAAwE;oBAC5E,UAAU,EAAE,GAAG;iBAClB;aACJ;YACD;gBACI,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE,CAAC,CAAC;gBACZ,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;gBACrB,IAAI,EAAE;oBACF,OAAO,EAAE,+BAA+B;oBACxC,UAAU,EAAE,GAAG;iBAClB;aACJ;SACJ,CAAC;IACN,CAAC;IAGD,OAAO,CAAC,IAAY;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACvD,OAAO,IAAI,EAAE,IAAI,CAAC;IACtB,CAAC;CACJ,CAAA;AAtDY,kEAA2B;sCAA3B,2BAA2B;IAFvC,IAAA,kDAAiB,GAAE;IACnB,IAAA,mBAAU,GAAE;GACA,2BAA2B,CAsDvC","sourcesContent":["// src/common/errors/providers/solidcore-error-code.provider.ts\nimport { Injectable } from '@nestjs/common';\nimport { ErrorCodeProvider } from 'src/decorators/error-codes-provider.decorator';\nimport { ErrorMeta, ErrorRule, IErrorCodeProvider } from 'src/interfaces';\n\n\n@ErrorCodeProvider()\n@Injectable()\nexport class SolidCoreErrorCodesProvider implements IErrorCodeProvider {\n name(): string {\n return 'SolidCoreErrorCodeProvider';\n }\n\n rules(): ReadonlyArray<ErrorRule> {\n return [\n {\n code: 'solidx-mcp-server-unavailable',\n priority: 100, // run early\n match: (txt) =>\n txt.includes('all connection attempts failed') &&\n txt.includes('unhandled errors in a taskgroup (1 sub-exception)'),\n meta: {\n message: 'SolidX MCP server is unreachable. Please verify the MCP endpoint.',\n httpStatus: 503,\n },\n },\n {\n code: 'db-duplicate-key',\n priority: 90,\n match: (txt) => txt.includes('unique constraint') || txt.includes('duplicate key'),\n meta: {\n message: 'Duplicate key violation. A record with these values already exists.',\n httpStatus: 409,\n },\n },\n {\n code: 'db-foreign-key-error',\n priority: 90,\n match: (txt) => txt.includes('violates foreign key'),\n meta: {\n message:\n 'Foreign key constraint prevents this operation due to related records.',\n httpStatus: 409,\n },\n },\n {\n code: 'unknown-error',\n priority: -1, // last resort\n match: (_txt) => true, // fallback catch-all\n meta: {\n message: 'An unexpected error occurred.',\n httpStatus: 500,\n },\n },\n ];\n }\n\n // Optional explicit meta resolution (if you want)\n resolve(code: string): ErrorMeta | undefined {\n const rule = this.rules().find((r) => r.code === code);\n return rule?.meta;\n }\n}"]}
1
+ {"version":3,"file":"solid-core-error-codes-provider.service.js","sourceRoot":"","sources":["../../src/helpers/solid-core-error-codes-provider.service.ts"],"names":[],"mappings":";;;;;;;;;AACA,2CAA4C;AAC5C,iGAAkF;AAM3E,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACpC,IAAI;QACA,OAAO,4BAA4B,CAAC;IACxC,CAAC;IAED,KAAK;QACD,OAAO;YACH;gBACI,IAAI,EAAE,+BAA+B;gBACrC,QAAQ,EAAE,GAAG;gBACb,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,GAAG,CAAC,QAAQ,CAAC,gCAAgC,CAAC;oBAC9C,GAAG,CAAC,QAAQ,CAAC,mDAAmD,CAAC;gBACrE,IAAI,EAAE;oBACF,OAAO,EAAE,mEAAmE;oBAC5E,UAAU,EAAE,GAAG;iBAClB;aACJ;YACD;gBACI,IAAI,EAAE,yBAAyB;gBAC/B,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAClF,IAAI,EAAE;oBACF,OAAO,EAAE,qEAAqE;oBAC9E,UAAU,EAAE,GAAG;iBAClB;aACJ;YACD;gBACI,IAAI,EAAE,6BAA6B;gBACnC,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBACpD,IAAI,EAAE;oBACF,OAAO,EACH,wEAAwE;oBAC5E,UAAU,EAAE,GAAG;iBAClB;aACJ;YACD;gBACI,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,CAAC,CAAC;gBACZ,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;gBACrB,IAAI,EAAE;oBACF,OAAO,EAAE,+BAA+B;oBACxC,UAAU,EAAE,GAAG;iBAClB;aACJ;SACJ,CAAC;IACN,CAAC;IAGD,OAAO,CAAC,IAAY;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACvD,OAAO,IAAI,EAAE,IAAI,CAAC;IACtB,CAAC;CACJ,CAAA;AAtDY,kEAA2B;sCAA3B,2BAA2B;IAFvC,IAAA,kDAAiB,GAAE;IACnB,IAAA,mBAAU,GAAE;GACA,2BAA2B,CAsDvC","sourcesContent":["// src/common/errors/providers/solidcore-error-code.provider.ts\nimport { Injectable } from '@nestjs/common';\nimport { ErrorCodeProvider } from 'src/decorators/error-codes-provider.decorator';\nimport { ErrorMeta, ErrorRule, IErrorCodeProvider } from 'src/interfaces';\n\n\n@ErrorCodeProvider()\n@Injectable()\nexport class SolidCoreErrorCodesProvider implements IErrorCodeProvider {\n name(): string {\n return 'SolidCoreErrorCodeProvider';\n }\n\n rules(): ReadonlyArray<ErrorRule> {\n return [\n {\n code: 'solidx-mcp-server-unavailable',\n priority: 100,\n match: (txt) =>\n txt.includes('all connection attempts failed') &&\n txt.includes('unhandled errors in a taskgroup (1 sub-exception)'),\n meta: {\n message: 'SolidX MCP server is unreachable. Please verify the MCP endpoint.',\n httpStatus: 503,\n },\n },\n {\n code: 'solidx-db-duplicate-key',\n priority: 90,\n match: (txt) => txt.includes('unique constraint') || txt.includes('duplicate key'),\n meta: {\n message: 'Duplicate key violation. A record with these values already exists.',\n httpStatus: 409,\n },\n },\n {\n code: 'solidx-db-foreign-key-error',\n priority: 90,\n match: (txt) => txt.includes('violates foreign key'),\n meta: {\n message:\n 'Foreign key constraint prevents this operation due to related records.',\n httpStatus: 409,\n },\n },\n {\n code: 'solidx-unknown-error',\n priority: -1, // last resort\n match: (_txt) => true, // fallback catch-all\n meta: {\n message: 'An unexpected error occurred.',\n httpStatus: 500,\n },\n },\n ];\n }\n\n // Optional explicit meta resolution (if you want)\n resolve(code: string): ErrorMeta | undefined {\n const rule = this.rules().find((r) => r.code === code);\n return rule?.meta;\n }\n}"]}
@@ -30,7 +30,6 @@ export declare enum RESERVED_SOLID_KEYWORDS {
30
30
  securityRule = "securityRule",
31
31
  setting = "setting",
32
32
  smsTemplate = "smsTemplate",
33
- userPasswordHistory = "userPasswordHistory",
34
33
  userMetadata = "userMetadata",
35
34
  user = "user",
36
35
  locale = "locale"
@@ -1 +1 @@
1
- {"version":3,"file":"solid-registry.d.ts","sourceRoot":"","sources":["../../src/helpers/solid-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,qDAAqD,CAAC;AACpF,OAAO,EAAE,8BAA8B,EAAE,mCAAmC,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAEvK,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,oBAAY,uBAAuB;IACjC,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,oBAAoB,yBAAyB;IAC7C,KAAK,UAAU;IACf,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;IACjC,SAAS,cAAc;IACvB,kBAAkB,uBAAuB;IACzC,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,mBAAmB,wBAAwB;IAC3C,YAAY,iBAAiB;IAC7B,IAAI,SAAS;IACb,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,qBAAqB,CAAC,QAAQ,GAAG,GAAG;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,0BAA0B,EAAE,0BAA0B,EAAE,CAAC;IAEzD,8BAA8B,EAAE,MAAM,CAAC;IAEvC,8BAA8B,EAAE,QAAQ,CAAC;CAC1C;AAED,qBACa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,qBAAqB,CAAmC;IAChE,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,sBAAsB,CAAmC;IACjE,OAAO,CAAC,oBAAoB,CAAmC;IAC/D,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,qBAAqB,CAA+B;IAC5D,OAAO,CAAC,mCAAmC,CAAmC;IAC9E,OAAO,CAAC,8BAA8B,CAAmC;IACzE,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,iBAAiB,CAAmC;IAC5D,OAAO,CAAC,kBAAkB,CAAmC;IAG7D,yBAAyB,CAAC,iBAAiB,EAAE,eAAe,GAAG,IAAI;IAInE,wBAAwB,CAAC,gBAAgB,EAAE,eAAe,GAAG,IAAI;IAIjE,oBAAoB,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI;IAIzD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7D,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAI/D,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAI7C,yBAAyB,CAAC,iBAAiB,EAAE,eAAe,GAAG,IAAI;IAInE,0CAA0C,CAAC,0BAA0B,EAAE,eAAe,GAAG,IAAI;IAI7F,qCAAqC,CAAC,6BAA6B,EAAE,eAAe,GAAG,IAAI;IAI3F,6BAA6B,CAAC,qBAAqB,EAAE,eAAe,GAAG,IAAI;IAI3E,4BAA4B,CAAC,oBAAoB,EAAE,eAAe,GAAG,IAAI;IAIzE,2BAA2B,CAAC,mBAAmB,EAAE,eAAe,GAAG,IAAI;IAIvE,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI;IAIjD,gBAAgB,IAAI,KAAK,CAAC,eAAe,CAAC;IAI1C,oBAAoB,IAAI,KAAK,CAAC,eAAe,CAAC;IAI9C,UAAU,IAAI,KAAK,CAAC,eAAe,CAAC;IAIpC,cAAc,IAAI,kBAAkB,EAAE;IAItC,qBAAqB,IAAI,KAAK,CAAC,eAAe,CAAC;IAI/C,4BAA4B,CAAC,CAAC,SAAS,yBAAyB,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAWtG,sCAAsC,IAAI,KAAK,CAAC,eAAe,CAAC;IAIhE,6CAA6C,CAAC,CAAC,SAAS,yBAAyB,EAAE,IAAI,EAAE,MAAM,GAAG,mCAAmC,CAAC,CAAC,CAAC;IAWxI,qBAAqB,IAAI,KAAK,CAAC,eAAe,CAAC;IAI/C,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAS1E,iCAAiC,IAAI,KAAK,CAAC,eAAe,CAAC;IAI3D,wCAAwC,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,8BAA8B,CAAC,QAAQ,EAAE,KAAK,CAAC;IAaxH,yBAAyB,IAAI,KAAK,CAAC,eAAe,CAAC;IAInD,wBAAwB,IAAI,KAAK,CAAC,eAAe,CAAC;IAIlD,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAW5D,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAQvD,uBAAuB,IAAI,KAAK,CAAC,eAAe,CAAC;IAIjD,UAAU,IAAI,KAAK,CAAC,eAAe,CAAC;IAIpC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAKxC,qBAAqB,CAAC,aAAa,EAAE,YAAY,EAAE;IAInD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE;IAIjC,6BAA6B,CAAC,qBAAqB,EAAE,qBAAqB,EAAE;IAI5E,wBAAwB,IAAI,qBAAqB,EAAE;IAKnD,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,EAAO,GAAG,YAAY,EAAE;IAWrF,mBAAmB,IAAI,CAAC,MAAM,YAAY,CAAC,EAAE;CAK9C"}
1
+ {"version":3,"file":"solid-registry.d.ts","sourceRoot":"","sources":["../../src/helpers/solid-registry.ts"],"names":[],"mappings":"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"}
@@ -30,7 +30,6 @@ var RESERVED_SOLID_KEYWORDS;
30
30
  RESERVED_SOLID_KEYWORDS["securityRule"] = "securityRule";
31
31
  RESERVED_SOLID_KEYWORDS["setting"] = "setting";
32
32
  RESERVED_SOLID_KEYWORDS["smsTemplate"] = "smsTemplate";
33
- RESERVED_SOLID_KEYWORDS["userPasswordHistory"] = "userPasswordHistory";
34
33
  RESERVED_SOLID_KEYWORDS["userMetadata"] = "userMetadata";
35
34
  RESERVED_SOLID_KEYWORDS["user"] = "user";
36
35
  RESERVED_SOLID_KEYWORDS["locale"] = "locale";