@randstad-uca/aws-sns-publisher 1.0.2

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 (53) hide show
  1. package/build/constants.d.ts +37 -0
  2. package/build/constants.js +40 -0
  3. package/build/index.d.ts +24 -0
  4. package/build/index.js +40 -0
  5. package/build/publisher.d.ts +71 -0
  6. package/build/publisher.js +80 -0
  7. package/build/schemas/alert.schema.d.ts +2 -0
  8. package/build/schemas/alert.schema.js +13 -0
  9. package/build/schemas/certification.schema.d.ts +2 -0
  10. package/build/schemas/certification.schema.js +13 -0
  11. package/build/schemas/document-status.schema.d.ts +8 -0
  12. package/build/schemas/document-status.schema.js +39 -0
  13. package/build/schemas/education.schema.d.ts +4 -0
  14. package/build/schemas/education.schema.js +31 -0
  15. package/build/schemas/job-application.schema.d.ts +4 -0
  16. package/build/schemas/job-application.schema.js +33 -0
  17. package/build/schemas/language.schema.d.ts +4 -0
  18. package/build/schemas/language.schema.js +21 -0
  19. package/build/schemas/personal-data.schema.d.ts +2 -0
  20. package/build/schemas/personal-data.schema.js +23 -0
  21. package/build/schemas/sms.schema.d.ts +2 -0
  22. package/build/schemas/sms.schema.js +13 -0
  23. package/build/schemas/update-documents-state.schema.d.ts +2 -0
  24. package/build/schemas/update-documents-state.schema.js +16 -0
  25. package/build/schemas/update-event-date.schema.d.ts +5 -0
  26. package/build/schemas/update-event-date.schema.js +33 -0
  27. package/build/schemas/work-experience.schema.d.ts +4 -0
  28. package/build/schemas/work-experience.schema.js +27 -0
  29. package/build/types/alert.type.d.ts +4 -0
  30. package/build/types/alert.type.js +2 -0
  31. package/build/types/certification.type.d.ts +4 -0
  32. package/build/types/certification.type.js +2 -0
  33. package/build/types/document-status.type.d.ts +25 -0
  34. package/build/types/document-status.type.js +2 -0
  35. package/build/types/education.type.d.ts +17 -0
  36. package/build/types/education.type.js +2 -0
  37. package/build/types/job-application.type.d.ts +19 -0
  38. package/build/types/job-application.type.js +2 -0
  39. package/build/types/language.type.d.ts +11 -0
  40. package/build/types/language.type.js +2 -0
  41. package/build/types/one-signal.type.d.ts +22 -0
  42. package/build/types/one-signal.type.js +2 -0
  43. package/build/types/personal-data.type.d.ts +12 -0
  44. package/build/types/personal-data.type.js +2 -0
  45. package/build/types/sms.type.d.ts +6 -0
  46. package/build/types/sms.type.js +2 -0
  47. package/build/types/update-event-date.type.d.ts +16 -0
  48. package/build/types/update-event-date.type.js +2 -0
  49. package/build/types/work-experience.type.d.ts +15 -0
  50. package/build/types/work-experience.type.js +2 -0
  51. package/build/validator.d.ts +1 -0
  52. package/build/validator.js +113 -0
  53. package/package.json +34 -0
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Valid API names
3
+ */
4
+ export declare const validApiNames: string[];
5
+ /**
6
+ * Valid Event types
7
+ */
8
+ export declare const validEventTypes: {
9
+ sms: string;
10
+ addPersonalData: string;
11
+ updatePersonalData: string;
12
+ addEducation: string;
13
+ updateEducation: string;
14
+ deleteEducation: string;
15
+ addWorkExperience: string;
16
+ updateWorkExperience: string;
17
+ deleteWorkExperience: string;
18
+ addJobApplication: string;
19
+ updateJobApplication: string;
20
+ deleteJobApplication: string;
21
+ setCertification: string;
22
+ addLanguage: string;
23
+ updateLanguage: string;
24
+ deleteLanguage: string;
25
+ setProfileUpdatedDate: string;
26
+ setCvAdjuntoUpdatedDate: string;
27
+ setCvBuilderUpdatedDate: string;
28
+ setCvBuilderDownloadUpdatedDate: string;
29
+ setAlert: string;
30
+ setAltaAfipEstado: string;
31
+ setContratoEstado: string;
32
+ setLegajoEstado: string;
33
+ setSvoEstado: string;
34
+ setAdendasEstado: string;
35
+ setSeguridadyhigieneEstado: string;
36
+ setReciboEstado: string;
37
+ };
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validEventTypes = exports.validApiNames = void 0;
4
+ /**
5
+ * Valid API names
6
+ */
7
+ exports.validApiNames = ['candidate', 'talent'];
8
+ /**
9
+ * Valid Event types
10
+ */
11
+ exports.validEventTypes = {
12
+ sms: 'sms',
13
+ addPersonalData: 'add-personal-data',
14
+ updatePersonalData: 'update-personal-data',
15
+ addEducation: 'add-education',
16
+ updateEducation: 'update-education',
17
+ deleteEducation: 'delete-education',
18
+ addWorkExperience: 'add-work-experience',
19
+ updateWorkExperience: 'update-work-experience',
20
+ deleteWorkExperience: 'delete-work-experience',
21
+ addJobApplication: 'add-job-application',
22
+ updateJobApplication: 'update-job-application',
23
+ deleteJobApplication: 'delete-job-application',
24
+ setCertification: 'set-certification',
25
+ addLanguage: 'add-language',
26
+ updateLanguage: 'update-language',
27
+ deleteLanguage: 'delete-language',
28
+ setProfileUpdatedDate: 'set-profile-updated-date',
29
+ setCvAdjuntoUpdatedDate: 'set-cv-adjunto-updated-date',
30
+ setCvBuilderUpdatedDate: 'set-cv-builder-updated-date',
31
+ setCvBuilderDownloadUpdatedDate: 'set-cv-builder-download-updated-date',
32
+ setAlert: 'set-alert',
33
+ setAltaAfipEstado: 'set-alta-afip-estado',
34
+ setContratoEstado: 'set-contrato-estado',
35
+ setLegajoEstado: 'set-legajo-estado',
36
+ setSvoEstado: 'set-svo-estado',
37
+ setAdendasEstado: 'set-adendas-estado',
38
+ setSeguridadyhigieneEstado: 'set-seguridadyhigiene-estado',
39
+ setReciboEstado: 'set-recibo-estado',
40
+ };
@@ -0,0 +1,24 @@
1
+ export * from './constants';
2
+ export * from './publisher';
3
+ export * from './validator';
4
+ export * from './types/sms.type';
5
+ export * from './types/personal-data.type';
6
+ export * from './types/one-signal.type';
7
+ export * from './types/education.type';
8
+ export * from './types/work-experience.type';
9
+ export * from './types/job-application.type';
10
+ export * from './types/certification.type';
11
+ export * from './types/language.type';
12
+ export * from './types/update-event-date.type';
13
+ export * from './types/alert.type';
14
+ export * from './types/document-status.type';
15
+ export * from './schemas/sms.schema';
16
+ export * from './schemas/personal-data.schema';
17
+ export * from './schemas/education.schema';
18
+ export * from './schemas/work-experience.schema';
19
+ export * from './schemas/job-application.schema';
20
+ export * from './schemas/certification.schema';
21
+ export * from './schemas/language.schema';
22
+ export * from './schemas/update-event-date.schema';
23
+ export * from './schemas/alert.schema';
24
+ export * from './schemas/document-status.schema';
package/build/index.js ADDED
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants"), exports);
18
+ __exportStar(require("./publisher"), exports);
19
+ __exportStar(require("./validator"), exports);
20
+ __exportStar(require("./types/sms.type"), exports);
21
+ __exportStar(require("./types/personal-data.type"), exports);
22
+ __exportStar(require("./types/one-signal.type"), exports);
23
+ __exportStar(require("./types/education.type"), exports);
24
+ __exportStar(require("./types/work-experience.type"), exports);
25
+ __exportStar(require("./types/job-application.type"), exports);
26
+ __exportStar(require("./types/certification.type"), exports);
27
+ __exportStar(require("./types/language.type"), exports);
28
+ __exportStar(require("./types/update-event-date.type"), exports);
29
+ __exportStar(require("./types/alert.type"), exports);
30
+ __exportStar(require("./types/document-status.type"), exports);
31
+ __exportStar(require("./schemas/sms.schema"), exports);
32
+ __exportStar(require("./schemas/personal-data.schema"), exports);
33
+ __exportStar(require("./schemas/education.schema"), exports);
34
+ __exportStar(require("./schemas/work-experience.schema"), exports);
35
+ __exportStar(require("./schemas/job-application.schema"), exports);
36
+ __exportStar(require("./schemas/certification.schema"), exports);
37
+ __exportStar(require("./schemas/language.schema"), exports);
38
+ __exportStar(require("./schemas/update-event-date.schema"), exports);
39
+ __exportStar(require("./schemas/alert.schema"), exports);
40
+ __exportStar(require("./schemas/document-status.schema"), exports);
@@ -0,0 +1,71 @@
1
+ import { SNSClientConfig, PublishResponse, PublishInput } from '@aws-sdk/client-sns';
2
+ /**
3
+ * SNS publisher constructor options.
4
+ */
5
+ export interface ISimpleSNSPublisherOptions {
6
+ /**
7
+ * AWS client configuration passed on to the SNS object constructor.
8
+ * Define your API keys either here or in environment variables.
9
+ */
10
+ awsConfig: SNSClientConfig;
11
+ /**
12
+ * Whether logging is enabled or not - defaults to true.
13
+ */
14
+ logEnabled?: boolean;
15
+ /**
16
+ * Logging level - defaults to 'info'. Set to 'error' to only log errors.
17
+ */
18
+ logLevel?: 'info' | 'error';
19
+ /**
20
+ * Whether publish errors should be propagated or just logged - defaults to true.
21
+ */
22
+ throwError?: boolean;
23
+ /**
24
+ * The handler used to log publish result/error - defaults to
25
+ * console.log/console.error. E.g. a Winston instance can be passed here.
26
+ */
27
+ logHandler: {
28
+ info: (args: {
29
+ options: IPublishOptions;
30
+ result: PublishResponse;
31
+ }) => any;
32
+ error: (args: {
33
+ options: IPublishOptions;
34
+ error: unknown;
35
+ }) => any;
36
+ };
37
+ }
38
+ /**
39
+ * Message-specific publish options.
40
+ */
41
+ export interface IPublishOptions {
42
+ /**
43
+ * A JSON-encodable message object.
44
+ */
45
+ message: string;
46
+ /**
47
+ * The topic you want to publish to.
48
+ */
49
+ topicARN: string;
50
+ MessageGroupId?: string;
51
+ /**
52
+ * This property is used for traceability and to create a random uuid
53
+ */
54
+ apiName?: string;
55
+ /**
56
+ * Any additional publish options. Values defined here override defaults.
57
+ */
58
+ extraOptions?: PublishInput;
59
+ }
60
+ /**
61
+ * An SNS publisher with message building and logging.
62
+ */
63
+ export declare class SimpleSNSPublisher {
64
+ private SNSClient;
65
+ private options;
66
+ constructor(options: ISimpleSNSPublisherOptions);
67
+ /**
68
+ * Publish a single message under given topic. Returns a promise.
69
+ */
70
+ publish(options: IPublishOptions): Promise<PublishResponse>;
71
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleSNSPublisher = void 0;
4
+ const client_sns_1 = require("@aws-sdk/client-sns");
5
+ const uuid_1 = require("uuid");
6
+ const constants_1 = require("./constants");
7
+ const validator_1 = require("./validator");
8
+ /**
9
+ * An SNS publisher with message building and logging.
10
+ */
11
+ class SimpleSNSPublisher {
12
+ constructor(options) {
13
+ this.options = {
14
+ awsConfig: { region: options.awsConfig.region },
15
+ logEnabled: options.logEnabled || true,
16
+ logLevel: options.logLevel || 'info',
17
+ throwError: options.throwError || true,
18
+ logHandler: options.logHandler || {
19
+ info: (args) => console.log('Published message', args),
20
+ error: (args) => console.error('Publish failed', args),
21
+ },
22
+ };
23
+ this.SNSClient = new client_sns_1.SNSClient(this.options.awsConfig);
24
+ }
25
+ /**
26
+ * Publish a single message under given topic. Returns a promise.
27
+ */
28
+ async publish(options) {
29
+ const { logEnabled, logHandler, logLevel, throwError } = this.options;
30
+ try {
31
+ // Validate message structure
32
+ const message = JSON.parse(options.message);
33
+ if (!message.eventType) {
34
+ throw new Error('Missing eventType in message');
35
+ }
36
+ else if (!Object.values(constants_1.validEventTypes).includes(message.eventType)) {
37
+ throw new Error('Invalid eventType in message');
38
+ }
39
+ if (!message.payload) {
40
+ throw new Error('Missing payload in message');
41
+ }
42
+ else if (!(0, validator_1.validateSchema)(message.eventType, message.payload)) {
43
+ throw new Error(`Invalid payload for ${message.eventType} event type`);
44
+ }
45
+ const publishCommandInput = {
46
+ Message: options.message,
47
+ TopicArn: options.topicARN,
48
+ ...options.extraOptions,
49
+ };
50
+ if (options.apiName) {
51
+ // Validate valid api name
52
+ if (!constants_1.validApiNames.includes(options.apiName)) {
53
+ throw new Error('Invalid apiName');
54
+ }
55
+ // Create a unique id for the message
56
+ publishCommandInput.MessageDeduplicationId = `${options.apiName}-${(0, uuid_1.v4)()}`;
57
+ // Create a group id for the message
58
+ publishCommandInput.MessageGroupId = options.apiName
59
+ ? `api-${options.apiName}`
60
+ : 'default-group';
61
+ }
62
+ const params = new client_sns_1.PublishCommand(publishCommandInput);
63
+ const result = await this.SNSClient.send(params);
64
+ if (logEnabled && logLevel == 'info') {
65
+ logHandler.info({ options, result });
66
+ }
67
+ return result;
68
+ }
69
+ catch (error) {
70
+ if (logEnabled) {
71
+ logHandler.error({ options, error });
72
+ }
73
+ if (throwError) {
74
+ throw error;
75
+ }
76
+ return Promise.reject(error);
77
+ }
78
+ }
79
+ }
80
+ exports.SimpleSNSPublisher = SimpleSNSPublisher;
@@ -0,0 +1,2 @@
1
+ import Joi from 'joi';
2
+ export declare const SetAlertSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SetAlertSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ const CanCod = joi_1.default.number().integer().required();
9
+ const alerta = joi_1.default.string().valid('si', 'no', '').required();
10
+ exports.SetAlertSchema = joi_1.default.object({
11
+ CanCod,
12
+ alerta,
13
+ }).unknown(false);
@@ -0,0 +1,2 @@
1
+ import Joi from 'joi';
2
+ export declare const SetCertificationSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SetCertificationSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ const CanCod = joi_1.default.number().integer().required();
9
+ const certificaciones = joi_1.default.string().valid('si', 'no', '').required();
10
+ exports.SetCertificationSchema = joi_1.default.object({
11
+ CanCod,
12
+ certificaciones,
13
+ }).unknown(false);
@@ -0,0 +1,8 @@
1
+ import Joi from 'joi';
2
+ export declare const SetAltaAfipEstadoSchema: Joi.ObjectSchema<any>;
3
+ export declare const SetContratoEstadoSchema: Joi.ObjectSchema<any>;
4
+ export declare const SetLegajoEstadoSchema: Joi.ObjectSchema<any>;
5
+ export declare const SetSvoEstadoSchema: Joi.ObjectSchema<any>;
6
+ export declare const SetAdendasEstadoSchema: Joi.ObjectSchema<any>;
7
+ export declare const SetSeguridadyhigieneEstadoSchema: Joi.ObjectSchema<any>;
8
+ export declare const SetReciboEstadoSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SetReciboEstadoSchema = exports.SetSeguridadyhigieneEstadoSchema = exports.SetAdendasEstadoSchema = exports.SetSvoEstadoSchema = exports.SetLegajoEstadoSchema = exports.SetContratoEstadoSchema = exports.SetAltaAfipEstadoSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ const CanCod = joi_1.default.number().integer().required();
9
+ const documentStatus = joi_1.default.string()
10
+ .valid('enviado', 'rechazado', 'firmado', 'anulado', 'pendiente envio', 'incompleto', 'pendiente firma')
11
+ .required();
12
+ exports.SetAltaAfipEstadoSchema = joi_1.default.object({
13
+ CanCod,
14
+ altaAfipEstado: documentStatus,
15
+ }).unknown(false);
16
+ exports.SetContratoEstadoSchema = joi_1.default.object({
17
+ CanCod,
18
+ contratoEstado: documentStatus,
19
+ }).unknown(false);
20
+ exports.SetLegajoEstadoSchema = joi_1.default.object({
21
+ CanCod,
22
+ legajoEstado: documentStatus,
23
+ }).unknown(false);
24
+ exports.SetSvoEstadoSchema = joi_1.default.object({
25
+ CanCod,
26
+ svoEstado: documentStatus,
27
+ }).unknown(false);
28
+ exports.SetAdendasEstadoSchema = joi_1.default.object({
29
+ CanCod,
30
+ adendasEstado: documentStatus,
31
+ }).unknown(false);
32
+ exports.SetSeguridadyhigieneEstadoSchema = joi_1.default.object({
33
+ CanCod,
34
+ seguridadyhigieneEstado: documentStatus,
35
+ }).unknown(false);
36
+ exports.SetReciboEstadoSchema = joi_1.default.object({
37
+ CanCod,
38
+ reciboEstado: documentStatus,
39
+ }).unknown(false);
@@ -0,0 +1,4 @@
1
+ import Joi from 'joi';
2
+ export declare const AddEducationSchema: Joi.ObjectSchema<any>;
3
+ export declare const UpdateEducationSchema: Joi.ObjectSchema<any>;
4
+ export declare const DeleteEducationSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DeleteEducationSchema = exports.UpdateEducationSchema = exports.AddEducationSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ const CanCod = joi_1.default.number().integer().required();
9
+ const nivel = joi_1.default.string()
10
+ .valid('primario', 'secundario', 'terciario', 'universitario', 'master', 'doctorado')
11
+ .required();
12
+ const area = joi_1.default.string().min(1).max(50).required();
13
+ const estado = joi_1.default.string()
14
+ .valid('completo', 'incompleto', 'en curso')
15
+ .required();
16
+ const nivelMaximo = joi_1.default.number().integer().min(1).required();
17
+ const baseFields = {
18
+ CanCod,
19
+ nivel,
20
+ area,
21
+ estado,
22
+ nivelMaximo,
23
+ };
24
+ exports.AddEducationSchema = joi_1.default.object(baseFields).unknown(false);
25
+ exports.UpdateEducationSchema = joi_1.default.object({
26
+ ...baseFields,
27
+ prevNivel: nivel,
28
+ prevArea: area,
29
+ prevEstado: estado,
30
+ }).unknown(false);
31
+ exports.DeleteEducationSchema = joi_1.default.object(baseFields).unknown(false);
@@ -0,0 +1,4 @@
1
+ import Joi from 'joi';
2
+ export declare const AddJobApplicationSchema: Joi.ObjectSchema<any>;
3
+ export declare const UpdateJobApplicationSchema: Joi.ObjectSchema<any>;
4
+ export declare const DeleteJobApplicationSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DeleteJobApplicationSchema = exports.UpdateJobApplicationSchema = exports.AddJobApplicationSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ const CanCod = joi_1.default.number().integer().required();
9
+ const titulo = joi_1.default.string().min(1).max(50).required();
10
+ const area = joi_1.default.string().min(1).max(50).required();
11
+ const OPoCod = joi_1.default.number().integer().required();
12
+ const provincia = joi_1.default.string().min(1).max(50).required();
13
+ const fecha = joi_1.default.date().timestamp('javascript').required();
14
+ const nivelMaximo = joi_1.default.number().integer().min(1).required();
15
+ const baseFields = {
16
+ CanCod,
17
+ titulo,
18
+ area,
19
+ OPoCod,
20
+ provincia,
21
+ fecha,
22
+ nivelMaximo,
23
+ };
24
+ exports.AddJobApplicationSchema = joi_1.default.object(baseFields).unknown(false);
25
+ exports.UpdateJobApplicationSchema = joi_1.default.object({
26
+ ...baseFields,
27
+ prevTitulo: titulo,
28
+ prevArea: area,
29
+ prevOPoCod: OPoCod,
30
+ prevProvincia: provincia,
31
+ prevFecha: fecha,
32
+ }).unknown(false);
33
+ exports.DeleteJobApplicationSchema = joi_1.default.object(baseFields).unknown(false);
@@ -0,0 +1,4 @@
1
+ import Joi from 'joi';
2
+ export declare const AddLanguageSchema: Joi.ObjectSchema<any>;
3
+ export declare const UpdateLanguageSchema: Joi.ObjectSchema<any>;
4
+ export declare const DeleteLanguageSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DeleteLanguageSchema = exports.UpdateLanguageSchema = exports.AddLanguageSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ const CanCod = joi_1.default.number().integer().required();
9
+ const idioma = joi_1.default.string().min(1).max(50).required();
10
+ const nivelMaximo = joi_1.default.number().integer().min(1).required();
11
+ const baseFields = {
12
+ CanCod,
13
+ idioma,
14
+ nivelMaximo,
15
+ };
16
+ exports.AddLanguageSchema = joi_1.default.object(baseFields).unknown(false);
17
+ exports.UpdateLanguageSchema = joi_1.default.object({
18
+ ...baseFields,
19
+ prevIdioma: idioma,
20
+ }).unknown(false);
21
+ exports.DeleteLanguageSchema = joi_1.default.object(baseFields).unknown(false);
@@ -0,0 +1,2 @@
1
+ import Joi from 'joi';
2
+ export declare const PersonalDataSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PersonalDataSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ exports.PersonalDataSchema = joi_1.default.object({
9
+ CanCod: joi_1.default.number().integer().required(),
10
+ email: joi_1.default.string().email().optional(),
11
+ nombre: joi_1.default.string().optional(),
12
+ fechaNacimiento: joi_1.default.string().optional(),
13
+ genero: joi_1.default.string()
14
+ .valid('M', 'F', 'N')
15
+ .optional()
16
+ .messages({ 'any.only': 'genero must be either "M", "F" or "N"' }),
17
+ provincia: joi_1.default.string().optional(),
18
+ localidad: joi_1.default.string().optional(),
19
+ telefono: joi_1.default.string()
20
+ .pattern(/^\+?[1-9]\d{1,14}$/)
21
+ .message('phone number must be in E.164 format (e.g., +5491234567890)')
22
+ .optional(),
23
+ }).unknown(false);
@@ -0,0 +1,2 @@
1
+ import Joi from 'joi';
2
+ export declare const SMSSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SMSSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ exports.SMSSchema = joi_1.default.object({
9
+ celular: joi_1.default.string().min(10).max(15).required(),
10
+ mensaje: joi_1.default.string().min(1).max(160).required(),
11
+ nom: joi_1.default.string().optional(),
12
+ dato: joi_1.default.string().optional(),
13
+ }).unknown(false);
@@ -0,0 +1,2 @@
1
+ import Joi from 'joi';
2
+ export declare const UpdateDocumentsStateSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UpdateDocumentsStateSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ exports.UpdateDocumentsStateSchema = joi_1.default.object({
9
+ altaAfip: joi_1.default.string().optional(),
10
+ contrato: joi_1.default.string().optional(),
11
+ legajo: joi_1.default.string().optional(),
12
+ svo: joi_1.default.string().optional(),
13
+ adendas: joi_1.default.string().optional(),
14
+ seguridadyhigiene: joi_1.default.string().optional(),
15
+ recibo: joi_1.default.string().optional(),
16
+ }).unknown(false);
@@ -0,0 +1,5 @@
1
+ import Joi from 'joi';
2
+ export declare const SetProfileUpdatedDateSchema: Joi.ObjectSchema<any>;
3
+ export declare const SetCvAdjuntoUpdatedDateSchema: Joi.ObjectSchema<any>;
4
+ export declare const SetCvBuilderUpdatedDateSchema: Joi.ObjectSchema<any>;
5
+ export declare const SetCvBuilderDownloadUpdatedDateSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SetCvBuilderDownloadUpdatedDateSchema = exports.SetCvBuilderUpdatedDateSchema = exports.SetCvAdjuntoUpdatedDateSchema = exports.SetProfileUpdatedDateSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ const CanCod = joi_1.default.number().integer().required();
9
+ const fechaActualizacionPerfil = joi_1.default.date().timestamp('javascript').required();
10
+ const fechaActualizacionCVAdjunto = joi_1.default.date().timestamp('javascript').required();
11
+ const fechaActualizacionCVBuilder = joi_1.default.date().timestamp('javascript').required();
12
+ const fechaActualizacionDescargaCVBuilder = joi_1.default.date()
13
+ .timestamp('javascript')
14
+ .required();
15
+ const baseFields = {
16
+ CanCod,
17
+ };
18
+ exports.SetProfileUpdatedDateSchema = joi_1.default.object({
19
+ ...baseFields,
20
+ fechaActualizacionPerfil,
21
+ }).unknown(false);
22
+ exports.SetCvAdjuntoUpdatedDateSchema = joi_1.default.object({
23
+ ...baseFields,
24
+ fechaActualizacionCVAdjunto,
25
+ }).unknown(false);
26
+ exports.SetCvBuilderUpdatedDateSchema = joi_1.default.object({
27
+ ...baseFields,
28
+ fechaActualizacionCVBuilder,
29
+ }).unknown(false);
30
+ exports.SetCvBuilderDownloadUpdatedDateSchema = joi_1.default.object({
31
+ ...baseFields,
32
+ fechaActualizacionDescargaCVBuilder,
33
+ }).unknown(false);
@@ -0,0 +1,4 @@
1
+ import Joi from 'joi';
2
+ export declare const AddWorkExperienceSchema: Joi.ObjectSchema<any>;
3
+ export declare const UpdateWorkExperienceSchema: Joi.ObjectSchema<any>;
4
+ export declare const DeleteWorkExperienceSchema: Joi.ObjectSchema<any>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DeleteWorkExperienceSchema = exports.UpdateWorkExperienceSchema = exports.AddWorkExperienceSchema = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ const CanCod = joi_1.default.number().integer().required();
9
+ const puesto = joi_1.default.string().min(1).max(45).required();
10
+ const area = joi_1.default.string().min(1).max(45).required();
11
+ const rubro = joi_1.default.string().min(1).max(45).required();
12
+ const nivelMaximo = joi_1.default.number().integer().min(1).required();
13
+ const baseFields = {
14
+ CanCod,
15
+ puesto,
16
+ area,
17
+ rubro,
18
+ nivelMaximo,
19
+ };
20
+ exports.AddWorkExperienceSchema = joi_1.default.object(baseFields).unknown(false);
21
+ exports.UpdateWorkExperienceSchema = joi_1.default.object({
22
+ ...baseFields,
23
+ prevPuesto: puesto,
24
+ prevArea: area,
25
+ prevRubro: rubro,
26
+ }).unknown(false);
27
+ exports.DeleteWorkExperienceSchema = joi_1.default.object(baseFields).unknown(false);
@@ -0,0 +1,4 @@
1
+ export type SetAlertType = {
2
+ CanCod: number;
3
+ alerta: string;
4
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export type SetCertificationType = {
2
+ CanCod: number;
3
+ certificaciones: string;
4
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,25 @@
1
+ type BaseDocumentStatus = {
2
+ CanCod: number;
3
+ };
4
+ export type SetAltaAfipEstadoType = BaseDocumentStatus & {
5
+ altaAfipEstado: string;
6
+ };
7
+ export type SetContratoEstadoType = BaseDocumentStatus & {
8
+ contratoEstado: string;
9
+ };
10
+ export type SetLegajoEstadoType = BaseDocumentStatus & {
11
+ legajoEstado: string;
12
+ };
13
+ export type SetSvoEstadoType = BaseDocumentStatus & {
14
+ svoEstado: string;
15
+ };
16
+ export type SetAdendasEstadoType = BaseDocumentStatus & {
17
+ adendasEstado: string;
18
+ };
19
+ export type SetSeguridadyhigieneEstadoType = BaseDocumentStatus & {
20
+ seguridadyhigieneEstado: string;
21
+ };
22
+ export type SetReciboEstadoType = BaseDocumentStatus & {
23
+ reciboEstado: string;
24
+ };
25
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,17 @@
1
+ export type EducationLevel = 'primario' | 'secundario' | 'terciario' | 'universitario' | 'master' | 'doctorado';
2
+ export type EducationStatus = 'completo' | 'incompleto' | 'en curso';
3
+ type BaseEducation = {
4
+ CanCod?: number;
5
+ nivel: EducationLevel;
6
+ area: string;
7
+ estado: EducationStatus;
8
+ nivelMaximo?: number;
9
+ };
10
+ export type AddEducationType = BaseEducation;
11
+ export type UpdateEducationType = BaseEducation & {
12
+ prevNivel: EducationLevel;
13
+ prevArea: string;
14
+ prevEstado: EducationStatus;
15
+ };
16
+ export type DeleteEducationType = BaseEducation;
17
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,19 @@
1
+ type BaseJobApplication = {
2
+ CanCod?: number;
3
+ titulo: string;
4
+ area: string;
5
+ OPoCod: number;
6
+ provincia: string;
7
+ fecha: number;
8
+ nivelMaximo?: number;
9
+ };
10
+ export type AddJobApplicationType = BaseJobApplication;
11
+ export type UpdateJobApplicationType = BaseJobApplication & {
12
+ prevTitulo: string;
13
+ prevArea: string;
14
+ prevOPoCod: number;
15
+ prevProvincia: string;
16
+ prevFecha: number;
17
+ };
18
+ export type DeleteJobApplicationType = BaseJobApplication;
19
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,11 @@
1
+ type BaseLanguage = {
2
+ CanCod?: number;
3
+ idioma: string;
4
+ nivelMaximo?: number;
5
+ };
6
+ export type AddLanguageType = BaseLanguage;
7
+ export type UpdateLanguageType = BaseLanguage & {
8
+ prevIdioma: string;
9
+ };
10
+ export type DeleteLanguageType = BaseLanguage;
11
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,22 @@
1
+ export interface Subscription {
2
+ id?: string;
3
+ app_id?: string;
4
+ type: string;
5
+ token: string;
6
+ status?: number;
7
+ enabled: boolean;
8
+ notification_types: number;
9
+ session_time: number;
10
+ session_count: number;
11
+ sdk: string;
12
+ device_model: string;
13
+ device_os: string;
14
+ rooted: boolean;
15
+ test_type?: string;
16
+ app_version: string;
17
+ net_type?: number;
18
+ carrier?: string;
19
+ web_auth: string;
20
+ web_p256: string;
21
+ }
22
+ export type TagsType = Record<string, any>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import { Subscription } from "./one-signal.type";
2
+ export type PersonalDataType = {
3
+ CanCod: number;
4
+ email?: string;
5
+ nombre?: string;
6
+ fechaNacimiento?: string;
7
+ genero?: 'M' | 'F' | 'N';
8
+ provincia?: string;
9
+ localidad?: string;
10
+ telefono?: string;
11
+ subscriptions?: Subscription[];
12
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ export type SMSType = {
2
+ celular: string;
3
+ mensaje: string;
4
+ nom?: string;
5
+ dato?: string;
6
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,16 @@
1
+ type BaseUpdateEventDate = {
2
+ CanCod: number;
3
+ };
4
+ export type SetProfileUpdatedDateType = BaseUpdateEventDate & {
5
+ fechaActualizacionPerfil: number;
6
+ };
7
+ export type SetCvAdjuntoUpdatedDateType = BaseUpdateEventDate & {
8
+ fechaActualizacionCVAdjunto: number;
9
+ };
10
+ export type SetCvBuilderUpdatedDateType = BaseUpdateEventDate & {
11
+ fechaActualizacionCVBuilder: number;
12
+ };
13
+ export type SetCvBuilderDownloadUpdatedDateType = BaseUpdateEventDate & {
14
+ fechaActualizacionDescargaCVBuilder: number;
15
+ };
16
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,15 @@
1
+ type BaseWorkExperience = {
2
+ CanCod?: number;
3
+ puesto: string;
4
+ area: string;
5
+ rubro: string;
6
+ nivelMaximo?: number;
7
+ };
8
+ export type AddWorkExperienceType = BaseWorkExperience;
9
+ export type UpdateWorkExperienceType = BaseWorkExperience & {
10
+ prevPuesto: string;
11
+ prevArea: string;
12
+ prevRubro: string;
13
+ };
14
+ export type DeleteWorkExperienceType = BaseWorkExperience;
15
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export declare const validateSchema: (eventType: string, data: any) => boolean;
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSchema = void 0;
4
+ const constants_1 = require("./constants");
5
+ const sms_schema_1 = require("./schemas/sms.schema");
6
+ const personal_data_schema_1 = require("./schemas/personal-data.schema");
7
+ const education_schema_1 = require("./schemas/education.schema");
8
+ const work_experience_schema_1 = require("./schemas/work-experience.schema");
9
+ const job_application_schema_1 = require("./schemas/job-application.schema");
10
+ const language_schema_1 = require("./schemas/language.schema");
11
+ const certification_schema_1 = require("./schemas/certification.schema");
12
+ const update_event_date_schema_1 = require("./schemas/update-event-date.schema");
13
+ const alert_schema_1 = require("./schemas/alert.schema");
14
+ const document_status_schema_1 = require("./schemas/document-status.schema");
15
+ const validateSchema = (eventType, data) => {
16
+ let schema;
17
+ switch (eventType) {
18
+ case constants_1.validEventTypes.sms:
19
+ schema = sms_schema_1.SMSSchema;
20
+ break;
21
+ case constants_1.validEventTypes.addPersonalData:
22
+ case constants_1.validEventTypes.updatePersonalData:
23
+ schema = personal_data_schema_1.PersonalDataSchema;
24
+ break;
25
+ case constants_1.validEventTypes.addEducation:
26
+ schema = education_schema_1.AddEducationSchema;
27
+ break;
28
+ case constants_1.validEventTypes.updateEducation:
29
+ schema = education_schema_1.UpdateEducationSchema;
30
+ break;
31
+ case constants_1.validEventTypes.deleteEducation:
32
+ schema = education_schema_1.DeleteEducationSchema;
33
+ break;
34
+ case constants_1.validEventTypes.addWorkExperience:
35
+ schema = work_experience_schema_1.AddWorkExperienceSchema;
36
+ break;
37
+ case constants_1.validEventTypes.updateWorkExperience:
38
+ schema = work_experience_schema_1.UpdateWorkExperienceSchema;
39
+ break;
40
+ case constants_1.validEventTypes.deleteWorkExperience:
41
+ schema = work_experience_schema_1.DeleteWorkExperienceSchema;
42
+ break;
43
+ case constants_1.validEventTypes.addJobApplication:
44
+ schema = job_application_schema_1.AddJobApplicationSchema;
45
+ break;
46
+ case constants_1.validEventTypes.updateJobApplication:
47
+ schema = job_application_schema_1.UpdateJobApplicationSchema;
48
+ break;
49
+ case constants_1.validEventTypes.deleteJobApplication:
50
+ schema = job_application_schema_1.DeleteJobApplicationSchema;
51
+ break;
52
+ case constants_1.validEventTypes.addLanguage:
53
+ schema = language_schema_1.AddLanguageSchema;
54
+ break;
55
+ case constants_1.validEventTypes.updateLanguage:
56
+ schema = language_schema_1.UpdateLanguageSchema;
57
+ break;
58
+ case constants_1.validEventTypes.deleteLanguage:
59
+ schema = language_schema_1.DeleteLanguageSchema;
60
+ break;
61
+ case constants_1.validEventTypes.setCertification:
62
+ schema = certification_schema_1.SetCertificationSchema;
63
+ break;
64
+ case constants_1.validEventTypes.setProfileUpdatedDate:
65
+ schema = update_event_date_schema_1.SetProfileUpdatedDateSchema;
66
+ break;
67
+ case constants_1.validEventTypes.setCvAdjuntoUpdatedDate:
68
+ schema = update_event_date_schema_1.SetCvAdjuntoUpdatedDateSchema;
69
+ break;
70
+ case constants_1.validEventTypes.setCvBuilderUpdatedDate:
71
+ schema = update_event_date_schema_1.SetCvBuilderUpdatedDateSchema;
72
+ break;
73
+ case constants_1.validEventTypes.setCvBuilderDownloadUpdatedDate:
74
+ schema = update_event_date_schema_1.SetCvBuilderDownloadUpdatedDateSchema;
75
+ break;
76
+ case constants_1.validEventTypes.setAlert:
77
+ schema = alert_schema_1.SetAlertSchema;
78
+ break;
79
+ case constants_1.validEventTypes.setAltaAfipEstado:
80
+ schema = document_status_schema_1.SetAltaAfipEstadoSchema;
81
+ break;
82
+ case constants_1.validEventTypes.setContratoEstado:
83
+ schema = document_status_schema_1.SetContratoEstadoSchema;
84
+ break;
85
+ case constants_1.validEventTypes.setLegajoEstado:
86
+ schema = document_status_schema_1.SetLegajoEstadoSchema;
87
+ break;
88
+ case constants_1.validEventTypes.setSvoEstado:
89
+ schema = document_status_schema_1.SetSvoEstadoSchema;
90
+ break;
91
+ case constants_1.validEventTypes.setAdendasEstado:
92
+ schema = document_status_schema_1.SetAdendasEstadoSchema;
93
+ break;
94
+ case constants_1.validEventTypes.setSeguridadyhigieneEstado:
95
+ schema = document_status_schema_1.SetSeguridadyhigieneEstadoSchema;
96
+ break;
97
+ case constants_1.validEventTypes.setReciboEstado:
98
+ schema = document_status_schema_1.SetReciboEstadoSchema;
99
+ break;
100
+ default:
101
+ console.error(`Unknown event type: ${eventType}`);
102
+ return false;
103
+ }
104
+ const { error } = schema.validate(data, {
105
+ abortEarly: false,
106
+ });
107
+ if (error) {
108
+ console.error('Validation failed:', error.details.map((e) => e.message));
109
+ return false;
110
+ }
111
+ return true;
112
+ };
113
+ exports.validateSchema = validateSchema;
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@randstad-uca/aws-sns-publisher",
3
+ "version": "1.0.2",
4
+ "description": "AWS SNS Publisher",
5
+ "main": "./build/index.js",
6
+ "types": "./build/index.d.ts",
7
+ "files": [
8
+ "build/**/*"
9
+ ],
10
+ "scripts": {
11
+ "clean": "rimraf build",
12
+ "build": "npm run clean && npx tsc",
13
+ "pub": "npm version patch && npm run build && npm publish"
14
+ },
15
+ "keywords": [
16
+ "aws",
17
+ "sns",
18
+ "publisher"
19
+ ],
20
+ "author": "Facundo Brusa",
21
+ "license": "ISC",
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
25
+ "devDependencies": {
26
+ "rimraf": "^6.0.1",
27
+ "typescript": "^5.7.3"
28
+ },
29
+ "dependencies": {
30
+ "@aws-sdk/client-sns": "^3.741.0",
31
+ "joi": "^17.13.3",
32
+ "uuid": "^11.0.5"
33
+ }
34
+ }