@_henriquewilson/gabirubi-domain 1.5.2 → 1.5.3

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.
@@ -27,9 +27,9 @@ declare const IuguChargeSchema: z.ZodObject<{
27
27
  pdf: string;
28
28
  invoice_id: string;
29
29
  LR: string;
30
- reversible?: string | null | undefined;
31
30
  brand?: string | null | undefined;
32
31
  bin?: string | null | undefined;
32
+ reversible?: string | null | undefined;
33
33
  last4?: string | null | undefined;
34
34
  issuer?: string | null | undefined;
35
35
  identification?: string | null | undefined;
@@ -44,9 +44,9 @@ declare const IuguChargeSchema: z.ZodObject<{
44
44
  pdf: string;
45
45
  invoice_id: string;
46
46
  LR: string;
47
- reversible?: string | null | undefined;
48
47
  brand?: string | null | undefined;
49
48
  bin?: string | null | undefined;
49
+ reversible?: string | null | undefined;
50
50
  last4?: string | null | undefined;
51
51
  issuer?: string | null | undefined;
52
52
  identification?: string | null | undefined;
@@ -27,9 +27,9 @@ declare const IuguChargeSchema: z.ZodObject<{
27
27
  pdf: string;
28
28
  invoice_id: string;
29
29
  LR: string;
30
- reversible?: string | null | undefined;
31
30
  brand?: string | null | undefined;
32
31
  bin?: string | null | undefined;
32
+ reversible?: string | null | undefined;
33
33
  last4?: string | null | undefined;
34
34
  issuer?: string | null | undefined;
35
35
  identification?: string | null | undefined;
@@ -44,9 +44,9 @@ declare const IuguChargeSchema: z.ZodObject<{
44
44
  pdf: string;
45
45
  invoice_id: string;
46
46
  LR: string;
47
- reversible?: string | null | undefined;
48
47
  brand?: string | null | undefined;
49
48
  bin?: string | null | undefined;
49
+ reversible?: string | null | undefined;
50
50
  last4?: string | null | undefined;
51
51
  issuer?: string | null | undefined;
52
52
  identification?: string | null | undefined;
@@ -12,9 +12,9 @@ declare const dataSchema: z.ZodObject<{
12
12
  masked_number: z.ZodString;
13
13
  }, "strip", z.ZodTypeAny, {
14
14
  brand: string;
15
- bin: string;
16
15
  holder_name: string;
17
16
  display_number: string;
17
+ bin: string;
18
18
  year: number;
19
19
  month: number;
20
20
  last_digits: string;
@@ -22,9 +22,9 @@ declare const dataSchema: z.ZodObject<{
22
22
  masked_number: string;
23
23
  }, {
24
24
  brand: string;
25
- bin: string;
26
25
  holder_name: string;
27
26
  display_number: string;
27
+ bin: string;
28
28
  year: number;
29
29
  month: number;
30
30
  last_digits: string;
@@ -47,9 +47,9 @@ declare const PaymentMethodSchema: z.ZodObject<{
47
47
  masked_number: z.ZodString;
48
48
  }, "strip", z.ZodTypeAny, {
49
49
  brand: string;
50
- bin: string;
51
50
  holder_name: string;
52
51
  display_number: string;
52
+ bin: string;
53
53
  year: number;
54
54
  month: number;
55
55
  last_digits: string;
@@ -57,9 +57,9 @@ declare const PaymentMethodSchema: z.ZodObject<{
57
57
  masked_number: string;
58
58
  }, {
59
59
  brand: string;
60
- bin: string;
61
60
  holder_name: string;
62
61
  display_number: string;
62
+ bin: string;
63
63
  year: number;
64
64
  month: number;
65
65
  last_digits: string;
@@ -72,9 +72,9 @@ declare const PaymentMethodSchema: z.ZodObject<{
72
72
  item_type: string;
73
73
  data: {
74
74
  brand: string;
75
- bin: string;
76
75
  holder_name: string;
77
76
  display_number: string;
77
+ bin: string;
78
78
  year: number;
79
79
  month: number;
80
80
  last_digits: string;
@@ -87,9 +87,9 @@ declare const PaymentMethodSchema: z.ZodObject<{
87
87
  item_type: string;
88
88
  data: {
89
89
  brand: string;
90
- bin: string;
91
90
  holder_name: string;
92
91
  display_number: string;
92
+ bin: string;
93
93
  year: number;
94
94
  month: number;
95
95
  last_digits: string;
@@ -139,9 +139,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
139
139
  masked_number: z.ZodString;
140
140
  }, "strip", z.ZodTypeAny, {
141
141
  brand: string;
142
- bin: string;
143
142
  holder_name: string;
144
143
  display_number: string;
144
+ bin: string;
145
145
  year: number;
146
146
  month: number;
147
147
  last_digits: string;
@@ -149,9 +149,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
149
149
  masked_number: string;
150
150
  }, {
151
151
  brand: string;
152
- bin: string;
153
152
  holder_name: string;
154
153
  display_number: string;
154
+ bin: string;
155
155
  year: number;
156
156
  month: number;
157
157
  last_digits: string;
@@ -164,9 +164,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
164
164
  item_type: string;
165
165
  data: {
166
166
  brand: string;
167
- bin: string;
168
167
  holder_name: string;
169
168
  display_number: string;
169
+ bin: string;
170
170
  year: number;
171
171
  month: number;
172
172
  last_digits: string;
@@ -179,9 +179,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
179
179
  item_type: string;
180
180
  data: {
181
181
  brand: string;
182
- bin: string;
183
182
  holder_name: string;
184
183
  display_number: string;
184
+ bin: string;
185
185
  year: number;
186
186
  month: number;
187
187
  last_digits: string;
@@ -216,9 +216,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
216
216
  item_type: string;
217
217
  data: {
218
218
  brand: string;
219
- bin: string;
220
219
  holder_name: string;
221
220
  display_number: string;
221
+ bin: string;
222
222
  year: number;
223
223
  month: number;
224
224
  last_digits: string;
@@ -253,9 +253,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
253
253
  item_type: string;
254
254
  data: {
255
255
  brand: string;
256
- bin: string;
257
256
  holder_name: string;
258
257
  display_number: string;
258
+ bin: string;
259
259
  year: number;
260
260
  month: number;
261
261
  last_digits: string;
@@ -12,9 +12,9 @@ declare const dataSchema: z.ZodObject<{
12
12
  masked_number: z.ZodString;
13
13
  }, "strip", z.ZodTypeAny, {
14
14
  brand: string;
15
- bin: string;
16
15
  holder_name: string;
17
16
  display_number: string;
17
+ bin: string;
18
18
  year: number;
19
19
  month: number;
20
20
  last_digits: string;
@@ -22,9 +22,9 @@ declare const dataSchema: z.ZodObject<{
22
22
  masked_number: string;
23
23
  }, {
24
24
  brand: string;
25
- bin: string;
26
25
  holder_name: string;
27
26
  display_number: string;
27
+ bin: string;
28
28
  year: number;
29
29
  month: number;
30
30
  last_digits: string;
@@ -47,9 +47,9 @@ declare const PaymentMethodSchema: z.ZodObject<{
47
47
  masked_number: z.ZodString;
48
48
  }, "strip", z.ZodTypeAny, {
49
49
  brand: string;
50
- bin: string;
51
50
  holder_name: string;
52
51
  display_number: string;
52
+ bin: string;
53
53
  year: number;
54
54
  month: number;
55
55
  last_digits: string;
@@ -57,9 +57,9 @@ declare const PaymentMethodSchema: z.ZodObject<{
57
57
  masked_number: string;
58
58
  }, {
59
59
  brand: string;
60
- bin: string;
61
60
  holder_name: string;
62
61
  display_number: string;
62
+ bin: string;
63
63
  year: number;
64
64
  month: number;
65
65
  last_digits: string;
@@ -72,9 +72,9 @@ declare const PaymentMethodSchema: z.ZodObject<{
72
72
  item_type: string;
73
73
  data: {
74
74
  brand: string;
75
- bin: string;
76
75
  holder_name: string;
77
76
  display_number: string;
77
+ bin: string;
78
78
  year: number;
79
79
  month: number;
80
80
  last_digits: string;
@@ -87,9 +87,9 @@ declare const PaymentMethodSchema: z.ZodObject<{
87
87
  item_type: string;
88
88
  data: {
89
89
  brand: string;
90
- bin: string;
91
90
  holder_name: string;
92
91
  display_number: string;
92
+ bin: string;
93
93
  year: number;
94
94
  month: number;
95
95
  last_digits: string;
@@ -139,9 +139,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
139
139
  masked_number: z.ZodString;
140
140
  }, "strip", z.ZodTypeAny, {
141
141
  brand: string;
142
- bin: string;
143
142
  holder_name: string;
144
143
  display_number: string;
144
+ bin: string;
145
145
  year: number;
146
146
  month: number;
147
147
  last_digits: string;
@@ -149,9 +149,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
149
149
  masked_number: string;
150
150
  }, {
151
151
  brand: string;
152
- bin: string;
153
152
  holder_name: string;
154
153
  display_number: string;
154
+ bin: string;
155
155
  year: number;
156
156
  month: number;
157
157
  last_digits: string;
@@ -164,9 +164,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
164
164
  item_type: string;
165
165
  data: {
166
166
  brand: string;
167
- bin: string;
168
167
  holder_name: string;
169
168
  display_number: string;
169
+ bin: string;
170
170
  year: number;
171
171
  month: number;
172
172
  last_digits: string;
@@ -179,9 +179,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
179
179
  item_type: string;
180
180
  data: {
181
181
  brand: string;
182
- bin: string;
183
182
  holder_name: string;
184
183
  display_number: string;
184
+ bin: string;
185
185
  year: number;
186
186
  month: number;
187
187
  last_digits: string;
@@ -216,9 +216,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
216
216
  item_type: string;
217
217
  data: {
218
218
  brand: string;
219
- bin: string;
220
219
  holder_name: string;
221
220
  display_number: string;
221
+ bin: string;
222
222
  year: number;
223
223
  month: number;
224
224
  last_digits: string;
@@ -253,9 +253,9 @@ declare const IuguClientSchema: z.ZodObject<z.objectUtil.extendShape<{
253
253
  item_type: string;
254
254
  data: {
255
255
  brand: string;
256
- bin: string;
257
256
  holder_name: string;
258
257
  display_number: string;
258
+ bin: string;
259
259
  year: number;
260
260
  month: number;
261
261
  last_digits: string;
@@ -519,6 +519,7 @@ declare const ChatSchema: z.ZodObject<z.objectUtil.extendShape<Omit<{
519
519
  senderId?: unknown;
520
520
  sentAt?: unknown;
521
521
  }>>;
522
+ isOpen: z.ZodDefault<z.ZodBoolean>;
522
523
  unreadCount: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
523
524
  isMuted: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
524
525
  isArchived: z.ZodDefault<z.ZodBoolean>;
@@ -539,6 +540,7 @@ declare const ChatSchema: z.ZodObject<z.objectUtil.extendShape<Omit<{
539
540
  joinedAt?: FirebaseFirestore.Timestamp | null | undefined;
540
541
  lastSeenAt?: FirebaseFirestore.Timestamp | null | undefined;
541
542
  }[];
543
+ isOpen: boolean;
542
544
  unreadCount: Record<string, number>;
543
545
  isMuted: Record<string, boolean>;
544
546
  isArchived: boolean;
@@ -593,6 +595,7 @@ declare const ChatSchema: z.ZodObject<z.objectUtil.extendShape<Omit<{
593
595
  senderId?: unknown;
594
596
  sentAt?: unknown;
595
597
  } | undefined;
598
+ isOpen?: boolean | undefined;
596
599
  unreadCount?: Record<string, number> | undefined;
597
600
  isMuted?: Record<string, boolean> | undefined;
598
601
  isArchived?: boolean | undefined;
@@ -680,6 +683,7 @@ declare const CreateChatSchema: z.ZodObject<Omit<z.objectUtil.extendShape<Omit<{
680
683
  senderId?: unknown;
681
684
  sentAt?: unknown;
682
685
  }>>;
686
+ isOpen: z.ZodDefault<z.ZodBoolean>;
683
687
  unreadCount: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
684
688
  isMuted: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
685
689
  isArchived: z.ZodDefault<z.ZodBoolean>;
@@ -699,6 +703,7 @@ declare const CreateChatSchema: z.ZodObject<Omit<z.objectUtil.extendShape<Omit<{
699
703
  joinedAt?: FirebaseFirestore.Timestamp | null | undefined;
700
704
  lastSeenAt?: FirebaseFirestore.Timestamp | null | undefined;
701
705
  }[];
706
+ isOpen: boolean;
702
707
  createdBy: string | number;
703
708
  photoURL?: string | undefined;
704
709
  name?: string | undefined;
@@ -721,6 +726,7 @@ declare const CreateChatSchema: z.ZodObject<Omit<z.objectUtil.extendShape<Omit<{
721
726
  photoURL?: string | undefined;
722
727
  name?: string | undefined;
723
728
  description?: string | undefined;
729
+ isOpen?: boolean | undefined;
724
730
  createdBy?: unknown;
725
731
  }>;
726
732
  type CreateChat = z.infer<typeof CreateChatSchema>;
@@ -857,6 +863,7 @@ declare const safeParseChat: (data: unknown) => z.SafeParseReturnType<{
857
863
  senderId?: unknown;
858
864
  sentAt?: unknown;
859
865
  } | undefined;
866
+ isOpen?: boolean | undefined;
860
867
  unreadCount?: Record<string, number> | undefined;
861
868
  isMuted?: Record<string, boolean> | undefined;
862
869
  isArchived?: boolean | undefined;
@@ -877,6 +884,7 @@ declare const safeParseChat: (data: unknown) => z.SafeParseReturnType<{
877
884
  joinedAt?: FirebaseFirestore.Timestamp | null | undefined;
878
885
  lastSeenAt?: FirebaseFirestore.Timestamp | null | undefined;
879
886
  }[];
887
+ isOpen: boolean;
880
888
  unreadCount: Record<string, number>;
881
889
  isMuted: Record<string, boolean>;
882
890
  isArchived: boolean;
@@ -952,6 +960,7 @@ declare const validateChat: (data: unknown) => {
952
960
  joinedAt?: FirebaseFirestore.Timestamp | null | undefined;
953
961
  lastSeenAt?: FirebaseFirestore.Timestamp | null | undefined;
954
962
  }[];
963
+ isOpen: boolean;
955
964
  unreadCount: Record<string, number>;
956
965
  isMuted: Record<string, boolean>;
957
966
  isArchived: boolean;
@@ -519,6 +519,7 @@ declare const ChatSchema: z.ZodObject<z.objectUtil.extendShape<Omit<{
519
519
  senderId?: unknown;
520
520
  sentAt?: unknown;
521
521
  }>>;
522
+ isOpen: z.ZodDefault<z.ZodBoolean>;
522
523
  unreadCount: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
523
524
  isMuted: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
524
525
  isArchived: z.ZodDefault<z.ZodBoolean>;
@@ -539,6 +540,7 @@ declare const ChatSchema: z.ZodObject<z.objectUtil.extendShape<Omit<{
539
540
  joinedAt?: FirebaseFirestore.Timestamp | null | undefined;
540
541
  lastSeenAt?: FirebaseFirestore.Timestamp | null | undefined;
541
542
  }[];
543
+ isOpen: boolean;
542
544
  unreadCount: Record<string, number>;
543
545
  isMuted: Record<string, boolean>;
544
546
  isArchived: boolean;
@@ -593,6 +595,7 @@ declare const ChatSchema: z.ZodObject<z.objectUtil.extendShape<Omit<{
593
595
  senderId?: unknown;
594
596
  sentAt?: unknown;
595
597
  } | undefined;
598
+ isOpen?: boolean | undefined;
596
599
  unreadCount?: Record<string, number> | undefined;
597
600
  isMuted?: Record<string, boolean> | undefined;
598
601
  isArchived?: boolean | undefined;
@@ -680,6 +683,7 @@ declare const CreateChatSchema: z.ZodObject<Omit<z.objectUtil.extendShape<Omit<{
680
683
  senderId?: unknown;
681
684
  sentAt?: unknown;
682
685
  }>>;
686
+ isOpen: z.ZodDefault<z.ZodBoolean>;
683
687
  unreadCount: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
684
688
  isMuted: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
685
689
  isArchived: z.ZodDefault<z.ZodBoolean>;
@@ -699,6 +703,7 @@ declare const CreateChatSchema: z.ZodObject<Omit<z.objectUtil.extendShape<Omit<{
699
703
  joinedAt?: FirebaseFirestore.Timestamp | null | undefined;
700
704
  lastSeenAt?: FirebaseFirestore.Timestamp | null | undefined;
701
705
  }[];
706
+ isOpen: boolean;
702
707
  createdBy: string | number;
703
708
  photoURL?: string | undefined;
704
709
  name?: string | undefined;
@@ -721,6 +726,7 @@ declare const CreateChatSchema: z.ZodObject<Omit<z.objectUtil.extendShape<Omit<{
721
726
  photoURL?: string | undefined;
722
727
  name?: string | undefined;
723
728
  description?: string | undefined;
729
+ isOpen?: boolean | undefined;
724
730
  createdBy?: unknown;
725
731
  }>;
726
732
  type CreateChat = z.infer<typeof CreateChatSchema>;
@@ -857,6 +863,7 @@ declare const safeParseChat: (data: unknown) => z.SafeParseReturnType<{
857
863
  senderId?: unknown;
858
864
  sentAt?: unknown;
859
865
  } | undefined;
866
+ isOpen?: boolean | undefined;
860
867
  unreadCount?: Record<string, number> | undefined;
861
868
  isMuted?: Record<string, boolean> | undefined;
862
869
  isArchived?: boolean | undefined;
@@ -877,6 +884,7 @@ declare const safeParseChat: (data: unknown) => z.SafeParseReturnType<{
877
884
  joinedAt?: FirebaseFirestore.Timestamp | null | undefined;
878
885
  lastSeenAt?: FirebaseFirestore.Timestamp | null | undefined;
879
886
  }[];
887
+ isOpen: boolean;
880
888
  unreadCount: Record<string, number>;
881
889
  isMuted: Record<string, boolean>;
882
890
  isArchived: boolean;
@@ -952,6 +960,7 @@ declare const validateChat: (data: unknown) => {
952
960
  joinedAt?: FirebaseFirestore.Timestamp | null | undefined;
953
961
  lastSeenAt?: FirebaseFirestore.Timestamp | null | undefined;
954
962
  }[];
963
+ isOpen: boolean;
955
964
  unreadCount: Record<string, number>;
956
965
  isMuted: Record<string, boolean>;
957
966
  isArchived: boolean;
@@ -234,13 +234,12 @@ var ChatSchema = ModelSchema.omit({
234
234
  }).extend({
235
235
  type: ChatTypeSchema,
236
236
  name: import_zod3.z.string().min(1).optional(),
237
- // obrigatório para grupos
238
237
  description: import_zod3.z.string().max(500).optional(),
239
238
  photoURL: import_zod3.z.string().url().optional(),
240
239
  participantIds: import_zod3.z.array(IdModelProcess).min(2).max(100),
241
240
  participants: import_zod3.z.array(ParticipantSchema),
242
241
  lastMessage: LastMessageSchema.optional(),
243
- // { [userId]: count } — quantas msgs não lidas por usuário
242
+ isOpen: import_zod3.z.boolean().default(true),
244
243
  unreadCount: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.number()).default({}),
245
244
  // { [userId]: true } — chats silenciados por usuário
246
245
  isMuted: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.boolean()).default({}),
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/henriquewilson/Developer/Projects/gabirubi-domain/dist/model/journey/chat.js","../../../src/model/journey/chat.ts","../../../src/model/shared.ts","../../../src/model.ts"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","chat_exports","AttachmentSchema","ChatSchema","ChatTypeSchema","CreateChatSchema","CreateMessageSchema","LastMessageSchema","MessageSchema","MessageStatusSchema","MessageTypeSchema","ParticipantSchema","ReplyToSchema","TypingIndicatorSchema","safeParseChat","safeParseMessage","validateChat","validateMessage","module","exports","import_zod","require","import_firestore","TimestampOrNow","z","preprocess","arg","Timestamp","now","custom","nullish","optional","import_cuid","generateFirestoreId","cuid","IdModelSchema","import_zod2","union","string","number","IdModelProcess","val","ModelSchema","object","id","createdAt","updatedAt","order","coerce","PreviousSchema","extend","previous","lazy","array","EnabledSchema","enabled","boolean","DocumentHistorySchema","description","import_zod3","enum","userId","displayName","min","photoURL","url","nullable","role","default","joinedAt","lastSeenAt","size","positive","mimeType","thumbnailUrl","messageId","senderId","senderName","content","max","type","omit","chatId","senderPhotoURL","attachment","status","readBy","replyTo","editedAt","deletedAt","sentAt","participantIds","participants","lastMessage","unreadCount","record","isMuted","isArchived","createdBy","startedAt","data","safeParse","parse"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/model/journey/chat.ts\nvar chat_exports = {};\n__export(chat_exports, {\n AttachmentSchema: () => AttachmentSchema,\n ChatSchema: () => ChatSchema,\n ChatTypeSchema: () => ChatTypeSchema,\n CreateChatSchema: () => CreateChatSchema,\n CreateMessageSchema: () => CreateMessageSchema,\n LastMessageSchema: () => LastMessageSchema,\n MessageSchema: () => MessageSchema,\n MessageStatusSchema: () => MessageStatusSchema,\n MessageTypeSchema: () => MessageTypeSchema,\n ParticipantSchema: () => ParticipantSchema,\n ReplyToSchema: () => ReplyToSchema,\n TypingIndicatorSchema: () => TypingIndicatorSchema,\n safeParseChat: () => safeParseChat,\n safeParseMessage: () => safeParseMessage,\n validateChat: () => validateChat,\n validateMessage: () => validateMessage\n});\nmodule.exports = __toCommonJS(chat_exports);\nvar import_zod3 = require(\"zod\");\n\n// src/model/shared.ts\nvar import_firestore = require(\"@google-cloud/firestore\");\nvar import_zod = require(\"zod\");\nvar TimestampOrNow = import_zod.z.preprocess(\n (arg) => arg === void 0 ? import_firestore.Timestamp.now() : arg,\n import_zod.z.custom()\n).nullish().optional();\n\n// src/model.ts\nvar import_zod2 = require(\"zod\");\nvar import_cuid = __toESM(require(\"cuid\"));\nvar generateFirestoreId = () => {\n return (0, import_cuid.default)();\n};\nvar IdModelSchema = import_zod2.z.union([import_zod2.z.string(), import_zod2.z.number()]);\nvar IdModelProcess = import_zod2.z.preprocess((val) => {\n if (val === void 0 || val === null) {\n return generateFirestoreId();\n }\n return val;\n}, IdModelSchema);\nvar ModelSchema = import_zod2.z.object({\n id: IdModelProcess,\n createdAt: TimestampOrNow,\n updatedAt: TimestampOrNow,\n order: import_zod2.z.coerce.number().nullish().optional()\n});\nvar PreviousSchema = ModelSchema.extend({\n previous: import_zod2.z.lazy(() => ModelSchema.array().optional())\n});\nvar EnabledSchema = import_zod2.z.object({\n enabled: import_zod2.z.boolean().optional()\n});\nvar DocumentHistorySchema = import_zod2.z.object({\n createdAt: TimestampOrNow,\n description: import_zod2.z.string().optional()\n});\n\n// src/model/journey/chat.ts\nvar MessageTypeSchema = import_zod3.z.enum([\"text\", \"image\", \"file\", \"audio\"]);\nvar ChatTypeSchema = import_zod3.z.enum([\"direct\", \"group\"]);\nvar MessageStatusSchema = import_zod3.z.enum([\"sending\", \"sent\", \"delivered\", \"read\", \"failed\"]);\nvar ParticipantSchema = ModelSchema.extend({\n userId: IdModelProcess,\n displayName: import_zod3.z.string().min(1),\n photoURL: import_zod3.z.string().url().nullable().optional(),\n role: import_zod3.z.enum([\"admin\", \"member\"]).default(\"member\"),\n joinedAt: TimestampOrNow,\n lastSeenAt: TimestampOrNow\n});\nvar AttachmentSchema = ModelSchema.extend({\n url: import_zod3.z.string().url(),\n name: import_zod3.z.string(),\n size: import_zod3.z.number().positive(),\n // bytes\n mimeType: import_zod3.z.string(),\n thumbnailUrl: import_zod3.z.string().url().optional()\n});\nvar ReplyToSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: import_zod3.z.string(),\n content: import_zod3.z.string().max(200),\n type: MessageTypeSchema\n});\nvar MessageSchema = ModelSchema.omit({ order: true }).extend({\n chatId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: import_zod3.z.string().min(1),\n senderPhotoURL: import_zod3.z.string().url().nullable().optional(),\n type: MessageTypeSchema,\n content: import_zod3.z.string().min(1).max(4e3),\n attachment: AttachmentSchema.optional(),\n status: MessageStatusSchema.default(\"sending\"),\n readBy: import_zod3.z.array(import_zod3.z.string()).default([]),\n // array de userIds\n replyTo: ReplyToSchema.optional(),\n editedAt: TimestampOrNow,\n deletedAt: TimestampOrNow\n});\nvar CreateMessageSchema = MessageSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n status: true,\n readBy: true,\n editedAt: true,\n deletedAt: true\n});\nvar LastMessageSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n content: import_zod3.z.string(),\n senderId: IdModelProcess,\n senderName: import_zod3.z.string(),\n type: MessageTypeSchema,\n sentAt: TimestampOrNow\n});\nvar ChatSchema = ModelSchema.omit({ order: true }).extend({\n type: ChatTypeSchema,\n name: import_zod3.z.string().min(1).optional(),\n // obrigatório para grupos\n description: import_zod3.z.string().max(500).optional(),\n photoURL: import_zod3.z.string().url().optional(),\n participantIds: import_zod3.z.array(IdModelProcess).min(2).max(100),\n participants: import_zod3.z.array(ParticipantSchema),\n lastMessage: LastMessageSchema.optional(),\n // { [userId]: count } — quantas msgs não lidas por usuário\n unreadCount: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.number()).default({}),\n // { [userId]: true } — chats silenciados por usuário\n isMuted: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.boolean()).default({}),\n isArchived: import_zod3.z.boolean().default(false),\n createdBy: IdModelProcess\n});\nvar CreateChatSchema = ChatSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n lastMessage: true,\n unreadCount: true,\n isMuted: true,\n isArchived: true\n});\nvar TypingIndicatorSchema = ModelSchema.extend({\n userId: import_zod3.z.string(),\n displayName: import_zod3.z.string(),\n startedAt: import_zod3.z.number()\n // Unix timestamp — RTDB não usa Timestamp do Firestore\n});\nvar safeParseMessage = (data) => MessageSchema.safeParse(data);\nvar safeParseChat = (data) => ChatSchema.safeParse(data);\nvar validateMessage = (data) => MessageSchema.parse(data);\nvar validateChat = (data) => ChatSchema.parse(data);\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n AttachmentSchema,\n ChatSchema,\n ChatTypeSchema,\n CreateChatSchema,\n CreateMessageSchema,\n LastMessageSchema,\n MessageSchema,\n MessageStatusSchema,\n MessageTypeSchema,\n ParticipantSchema,\n ReplyToSchema,\n TypingIndicatorSchema,\n safeParseChat,\n safeParseMessage,\n validateChat,\n validateMessage\n});\n","import { z } from \"zod\";\nimport {TimestampOrNow} from \"../shared\";\nimport {IdModelProcess, ModelSchema} from \"../../model\";\n\n// ─────────────────────────────────────────────\n// Enums\n// ─────────────────────────────────────────────\n\nexport const MessageTypeSchema = z.enum([\"text\", \"image\", \"file\", \"audio\"]);\nexport type MessageType = z.infer<typeof MessageTypeSchema>;\n\nexport const ChatTypeSchema = z.enum([\"direct\", \"group\"]);\nexport type ChatType = z.infer<typeof ChatTypeSchema>;\n\nexport const MessageStatusSchema = z.enum([\"sending\", \"sent\", \"delivered\", \"read\", \"failed\"]);\nexport type MessageStatus = z.infer<typeof MessageStatusSchema>;\n\n// ─────────────────────────────────────────────\n// Participant\n// Não estende ModelSchema pois é sub-documento (não tem coleção própria)\n// ─────────────────────────────────────────────\n\nexport const ParticipantSchema = ModelSchema.extend({\n userId: IdModelProcess,\n displayName: z.string().min(1),\n photoURL: z.string().url().nullable().optional(),\n role: z.enum([\"admin\", \"member\"]).default(\"member\"),\n joinedAt: TimestampOrNow,\n lastSeenAt: TimestampOrNow,\n});\nexport type Participant = z.infer<typeof ParticipantSchema>;\n\n// ─────────────────────────────────────────────\n// Attachment\n// Sub-documento, sem id próprio\n// ─────────────────────────────────────────────\n\nexport const AttachmentSchema = ModelSchema.extend({\n url: z.string().url(),\n name: z.string(),\n size: z.number().positive(), // bytes\n mimeType: z.string(),\n thumbnailUrl: z.string().url().optional(),\n});\nexport type Attachment = z.infer<typeof AttachmentSchema>;\n\n// ─────────────────────────────────────────────\n// ReplyTo\n// Snapshot da mensagem original (evita lookup extra)\n// ─────────────────────────────────────────────\n\nexport const ReplyToSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z.string(),\n content: z.string().max(200),\n type: MessageTypeSchema,\n});\nexport type ReplyTo = z.infer<typeof ReplyToSchema>;\n\n// ─────────────────────────────────────────────\n// Message\n// Estende ModelSchema — herda id, createdAt, updatedAt, order\n// ─────────────────────────────────────────────\n\nexport const MessageSchema = ModelSchema.omit({ order: true }).extend({\n chatId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z.string().min(1),\n senderPhotoURL: z.string().url().nullable().optional(),\n\n type: MessageTypeSchema,\n content: z.string().min(1).max(4000),\n\n attachment: AttachmentSchema.optional(),\n\n status: MessageStatusSchema.default(\"sending\"),\n readBy: z.array(z.string()).default([]), // array de userIds\n\n replyTo: ReplyToSchema.optional(),\n\n editedAt: TimestampOrNow,\n deletedAt: TimestampOrNow,\n});\nexport type Message = z.infer<typeof MessageSchema>;\n\n// Para criar — omite campos gerados automaticamente pelo ModelSchema/servidor\nexport const CreateMessageSchema = MessageSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n status: true,\n readBy: true,\n editedAt: true,\n deletedAt: true,\n});\nexport type CreateMessage = z.infer<typeof CreateMessageSchema>;\n\n// ─────────────────────────────────────────────\n// LastMessage\n// Snapshot da última mensagem para preview na lista de chats\n// ─────────────────────────────────────────────\n\nexport const LastMessageSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n content: z.string(),\n senderId: IdModelProcess,\n senderName: z.string(),\n type: MessageTypeSchema,\n sentAt: TimestampOrNow,\n});\nexport type LastMessage = z.infer<typeof LastMessageSchema>;\n\n// ─────────────────────────────────────────────\n// Chat\n// Estende ModelSchema — herda id, createdAt, updatedAt, order\n// ─────────────────────────────────────────────\n\nexport const ChatSchema = ModelSchema.omit({ order: true }).extend({\n type: ChatTypeSchema,\n name: z.string().min(1).optional(), // obrigatório para grupos\n description: z.string().max(500).optional(),\n photoURL: z.string().url().optional(),\n\n participantIds: z.array(IdModelProcess).min(2).max(100),\n participants: z.array(ParticipantSchema),\n\n lastMessage: LastMessageSchema.optional(),\n\n // { [userId]: count } — quantas msgs não lidas por usuário\n unreadCount: z.record(z.string(), z.number()).default({}),\n\n // { [userId]: true } — chats silenciados por usuário\n isMuted: z.record(z.string(), z.boolean()).default({}),\n\n isArchived: z.boolean().default(false),\n\n createdBy: IdModelProcess,\n});\nexport type Chat = z.infer<typeof ChatSchema>;\n\nexport const CreateChatSchema = ChatSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n lastMessage: true,\n unreadCount: true,\n isMuted: true,\n isArchived: true,\n});\nexport type CreateChat = z.infer<typeof CreateChatSchema>;\n\n// ─────────────────────────────────────────────\n// Typing Indicator\n// Persistido no Realtime Database (não no Firestore)\n// Não usa ModelSchema pois não é documento Firestore\n// ─────────────────────────────────────────────\n\nexport const TypingIndicatorSchema = ModelSchema.extend({\n userId: z.string(),\n displayName: z.string(),\n startedAt: z.number(), // Unix timestamp — RTDB não usa Timestamp do Firestore\n});\nexport type TypingIndicator = z.infer<typeof TypingIndicatorSchema>;\n\n// ─────────────────────────────────────────────\n// Helpers de validação\n// ─────────────────────────────────────────────\n\nexport const safeParseMessage = (data: unknown) => MessageSchema.safeParse(data);\nexport const safeParseChat = (data: unknown) => ChatSchema.safeParse(data);\nexport const validateMessage = (data: unknown) => MessageSchema.parse(data);\nexport const validateChat = (data: unknown) => ChatSchema.parse(data);\n","import { Timestamp } from '@google-cloud/firestore';\nimport {z} from \"zod\";\n\nexport const TimestampOrNow = z\n .preprocess(\n (arg) => (arg === undefined ? Timestamp.now() : arg),\n z.custom<Timestamp>(),\n )\n .nullish().optional();\n","import {z} from \"zod\";\nimport {TimestampOrNow} from \"./model/shared\";\nimport cuid from 'cuid';\n\nexport const generateFirestoreId = () => {\n return cuid();\n}\n\nexport const IdModelSchema = z.union([z.string(), z.number()])\n\nexport const IdModelProcess = z.preprocess((val) => {\n if (val === undefined || val === null) {\n return generateFirestoreId();\n }\n return val;\n}, IdModelSchema);\n\nexport const ModelSchema = z.object({\n id: IdModelProcess,\n createdAt: TimestampOrNow,\n updatedAt: TimestampOrNow,\n order: z.coerce.number().nullish().optional()\n});\n\nexport const PreviousSchema = ModelSchema.extend({\n previous: z.lazy(() => ModelSchema.array().optional())\n})\n\nexport const EnabledSchema = z.object({\n enabled: z.boolean().optional()\n})\n\nexport const DocumentHistorySchema = z.object({\n createdAt: TimestampOrNow,\n description: z.string().optional(),\n})\n\nexport type IdModel = z.infer<typeof IdModelSchema>;\nexport type Model = z.infer<typeof ModelSchema>;\nexport type Previous = z.infer<typeof PreviousSchema>;\nexport type Enabled = z.infer<typeof EnabledSchema>;\nexport type PartialWithId<T extends Model> = Partial<T> & {\n id: NonNullable<T['id']>\n}\n\n\n"]}
1
+ {"version":3,"sources":["/Users/henriquewilson/Developer/Projects/gabirubi-domain/dist/model/journey/chat.js","../../../src/model/journey/chat.ts","../../../src/model/shared.ts","../../../src/model.ts"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","chat_exports","AttachmentSchema","ChatSchema","ChatTypeSchema","CreateChatSchema","CreateMessageSchema","LastMessageSchema","MessageSchema","MessageStatusSchema","MessageTypeSchema","ParticipantSchema","ReplyToSchema","TypingIndicatorSchema","safeParseChat","safeParseMessage","validateChat","validateMessage","module","exports","import_zod","require","import_firestore","TimestampOrNow","z","preprocess","arg","Timestamp","now","custom","nullish","optional","import_cuid","generateFirestoreId","cuid","IdModelSchema","import_zod2","union","string","number","IdModelProcess","val","ModelSchema","object","id","createdAt","updatedAt","order","coerce","PreviousSchema","extend","previous","lazy","array","EnabledSchema","enabled","boolean","DocumentHistorySchema","description","import_zod3","enum","userId","displayName","min","photoURL","url","nullable","role","default","joinedAt","lastSeenAt","size","positive","mimeType","thumbnailUrl","messageId","senderId","senderName","content","max","type","omit","chatId","senderPhotoURL","attachment","status","readBy","replyTo","editedAt","deletedAt","sentAt","participantIds","participants","lastMessage","isOpen","unreadCount","record","isMuted","isArchived","createdBy","startedAt","data","safeParse","parse"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/model/journey/chat.ts\nvar chat_exports = {};\n__export(chat_exports, {\n AttachmentSchema: () => AttachmentSchema,\n ChatSchema: () => ChatSchema,\n ChatTypeSchema: () => ChatTypeSchema,\n CreateChatSchema: () => CreateChatSchema,\n CreateMessageSchema: () => CreateMessageSchema,\n LastMessageSchema: () => LastMessageSchema,\n MessageSchema: () => MessageSchema,\n MessageStatusSchema: () => MessageStatusSchema,\n MessageTypeSchema: () => MessageTypeSchema,\n ParticipantSchema: () => ParticipantSchema,\n ReplyToSchema: () => ReplyToSchema,\n TypingIndicatorSchema: () => TypingIndicatorSchema,\n safeParseChat: () => safeParseChat,\n safeParseMessage: () => safeParseMessage,\n validateChat: () => validateChat,\n validateMessage: () => validateMessage\n});\nmodule.exports = __toCommonJS(chat_exports);\nvar import_zod3 = require(\"zod\");\n\n// src/model/shared.ts\nvar import_firestore = require(\"@google-cloud/firestore\");\nvar import_zod = require(\"zod\");\nvar TimestampOrNow = import_zod.z.preprocess(\n (arg) => arg === void 0 ? import_firestore.Timestamp.now() : arg,\n import_zod.z.custom()\n).nullish().optional();\n\n// src/model.ts\nvar import_zod2 = require(\"zod\");\nvar import_cuid = __toESM(require(\"cuid\"));\nvar generateFirestoreId = () => {\n return (0, import_cuid.default)();\n};\nvar IdModelSchema = import_zod2.z.union([import_zod2.z.string(), import_zod2.z.number()]);\nvar IdModelProcess = import_zod2.z.preprocess((val) => {\n if (val === void 0 || val === null) {\n return generateFirestoreId();\n }\n return val;\n}, IdModelSchema);\nvar ModelSchema = import_zod2.z.object({\n id: IdModelProcess,\n createdAt: TimestampOrNow,\n updatedAt: TimestampOrNow,\n order: import_zod2.z.coerce.number().nullish().optional()\n});\nvar PreviousSchema = ModelSchema.extend({\n previous: import_zod2.z.lazy(() => ModelSchema.array().optional())\n});\nvar EnabledSchema = import_zod2.z.object({\n enabled: import_zod2.z.boolean().optional()\n});\nvar DocumentHistorySchema = import_zod2.z.object({\n createdAt: TimestampOrNow,\n description: import_zod2.z.string().optional()\n});\n\n// src/model/journey/chat.ts\nvar MessageTypeSchema = import_zod3.z.enum([\"text\", \"image\", \"file\", \"audio\"]);\nvar ChatTypeSchema = import_zod3.z.enum([\"direct\", \"group\"]);\nvar MessageStatusSchema = import_zod3.z.enum([\"sending\", \"sent\", \"delivered\", \"read\", \"failed\"]);\nvar ParticipantSchema = ModelSchema.extend({\n userId: IdModelProcess,\n displayName: import_zod3.z.string().min(1),\n photoURL: import_zod3.z.string().url().nullable().optional(),\n role: import_zod3.z.enum([\"admin\", \"member\"]).default(\"member\"),\n joinedAt: TimestampOrNow,\n lastSeenAt: TimestampOrNow\n});\nvar AttachmentSchema = ModelSchema.extend({\n url: import_zod3.z.string().url(),\n name: import_zod3.z.string(),\n size: import_zod3.z.number().positive(),\n // bytes\n mimeType: import_zod3.z.string(),\n thumbnailUrl: import_zod3.z.string().url().optional()\n});\nvar ReplyToSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: import_zod3.z.string(),\n content: import_zod3.z.string().max(200),\n type: MessageTypeSchema\n});\nvar MessageSchema = ModelSchema.omit({ order: true }).extend({\n chatId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: import_zod3.z.string().min(1),\n senderPhotoURL: import_zod3.z.string().url().nullable().optional(),\n type: MessageTypeSchema,\n content: import_zod3.z.string().min(1).max(4e3),\n attachment: AttachmentSchema.optional(),\n status: MessageStatusSchema.default(\"sending\"),\n readBy: import_zod3.z.array(import_zod3.z.string()).default([]),\n // array de userIds\n replyTo: ReplyToSchema.optional(),\n editedAt: TimestampOrNow,\n deletedAt: TimestampOrNow\n});\nvar CreateMessageSchema = MessageSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n status: true,\n readBy: true,\n editedAt: true,\n deletedAt: true\n});\nvar LastMessageSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n content: import_zod3.z.string(),\n senderId: IdModelProcess,\n senderName: import_zod3.z.string(),\n type: MessageTypeSchema,\n sentAt: TimestampOrNow\n});\nvar ChatSchema = ModelSchema.omit({ order: true }).extend({\n type: ChatTypeSchema,\n name: import_zod3.z.string().min(1).optional(),\n description: import_zod3.z.string().max(500).optional(),\n photoURL: import_zod3.z.string().url().optional(),\n participantIds: import_zod3.z.array(IdModelProcess).min(2).max(100),\n participants: import_zod3.z.array(ParticipantSchema),\n lastMessage: LastMessageSchema.optional(),\n isOpen: import_zod3.z.boolean().default(true),\n unreadCount: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.number()).default({}),\n // { [userId]: true } — chats silenciados por usuário\n isMuted: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.boolean()).default({}),\n isArchived: import_zod3.z.boolean().default(false),\n createdBy: IdModelProcess\n});\nvar CreateChatSchema = ChatSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n lastMessage: true,\n unreadCount: true,\n isMuted: true,\n isArchived: true\n});\nvar TypingIndicatorSchema = ModelSchema.extend({\n userId: import_zod3.z.string(),\n displayName: import_zod3.z.string(),\n startedAt: import_zod3.z.number()\n // Unix timestamp — RTDB não usa Timestamp do Firestore\n});\nvar safeParseMessage = (data) => MessageSchema.safeParse(data);\nvar safeParseChat = (data) => ChatSchema.safeParse(data);\nvar validateMessage = (data) => MessageSchema.parse(data);\nvar validateChat = (data) => ChatSchema.parse(data);\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n AttachmentSchema,\n ChatSchema,\n ChatTypeSchema,\n CreateChatSchema,\n CreateMessageSchema,\n LastMessageSchema,\n MessageSchema,\n MessageStatusSchema,\n MessageTypeSchema,\n ParticipantSchema,\n ReplyToSchema,\n TypingIndicatorSchema,\n safeParseChat,\n safeParseMessage,\n validateChat,\n validateMessage\n});\n","import { z } from \"zod\";\nimport {TimestampOrNow} from \"../shared\";\nimport {IdModelProcess, ModelSchema} from \"../../model\";\n\n// ─────────────────────────────────────────────\n// Enums\n// ─────────────────────────────────────────────\n\nexport const MessageTypeSchema = z.enum([\"text\", \"image\", \"file\", \"audio\"]);\nexport type MessageType = z.infer<typeof MessageTypeSchema>;\n\nexport const ChatTypeSchema = z.enum([\"direct\", \"group\"]);\nexport type ChatType = z.infer<typeof ChatTypeSchema>;\n\nexport const MessageStatusSchema = z.enum([\"sending\", \"sent\", \"delivered\", \"read\", \"failed\"]);\nexport type MessageStatus = z.infer<typeof MessageStatusSchema>;\n\n// ─────────────────────────────────────────────\n// Participant\n// Não estende ModelSchema pois é sub-documento (não tem coleção própria)\n// ─────────────────────────────────────────────\n\nexport const ParticipantSchema = ModelSchema.extend({\n userId: IdModelProcess,\n displayName: z.string().min(1),\n photoURL: z.string().url().nullable().optional(),\n role: z.enum([\"admin\", \"member\"]).default(\"member\"),\n joinedAt: TimestampOrNow,\n lastSeenAt: TimestampOrNow,\n});\nexport type Participant = z.infer<typeof ParticipantSchema>;\n\n// ─────────────────────────────────────────────\n// Attachment\n// Sub-documento, sem id próprio\n// ─────────────────────────────────────────────\n\nexport const AttachmentSchema = ModelSchema.extend({\n url: z.string().url(),\n name: z.string(),\n size: z.number().positive(), // bytes\n mimeType: z.string(),\n thumbnailUrl: z.string().url().optional(),\n});\nexport type Attachment = z.infer<typeof AttachmentSchema>;\n\n// ─────────────────────────────────────────────\n// ReplyTo\n// Snapshot da mensagem original (evita lookup extra)\n// ─────────────────────────────────────────────\n\nexport const ReplyToSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z.string(),\n content: z.string().max(200),\n type: MessageTypeSchema,\n});\nexport type ReplyTo = z.infer<typeof ReplyToSchema>;\n\n// ─────────────────────────────────────────────\n// Message\n// Estende ModelSchema — herda id, createdAt, updatedAt, order\n// ─────────────────────────────────────────────\n\nexport const MessageSchema = ModelSchema.omit({ order: true }).extend({\n chatId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z.string().min(1),\n senderPhotoURL: z.string().url().nullable().optional(),\n\n type: MessageTypeSchema,\n content: z.string().min(1).max(4000),\n\n attachment: AttachmentSchema.optional(),\n\n status: MessageStatusSchema.default(\"sending\"),\n readBy: z.array(z.string()).default([]), // array de userIds\n\n replyTo: ReplyToSchema.optional(),\n\n editedAt: TimestampOrNow,\n deletedAt: TimestampOrNow,\n});\nexport type Message = z.infer<typeof MessageSchema>;\n\n// Para criar — omite campos gerados automaticamente pelo ModelSchema/servidor\nexport const CreateMessageSchema = MessageSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n status: true,\n readBy: true,\n editedAt: true,\n deletedAt: true,\n});\nexport type CreateMessage = z.infer<typeof CreateMessageSchema>;\n\n// ─────────────────────────────────────────────\n// LastMessage\n// Snapshot da última mensagem para preview na lista de chats\n// ─────────────────────────────────────────────\n\nexport const LastMessageSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n content: z.string(),\n senderId: IdModelProcess,\n senderName: z.string(),\n type: MessageTypeSchema,\n sentAt: TimestampOrNow,\n});\nexport type LastMessage = z.infer<typeof LastMessageSchema>;\n\n// ─────────────────────────────────────────────\n// Chat\n// Estende ModelSchema — herda id, createdAt, updatedAt, order\n// ─────────────────────────────────────────────\n\nexport const ChatSchema = ModelSchema.omit({ order: true }).extend({\n type: ChatTypeSchema,\n name: z.string().min(1).optional(),\n description: z.string().max(500).optional(),\n photoURL: z.string().url().optional(),\n\n participantIds: z.array(IdModelProcess).min(2).max(100),\n participants: z.array(ParticipantSchema),\n\n lastMessage: LastMessageSchema.optional(),\n\n isOpen: z.boolean().default(true),\n unreadCount: z.record(z.string(), z.number()).default({}),\n\n // { [userId]: true } — chats silenciados por usuário\n isMuted: z.record(z.string(), z.boolean()).default({}),\n\n isArchived: z.boolean().default(false),\n\n createdBy: IdModelProcess,\n});\nexport type Chat = z.infer<typeof ChatSchema>;\n\nexport const CreateChatSchema = ChatSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n lastMessage: true,\n unreadCount: true,\n isMuted: true,\n isArchived: true,\n});\nexport type CreateChat = z.infer<typeof CreateChatSchema>;\n\n// ─────────────────────────────────────────────\n// Typing Indicator\n// Persistido no Realtime Database (não no Firestore)\n// Não usa ModelSchema pois não é documento Firestore\n// ─────────────────────────────────────────────\n\nexport const TypingIndicatorSchema = ModelSchema.extend({\n userId: z.string(),\n displayName: z.string(),\n startedAt: z.number(), // Unix timestamp — RTDB não usa Timestamp do Firestore\n});\nexport type TypingIndicator = z.infer<typeof TypingIndicatorSchema>;\n\n// ─────────────────────────────────────────────\n// Helpers de validação\n// ─────────────────────────────────────────────\n\nexport const safeParseMessage = (data: unknown) => MessageSchema.safeParse(data);\nexport const safeParseChat = (data: unknown) => ChatSchema.safeParse(data);\nexport const validateMessage = (data: unknown) => MessageSchema.parse(data);\nexport const validateChat = (data: unknown) => ChatSchema.parse(data);\n","import { Timestamp } from '@google-cloud/firestore';\nimport {z} from \"zod\";\n\nexport const TimestampOrNow = z\n .preprocess(\n (arg) => (arg === undefined ? Timestamp.now() : arg),\n z.custom<Timestamp>(),\n )\n .nullish().optional();\n","import {z} from \"zod\";\nimport {TimestampOrNow} from \"./model/shared\";\nimport cuid from 'cuid';\n\nexport const generateFirestoreId = () => {\n return cuid();\n}\n\nexport const IdModelSchema = z.union([z.string(), z.number()])\n\nexport const IdModelProcess = z.preprocess((val) => {\n if (val === undefined || val === null) {\n return generateFirestoreId();\n }\n return val;\n}, IdModelSchema);\n\nexport const ModelSchema = z.object({\n id: IdModelProcess,\n createdAt: TimestampOrNow,\n updatedAt: TimestampOrNow,\n order: z.coerce.number().nullish().optional()\n});\n\nexport const PreviousSchema = ModelSchema.extend({\n previous: z.lazy(() => ModelSchema.array().optional())\n})\n\nexport const EnabledSchema = z.object({\n enabled: z.boolean().optional()\n})\n\nexport const DocumentHistorySchema = z.object({\n createdAt: TimestampOrNow,\n description: z.string().optional(),\n})\n\nexport type IdModel = z.infer<typeof IdModelSchema>;\nexport type Model = z.infer<typeof ModelSchema>;\nexport type Previous = z.infer<typeof PreviousSchema>;\nexport type Enabled = z.infer<typeof EnabledSchema>;\nexport type PartialWithId<T extends Model> = Partial<T> & {\n id: NonNullable<T['id']>\n}\n\n\n"]}
@@ -123,13 +123,12 @@ var ChatSchema = ModelSchema.omit({
123
123
  }).extend({
124
124
  type: ChatTypeSchema,
125
125
  name: z3.string().min(1).optional(),
126
- // obrigatório para grupos
127
126
  description: z3.string().max(500).optional(),
128
127
  photoURL: z3.string().url().optional(),
129
128
  participantIds: z3.array(IdModelProcess).min(2).max(100),
130
129
  participants: z3.array(ParticipantSchema),
131
130
  lastMessage: LastMessageSchema.optional(),
132
- // { [userId]: count } — quantas msgs não lidas por usuário
131
+ isOpen: z3.boolean().default(true),
133
132
  unreadCount: z3.record(z3.string(), z3.number()).default({}),
134
133
  // { [userId]: true } — chats silenciados por usuário
135
134
  isMuted: z3.record(z3.string(), z3.boolean()).default({}),
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/henriquewilson/Developer/Projects/gabirubi-domain/dist/model/journey/chat.mjs","../../../src/model/journey/chat.ts","../../../src/model/shared.ts","../../../src/model.ts"],"names":["z","Timestamp","TimestampOrNow","preprocess","arg","now","custom","nullish","optional","cuid","generateFirestoreId","IdModelSchema","union","string","number","IdModelProcess","val","ModelSchema","object","id","createdAt","updatedAt","order","coerce","PreviousSchema","extend","previous","lazy","array","EnabledSchema","enabled","boolean","DocumentHistorySchema","description","MessageTypeSchema","enum","ChatTypeSchema","MessageStatusSchema","ParticipantSchema","userId","displayName","min","photoURL","url","nullable","role","default","joinedAt","lastSeenAt","AttachmentSchema","name","size","positive","mimeType","thumbnailUrl","ReplyToSchema","messageId","senderId","senderName","content","max","type","MessageSchema","omit","chatId","senderPhotoURL","attachment","status","readBy","replyTo","editedAt","deletedAt","CreateMessageSchema","LastMessageSchema","sentAt","ChatSchema","participantIds","participants","lastMessage","unreadCount","record","isMuted","isArchived","createdBy","CreateChatSchema","TypingIndicatorSchema","startedAt","safeParseMessage","data","safeParse","safeParseChat","validateMessage","parse","validateChat"],"mappings":"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","sourcesContent":["// src/model/journey/chat.ts\nimport { z as z3 } from \"zod\";\n\n// src/model/shared.ts\nimport { Timestamp } from \"@google-cloud/firestore\";\nimport { z } from \"zod\";\nvar TimestampOrNow = z.preprocess(\n (arg) => arg === void 0 ? Timestamp.now() : arg,\n z.custom()\n).nullish().optional();\n\n// src/model.ts\nimport { z as z2 } from \"zod\";\nimport cuid from \"cuid\";\nvar generateFirestoreId = () => {\n return cuid();\n};\nvar IdModelSchema = z2.union([z2.string(), z2.number()]);\nvar IdModelProcess = z2.preprocess((val) => {\n if (val === void 0 || val === null) {\n return generateFirestoreId();\n }\n return val;\n}, IdModelSchema);\nvar ModelSchema = z2.object({\n id: IdModelProcess,\n createdAt: TimestampOrNow,\n updatedAt: TimestampOrNow,\n order: z2.coerce.number().nullish().optional()\n});\nvar PreviousSchema = ModelSchema.extend({\n previous: z2.lazy(() => ModelSchema.array().optional())\n});\nvar EnabledSchema = z2.object({\n enabled: z2.boolean().optional()\n});\nvar DocumentHistorySchema = z2.object({\n createdAt: TimestampOrNow,\n description: z2.string().optional()\n});\n\n// src/model/journey/chat.ts\nvar MessageTypeSchema = z3.enum([\"text\", \"image\", \"file\", \"audio\"]);\nvar ChatTypeSchema = z3.enum([\"direct\", \"group\"]);\nvar MessageStatusSchema = z3.enum([\"sending\", \"sent\", \"delivered\", \"read\", \"failed\"]);\nvar ParticipantSchema = ModelSchema.extend({\n userId: IdModelProcess,\n displayName: z3.string().min(1),\n photoURL: z3.string().url().nullable().optional(),\n role: z3.enum([\"admin\", \"member\"]).default(\"member\"),\n joinedAt: TimestampOrNow,\n lastSeenAt: TimestampOrNow\n});\nvar AttachmentSchema = ModelSchema.extend({\n url: z3.string().url(),\n name: z3.string(),\n size: z3.number().positive(),\n // bytes\n mimeType: z3.string(),\n thumbnailUrl: z3.string().url().optional()\n});\nvar ReplyToSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z3.string(),\n content: z3.string().max(200),\n type: MessageTypeSchema\n});\nvar MessageSchema = ModelSchema.omit({ order: true }).extend({\n chatId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z3.string().min(1),\n senderPhotoURL: z3.string().url().nullable().optional(),\n type: MessageTypeSchema,\n content: z3.string().min(1).max(4e3),\n attachment: AttachmentSchema.optional(),\n status: MessageStatusSchema.default(\"sending\"),\n readBy: z3.array(z3.string()).default([]),\n // array de userIds\n replyTo: ReplyToSchema.optional(),\n editedAt: TimestampOrNow,\n deletedAt: TimestampOrNow\n});\nvar CreateMessageSchema = MessageSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n status: true,\n readBy: true,\n editedAt: true,\n deletedAt: true\n});\nvar LastMessageSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n content: z3.string(),\n senderId: IdModelProcess,\n senderName: z3.string(),\n type: MessageTypeSchema,\n sentAt: TimestampOrNow\n});\nvar ChatSchema = ModelSchema.omit({ order: true }).extend({\n type: ChatTypeSchema,\n name: z3.string().min(1).optional(),\n // obrigatório para grupos\n description: z3.string().max(500).optional(),\n photoURL: z3.string().url().optional(),\n participantIds: z3.array(IdModelProcess).min(2).max(100),\n participants: z3.array(ParticipantSchema),\n lastMessage: LastMessageSchema.optional(),\n // { [userId]: count } — quantas msgs não lidas por usuário\n unreadCount: z3.record(z3.string(), z3.number()).default({}),\n // { [userId]: true } — chats silenciados por usuário\n isMuted: z3.record(z3.string(), z3.boolean()).default({}),\n isArchived: z3.boolean().default(false),\n createdBy: IdModelProcess\n});\nvar CreateChatSchema = ChatSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n lastMessage: true,\n unreadCount: true,\n isMuted: true,\n isArchived: true\n});\nvar TypingIndicatorSchema = ModelSchema.extend({\n userId: z3.string(),\n displayName: z3.string(),\n startedAt: z3.number()\n // Unix timestamp — RTDB não usa Timestamp do Firestore\n});\nvar safeParseMessage = (data) => MessageSchema.safeParse(data);\nvar safeParseChat = (data) => ChatSchema.safeParse(data);\nvar validateMessage = (data) => MessageSchema.parse(data);\nvar validateChat = (data) => ChatSchema.parse(data);\nexport {\n AttachmentSchema,\n ChatSchema,\n ChatTypeSchema,\n CreateChatSchema,\n CreateMessageSchema,\n LastMessageSchema,\n MessageSchema,\n MessageStatusSchema,\n MessageTypeSchema,\n ParticipantSchema,\n ReplyToSchema,\n TypingIndicatorSchema,\n safeParseChat,\n safeParseMessage,\n validateChat,\n validateMessage\n};\n","import { z } from \"zod\";\nimport {TimestampOrNow} from \"../shared\";\nimport {IdModelProcess, ModelSchema} from \"../../model\";\n\n// ─────────────────────────────────────────────\n// Enums\n// ─────────────────────────────────────────────\n\nexport const MessageTypeSchema = z.enum([\"text\", \"image\", \"file\", \"audio\"]);\nexport type MessageType = z.infer<typeof MessageTypeSchema>;\n\nexport const ChatTypeSchema = z.enum([\"direct\", \"group\"]);\nexport type ChatType = z.infer<typeof ChatTypeSchema>;\n\nexport const MessageStatusSchema = z.enum([\"sending\", \"sent\", \"delivered\", \"read\", \"failed\"]);\nexport type MessageStatus = z.infer<typeof MessageStatusSchema>;\n\n// ─────────────────────────────────────────────\n// Participant\n// Não estende ModelSchema pois é sub-documento (não tem coleção própria)\n// ─────────────────────────────────────────────\n\nexport const ParticipantSchema = ModelSchema.extend({\n userId: IdModelProcess,\n displayName: z.string().min(1),\n photoURL: z.string().url().nullable().optional(),\n role: z.enum([\"admin\", \"member\"]).default(\"member\"),\n joinedAt: TimestampOrNow,\n lastSeenAt: TimestampOrNow,\n});\nexport type Participant = z.infer<typeof ParticipantSchema>;\n\n// ─────────────────────────────────────────────\n// Attachment\n// Sub-documento, sem id próprio\n// ─────────────────────────────────────────────\n\nexport const AttachmentSchema = ModelSchema.extend({\n url: z.string().url(),\n name: z.string(),\n size: z.number().positive(), // bytes\n mimeType: z.string(),\n thumbnailUrl: z.string().url().optional(),\n});\nexport type Attachment = z.infer<typeof AttachmentSchema>;\n\n// ─────────────────────────────────────────────\n// ReplyTo\n// Snapshot da mensagem original (evita lookup extra)\n// ─────────────────────────────────────────────\n\nexport const ReplyToSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z.string(),\n content: z.string().max(200),\n type: MessageTypeSchema,\n});\nexport type ReplyTo = z.infer<typeof ReplyToSchema>;\n\n// ─────────────────────────────────────────────\n// Message\n// Estende ModelSchema — herda id, createdAt, updatedAt, order\n// ─────────────────────────────────────────────\n\nexport const MessageSchema = ModelSchema.omit({ order: true }).extend({\n chatId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z.string().min(1),\n senderPhotoURL: z.string().url().nullable().optional(),\n\n type: MessageTypeSchema,\n content: z.string().min(1).max(4000),\n\n attachment: AttachmentSchema.optional(),\n\n status: MessageStatusSchema.default(\"sending\"),\n readBy: z.array(z.string()).default([]), // array de userIds\n\n replyTo: ReplyToSchema.optional(),\n\n editedAt: TimestampOrNow,\n deletedAt: TimestampOrNow,\n});\nexport type Message = z.infer<typeof MessageSchema>;\n\n// Para criar — omite campos gerados automaticamente pelo ModelSchema/servidor\nexport const CreateMessageSchema = MessageSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n status: true,\n readBy: true,\n editedAt: true,\n deletedAt: true,\n});\nexport type CreateMessage = z.infer<typeof CreateMessageSchema>;\n\n// ─────────────────────────────────────────────\n// LastMessage\n// Snapshot da última mensagem para preview na lista de chats\n// ─────────────────────────────────────────────\n\nexport const LastMessageSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n content: z.string(),\n senderId: IdModelProcess,\n senderName: z.string(),\n type: MessageTypeSchema,\n sentAt: TimestampOrNow,\n});\nexport type LastMessage = z.infer<typeof LastMessageSchema>;\n\n// ─────────────────────────────────────────────\n// Chat\n// Estende ModelSchema — herda id, createdAt, updatedAt, order\n// ─────────────────────────────────────────────\n\nexport const ChatSchema = ModelSchema.omit({ order: true }).extend({\n type: ChatTypeSchema,\n name: z.string().min(1).optional(), // obrigatório para grupos\n description: z.string().max(500).optional(),\n photoURL: z.string().url().optional(),\n\n participantIds: z.array(IdModelProcess).min(2).max(100),\n participants: z.array(ParticipantSchema),\n\n lastMessage: LastMessageSchema.optional(),\n\n // { [userId]: count } — quantas msgs não lidas por usuário\n unreadCount: z.record(z.string(), z.number()).default({}),\n\n // { [userId]: true } — chats silenciados por usuário\n isMuted: z.record(z.string(), z.boolean()).default({}),\n\n isArchived: z.boolean().default(false),\n\n createdBy: IdModelProcess,\n});\nexport type Chat = z.infer<typeof ChatSchema>;\n\nexport const CreateChatSchema = ChatSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n lastMessage: true,\n unreadCount: true,\n isMuted: true,\n isArchived: true,\n});\nexport type CreateChat = z.infer<typeof CreateChatSchema>;\n\n// ─────────────────────────────────────────────\n// Typing Indicator\n// Persistido no Realtime Database (não no Firestore)\n// Não usa ModelSchema pois não é documento Firestore\n// ─────────────────────────────────────────────\n\nexport const TypingIndicatorSchema = ModelSchema.extend({\n userId: z.string(),\n displayName: z.string(),\n startedAt: z.number(), // Unix timestamp — RTDB não usa Timestamp do Firestore\n});\nexport type TypingIndicator = z.infer<typeof TypingIndicatorSchema>;\n\n// ─────────────────────────────────────────────\n// Helpers de validação\n// ─────────────────────────────────────────────\n\nexport const safeParseMessage = (data: unknown) => MessageSchema.safeParse(data);\nexport const safeParseChat = (data: unknown) => ChatSchema.safeParse(data);\nexport const validateMessage = (data: unknown) => MessageSchema.parse(data);\nexport const validateChat = (data: unknown) => ChatSchema.parse(data);\n","import { Timestamp } from '@google-cloud/firestore';\nimport {z} from \"zod\";\n\nexport const TimestampOrNow = z\n .preprocess(\n (arg) => (arg === undefined ? Timestamp.now() : arg),\n z.custom<Timestamp>(),\n )\n .nullish().optional();\n","import {z} from \"zod\";\nimport {TimestampOrNow} from \"./model/shared\";\nimport cuid from 'cuid';\n\nexport const generateFirestoreId = () => {\n return cuid();\n}\n\nexport const IdModelSchema = z.union([z.string(), z.number()])\n\nexport const IdModelProcess = z.preprocess((val) => {\n if (val === undefined || val === null) {\n return generateFirestoreId();\n }\n return val;\n}, IdModelSchema);\n\nexport const ModelSchema = z.object({\n id: IdModelProcess,\n createdAt: TimestampOrNow,\n updatedAt: TimestampOrNow,\n order: z.coerce.number().nullish().optional()\n});\n\nexport const PreviousSchema = ModelSchema.extend({\n previous: z.lazy(() => ModelSchema.array().optional())\n})\n\nexport const EnabledSchema = z.object({\n enabled: z.boolean().optional()\n})\n\nexport const DocumentHistorySchema = z.object({\n createdAt: TimestampOrNow,\n description: z.string().optional(),\n})\n\nexport type IdModel = z.infer<typeof IdModelSchema>;\nexport type Model = z.infer<typeof ModelSchema>;\nexport type Previous = z.infer<typeof PreviousSchema>;\nexport type Enabled = z.infer<typeof EnabledSchema>;\nexport type PartialWithId<T extends Model> = Partial<T> & {\n id: NonNullable<T['id']>\n}\n\n\n"]}
1
+ {"version":3,"sources":["/Users/henriquewilson/Developer/Projects/gabirubi-domain/dist/model/journey/chat.mjs","../../../src/model/journey/chat.ts","../../../src/model/shared.ts","../../../src/model.ts"],"names":["z","Timestamp","TimestampOrNow","preprocess","arg","now","custom","nullish","optional","cuid","generateFirestoreId","IdModelSchema","union","string","number","IdModelProcess","val","ModelSchema","object","id","createdAt","updatedAt","order","coerce","PreviousSchema","extend","previous","lazy","array","EnabledSchema","enabled","boolean","DocumentHistorySchema","description","MessageTypeSchema","enum","ChatTypeSchema","MessageStatusSchema","ParticipantSchema","userId","displayName","min","photoURL","url","nullable","role","default","joinedAt","lastSeenAt","AttachmentSchema","name","size","positive","mimeType","thumbnailUrl","ReplyToSchema","messageId","senderId","senderName","content","max","type","MessageSchema","omit","chatId","senderPhotoURL","attachment","status","readBy","replyTo","editedAt","deletedAt","CreateMessageSchema","LastMessageSchema","sentAt","ChatSchema","participantIds","participants","lastMessage","isOpen","unreadCount","record","isMuted","isArchived","createdBy","CreateChatSchema","TypingIndicatorSchema","startedAt","safeParseMessage","data","safeParse","safeParseChat","validateMessage","parse","validateChat"],"mappings":"AAAA,4BAA4B;ACA5B,SAASA,KAAAA,EAAAA,QAAS,MAAA;ADGlB,sBAAsB;AEHtB,SAASC,SAAA,QAAiB,0BAAA;AAC1B,SAAQD,CAAA,QAAQ,MAAA;AAET,IAAME,iBAAiBF,EAC3BG,UAAA,CACC,SAACC;WAASA,QAAQ,KAAA,IAAYH,UAAUI,GAAA,KAAQD;GAChDJ,EAAEM,MAAA,IAEHC,OAAA,GAAUC,QAAA;AFGb,eAAe;AGXf,SAAQR,KAAAA,EAAAA,QAAQ,MAAA;AAEhB,OAAOS,UAAU,OAAA;AAEV,IAAMC,sBAAsB;IACjC,OAAOD;AACT;AAEO,IAAME,gBAAgBX,GAAEY,KAAA,CAAM;IAACZ,GAAEa,MAAA;IAAUb,GAAEc,MAAA;CAAS;AAEtD,IAAMC,iBAAiBf,GAAEG,UAAA,CAAW,SAACa;IAC1C,IAAIA,QAAQ,KAAA,KAAaA,QAAQ,MAAM;QACrC,OAAON;IACT;IACA,OAAOM;AACT,GAAGL;AAEI,IAAMM,cAAcjB,GAAEkB,MAAA,CAAO;IAClCC,IAAIJ;IACJK,WAAWlB;IACXmB,WAAWnB;IACXoB,OAAOtB,GAAEuB,MAAA,CAAOT,MAAA,GAASP,OAAA,GAAUC,QAAA;AACrC;AAEO,IAAMgB,iBAAiBP,YAAYQ,MAAA,CAAO;IAC/CC,UAAU1B,GAAE2B,IAAA,CAAK;eAAMV,YAAYW,KAAA,GAAQpB,QAAA;;AAC7C;AAEO,IAAMqB,gBAAgB7B,GAAEkB,MAAA,CAAO;IACpCY,SAAS9B,GAAE+B,OAAA,GAAUvB,QAAA;AACvB;AAEO,IAAMwB,wBAAwBhC,GAAEkB,MAAA,CAAO;IAC5CE,WAAWlB;IACX+B,aAAajC,GAAEa,MAAA,GAASL,QAAA;AAC1B;AHMA,4BAA4B;ACjCrB,IAAM0B,oBAAoBlC,GAAEmC,IAAA,CAAK;IAAC;IAAQ;IAAS;IAAQ;CAAQ;AAGnE,IAAMC,iBAAiBpC,GAAEmC,IAAA,CAAK;IAAC;IAAU;CAAQ;AAGjD,IAAME,sBAAsBrC,GAAEmC,IAAA,CAAK;IAAC;IAAW;IAAQ;IAAa;IAAQ;CAAS;AAQrF,IAAMG,oBAAoBrB,YAAYQ,MAAA,CAAO;IAClDc,QAAQxB;IACRyB,aAAaxC,GAAEa,MAAA,GAAS4B,GAAA,CAAI;IAC5BC,UAAU1C,GAAEa,MAAA,GAAS8B,GAAA,GAAMC,QAAA,GAAWpC,QAAA;IACtCqC,MAAM7C,GAAEmC,IAAA,CAAK;QAAC;QAAS;KAAS,EAAEW,OAAA,CAAQ;IAC1CC,UAAU7C;IACV8C,YAAY9C;AACd;AAQO,IAAM+C,mBAAmBhC,YAAYQ,MAAA,CAAO;IACjDkB,KAAK3C,GAAEa,MAAA,GAAS8B,GAAA;IAChBO,MAAMlD,GAAEa,MAAA;IACRsC,MAAMnD,GAAEc,MAAA,GAASsC,QAAA;IAAS,QAAA;IAC1BC,UAAUrD,GAAEa,MAAA;IACZyC,cAActD,GAAEa,MAAA,GAAS8B,GAAA,GAAMnC,QAAA;AACjC;AAQO,IAAM+C,gBAAgBtC,YAAYQ,MAAA,CAAO;IAC9C+B,WAAWzC;IACX0C,UAAU1C;IACV2C,YAAY1D,GAAEa,MAAA;IACd8C,SAAS3D,GAAEa,MAAA,GAAS+C,GAAA,CAAI;IACxBC,MAAM3B;AACR;AAQO,IAAM4B,gBAAgB7C,YAAY8C,IAAA,CAAK;IAAEzC,OAAO;AAAK,GAAGG,MAAA,CAAO;IACpEuC,QAAQjD;IACR0C,UAAU1C;IACV2C,YAAY1D,GAAEa,MAAA,GAAS4B,GAAA,CAAI;IAC3BwB,gBAAgBjE,GAAEa,MAAA,GAAS8B,GAAA,GAAMC,QAAA,GAAWpC,QAAA;IAE5CqD,MAAM3B;IACNyB,SAAS3D,GAAEa,MAAA,GAAS4B,GAAA,CAAI,GAAGmB,GAAA,CAAI;IAE/BM,YAAYjB,iBAAiBzC,QAAA;IAE7B2D,QAAQ9B,oBAAoBS,OAAA,CAAQ;IACpCsB,QAAQpE,GAAE4B,KAAA,CAAM5B,GAAEa,MAAA,IAAUiC,OAAA,CAAQ,EAAE;IAAA,mBAAA;IAEtCuB,SAASd,cAAc/C,QAAA;IAEvB8D,UAAUpE;IACVqE,WAAWrE;AACb;AAIO,IAAMsE,sBAAsBV,cAAcC,IAAA,CAAK;IACpD5C,IAAI;IACJC,WAAW;IACXC,WAAW;IACX8C,QAAQ;IACRC,QAAQ;IACRE,UAAU;IACVC,WAAW;AACb;AAQO,IAAME,oBAAoBxD,YAAYQ,MAAA,CAAO;IAClD+B,WAAWzC;IACX4C,SAAS3D,GAAEa,MAAA;IACX4C,UAAU1C;IACV2C,YAAY1D,GAAEa,MAAA;IACdgD,MAAM3B;IACNwC,QAAQxE;AACV;AAQO,IAAMyE,aAAa1D,YAAY8C,IAAA,CAAK;IAAEzC,OAAO;AAAK,GAAGG,MAAA,CAAO;IACjEoC,MAAMzB;IACNc,MAAMlD,GAAEa,MAAA,GAAS4B,GAAA,CAAI,GAAGjC,QAAA;IACxByB,aAAajC,GAAEa,MAAA,GAAS+C,GAAA,CAAI,KAAKpD,QAAA;IACjCkC,UAAU1C,GAAEa,MAAA,GAAS8B,GAAA,GAAMnC,QAAA;IAE3BoE,gBAAgB5E,GAAE4B,KAAA,CAAMb,gBAAgB0B,GAAA,CAAI,GAAGmB,GAAA,CAAI;IACnDiB,cAAc7E,GAAE4B,KAAA,CAAMU;IAEtBwC,aAAaL,kBAAkBjE,QAAA;IAE/BuE,QAAQ/E,GAAE+B,OAAA,GAAUe,OAAA,CAAQ;IAC5BkC,aAAahF,GAAEiF,MAAA,CAAOjF,GAAEa,MAAA,IAAUb,GAAEc,MAAA,IAAUgC,OAAA,CAAQ,CAAC;IAAC,qDAAA;IAGxDoC,SAASlF,GAAEiF,MAAA,CAAOjF,GAAEa,MAAA,IAAUb,GAAE+B,OAAA,IAAWe,OAAA,CAAQ,CAAC;IAEpDqC,YAAYnF,GAAE+B,OAAA,GAAUe,OAAA,CAAQ;IAEhCsC,WAAWrE;AACb;AAGO,IAAMsE,mBAAmBV,WAAWZ,IAAA,CAAK;IAC9C5C,IAAI;IACJC,WAAW;IACXC,WAAW;IACXyD,aAAa;IACbE,aAAa;IACbE,SAAS;IACTC,YAAY;AACd;AASO,IAAMG,wBAAwBrE,YAAYQ,MAAA,CAAO;IACtDc,QAAQvC,GAAEa,MAAA;IACV2B,aAAaxC,GAAEa,MAAA;IACf0E,WAAWvF,GAAEc,MAAA;AACf;AAOO,IAAM0E,mBAAmB,SAACC;WAAkB3B,cAAc4B,SAAA,CAAUD;;AACpE,IAAME,gBAAmB,SAACF;WAAkBd,WAAWe,SAAA,CAAUD;;AACjE,IAAMG,kBAAmB,SAACH;WAAkB3B,cAAc+B,KAAA,CAAMJ;;AAChE,IAAMK,eAAmB,SAACL;WAAkBd,WAAWkB,KAAA,CAAMJ;;ADtCpE,SACExC,gBAAgB,EAChB0B,UAAU,EACVvC,cAAc,EACdiD,gBAAgB,EAChBb,mBAAmB,EACnBC,iBAAiB,EACjBX,aAAa,EACbzB,mBAAmB,EACnBH,iBAAiB,EACjBI,iBAAiB,EACjBiB,aAAa,EACb+B,qBAAqB,EACrBK,aAAa,EACbH,gBAAgB,EAChBM,YAAY,EACZF,eAAe,GACf","sourcesContent":["// src/model/journey/chat.ts\nimport { z as z3 } from \"zod\";\n\n// src/model/shared.ts\nimport { Timestamp } from \"@google-cloud/firestore\";\nimport { z } from \"zod\";\nvar TimestampOrNow = z.preprocess(\n (arg) => arg === void 0 ? Timestamp.now() : arg,\n z.custom()\n).nullish().optional();\n\n// src/model.ts\nimport { z as z2 } from \"zod\";\nimport cuid from \"cuid\";\nvar generateFirestoreId = () => {\n return cuid();\n};\nvar IdModelSchema = z2.union([z2.string(), z2.number()]);\nvar IdModelProcess = z2.preprocess((val) => {\n if (val === void 0 || val === null) {\n return generateFirestoreId();\n }\n return val;\n}, IdModelSchema);\nvar ModelSchema = z2.object({\n id: IdModelProcess,\n createdAt: TimestampOrNow,\n updatedAt: TimestampOrNow,\n order: z2.coerce.number().nullish().optional()\n});\nvar PreviousSchema = ModelSchema.extend({\n previous: z2.lazy(() => ModelSchema.array().optional())\n});\nvar EnabledSchema = z2.object({\n enabled: z2.boolean().optional()\n});\nvar DocumentHistorySchema = z2.object({\n createdAt: TimestampOrNow,\n description: z2.string().optional()\n});\n\n// src/model/journey/chat.ts\nvar MessageTypeSchema = z3.enum([\"text\", \"image\", \"file\", \"audio\"]);\nvar ChatTypeSchema = z3.enum([\"direct\", \"group\"]);\nvar MessageStatusSchema = z3.enum([\"sending\", \"sent\", \"delivered\", \"read\", \"failed\"]);\nvar ParticipantSchema = ModelSchema.extend({\n userId: IdModelProcess,\n displayName: z3.string().min(1),\n photoURL: z3.string().url().nullable().optional(),\n role: z3.enum([\"admin\", \"member\"]).default(\"member\"),\n joinedAt: TimestampOrNow,\n lastSeenAt: TimestampOrNow\n});\nvar AttachmentSchema = ModelSchema.extend({\n url: z3.string().url(),\n name: z3.string(),\n size: z3.number().positive(),\n // bytes\n mimeType: z3.string(),\n thumbnailUrl: z3.string().url().optional()\n});\nvar ReplyToSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z3.string(),\n content: z3.string().max(200),\n type: MessageTypeSchema\n});\nvar MessageSchema = ModelSchema.omit({ order: true }).extend({\n chatId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z3.string().min(1),\n senderPhotoURL: z3.string().url().nullable().optional(),\n type: MessageTypeSchema,\n content: z3.string().min(1).max(4e3),\n attachment: AttachmentSchema.optional(),\n status: MessageStatusSchema.default(\"sending\"),\n readBy: z3.array(z3.string()).default([]),\n // array de userIds\n replyTo: ReplyToSchema.optional(),\n editedAt: TimestampOrNow,\n deletedAt: TimestampOrNow\n});\nvar CreateMessageSchema = MessageSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n status: true,\n readBy: true,\n editedAt: true,\n deletedAt: true\n});\nvar LastMessageSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n content: z3.string(),\n senderId: IdModelProcess,\n senderName: z3.string(),\n type: MessageTypeSchema,\n sentAt: TimestampOrNow\n});\nvar ChatSchema = ModelSchema.omit({ order: true }).extend({\n type: ChatTypeSchema,\n name: z3.string().min(1).optional(),\n description: z3.string().max(500).optional(),\n photoURL: z3.string().url().optional(),\n participantIds: z3.array(IdModelProcess).min(2).max(100),\n participants: z3.array(ParticipantSchema),\n lastMessage: LastMessageSchema.optional(),\n isOpen: z3.boolean().default(true),\n unreadCount: z3.record(z3.string(), z3.number()).default({}),\n // { [userId]: true } — chats silenciados por usuário\n isMuted: z3.record(z3.string(), z3.boolean()).default({}),\n isArchived: z3.boolean().default(false),\n createdBy: IdModelProcess\n});\nvar CreateChatSchema = ChatSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n lastMessage: true,\n unreadCount: true,\n isMuted: true,\n isArchived: true\n});\nvar TypingIndicatorSchema = ModelSchema.extend({\n userId: z3.string(),\n displayName: z3.string(),\n startedAt: z3.number()\n // Unix timestamp — RTDB não usa Timestamp do Firestore\n});\nvar safeParseMessage = (data) => MessageSchema.safeParse(data);\nvar safeParseChat = (data) => ChatSchema.safeParse(data);\nvar validateMessage = (data) => MessageSchema.parse(data);\nvar validateChat = (data) => ChatSchema.parse(data);\nexport {\n AttachmentSchema,\n ChatSchema,\n ChatTypeSchema,\n CreateChatSchema,\n CreateMessageSchema,\n LastMessageSchema,\n MessageSchema,\n MessageStatusSchema,\n MessageTypeSchema,\n ParticipantSchema,\n ReplyToSchema,\n TypingIndicatorSchema,\n safeParseChat,\n safeParseMessage,\n validateChat,\n validateMessage\n};\n","import { z } from \"zod\";\nimport {TimestampOrNow} from \"../shared\";\nimport {IdModelProcess, ModelSchema} from \"../../model\";\n\n// ─────────────────────────────────────────────\n// Enums\n// ─────────────────────────────────────────────\n\nexport const MessageTypeSchema = z.enum([\"text\", \"image\", \"file\", \"audio\"]);\nexport type MessageType = z.infer<typeof MessageTypeSchema>;\n\nexport const ChatTypeSchema = z.enum([\"direct\", \"group\"]);\nexport type ChatType = z.infer<typeof ChatTypeSchema>;\n\nexport const MessageStatusSchema = z.enum([\"sending\", \"sent\", \"delivered\", \"read\", \"failed\"]);\nexport type MessageStatus = z.infer<typeof MessageStatusSchema>;\n\n// ─────────────────────────────────────────────\n// Participant\n// Não estende ModelSchema pois é sub-documento (não tem coleção própria)\n// ─────────────────────────────────────────────\n\nexport const ParticipantSchema = ModelSchema.extend({\n userId: IdModelProcess,\n displayName: z.string().min(1),\n photoURL: z.string().url().nullable().optional(),\n role: z.enum([\"admin\", \"member\"]).default(\"member\"),\n joinedAt: TimestampOrNow,\n lastSeenAt: TimestampOrNow,\n});\nexport type Participant = z.infer<typeof ParticipantSchema>;\n\n// ─────────────────────────────────────────────\n// Attachment\n// Sub-documento, sem id próprio\n// ─────────────────────────────────────────────\n\nexport const AttachmentSchema = ModelSchema.extend({\n url: z.string().url(),\n name: z.string(),\n size: z.number().positive(), // bytes\n mimeType: z.string(),\n thumbnailUrl: z.string().url().optional(),\n});\nexport type Attachment = z.infer<typeof AttachmentSchema>;\n\n// ─────────────────────────────────────────────\n// ReplyTo\n// Snapshot da mensagem original (evita lookup extra)\n// ─────────────────────────────────────────────\n\nexport const ReplyToSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z.string(),\n content: z.string().max(200),\n type: MessageTypeSchema,\n});\nexport type ReplyTo = z.infer<typeof ReplyToSchema>;\n\n// ─────────────────────────────────────────────\n// Message\n// Estende ModelSchema — herda id, createdAt, updatedAt, order\n// ─────────────────────────────────────────────\n\nexport const MessageSchema = ModelSchema.omit({ order: true }).extend({\n chatId: IdModelProcess,\n senderId: IdModelProcess,\n senderName: z.string().min(1),\n senderPhotoURL: z.string().url().nullable().optional(),\n\n type: MessageTypeSchema,\n content: z.string().min(1).max(4000),\n\n attachment: AttachmentSchema.optional(),\n\n status: MessageStatusSchema.default(\"sending\"),\n readBy: z.array(z.string()).default([]), // array de userIds\n\n replyTo: ReplyToSchema.optional(),\n\n editedAt: TimestampOrNow,\n deletedAt: TimestampOrNow,\n});\nexport type Message = z.infer<typeof MessageSchema>;\n\n// Para criar — omite campos gerados automaticamente pelo ModelSchema/servidor\nexport const CreateMessageSchema = MessageSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n status: true,\n readBy: true,\n editedAt: true,\n deletedAt: true,\n});\nexport type CreateMessage = z.infer<typeof CreateMessageSchema>;\n\n// ─────────────────────────────────────────────\n// LastMessage\n// Snapshot da última mensagem para preview na lista de chats\n// ─────────────────────────────────────────────\n\nexport const LastMessageSchema = ModelSchema.extend({\n messageId: IdModelProcess,\n content: z.string(),\n senderId: IdModelProcess,\n senderName: z.string(),\n type: MessageTypeSchema,\n sentAt: TimestampOrNow,\n});\nexport type LastMessage = z.infer<typeof LastMessageSchema>;\n\n// ─────────────────────────────────────────────\n// Chat\n// Estende ModelSchema — herda id, createdAt, updatedAt, order\n// ─────────────────────────────────────────────\n\nexport const ChatSchema = ModelSchema.omit({ order: true }).extend({\n type: ChatTypeSchema,\n name: z.string().min(1).optional(),\n description: z.string().max(500).optional(),\n photoURL: z.string().url().optional(),\n\n participantIds: z.array(IdModelProcess).min(2).max(100),\n participants: z.array(ParticipantSchema),\n\n lastMessage: LastMessageSchema.optional(),\n\n isOpen: z.boolean().default(true),\n unreadCount: z.record(z.string(), z.number()).default({}),\n\n // { [userId]: true } — chats silenciados por usuário\n isMuted: z.record(z.string(), z.boolean()).default({}),\n\n isArchived: z.boolean().default(false),\n\n createdBy: IdModelProcess,\n});\nexport type Chat = z.infer<typeof ChatSchema>;\n\nexport const CreateChatSchema = ChatSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n lastMessage: true,\n unreadCount: true,\n isMuted: true,\n isArchived: true,\n});\nexport type CreateChat = z.infer<typeof CreateChatSchema>;\n\n// ─────────────────────────────────────────────\n// Typing Indicator\n// Persistido no Realtime Database (não no Firestore)\n// Não usa ModelSchema pois não é documento Firestore\n// ─────────────────────────────────────────────\n\nexport const TypingIndicatorSchema = ModelSchema.extend({\n userId: z.string(),\n displayName: z.string(),\n startedAt: z.number(), // Unix timestamp — RTDB não usa Timestamp do Firestore\n});\nexport type TypingIndicator = z.infer<typeof TypingIndicatorSchema>;\n\n// ─────────────────────────────────────────────\n// Helpers de validação\n// ─────────────────────────────────────────────\n\nexport const safeParseMessage = (data: unknown) => MessageSchema.safeParse(data);\nexport const safeParseChat = (data: unknown) => ChatSchema.safeParse(data);\nexport const validateMessage = (data: unknown) => MessageSchema.parse(data);\nexport const validateChat = (data: unknown) => ChatSchema.parse(data);\n","import { Timestamp } from '@google-cloud/firestore';\nimport {z} from \"zod\";\n\nexport const TimestampOrNow = z\n .preprocess(\n (arg) => (arg === undefined ? Timestamp.now() : arg),\n z.custom<Timestamp>(),\n )\n .nullish().optional();\n","import {z} from \"zod\";\nimport {TimestampOrNow} from \"./model/shared\";\nimport cuid from 'cuid';\n\nexport const generateFirestoreId = () => {\n return cuid();\n}\n\nexport const IdModelSchema = z.union([z.string(), z.number()])\n\nexport const IdModelProcess = z.preprocess((val) => {\n if (val === undefined || val === null) {\n return generateFirestoreId();\n }\n return val;\n}, IdModelSchema);\n\nexport const ModelSchema = z.object({\n id: IdModelProcess,\n createdAt: TimestampOrNow,\n updatedAt: TimestampOrNow,\n order: z.coerce.number().nullish().optional()\n});\n\nexport const PreviousSchema = ModelSchema.extend({\n previous: z.lazy(() => ModelSchema.array().optional())\n})\n\nexport const EnabledSchema = z.object({\n enabled: z.boolean().optional()\n})\n\nexport const DocumentHistorySchema = z.object({\n createdAt: TimestampOrNow,\n description: z.string().optional(),\n})\n\nexport type IdModel = z.infer<typeof IdModelSchema>;\nexport type Model = z.infer<typeof ModelSchema>;\nexport type Previous = z.infer<typeof PreviousSchema>;\nexport type Enabled = z.infer<typeof EnabledSchema>;\nexport type PartialWithId<T extends Model> = Partial<T> & {\n id: NonNullable<T['id']>\n}\n\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@_henriquewilson/gabirubi-domain",
3
- "version": "1.5.2",
3
+ "version": "1.5.3",
4
4
  "description": "gabirubi domain",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",