@terreno/announcements 57.4.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 (46) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -0
  3. package/biome.jsonc +20 -0
  4. package/bunfig.toml +2 -0
  5. package/dist/announcementsApp.d.ts +9 -0
  6. package/dist/announcementsApp.js +820 -0
  7. package/dist/help.d.ts +30 -0
  8. package/dist/help.js +72 -0
  9. package/dist/helpRoutes.d.ts +8 -0
  10. package/dist/helpRoutes.js +233 -0
  11. package/dist/index.d.ts +9 -0
  12. package/dist/index.js +34 -0
  13. package/dist/models/announcement.d.ts +3 -0
  14. package/dist/models/announcement.js +214 -0
  15. package/dist/models/announcementAcknowledgement.d.ts +2 -0
  16. package/dist/models/announcementAcknowledgement.js +41 -0
  17. package/dist/models/announcementClickEvent.d.ts +3 -0
  18. package/dist/models/announcementClickEvent.js +56 -0
  19. package/dist/models/announcementImpression.d.ts +3 -0
  20. package/dist/models/announcementImpression.js +50 -0
  21. package/dist/overview.d.ts +14 -0
  22. package/dist/overview.js +310 -0
  23. package/dist/pending.d.ts +64 -0
  24. package/dist/pending.js +242 -0
  25. package/dist/types.d.ts +135 -0
  26. package/dist/types.js +2 -0
  27. package/package.json +57 -0
  28. package/src/announcementsApp.ts +722 -0
  29. package/src/help.ts +98 -0
  30. package/src/helpRoutes.ts +160 -0
  31. package/src/index.ts +45 -0
  32. package/src/models/announcement.ts +189 -0
  33. package/src/models/announcementAcknowledgement.ts +50 -0
  34. package/src/models/announcementClickEvent.ts +68 -0
  35. package/src/models/announcementImpression.ts +62 -0
  36. package/src/overview.ts +228 -0
  37. package/src/pending.ts +286 -0
  38. package/src/tests/announcementsApp.test.ts +844 -0
  39. package/src/tests/bunSetup.ts +9 -0
  40. package/src/tests/help.test.ts +29 -0
  41. package/src/tests/helpRoutes.test.ts +291 -0
  42. package/src/tests/index.test.ts +57 -0
  43. package/src/tests/overview.test.ts +351 -0
  44. package/src/tests/pending.test.ts +262 -0
  45. package/src/types.ts +157 -0
  46. package/tsconfig.json +33 -0
package/src/types.ts ADDED
@@ -0,0 +1,157 @@
1
+ import type {PermissionMethod} from "@terreno/api";
2
+ import type {Model, Types} from "mongoose";
3
+
4
+ export type AnnouncementStatus = "draft" | "published" | "archived";
5
+ export type AnnouncementPlatform = "ios" | "android" | "web";
6
+ export type AnnouncementDisplayMode = "modal" | "banner" | "feed";
7
+ export type AnnouncementAudienceType = "staff" | "patient" | "all";
8
+ export type AcknowledgementPolicy = "required" | "dismiss-only";
9
+
10
+ export interface AnnouncementPrimaryAction {
11
+ label: string;
12
+ url: string;
13
+ }
14
+
15
+ export interface AnnouncementDocument {
16
+ _id: Types.ObjectId;
17
+ title: string;
18
+ body: string;
19
+ status: AnnouncementStatus;
20
+ version: number;
21
+ priority: number;
22
+ acknowledgementPolicy?: AcknowledgementPolicy;
23
+ audience: unknown;
24
+ audienceType?: AnnouncementAudienceType;
25
+ displayMode?: AnnouncementDisplayMode;
26
+ minBuildNumber?: number;
27
+ publishAt?: Date;
28
+ expiresAt?: Date;
29
+ platforms: AnnouncementPlatform[];
30
+ primaryAction?: AnnouncementPrimaryAction;
31
+ publishedAt?: Date;
32
+ archivedAt?: Date;
33
+ created: Date;
34
+ updated: Date;
35
+ }
36
+
37
+ export type AnnouncementModel = Model<AnnouncementDocument>;
38
+
39
+ export interface AnnouncementAcknowledgementDocument {
40
+ _id: Types.ObjectId;
41
+ userId: Types.ObjectId;
42
+ announcementId: Types.ObjectId;
43
+ version: number;
44
+ acknowledgedAt: Date;
45
+ created: Date;
46
+ updated: Date;
47
+ }
48
+
49
+ export type AnnouncementAcknowledgementModel = Model<AnnouncementAcknowledgementDocument>;
50
+
51
+ export interface AnnouncementImpressionDocument {
52
+ _id: Types.ObjectId;
53
+ userId: Types.ObjectId;
54
+ announcementId: Types.ObjectId;
55
+ version: number;
56
+ viewedAt: Date;
57
+ platform?: AnnouncementPlatform;
58
+ created: Date;
59
+ updated: Date;
60
+ }
61
+
62
+ export type AnnouncementImpressionModel = Model<AnnouncementImpressionDocument>;
63
+
64
+ export type AnnouncementClickAction = "primaryAction";
65
+
66
+ export interface AnnouncementClickEventDocument {
67
+ _id: Types.ObjectId;
68
+ userId: Types.ObjectId;
69
+ announcementId: Types.ObjectId;
70
+ version: number;
71
+ action: AnnouncementClickAction;
72
+ clickedAt: Date;
73
+ platform?: AnnouncementPlatform;
74
+ created: Date;
75
+ updated: Date;
76
+ }
77
+
78
+ export type AnnouncementClickEventModel = Model<AnnouncementClickEventDocument>;
79
+
80
+ export interface AnnouncementPublic {
81
+ id: string;
82
+ title: string;
83
+ body: string;
84
+ version: number;
85
+ priority: number;
86
+ displayMode: AnnouncementDisplayMode;
87
+ requiresAcknowledgement: boolean;
88
+ primaryAction?: AnnouncementPrimaryAction;
89
+ publishedAt?: string;
90
+ }
91
+
92
+ export type MatchAudienceFunction = (
93
+ user: unknown,
94
+ announcement: AnnouncementDocument
95
+ ) => boolean | Promise<boolean>;
96
+
97
+ export interface AnnouncementsHelpOptions {
98
+ /** When true, registers GET /announcements/help/search and GET /announcements/help/:id for MCP and in-app help. */
99
+ enabled?: boolean;
100
+ }
101
+
102
+ export interface AnnouncementsOptions {
103
+ /** Permission methods for the aggregate admin overview. Defaults to IsAdmin. */
104
+ adminOverviewPermissions?: PermissionMethod<AnnouncementDocument>[];
105
+ basePath?: string;
106
+ defaultAcknowledgementPolicy?: AcknowledgementPolicy;
107
+ help?: AnnouncementsHelpOptions;
108
+ /** When omitted, staff targeting uses `user.admin === true`. */
109
+ isStaff?: (user: unknown) => boolean;
110
+ matchAudience?: MatchAudienceFunction;
111
+ permissions?: Partial<{
112
+ create: PermissionMethod<AnnouncementDocument>[];
113
+ delete: PermissionMethod<AnnouncementDocument>[];
114
+ list: PermissionMethod<AnnouncementDocument>[];
115
+ read: PermissionMethod<AnnouncementDocument>[];
116
+ update: PermissionMethod<AnnouncementDocument>[];
117
+ }>;
118
+ }
119
+
120
+ export interface AnnouncementOverviewMetrics {
121
+ impressions: number;
122
+ acknowledgements: number;
123
+ clicks: number;
124
+ }
125
+
126
+ export interface AnnouncementOverviewRow {
127
+ _id: string;
128
+ title: string;
129
+ status: AnnouncementStatus;
130
+ displayMode: AnnouncementDisplayMode;
131
+ audienceType: AnnouncementAudienceType;
132
+ acknowledgementPolicy: AcknowledgementPolicy;
133
+ priority: number;
134
+ version: number;
135
+ publishedAt?: string;
136
+ expiresAt?: string;
137
+ metrics: AnnouncementOverviewMetrics;
138
+ }
139
+
140
+ export interface AnnouncementOverviewTotals {
141
+ announcements: number;
142
+ published: number;
143
+ draft: number;
144
+ archived: number;
145
+ impressions: number;
146
+ acknowledgements: number;
147
+ clicks: number;
148
+ }
149
+
150
+ export interface AnnouncementOverviewResponse {
151
+ data: AnnouncementOverviewRow[];
152
+ totals: AnnouncementOverviewTotals;
153
+ page: number;
154
+ limit: number;
155
+ total: number;
156
+ more: boolean;
157
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "compilerOptions": {
3
+ "allowJs": true,
4
+ "allowSyntheticDefaultImports": true,
5
+ "baseUrl": "./",
6
+ "declaration": true,
7
+ "downlevelIteration": true,
8
+ "esModuleInterop": true,
9
+ "forceConsistentCasingInFileNames": true,
10
+ "ignoreDeprecations": "6.0",
11
+ "jsx": "react",
12
+ "lib": ["es2017", "dom", "es2017.object"],
13
+ "module": "commonjs",
14
+ "moduleResolution": "node",
15
+ "noEmit": false,
16
+ "noImplicitAny": false,
17
+ "noImplicitReturns": true,
18
+ "noImplicitThis": true,
19
+ "noUnusedLocals": false,
20
+ "noUnusedParameters": false,
21
+ "outDir": "./dist",
22
+ "rootDir": "./src",
23
+ "preserveConstEnums": true,
24
+ "removeComments": false,
25
+ "skipLibCheck": true,
26
+ "strict": true,
27
+ "strictFunctionTypes": true,
28
+ "strictNullChecks": true,
29
+ "target": "es5"
30
+ },
31
+ "exclude": ["node_modules", "src/tests", "**/*.test.ts"],
32
+ "include": ["src/**/*.ts*", "src/*.ts"]
33
+ }