sr-npm 1.7.410 → 1.7.412

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.
@@ -2,9 +2,8 @@ const COLLECTIONS = {
2
2
  AMOUNT_OF_JOBS_PER_DEPARTMENT: 'AmountOfJobsPerDepartment',
3
3
  CITIES: 'cities',
4
4
  JOBS: 'Jobs',
5
- COMPANY_ID: 'CompanyId',
6
- API_KEY: 'ApiKey',
7
5
  TEMPLATE_TYPE: 'templateType',
6
+ SECRET_MANAGER_MIRROR: 'SecretManagerMirror',
8
7
  }
9
8
  const JOBS_COLLECTION_FIELDS = {
10
9
  LOCATION: 'location',
@@ -63,15 +62,13 @@ const COLLECTIONS_FIELDS = {
63
62
  {key:'city', type: 'REFERENCE', typeMetadata: { reference: { referencedCollectionId: COLLECTIONS.CITIES } } },
64
63
  { key: 'image', type: 'IMAGE' },
65
64
  ],
66
- COMPANY_ID: [
67
- {key:'companyId', type: 'TEXT'},
68
- ],
69
- API_KEY: [
70
- {key:'token', type: 'TEXT'},
71
- ],
72
65
  TEMPLATE_TYPE: [
73
66
  {key:'templateType', type: 'TEXT'},
74
67
  ],
68
+ SECRET_MANAGER_MIRROR: [
69
+ {key:'tokenName', type: 'TEXT'},
70
+ {key:'tokenValue', type: 'TEXT'},
71
+ ],
75
72
  };
76
73
 
77
74
 
package/backend/consts.js CHANGED
@@ -10,7 +10,7 @@ const TASKS_NAMES = {
10
10
  AGGREGATE_JOBS_BY_FIELD_TO_CMS: 'aggregateJobsByFieldToCMS',
11
11
  REFERENCE_JOBS: 'referenceJobs',
12
12
  CREATE_COLLECTIONS: 'createCollections',
13
- CREATE_COMPANY_ID_COLLECTION_AND_FILL_IT: 'createCompanyIdCollectionAndFillIt',
13
+ CREATE_SECRET_MANAGER_MIRROR_AND_FILL_IT: 'createSecretManagerMirrorAndFillIt',
14
14
  SYNC_JOBS_FAST: 'syncJobsFast',
15
15
  }
16
16
 
@@ -65,8 +65,8 @@ const TASKS = {
65
65
  },
66
66
  [TASKS_NAMES.SYNC_JOBS_FAST]: {
67
67
  name: TASKS_NAMES.SYNC_JOBS_FAST,
68
- getIdentifier:task=>task.data.templateType,
69
- process:templateType=>syncJobsFast(templateType),
68
+ getIdentifier:()=>"SHOULD_NEVER_SKIP",
69
+ process:syncJobsFast,
70
70
  shouldSkipCheck:()=>false,
71
71
  estimatedDurationSec:60
72
72
  }
package/backend/data.js CHANGED
@@ -286,52 +286,7 @@ function fetchJobLocation(jobDetails) {
286
286
  return jobLocation;
287
287
  }
288
288
 
289
- async function createApiKeyCollectionAndFillIt() {
290
- console.log("Creating ApiKey collection and filling it with the smart token");
291
- await createCollectionIfMissing(COLLECTIONS.API_KEY, COLLECTIONS_FIELDS.API_KEY,null,'singleItem');
292
- console.log("Getting the smart token ");
293
- const token = await getSmartToken();
294
- console.log("token is : ", token);
295
- console.log("Inserting the smart token into the ApiKey collection");
296
- try {
297
- await wixData.insert(COLLECTIONS.API_KEY, {
298
- token: token.value
299
- });
300
- console.log("Smart token inserted into the ApiKey collection");
301
- } catch (error) {
302
- if (error.message.includes("WDE0074: An item with _id [SINGLE_ITEM_ID] already exists")) {
303
- console.log("Smart token already exists in the ApiKey collection");
304
- }
305
- else {
306
- throw error;
307
- }
308
- }
309
- }
310
-
311
289
 
312
- async function createCompanyIdCollectionAndFillIt() {
313
- console.log("Creating CompanyId collection and filling it with the company ID");
314
- await createCollectionIfMissing(COLLECTIONS.COMPANY_ID, COLLECTIONS_FIELDS.COMPANY_ID,null,'singleItem');
315
- console.log("Getting the company ID ");
316
- const companyId = await getCompanyId();
317
- console.log("companyId is : ", companyId);
318
- console.log("Inserting the company ID into the CompanyId collection");
319
- try {
320
- await wixData.insert(COLLECTIONS.COMPANY_ID, {
321
- companyId: companyId.value
322
- });
323
- console.log("company ID inserted into the CompanyId collection");
324
- } catch (error) {
325
- if (error.message.includes("WDE0074: An item with _id [SINGLE_ITEM_ID] already exists")) {
326
- console.log("company ID already exists in the CompanyId collection");
327
- }
328
- else {
329
- throw error;
330
- }
331
- }
332
-
333
-
334
- }
335
290
 
336
291
  async function createCollections() {
337
292
  console.log("Creating collections");
@@ -359,13 +314,11 @@ async function referenceJobs() {
359
314
  console.log("finished referencing jobs");
360
315
  }
361
316
 
362
- async function syncJobsFast(templateType) {
317
+ async function syncJobsFast() {
363
318
  console.log("Syncing jobs fast");
364
- await createCompanyIdCollectionAndFillIt();
365
- if(templateType==='INTERNAL')
366
- {
367
- await createApiKeyCollectionAndFillIt();
368
- }
319
+ //database
320
+
321
+ await createSecretManagerMirrorAndFillIt();
369
322
  await createCollections();
370
323
  await clearCollections();
371
324
  console.log("saving jobs data to CMS");
@@ -389,14 +342,54 @@ async function clearCollections() {
389
342
  console.log("cleared collections successfully");
390
343
  }
391
344
 
345
+ async function markTemplateAsExternal() {
346
+ await createCollectionIfMissing(COLLECTIONS.TEMPLATE_TYPE, COLLECTIONS_FIELDS.TEMPLATE_TYPE,null,'singleItem');
347
+ await wixData.save(COLLECTIONS.TEMPLATE_TYPE, {
348
+ templateType: "PUBLIC"
349
+ });
350
+ }
351
+
352
+ async function markTemplateAsInternal() {
353
+ await createCollectionIfMissing(COLLECTIONS.TEMPLATE_TYPE, COLLECTIONS_FIELDS.TEMPLATE_TYPE,null,'singleItem');
354
+ await wixData.save(COLLECTIONS.TEMPLATE_TYPE, {
355
+ templateType: "INTERNAL"
356
+ });
357
+ }
358
+
359
+ async function createSecretManagerMirrorAndFillIt() {
360
+ console.log("Creating SecretManagerMirror collection and filling it");
361
+ await createCollectionIfMissing(COLLECTIONS.SECRET_MANAGER_MIRROR, COLLECTIONS_FIELDS.SECRET_MANAGER_MIRROR);
362
+ console.log("Getting the company ID ");
363
+ const companyId = await getCompanyId();
364
+ console.log("companyId is : ", companyId);
365
+ await wixData.insert(COLLECTIONS.SECRET_MANAGER_MIRROR, {
366
+ tokenName: "companyId",
367
+ tokenValue: companyId.value
368
+ });
369
+ console.log("companyId inserted into the SecretManagerMirror collection");
370
+ try{
371
+ const token = await getSmartToken();
372
+ await wixData.insert(COLLECTIONS.SECRET_MANAGER_MIRROR, {
373
+ tokenName: "x-smarttoken",
374
+ tokenValue: token.value
375
+ });
376
+ console.log("x-smarttoken inserted into the SecretManagerMirror collection");
377
+ } catch (error) {
378
+ console.log("Error creating SecretManagerMirror collection:", error);
379
+ }
380
+ }
381
+
382
+
392
383
  module.exports = {
393
384
  syncJobsFast,
394
385
  referenceJobs,
395
386
  aggregateJobs,
396
387
  createCollections,
397
- saveJobsDataToCMS,
398
- saveJobsDescriptionsAndLocationApplyUrlToCMS,
399
- aggregateJobsByFieldToCMS,
400
- referenceJobsToField,
401
- createCompanyIdCollectionAndFillIt,
388
+ saveJobsDataToCMS,
389
+ saveJobsDescriptionsAndLocationApplyUrlToCMS,
390
+ aggregateJobsByFieldToCMS,
391
+ referenceJobsToField,
392
+ createSecretManagerMirrorAndFillIt,
393
+ markTemplateAsExternal,
394
+ markTemplateAsInternal,
402
395
  };
@@ -2,19 +2,26 @@ const { fetch } = require('wix-fetch');
2
2
  const { items: wixData } = require('@wix/data');
3
3
  const { COLLECTIONS } = require('./collectionConsts');
4
4
 
5
- async function makeSmartRecruitersRequest(path,smartToken) {
5
+ async function makeSmartRecruitersRequest(path) {
6
6
  const baseUrl = 'https://api.smartrecruiters.com';
7
7
  const fullUrl = `${baseUrl}${path}`;
8
8
 
9
9
  try {
10
+ //if templatetype is internal make headers object with x-smarttoken
11
+ const headers = {
12
+ 'Accept-Language': 'en',
13
+ 'accept': 'application/json',
14
+ 'Cookie': 'AWSALB=GYltFw3fLKortMxHR5vIOT1CuUROyhWNIX/qL8ZnPl1/8mhOcnIsBKYslzmNJPEzSy/jvNbO+6tXpH8yqcpQJagYt57MhbKlLqTSzoNq1G/w7TjOxPGR3UTdXW0d; AWSALBCORS=GYltFw3fLKortMxHR5vIOT1CuUROyhWNIX/qL8ZnPl1/8mhOcnIsBKYslzmNJPEzSy/jvNbO+6tXpH8yqcpQJagYt57MhbKlLqTSzoNq1G/w7TjOxPGR3UTdXW0d'
15
+ };
16
+ //here is the only place where we check templateType
17
+ const templateType = await getTemplateTypeFromCMS();
18
+ if (templateType === 'INTERNAL') {
19
+ const smartToken = await getSmartTokenFromCMS();
20
+ headers['x-smarttoken'] = smartToken;
21
+ }
10
22
  const response = await fetch(fullUrl, {
11
23
  method: 'GET',
12
- headers: {
13
- 'Accept-Language': 'en',
14
- 'accept': 'application/json',
15
- 'Cookie': 'AWSALB=GYltFw3fLKortMxHR5vIOT1CuUROyhWNIX/qL8ZnPl1/8mhOcnIsBKYslzmNJPEzSy/jvNbO+6tXpH8yqcpQJagYt57MhbKlLqTSzoNq1G/w7TjOxPGR3UTdXW0d; AWSALBCORS=GYltFw3fLKortMxHR5vIOT1CuUROyhWNIX/qL8ZnPl1/8mhOcnIsBKYslzmNJPEzSy/jvNbO+6tXpH8yqcpQJagYt57MhbKlLqTSzoNq1G/w7TjOxPGR3UTdXW0d',
16
- 'x-smarttoken': smartToken
17
- }
24
+ headers: headers
18
25
  });
19
26
 
20
27
  if (response.ok) {
@@ -34,7 +41,7 @@ async function fetchPositionsFromSRAPI() {
34
41
  let totalFound = 0;
35
42
  let page = 0;
36
43
  const MAX_PAGES = 30 // Safety limit to prevent infinite loops
37
- const {companyId,templateType,smartToken} = await getApiKeys();
44
+ const {companyId,templateType} = await getApiKeys();
38
45
  console.log('Starting to fetch all positions with pagination...');
39
46
  let offset=0;
40
47
 
@@ -45,7 +52,7 @@ async function fetchPositionsFromSRAPI() {
45
52
  const apiPath = `/v1/companies/${companyId}/postings?offset=${offset}&destination=${templateType}`;
46
53
 
47
54
  console.log(`Fetching page ${page} with path: ${apiPath}`);
48
- const response = await makeSmartRecruitersRequest(apiPath,smartToken);
55
+ const response = await makeSmartRecruitersRequest(apiPath);
49
56
 
50
57
  // Add positions from this page to our collection
51
58
  if (response.content && Array.isArray(response.content)) {
@@ -95,23 +102,23 @@ async function fetchPositionsFromSRAPI() {
95
102
  }
96
103
 
97
104
  async function fetchJobDescription(jobId) {
98
- const {companyId,smartToken} = await getApiKeys();
99
- return await makeSmartRecruitersRequest(`/v1/companies/${companyId}/postings/${jobId}`,smartToken);
105
+ const {companyId} = await getApiKeys();
106
+ return await makeSmartRecruitersRequest(`/v1/companies/${companyId}/postings/${jobId}`);
100
107
  }
101
108
 
102
109
  async function getCompanyIdFromCMS() {
103
- const result = await wixData.query(COLLECTIONS.COMPANY_ID).limit(1).find();
110
+ const result = await wixData.query(COLLECTIONS.SECRET_MANAGER_MIRROR).limit(1).find();
104
111
  if (result.items.length > 0) {
105
- return result.items[0].companyId;
112
+ return result.items[0].tokenValue;
106
113
  } else {
107
114
  throw new Error('[getCompanyIdFromCMS], No companyId found');
108
115
  }
109
116
  }
110
117
 
111
118
  async function getSmartTokenFromCMS() {
112
- const result = await wixData.query(COLLECTIONS.API_KEY).limit(1).find();
119
+ const result = await wixData.query(COLLECTIONS.SECRET_MANAGER_MIRROR).equalTo('tokenName','x-smarttoken').limit(1).find();
113
120
  if (result.items.length > 0) {
114
- return result.items[0].token;
121
+ return result.items[0].tokenValue;
115
122
  } else {
116
123
  throw new Error('[getSmartTokenFromCMS], No smarttoken found');
117
124
  }
@@ -129,8 +136,7 @@ async function getTemplateTypeFromCMS() {
129
136
  async function getApiKeys() {
130
137
  const companyId = await getCompanyIdFromCMS();
131
138
  const templateType = await getTemplateTypeFromCMS();
132
- const smartToken = templateType==='INTERNAL' ? await getSmartTokenFromCMS():undefined;
133
- return {companyId,templateType,smartToken};
139
+ return {companyId,templateType};
134
140
  }
135
141
 
136
142
  module.exports = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sr-npm",
3
- "version": "1.7.410",
3
+ "version": "1.7.412",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {