@organizasyon/meeting-nanaman-app-backend 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/controllers/auth/index.d.ts +65 -0
  2. package/dist/controllers/auth/index.js +525 -0
  3. package/dist/controllers/employees/index.d.ts +38 -0
  4. package/dist/controllers/employees/index.js +185 -0
  5. package/dist/controllers/health/index.d.ts +9 -0
  6. package/dist/controllers/health/index.js +42 -0
  7. package/dist/controllers/index.d.ts +16 -0
  8. package/dist/controllers/index.js +19 -0
  9. package/dist/controllers/meetings/index.d.ts +23 -0
  10. package/dist/controllers/meetings/index.js +233 -0
  11. package/dist/controllers/modules/index.d.ts +5 -0
  12. package/dist/controllers/modules/index.js +104 -0
  13. package/dist/controllers/users/index.d.ts +103 -0
  14. package/dist/controllers/users/index.js +841 -0
  15. package/dist/data/modules.json +94 -0
  16. package/dist/database/config/index.d.ts +2 -0
  17. package/dist/database/config/index.js +32 -0
  18. package/dist/database/index.d.ts +9 -0
  19. package/dist/database/index.js +9 -0
  20. package/dist/database/seeder/employees/index.d.ts +1 -0
  21. package/dist/database/seeder/employees/index.js +40 -0
  22. package/dist/database/seeder/index.d.ts +4 -0
  23. package/dist/database/seeder/index.js +20 -0
  24. package/dist/database/seeder/users/index.d.ts +1 -0
  25. package/dist/database/seeder/users/index.js +46 -0
  26. package/dist/index.d.ts +9 -0
  27. package/dist/index.js +23 -0
  28. package/dist/jobs/index.d.ts +1 -0
  29. package/dist/jobs/index.js +18 -0
  30. package/dist/jobs/mailer/index.d.ts +4 -0
  31. package/dist/jobs/mailer/index.js +186 -0
  32. package/dist/jobs/mailer/templates/auth.d.ts +11 -0
  33. package/dist/jobs/mailer/templates/auth.js +117 -0
  34. package/dist/jobs/mailer/templates/index.d.ts +1 -0
  35. package/dist/jobs/mailer/templates/index.js +17 -0
  36. package/dist/jobs/queues/index.d.ts +3 -0
  37. package/dist/jobs/queues/index.js +115 -0
  38. package/dist/middlewares/audit/index.d.ts +0 -0
  39. package/dist/middlewares/audit/index.js +1 -0
  40. package/dist/middlewares/guard/index.d.ts +11 -0
  41. package/dist/middlewares/guard/index.js +53 -0
  42. package/dist/middlewares/index.d.ts +2 -0
  43. package/dist/middlewares/index.js +7 -0
  44. package/dist/middlewares/meeting.d.ts +9 -0
  45. package/dist/middlewares/meeting.js +34 -0
  46. package/dist/models/employees/index.d.ts +83 -0
  47. package/dist/models/employees/index.js +70 -0
  48. package/dist/models/index.d.ts +570 -0
  49. package/dist/models/index.js +17 -0
  50. package/dist/models/meetings/index.d.ts +227 -0
  51. package/dist/models/meetings/index.js +112 -0
  52. package/dist/models/passkeys/index.d.ts +77 -0
  53. package/dist/models/passkeys/index.js +55 -0
  54. package/dist/models/queues/index.d.ts +77 -0
  55. package/dist/models/queues/index.js +57 -0
  56. package/dist/models/users/index.d.ts +107 -0
  57. package/dist/models/users/index.js +92 -0
  58. package/dist/queues/index.d.ts +1 -0
  59. package/dist/queues/index.js +17 -0
  60. package/dist/queues/mailer/index.d.ts +4 -0
  61. package/dist/queues/mailer/index.js +74 -0
  62. package/dist/types/index.d.ts +33 -0
  63. package/dist/types/index.js +2 -0
  64. package/dist/utils/notifications.d.ts +2 -0
  65. package/dist/utils/notifications.js +51 -0
  66. package/package.json +39 -0
  67. package/public/health.html +215 -0
  68. package/src/controllers/auth/index.ts +609 -0
  69. package/src/controllers/employees/index.ts +210 -0
  70. package/src/controllers/health/index.ts +41 -0
  71. package/src/controllers/index.ts +9 -0
  72. package/src/controllers/meetings/index.ts +251 -0
  73. package/src/controllers/modules/index.ts +74 -0
  74. package/src/controllers/users/index.ts +981 -0
  75. package/src/data/modules.json +94 -0
  76. package/src/database/config/index.ts +26 -0
  77. package/src/database/index.ts +5 -0
  78. package/src/database/seeder/employees/index.ts +35 -0
  79. package/src/database/seeder/index.ts +18 -0
  80. package/src/database/seeder/users/index.ts +44 -0
  81. package/src/index.ts +10 -0
  82. package/src/jobs/index.ts +2 -0
  83. package/src/jobs/mailer/index.ts +154 -0
  84. package/src/jobs/mailer/templates/auth.ts +113 -0
  85. package/src/jobs/mailer/templates/index.ts +1 -0
  86. package/src/jobs/queues/index.ts +125 -0
  87. package/src/middlewares/audit/index.ts +0 -0
  88. package/src/middlewares/guard/index.ts +64 -0
  89. package/src/middlewares/index.ts +5 -0
  90. package/src/middlewares/meeting.ts +45 -0
  91. package/src/models/employees/index.ts +70 -0
  92. package/src/models/index.ts +8 -0
  93. package/src/models/meetings/index.ts +112 -0
  94. package/src/models/passkeys/index.ts +53 -0
  95. package/src/models/queues/index.ts +55 -0
  96. package/src/models/users/index.ts +92 -0
  97. package/src/queues/index.ts +1 -0
  98. package/src/queues/mailer/index.ts +80 -0
  99. package/src/types/index.ts +38 -0
  100. package/src/utils/notifications.ts +66 -0
  101. package/tsconfig.json +18 -0
@@ -0,0 +1,227 @@
1
+ import mongoose from 'mongoose';
2
+ declare const _default: mongoose.Model<{
3
+ created_at: number;
4
+ updated_at: number;
5
+ deleted_at: number;
6
+ is_active: boolean;
7
+ title: string;
8
+ host_id: mongoose.Types.ObjectId;
9
+ participants: mongoose.Types.DocumentArray<{
10
+ is_active: boolean;
11
+ status: "accepted" | "pending";
12
+ joined_at: number;
13
+ left_at: number;
14
+ email?: string | null | undefined;
15
+ user_id?: mongoose.Types.ObjectId | null | undefined;
16
+ }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
17
+ is_active: boolean;
18
+ status: "accepted" | "pending";
19
+ joined_at: number;
20
+ left_at: number;
21
+ email?: string | null | undefined;
22
+ user_id?: mongoose.Types.ObjectId | null | undefined;
23
+ }> & {
24
+ is_active: boolean;
25
+ status: "accepted" | "pending";
26
+ joined_at: number;
27
+ left_at: number;
28
+ email?: string | null | undefined;
29
+ user_id?: mongoose.Types.ObjectId | null | undefined;
30
+ }>;
31
+ scheduled_at: number;
32
+ started_at: number;
33
+ ended_at: number;
34
+ meeting_type: "video" | "audio";
35
+ meeting_url: string;
36
+ max_participants: number;
37
+ description?: string | null | undefined;
38
+ }, {}, {}, {}, mongoose.Document<unknown, {}, {
39
+ created_at: number;
40
+ updated_at: number;
41
+ deleted_at: number;
42
+ is_active: boolean;
43
+ title: string;
44
+ host_id: mongoose.Types.ObjectId;
45
+ participants: mongoose.Types.DocumentArray<{
46
+ is_active: boolean;
47
+ status: "accepted" | "pending";
48
+ joined_at: number;
49
+ left_at: number;
50
+ email?: string | null | undefined;
51
+ user_id?: mongoose.Types.ObjectId | null | undefined;
52
+ }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
53
+ is_active: boolean;
54
+ status: "accepted" | "pending";
55
+ joined_at: number;
56
+ left_at: number;
57
+ email?: string | null | undefined;
58
+ user_id?: mongoose.Types.ObjectId | null | undefined;
59
+ }> & {
60
+ is_active: boolean;
61
+ status: "accepted" | "pending";
62
+ joined_at: number;
63
+ left_at: number;
64
+ email?: string | null | undefined;
65
+ user_id?: mongoose.Types.ObjectId | null | undefined;
66
+ }>;
67
+ scheduled_at: number;
68
+ started_at: number;
69
+ ended_at: number;
70
+ meeting_type: "video" | "audio";
71
+ meeting_url: string;
72
+ max_participants: number;
73
+ description?: string | null | undefined;
74
+ }, {}, mongoose.DefaultSchemaOptions> & {
75
+ created_at: number;
76
+ updated_at: number;
77
+ deleted_at: number;
78
+ is_active: boolean;
79
+ title: string;
80
+ host_id: mongoose.Types.ObjectId;
81
+ participants: mongoose.Types.DocumentArray<{
82
+ is_active: boolean;
83
+ status: "accepted" | "pending";
84
+ joined_at: number;
85
+ left_at: number;
86
+ email?: string | null | undefined;
87
+ user_id?: mongoose.Types.ObjectId | null | undefined;
88
+ }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
89
+ is_active: boolean;
90
+ status: "accepted" | "pending";
91
+ joined_at: number;
92
+ left_at: number;
93
+ email?: string | null | undefined;
94
+ user_id?: mongoose.Types.ObjectId | null | undefined;
95
+ }> & {
96
+ is_active: boolean;
97
+ status: "accepted" | "pending";
98
+ joined_at: number;
99
+ left_at: number;
100
+ email?: string | null | undefined;
101
+ user_id?: mongoose.Types.ObjectId | null | undefined;
102
+ }>;
103
+ scheduled_at: number;
104
+ started_at: number;
105
+ ended_at: number;
106
+ meeting_type: "video" | "audio";
107
+ meeting_url: string;
108
+ max_participants: number;
109
+ description?: string | null | undefined;
110
+ } & {
111
+ _id: mongoose.Types.ObjectId;
112
+ } & {
113
+ __v: number;
114
+ }, mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
115
+ created_at: number;
116
+ updated_at: number;
117
+ deleted_at: number;
118
+ is_active: boolean;
119
+ title: string;
120
+ host_id: mongoose.Types.ObjectId;
121
+ participants: mongoose.Types.DocumentArray<{
122
+ is_active: boolean;
123
+ status: "accepted" | "pending";
124
+ joined_at: number;
125
+ left_at: number;
126
+ email?: string | null | undefined;
127
+ user_id?: mongoose.Types.ObjectId | null | undefined;
128
+ }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
129
+ is_active: boolean;
130
+ status: "accepted" | "pending";
131
+ joined_at: number;
132
+ left_at: number;
133
+ email?: string | null | undefined;
134
+ user_id?: mongoose.Types.ObjectId | null | undefined;
135
+ }> & {
136
+ is_active: boolean;
137
+ status: "accepted" | "pending";
138
+ joined_at: number;
139
+ left_at: number;
140
+ email?: string | null | undefined;
141
+ user_id?: mongoose.Types.ObjectId | null | undefined;
142
+ }>;
143
+ scheduled_at: number;
144
+ started_at: number;
145
+ ended_at: number;
146
+ meeting_type: "video" | "audio";
147
+ meeting_url: string;
148
+ max_participants: number;
149
+ description?: string | null | undefined;
150
+ }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
151
+ created_at: number;
152
+ updated_at: number;
153
+ deleted_at: number;
154
+ is_active: boolean;
155
+ title: string;
156
+ host_id: mongoose.Types.ObjectId;
157
+ participants: mongoose.Types.DocumentArray<{
158
+ is_active: boolean;
159
+ status: "accepted" | "pending";
160
+ joined_at: number;
161
+ left_at: number;
162
+ email?: string | null | undefined;
163
+ user_id?: mongoose.Types.ObjectId | null | undefined;
164
+ }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
165
+ is_active: boolean;
166
+ status: "accepted" | "pending";
167
+ joined_at: number;
168
+ left_at: number;
169
+ email?: string | null | undefined;
170
+ user_id?: mongoose.Types.ObjectId | null | undefined;
171
+ }> & {
172
+ is_active: boolean;
173
+ status: "accepted" | "pending";
174
+ joined_at: number;
175
+ left_at: number;
176
+ email?: string | null | undefined;
177
+ user_id?: mongoose.Types.ObjectId | null | undefined;
178
+ }>;
179
+ scheduled_at: number;
180
+ started_at: number;
181
+ ended_at: number;
182
+ meeting_type: "video" | "audio";
183
+ meeting_url: string;
184
+ max_participants: number;
185
+ description?: string | null | undefined;
186
+ }>, {}, mongoose.ResolveSchemaOptions<mongoose.DefaultSchemaOptions>> & mongoose.FlatRecord<{
187
+ created_at: number;
188
+ updated_at: number;
189
+ deleted_at: number;
190
+ is_active: boolean;
191
+ title: string;
192
+ host_id: mongoose.Types.ObjectId;
193
+ participants: mongoose.Types.DocumentArray<{
194
+ is_active: boolean;
195
+ status: "accepted" | "pending";
196
+ joined_at: number;
197
+ left_at: number;
198
+ email?: string | null | undefined;
199
+ user_id?: mongoose.Types.ObjectId | null | undefined;
200
+ }, mongoose.Types.Subdocument<mongoose.mongo.BSON.ObjectId, any, {
201
+ is_active: boolean;
202
+ status: "accepted" | "pending";
203
+ joined_at: number;
204
+ left_at: number;
205
+ email?: string | null | undefined;
206
+ user_id?: mongoose.Types.ObjectId | null | undefined;
207
+ }> & {
208
+ is_active: boolean;
209
+ status: "accepted" | "pending";
210
+ joined_at: number;
211
+ left_at: number;
212
+ email?: string | null | undefined;
213
+ user_id?: mongoose.Types.ObjectId | null | undefined;
214
+ }>;
215
+ scheduled_at: number;
216
+ started_at: number;
217
+ ended_at: number;
218
+ meeting_type: "video" | "audio";
219
+ meeting_url: string;
220
+ max_participants: number;
221
+ description?: string | null | undefined;
222
+ }> & {
223
+ _id: mongoose.Types.ObjectId;
224
+ } & {
225
+ __v: number;
226
+ }>>;
227
+ export default _default;
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const mongoose_1 = __importDefault(require("mongoose"));
7
+ const meetingSchema = new mongoose_1.default.Schema({
8
+ title: {
9
+ type: String,
10
+ required: true,
11
+ trim: true,
12
+ },
13
+ description: {
14
+ type: String,
15
+ trim: true,
16
+ },
17
+ host_id: {
18
+ type: mongoose_1.default.Schema.Types.ObjectId,
19
+ ref: '_users',
20
+ required: true,
21
+ index: true,
22
+ },
23
+ participants: [{
24
+ user_id: {
25
+ type: mongoose_1.default.Schema.Types.ObjectId,
26
+ ref: '_users',
27
+ required: false,
28
+ },
29
+ email: {
30
+ type: String,
31
+ required: false,
32
+ },
33
+ joined_at: {
34
+ type: Number,
35
+ default: null,
36
+ },
37
+ left_at: {
38
+ type: Number,
39
+ default: null,
40
+ },
41
+ is_active: {
42
+ type: Boolean,
43
+ default: false,
44
+ },
45
+ status: {
46
+ type: String,
47
+ enum: ['pending', 'accepted'],
48
+ default: 'accepted',
49
+ },
50
+ }],
51
+ scheduled_at: {
52
+ type: Number,
53
+ default: () => Date.now(),
54
+ },
55
+ started_at: {
56
+ type: Number,
57
+ default: null,
58
+ },
59
+ ended_at: {
60
+ type: Number,
61
+ default: null,
62
+ },
63
+ meeting_type: {
64
+ type: String,
65
+ enum: ['video', 'audio'],
66
+ default: 'video',
67
+ },
68
+ meeting_url: {
69
+ type: String,
70
+ unique: true,
71
+ required: true,
72
+ },
73
+ max_participants: {
74
+ type: Number,
75
+ default: 50,
76
+ },
77
+ is_active: {
78
+ type: Boolean,
79
+ default: true,
80
+ },
81
+ created_at: {
82
+ type: Number,
83
+ default: () => Date.now(),
84
+ },
85
+ updated_at: {
86
+ type: Number,
87
+ default: () => Date.now(),
88
+ },
89
+ deleted_at: {
90
+ type: Number,
91
+ default: null,
92
+ index: true,
93
+ },
94
+ });
95
+ // Virtual for participant count
96
+ meetingSchema.virtual('participant_count').get(function () {
97
+ return this.participants.filter(p => p.is_active).length;
98
+ });
99
+ // Virtual for duration (in minutes)
100
+ meetingSchema.virtual('duration_minutes').get(function () {
101
+ if (!this.started_at)
102
+ return 0;
103
+ const end = this.ended_at || Date.now();
104
+ return Math.floor((end - this.started_at) / (1000 * 60));
105
+ });
106
+ // Ensure virtual fields are included in JSON output
107
+ meetingSchema.set('toJSON', { virtuals: true });
108
+ meetingSchema.set('toObject', { virtuals: true });
109
+ // Indexes for better query performance
110
+ meetingSchema.index({ host_id: 1, scheduled_at: -1 });
111
+ meetingSchema.index({ 'participants.user_id': 1 });
112
+ exports.default = mongoose_1.default.model('_meetings', meetingSchema);
@@ -0,0 +1,77 @@
1
+ import mongoose from 'mongoose';
2
+ declare const _default: mongoose.Model<{
3
+ name: string;
4
+ created_at: number;
5
+ updated_at: number;
6
+ deleted_at: number;
7
+ is_active: boolean;
8
+ user_id: mongoose.Types.ObjectId;
9
+ credential_id: string;
10
+ device_id: string;
11
+ public_key: string;
12
+ last_used_at: number;
13
+ }, {}, {}, {}, mongoose.Document<unknown, {}, {
14
+ name: string;
15
+ created_at: number;
16
+ updated_at: number;
17
+ deleted_at: number;
18
+ is_active: boolean;
19
+ user_id: mongoose.Types.ObjectId;
20
+ credential_id: string;
21
+ device_id: string;
22
+ public_key: string;
23
+ last_used_at: number;
24
+ }, {}, mongoose.DefaultSchemaOptions> & {
25
+ name: string;
26
+ created_at: number;
27
+ updated_at: number;
28
+ deleted_at: number;
29
+ is_active: boolean;
30
+ user_id: mongoose.Types.ObjectId;
31
+ credential_id: string;
32
+ device_id: string;
33
+ public_key: string;
34
+ last_used_at: number;
35
+ } & {
36
+ _id: mongoose.Types.ObjectId;
37
+ } & {
38
+ __v: number;
39
+ }, mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
40
+ name: string;
41
+ created_at: number;
42
+ updated_at: number;
43
+ deleted_at: number;
44
+ is_active: boolean;
45
+ user_id: mongoose.Types.ObjectId;
46
+ credential_id: string;
47
+ device_id: string;
48
+ public_key: string;
49
+ last_used_at: number;
50
+ }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
51
+ name: string;
52
+ created_at: number;
53
+ updated_at: number;
54
+ deleted_at: number;
55
+ is_active: boolean;
56
+ user_id: mongoose.Types.ObjectId;
57
+ credential_id: string;
58
+ device_id: string;
59
+ public_key: string;
60
+ last_used_at: number;
61
+ }>, {}, mongoose.ResolveSchemaOptions<mongoose.DefaultSchemaOptions>> & mongoose.FlatRecord<{
62
+ name: string;
63
+ created_at: number;
64
+ updated_at: number;
65
+ deleted_at: number;
66
+ is_active: boolean;
67
+ user_id: mongoose.Types.ObjectId;
68
+ credential_id: string;
69
+ device_id: string;
70
+ public_key: string;
71
+ last_used_at: number;
72
+ }> & {
73
+ _id: mongoose.Types.ObjectId;
74
+ } & {
75
+ __v: number;
76
+ }>>;
77
+ export default _default;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const mongoose_1 = __importDefault(require("mongoose"));
7
+ const passkeySchema = new mongoose_1.default.Schema({
8
+ user_id: {
9
+ type: mongoose_1.default.Schema.Types.ObjectId,
10
+ ref: '_users',
11
+ required: true,
12
+ index: true,
13
+ },
14
+ credential_id: {
15
+ type: String,
16
+ required: true,
17
+ unique: true,
18
+ },
19
+ device_id: {
20
+ type: String,
21
+ required: true,
22
+ },
23
+ name: {
24
+ type: String,
25
+ required: true,
26
+ },
27
+ public_key: {
28
+ type: String,
29
+ required: true,
30
+ },
31
+ created_at: {
32
+ type: Number,
33
+ default: () => Date.now(),
34
+ },
35
+ updated_at: {
36
+ type: Number,
37
+ default: () => Date.now(),
38
+ },
39
+ last_used_at: {
40
+ type: Number,
41
+ default: null,
42
+ },
43
+ is_active: {
44
+ type: Boolean,
45
+ default: true,
46
+ },
47
+ deleted_at: {
48
+ type: Number,
49
+ default: null,
50
+ index: true,
51
+ },
52
+ });
53
+ // Compound indexes for better query performance
54
+ passkeySchema.index({ user_id: 1, credential_id: 1 });
55
+ exports.default = mongoose_1.default.model('_passkeys', passkeySchema);
@@ -0,0 +1,77 @@
1
+ import mongoose from 'mongoose';
2
+ declare const _default: mongoose.Model<{
3
+ type: "email" | "password_reset" | "passkey";
4
+ created_at: number;
5
+ updated_at: number;
6
+ deleted_at: number;
7
+ attempts: number;
8
+ data: any;
9
+ status: "completed" | "failed" | "pending" | "processing";
10
+ max_attempts: number;
11
+ error_message: string;
12
+ processed_at: number;
13
+ }, {}, {}, {}, mongoose.Document<unknown, {}, {
14
+ type: "email" | "password_reset" | "passkey";
15
+ created_at: number;
16
+ updated_at: number;
17
+ deleted_at: number;
18
+ attempts: number;
19
+ data: any;
20
+ status: "completed" | "failed" | "pending" | "processing";
21
+ max_attempts: number;
22
+ error_message: string;
23
+ processed_at: number;
24
+ }, {}, mongoose.DefaultSchemaOptions> & {
25
+ type: "email" | "password_reset" | "passkey";
26
+ created_at: number;
27
+ updated_at: number;
28
+ deleted_at: number;
29
+ attempts: number;
30
+ data: any;
31
+ status: "completed" | "failed" | "pending" | "processing";
32
+ max_attempts: number;
33
+ error_message: string;
34
+ processed_at: number;
35
+ } & {
36
+ _id: mongoose.Types.ObjectId;
37
+ } & {
38
+ __v: number;
39
+ }, mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, {
40
+ type: "email" | "password_reset" | "passkey";
41
+ created_at: number;
42
+ updated_at: number;
43
+ deleted_at: number;
44
+ attempts: number;
45
+ data: any;
46
+ status: "completed" | "failed" | "pending" | "processing";
47
+ max_attempts: number;
48
+ error_message: string;
49
+ processed_at: number;
50
+ }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
51
+ type: "email" | "password_reset" | "passkey";
52
+ created_at: number;
53
+ updated_at: number;
54
+ deleted_at: number;
55
+ attempts: number;
56
+ data: any;
57
+ status: "completed" | "failed" | "pending" | "processing";
58
+ max_attempts: number;
59
+ error_message: string;
60
+ processed_at: number;
61
+ }>, {}, mongoose.ResolveSchemaOptions<mongoose.DefaultSchemaOptions>> & mongoose.FlatRecord<{
62
+ type: "email" | "password_reset" | "passkey";
63
+ created_at: number;
64
+ updated_at: number;
65
+ deleted_at: number;
66
+ attempts: number;
67
+ data: any;
68
+ status: "completed" | "failed" | "pending" | "processing";
69
+ max_attempts: number;
70
+ error_message: string;
71
+ processed_at: number;
72
+ }> & {
73
+ _id: mongoose.Types.ObjectId;
74
+ } & {
75
+ __v: number;
76
+ }>>;
77
+ export default _default;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const mongoose_1 = __importDefault(require("mongoose"));
7
+ const queueSchema = new mongoose_1.default.Schema({
8
+ type: {
9
+ type: String,
10
+ required: true,
11
+ enum: ['email', 'password_reset', 'passkey'],
12
+ index: true,
13
+ },
14
+ data: {
15
+ type: mongoose_1.default.Schema.Types.Mixed,
16
+ required: true,
17
+ },
18
+ status: {
19
+ type: String,
20
+ required: true,
21
+ enum: ['pending', 'processing', 'completed', 'failed'],
22
+ default: 'pending',
23
+ index: true,
24
+ },
25
+ attempts: {
26
+ type: Number,
27
+ default: 0,
28
+ },
29
+ max_attempts: {
30
+ type: Number,
31
+ default: 3,
32
+ },
33
+ error_message: {
34
+ type: String,
35
+ default: null,
36
+ },
37
+ created_at: {
38
+ type: Number,
39
+ default: () => Date.now(),
40
+ },
41
+ updated_at: {
42
+ type: Number,
43
+ default: () => Date.now(),
44
+ },
45
+ processed_at: {
46
+ type: Number,
47
+ default: null,
48
+ },
49
+ deleted_at: {
50
+ type: Number,
51
+ default: null,
52
+ index: true,
53
+ },
54
+ });
55
+ // Compound indexes for better query performance
56
+ queueSchema.index({ type: 1, status: 1, created_at: -1 });
57
+ exports.default = mongoose_1.default.model('_queues', queueSchema);