@jobsearch-works/firestore-models 1.0.30 → 1.0.31

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.
package/dist/index.d.mts CHANGED
@@ -301,4 +301,38 @@ declare namespace Agent {
301
301
  const createNew: (name: string, email: string) => Agent.Model;
302
302
  }
303
303
 
304
- export { Agent, Application, ApplicationQuestion, AuthUser, Client, ClientData, ClientLogin, ClientQuestion, Vacancy, VacancySuggestion };
304
+ declare namespace GmailMessage {
305
+ interface Model extends BaseModel {
306
+ messageId: string;
307
+ threadId?: string;
308
+ labelIds?: string[];
309
+ snippet?: string;
310
+ internalDate?: string;
311
+ payload?: {
312
+ headers?: Array<{
313
+ name: string;
314
+ value: string;
315
+ }>;
316
+ body?: {
317
+ data?: string;
318
+ };
319
+ parts?: Array<{
320
+ mimeType?: string;
321
+ body?: {
322
+ data?: string;
323
+ };
324
+ }>;
325
+ };
326
+ }
327
+ const collection: (clientId: string) => string;
328
+ const document: (clientId: string, messageId: string) => string;
329
+ const extractBody: (email: Model) => string;
330
+ const extractReceivedDate: (email: Model) => Date;
331
+ const extractSubject: (email: Model) => string;
332
+ const extractFromAddress: (email: Model) => string;
333
+ const formatEmailDate: (email: Model) => string;
334
+ const getEmailSender: (email: Model) => string;
335
+ const createNew: (messageId: string, threadId?: string, payload?: Model["payload"], labelIds?: string[], snippet?: string, internalDate?: string) => Model;
336
+ }
337
+
338
+ export { Agent, Application, ApplicationQuestion, AuthUser, Client, ClientData, ClientLogin, ClientQuestion, GmailMessage, Vacancy, VacancySuggestion };
package/dist/index.d.ts CHANGED
@@ -301,4 +301,38 @@ declare namespace Agent {
301
301
  const createNew: (name: string, email: string) => Agent.Model;
302
302
  }
303
303
 
304
- export { Agent, Application, ApplicationQuestion, AuthUser, Client, ClientData, ClientLogin, ClientQuestion, Vacancy, VacancySuggestion };
304
+ declare namespace GmailMessage {
305
+ interface Model extends BaseModel {
306
+ messageId: string;
307
+ threadId?: string;
308
+ labelIds?: string[];
309
+ snippet?: string;
310
+ internalDate?: string;
311
+ payload?: {
312
+ headers?: Array<{
313
+ name: string;
314
+ value: string;
315
+ }>;
316
+ body?: {
317
+ data?: string;
318
+ };
319
+ parts?: Array<{
320
+ mimeType?: string;
321
+ body?: {
322
+ data?: string;
323
+ };
324
+ }>;
325
+ };
326
+ }
327
+ const collection: (clientId: string) => string;
328
+ const document: (clientId: string, messageId: string) => string;
329
+ const extractBody: (email: Model) => string;
330
+ const extractReceivedDate: (email: Model) => Date;
331
+ const extractSubject: (email: Model) => string;
332
+ const extractFromAddress: (email: Model) => string;
333
+ const formatEmailDate: (email: Model) => string;
334
+ const getEmailSender: (email: Model) => string;
335
+ const createNew: (messageId: string, threadId?: string, payload?: Model["payload"], labelIds?: string[], snippet?: string, internalDate?: string) => Model;
336
+ }
337
+
338
+ export { Agent, Application, ApplicationQuestion, AuthUser, Client, ClientData, ClientLogin, ClientQuestion, GmailMessage, Vacancy, VacancySuggestion };
package/dist/index.js CHANGED
@@ -28,6 +28,7 @@ __export(src_exports, {
28
28
  ClientData: () => ClientData,
29
29
  ClientLogin: () => ClientLogin,
30
30
  ClientQuestion: () => ClientQuestion,
31
+ GmailMessage: () => GmailMessage,
31
32
  Vacancy: () => Vacancy,
32
33
  VacancySuggestion: () => VacancySuggestion
33
34
  });
@@ -375,6 +376,81 @@ var Agent;
375
376
  };
376
377
  };
377
378
  })(Agent || (Agent = {}));
379
+
380
+ // src/models/GmailMessage.ts
381
+ var GmailMessage;
382
+ ((GmailMessage2) => {
383
+ GmailMessage2.collection = (clientId) => `clientEmails/${clientId}/messages`;
384
+ GmailMessage2.document = (clientId, messageId) => `${(0, GmailMessage2.collection)(clientId)}/${messageId}`;
385
+ GmailMessage2.extractBody = (email) => {
386
+ const payload = email.payload;
387
+ if (!payload)
388
+ return "No body available";
389
+ const getTextContent = (parts) => {
390
+ for (const part of parts) {
391
+ if (part.mimeType === "text/plain" && part.body?.data) {
392
+ return Buffer.from(part.body.data, "base64").toString();
393
+ }
394
+ }
395
+ return "";
396
+ };
397
+ if (payload.parts && Array.isArray(payload.parts)) {
398
+ return getTextContent(payload.parts) || "No body available";
399
+ }
400
+ if (payload.body?.data) {
401
+ return Buffer.from(payload.body.data, "base64").toString();
402
+ }
403
+ return "No body available";
404
+ };
405
+ GmailMessage2.extractReceivedDate = (email) => {
406
+ const headers = email.payload?.headers || [];
407
+ const dateHeader = headers.find(
408
+ (header) => header.name.toLowerCase() === "date"
409
+ );
410
+ if (dateHeader?.value) {
411
+ const parsedDate = new Date(dateHeader.value);
412
+ if (!isNaN(parsedDate.getTime())) {
413
+ return parsedDate;
414
+ }
415
+ }
416
+ if (email.internalDate) {
417
+ return new Date(parseInt(email.internalDate, 10));
418
+ }
419
+ return /* @__PURE__ */ new Date();
420
+ };
421
+ GmailMessage2.extractSubject = (email) => {
422
+ const headers = email.payload?.headers || [];
423
+ const subjectHeader = headers.find(
424
+ (header) => header.name.toLowerCase() === "subject"
425
+ );
426
+ return subjectHeader?.value || "No subject available";
427
+ };
428
+ GmailMessage2.extractFromAddress = (email) => {
429
+ const headers = email.payload?.headers || [];
430
+ const fromHeader = headers.find(
431
+ (header) => header.name.toLowerCase() === "from"
432
+ );
433
+ return fromHeader?.value || "No sender available";
434
+ };
435
+ GmailMessage2.formatEmailDate = (email) => {
436
+ const date = (0, GmailMessage2.extractReceivedDate)(email);
437
+ return date.toLocaleString();
438
+ };
439
+ GmailMessage2.getEmailSender = (email) => {
440
+ return (0, GmailMessage2.extractFromAddress)(email);
441
+ };
442
+ GmailMessage2.createNew = (messageId, threadId, payload, labelIds, snippet, internalDate) => {
443
+ return {
444
+ messageId,
445
+ threadId,
446
+ payload,
447
+ labelIds,
448
+ snippet,
449
+ internalDate,
450
+ createdAt: /* @__PURE__ */ new Date()
451
+ };
452
+ };
453
+ })(GmailMessage || (GmailMessage = {}));
378
454
  // Annotate the CommonJS export names for ESM import in node:
379
455
  0 && (module.exports = {
380
456
  Agent,
@@ -385,6 +461,7 @@ var Agent;
385
461
  ClientData,
386
462
  ClientLogin,
387
463
  ClientQuestion,
464
+ GmailMessage,
388
465
  Vacancy,
389
466
  VacancySuggestion
390
467
  });
package/dist/index.mjs CHANGED
@@ -340,6 +340,81 @@ var Agent;
340
340
  };
341
341
  };
342
342
  })(Agent || (Agent = {}));
343
+
344
+ // src/models/GmailMessage.ts
345
+ var GmailMessage;
346
+ ((GmailMessage2) => {
347
+ GmailMessage2.collection = (clientId) => `clientEmails/${clientId}/messages`;
348
+ GmailMessage2.document = (clientId, messageId) => `${(0, GmailMessage2.collection)(clientId)}/${messageId}`;
349
+ GmailMessage2.extractBody = (email) => {
350
+ const payload = email.payload;
351
+ if (!payload)
352
+ return "No body available";
353
+ const getTextContent = (parts) => {
354
+ for (const part of parts) {
355
+ if (part.mimeType === "text/plain" && part.body?.data) {
356
+ return Buffer.from(part.body.data, "base64").toString();
357
+ }
358
+ }
359
+ return "";
360
+ };
361
+ if (payload.parts && Array.isArray(payload.parts)) {
362
+ return getTextContent(payload.parts) || "No body available";
363
+ }
364
+ if (payload.body?.data) {
365
+ return Buffer.from(payload.body.data, "base64").toString();
366
+ }
367
+ return "No body available";
368
+ };
369
+ GmailMessage2.extractReceivedDate = (email) => {
370
+ const headers = email.payload?.headers || [];
371
+ const dateHeader = headers.find(
372
+ (header) => header.name.toLowerCase() === "date"
373
+ );
374
+ if (dateHeader?.value) {
375
+ const parsedDate = new Date(dateHeader.value);
376
+ if (!isNaN(parsedDate.getTime())) {
377
+ return parsedDate;
378
+ }
379
+ }
380
+ if (email.internalDate) {
381
+ return new Date(parseInt(email.internalDate, 10));
382
+ }
383
+ return /* @__PURE__ */ new Date();
384
+ };
385
+ GmailMessage2.extractSubject = (email) => {
386
+ const headers = email.payload?.headers || [];
387
+ const subjectHeader = headers.find(
388
+ (header) => header.name.toLowerCase() === "subject"
389
+ );
390
+ return subjectHeader?.value || "No subject available";
391
+ };
392
+ GmailMessage2.extractFromAddress = (email) => {
393
+ const headers = email.payload?.headers || [];
394
+ const fromHeader = headers.find(
395
+ (header) => header.name.toLowerCase() === "from"
396
+ );
397
+ return fromHeader?.value || "No sender available";
398
+ };
399
+ GmailMessage2.formatEmailDate = (email) => {
400
+ const date = (0, GmailMessage2.extractReceivedDate)(email);
401
+ return date.toLocaleString();
402
+ };
403
+ GmailMessage2.getEmailSender = (email) => {
404
+ return (0, GmailMessage2.extractFromAddress)(email);
405
+ };
406
+ GmailMessage2.createNew = (messageId, threadId, payload, labelIds, snippet, internalDate) => {
407
+ return {
408
+ messageId,
409
+ threadId,
410
+ payload,
411
+ labelIds,
412
+ snippet,
413
+ internalDate,
414
+ createdAt: /* @__PURE__ */ new Date()
415
+ };
416
+ };
417
+ })(GmailMessage || (GmailMessage = {}));
343
418
  export {
344
419
  Agent,
345
420
  Application,
@@ -349,6 +424,7 @@ export {
349
424
  ClientData,
350
425
  ClientLogin,
351
426
  ClientQuestion,
427
+ GmailMessage,
352
428
  Vacancy,
353
429
  VacancySuggestion
354
430
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobsearch-works/firestore-models",
3
- "version": "1.0.30",
3
+ "version": "1.0.31",
4
4
  "description": "A shared library for standardizing Firestore document schemas and paths across multiple projects",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",