@rpcbase/db 0.25.0 → 0.26.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.
@@ -6,8 +6,9 @@ type ExtractModelNamesFromSchemas<TModules> = {
6
6
  }[keyof TModules] & string;
7
7
  type FrameworkModelName = ExtractModelNamesFromSchemas<typeof frameworkSchemas>;
8
8
  type WithoutRbPrefix<TName extends string> = TName extends `RB${string}` ? never : TName;
9
- export type TenantModelName<TModules extends ModelModules> = WithoutRbPrefix<ExtractModelNamesFromSchemas<TModules>> | WithoutRbPrefix<FrameworkModelName>;
10
- export type RbModelName = ExtractModelNamesFromSchemas<typeof frameworkSchemas> extends infer Name ? Name extends string ? Name extends `RB${string}` ? Name extends "RBRtsChange" | "RBRtsCounter" | "RBUploadSession" | "RBUploadChunk" ? never : Name : never : never : never;
9
+ type TenantInternalRbModelName = "RBUploadSession" | "RBUploadChunk" | "RBNotification" | "RBNotificationSettings";
10
+ export type TenantModelName<TModules extends ModelModules> = WithoutRbPrefix<ExtractModelNamesFromSchemas<TModules>> | WithoutRbPrefix<FrameworkModelName> | TenantInternalRbModelName;
11
+ export type RbModelName = ExtractModelNamesFromSchemas<typeof frameworkSchemas> extends infer Name ? Name extends string ? Name extends `RB${string}` ? Name extends "RBRtsChange" | "RBRtsCounter" | "RBUploadSession" | "RBUploadChunk" | "RBNotification" | "RBNotificationSettings" ? never : Name : never : never : never;
11
12
  export type ModelsClient<TModules extends ModelModules> = {
12
13
  register: (modules: TModules) => void;
13
14
  get: (modelName: TenantModelName<TModules>, ctx: LoadModelCtx) => ReturnType<typeof loadModel>;
@@ -1 +1 @@
1
- {"version":3,"file":"createModels.d.ts","sourceRoot":"","sources":["../src/createModels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,KAAK,gBAAgB,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAIpD,KAAK,4BAA4B,CAAC,QAAQ,IAAI;KAC3C,CAAC,IAAI,MAAM,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,IAAI,QAAQ,GAAG,IAAI,GAAG,KAAK;CACxE,CAAC,MAAM,QAAQ,CAAC,GAAG,MAAM,CAAA;AAE1B,KAAK,kBAAkB,GAAG,4BAA4B,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/E,KAAK,eAAe,CAAC,KAAK,SAAS,MAAM,IAAI,KAAK,SAAS,KAAK,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,CAAA;AAExF,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,YAAY,IACrD,eAAe,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,GACvD,eAAe,CAAC,kBAAkB,CAAC,CAAA;AAEvC,MAAM,MAAM,WAAW,GAAG,4BAA4B,CAAC,OAAO,gBAAgB,CAAC,SAAS,MAAM,IAAI,GAC9F,IAAI,SAAS,MAAM,GACjB,IAAI,SAAS,KAAK,MAAM,EAAE,GACxB,IAAI,SAAS,aAAa,GAAG,cAAc,GAAG,iBAAiB,GAAG,eAAe,GAC/E,KAAK,GACL,IAAI,GACN,KAAK,GACP,KAAK,GACP,KAAK,CAAA;AAET,MAAM,MAAM,YAAY,CAAC,QAAQ,SAAS,YAAY,IAAI;IACxD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACrC,GAAG,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,YAAY,KAAK,UAAU,CAAC,OAAO,SAAS,CAAC,CAAA;IAC9F,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,KAAK,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;CACrF,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,QAAQ,SAAS,YAAY,EAAE,SAAS,QAAQ,KAAG,YAAY,CAAC,QAAQ,CAQpG,CAAA"}
1
+ {"version":3,"file":"createModels.d.ts","sourceRoot":"","sources":["../src/createModels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,KAAK,gBAAgB,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAIpD,KAAK,4BAA4B,CAAC,QAAQ,IAAI;KAC3C,CAAC,IAAI,MAAM,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,IAAI,QAAQ,GAAG,IAAI,GAAG,KAAK;CACxE,CAAC,MAAM,QAAQ,CAAC,GAAG,MAAM,CAAA;AAE1B,KAAK,kBAAkB,GAAG,4BAA4B,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/E,KAAK,eAAe,CAAC,KAAK,SAAS,MAAM,IAAI,KAAK,SAAS,KAAK,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,CAAA;AAExF,KAAK,yBAAyB,GAC1B,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAChB,wBAAwB,CAAA;AAE5B,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,YAAY,IACrD,eAAe,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,GACvD,eAAe,CAAC,kBAAkB,CAAC,GACnC,yBAAyB,CAAA;AAE7B,MAAM,MAAM,WAAW,GAAG,4BAA4B,CAAC,OAAO,gBAAgB,CAAC,SAAS,MAAM,IAAI,GAC9F,IAAI,SAAS,MAAM,GACjB,IAAI,SAAS,KAAK,MAAM,EAAE,GACxB,IAAI,SACF,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAChB,wBAAwB,GACxB,KAAK,GACL,IAAI,GACN,KAAK,GACP,KAAK,GACP,KAAK,CAAA;AAET,MAAM,MAAM,YAAY,CAAC,QAAQ,SAAS,YAAY,IAAI;IACxD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACrC,GAAG,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,YAAY,KAAK,UAAU,CAAC,OAAO,SAAS,CAAC,CAAA;IAC9F,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,KAAK,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;CACrF,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,QAAQ,SAAS,YAAY,EAAE,SAAS,QAAQ,KAAG,YAAY,CAAC,QAAQ,CAQpG,CAAA"}
package/dist/index.js CHANGED
@@ -270,8 +270,90 @@ const RBUploadChunkSchema = new Schema(
270
270
  );
271
271
  RBUploadChunkSchema.index({ uploadId: 1, index: 1 }, { unique: true });
272
272
  RBUploadChunkSchema.index({ expiresAt: 1 }, { expireAfterSeconds: 0 });
273
+ const ZRBNotification = z.object({
274
+ userId: z.string(),
275
+ topic: z.string().optional(),
276
+ title: z.string(),
277
+ body: z.string().optional(),
278
+ url: z.string().optional(),
279
+ createdAt: z.date(),
280
+ seenAt: z.date().optional(),
281
+ readAt: z.date().optional(),
282
+ archivedAt: z.date().optional(),
283
+ metadata: z.record(z.string(), z.unknown()).optional()
284
+ });
285
+ const TTL_90_DAYS_S = 60 * 60 * 24 * 90;
286
+ const RBNotificationSchema = new Schema(
287
+ {
288
+ userId: { type: String, required: true, index: true },
289
+ topic: { type: String, required: false, index: true },
290
+ title: { type: String, required: true },
291
+ body: { type: String, required: false },
292
+ url: { type: String, required: false },
293
+ createdAt: { type: Date, required: true, default: Date.now, index: true },
294
+ seenAt: { type: Date, required: false, index: true },
295
+ readAt: { type: Date, required: false, index: true },
296
+ archivedAt: { type: Date, required: false },
297
+ metadata: { type: Schema.Types.Mixed, required: false }
298
+ },
299
+ {
300
+ versionKey: false,
301
+ collection: "notifications"
302
+ }
303
+ );
304
+ RBNotificationSchema.index({ userId: 1, archivedAt: 1, createdAt: -1 });
305
+ RBNotificationSchema.index({ userId: 1, seenAt: 1, archivedAt: 1, createdAt: -1 });
306
+ RBNotificationSchema.index({ userId: 1, readAt: 1, archivedAt: 1, createdAt: -1 });
307
+ RBNotificationSchema.index({ archivedAt: 1 }, { expireAfterSeconds: TTL_90_DAYS_S });
308
+ const ZRBNotificationDigestFrequency = z.enum(["off", "daily", "weekly"]);
309
+ const ZRBNotificationTopicPreference = z.object({
310
+ topic: z.string(),
311
+ inApp: z.boolean(),
312
+ emailDigest: z.boolean(),
313
+ push: z.boolean()
314
+ });
315
+ const ZRBNotificationSettings = z.object({
316
+ userId: z.string(),
317
+ digestFrequency: ZRBNotificationDigestFrequency,
318
+ topicPreferences: z.array(ZRBNotificationTopicPreference).optional(),
319
+ lastDigestSentAt: z.date().optional()
320
+ });
321
+ const TopicPreferenceSchema = new Schema(
322
+ {
323
+ topic: { type: String, required: true },
324
+ inApp: { type: Boolean, required: true, default: true },
325
+ emailDigest: { type: Boolean, required: true, default: true },
326
+ push: { type: Boolean, required: true, default: false }
327
+ },
328
+ { _id: false }
329
+ );
330
+ const RBNotificationSettingsSchema = new Schema(
331
+ {
332
+ userId: { type: String, required: true },
333
+ digestFrequency: {
334
+ type: String,
335
+ required: true,
336
+ enum: ZRBNotificationDigestFrequency.options,
337
+ default: "weekly"
338
+ },
339
+ topicPreferences: {
340
+ type: [TopicPreferenceSchema],
341
+ default: []
342
+ },
343
+ lastDigestSentAt: { type: Date, required: false }
344
+ },
345
+ {
346
+ versionKey: false,
347
+ collection: "notificationSettings",
348
+ timestamps: true
349
+ }
350
+ );
351
+ RBNotificationSettingsSchema.index({ userId: 1 }, { unique: true });
352
+ RBNotificationSettingsSchema.index({ userId: 1, "topicPreferences.topic": 1 });
273
353
  const frameworkSchemas = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
274
354
  __proto__: null,
355
+ RBNotificationSchema,
356
+ RBNotificationSettingsSchema,
275
357
  RBRtsChangeSchema,
276
358
  RBRtsCounterSchema,
277
359
  RBTenantSchema,
@@ -280,6 +362,10 @@ const frameworkSchemas = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.de
280
362
  RBUploadChunkSchema,
281
363
  RBUploadSessionSchema,
282
364
  RBUserSchema,
365
+ ZRBNotification,
366
+ ZRBNotificationDigestFrequency,
367
+ ZRBNotificationSettings,
368
+ ZRBNotificationTopicPreference,
283
369
  ZRBRtsChange,
284
370
  ZRBRtsChangeOp,
285
371
  ZRBRtsCounter,
@@ -1240,7 +1326,9 @@ const TENANT_INTERNAL_MODEL_NAMES = /* @__PURE__ */ new Set([
1240
1326
  "RBRtsChange",
1241
1327
  "RBRtsCounter",
1242
1328
  "RBUploadSession",
1243
- "RBUploadChunk"
1329
+ "RBUploadChunk",
1330
+ "RBNotification",
1331
+ "RBNotificationSettings"
1244
1332
  ]);
1245
1333
  const assertTenantModelName = (modelName) => {
1246
1334
  if (TENANT_INTERNAL_MODEL_NAMES.has(modelName)) return;
@@ -1302,6 +1390,8 @@ const getTenantFilesystemDbFromCtx = async (ctx) => {
1302
1390
  };
1303
1391
  export {
1304
1392
  LANGUAGE_CODE_REGEX,
1393
+ RBNotificationSchema,
1394
+ RBNotificationSettingsSchema,
1305
1395
  RBRtsChangeSchema,
1306
1396
  RBRtsCounterSchema,
1307
1397
  RBTenantSchema,
@@ -1310,6 +1400,10 @@ export {
1310
1400
  RBUploadChunkSchema,
1311
1401
  RBUploadSessionSchema,
1312
1402
  RBUserSchema,
1403
+ ZRBNotification,
1404
+ ZRBNotificationDigestFrequency,
1405
+ ZRBNotificationSettings,
1406
+ ZRBNotificationTopicPreference,
1313
1407
  ZRBRtsChange,
1314
1408
  ZRBRtsChangeOp,
1315
1409
  ZRBRtsCounter,
@@ -1 +1 @@
1
- {"version":3,"file":"loadModel.d.ts","sourceRoot":"","sources":["../src/loadModel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AAMpC,KAAK,YAAY,GAAG;IAClB,GAAG,EAAE;QACH,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,EAAE;gBACL,eAAe,CAAC,EAAE,MAAM,CAAC;aAC1B,CAAA;SACF,GAAG,IAAI,CAAC;KACV,CAAC;CACH,CAAC;AAuCF,eAAO,MAAM,SAAS,GAAU,WAAW,MAAM,EAAE,KAAK,YAAY,4DAOnE,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,WAAW,MAAM,EAAE,MAAM,YAAY,4DAItE,CAAA;AAED,YAAY,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"loadModel.d.ts","sourceRoot":"","sources":["../src/loadModel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AAMpC,KAAK,YAAY,GAAG;IAClB,GAAG,EAAE;QACH,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,EAAE;gBACL,eAAe,CAAC,EAAE,MAAM,CAAC;aAC1B,CAAA;SACF,GAAG,IAAI,CAAC;KACV,CAAC;CACH,CAAC;AAyCF,eAAO,MAAM,SAAS,GAAU,WAAW,MAAM,EAAE,KAAK,YAAY,4DAOnE,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,WAAW,MAAM,EAAE,MAAM,YAAY,4DAItE,CAAA;AAED,YAAY,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { Schema } from '../../../vite/node_modules/mongoose';
2
+ import { z } from '../../../vite/node_modules/zod';
3
+ export declare const ZRBNotification: z.ZodObject<{
4
+ userId: z.ZodString;
5
+ topic: z.ZodOptional<z.ZodString>;
6
+ title: z.ZodString;
7
+ body: z.ZodOptional<z.ZodString>;
8
+ url: z.ZodOptional<z.ZodString>;
9
+ createdAt: z.ZodDate;
10
+ seenAt: z.ZodOptional<z.ZodDate>;
11
+ readAt: z.ZodOptional<z.ZodDate>;
12
+ archivedAt: z.ZodOptional<z.ZodDate>;
13
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
14
+ }, z.core.$strip>;
15
+ export type IRBNotification = z.infer<typeof ZRBNotification>;
16
+ export declare const RBNotificationSchema: Schema;
17
+ //# sourceMappingURL=RBNotification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RBNotification.d.ts","sourceRoot":"","sources":["../../src/models/RBNotification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,eAAe;;;;;;;;;;;iBAW1B,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAI7D,eAAO,MAAM,oBAAoB,EAAE,MAiBlC,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { Schema } from '../../../vite/node_modules/mongoose';
2
+ import { z } from '../../../vite/node_modules/zod';
3
+ export declare const ZRBNotificationDigestFrequency: z.ZodEnum<{
4
+ off: "off";
5
+ daily: "daily";
6
+ weekly: "weekly";
7
+ }>;
8
+ export declare const ZRBNotificationTopicPreference: z.ZodObject<{
9
+ topic: z.ZodString;
10
+ inApp: z.ZodBoolean;
11
+ emailDigest: z.ZodBoolean;
12
+ push: z.ZodBoolean;
13
+ }, z.core.$strip>;
14
+ export declare const ZRBNotificationSettings: z.ZodObject<{
15
+ userId: z.ZodString;
16
+ digestFrequency: z.ZodEnum<{
17
+ off: "off";
18
+ daily: "daily";
19
+ weekly: "weekly";
20
+ }>;
21
+ topicPreferences: z.ZodOptional<z.ZodArray<z.ZodObject<{
22
+ topic: z.ZodString;
23
+ inApp: z.ZodBoolean;
24
+ emailDigest: z.ZodBoolean;
25
+ push: z.ZodBoolean;
26
+ }, z.core.$strip>>>;
27
+ lastDigestSentAt: z.ZodOptional<z.ZodDate>;
28
+ }, z.core.$strip>;
29
+ export type IRBNotificationSettings = z.infer<typeof ZRBNotificationSettings>;
30
+ export declare const RBNotificationSettingsSchema: Schema;
31
+ //# sourceMappingURL=RBNotificationSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RBNotificationSettings.d.ts","sourceRoot":"","sources":["../../src/models/RBNotificationSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,8BAA8B;;;;EAAqC,CAAA;AAEhF,eAAO,MAAM,8BAA8B;;;;;iBAKzC,CAAA;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;iBAKlC,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAY7E,eAAO,MAAM,4BAA4B,EAAE,MAoB1C,CAAA"}
@@ -6,4 +6,6 @@ export * from './RBRtsCounter';
6
6
  export * from './RBRtsChange';
7
7
  export * from './RBUploadSession';
8
8
  export * from './RBUploadChunk';
9
+ export * from './RBNotification';
10
+ export * from './RBNotificationSettings';
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,wBAAwB,CAAA;AACtC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,wBAAwB,CAAA;AACtC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,0BAA0B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/db",
3
- "version": "0.25.0",
3
+ "version": "0.26.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"