@rapidmx/activesync-plugin 1.0.0-beta.2

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 (225) hide show
  1. package/LICENSE +382 -0
  2. package/README.md +57 -0
  3. package/dist/lib/BaseDeviceSyncStateRoute.js +90 -0
  4. package/dist/lib/BaseDeviceSyncStateRoute.js.map +1 -0
  5. package/dist/lib/BaseEasRoute.js +213 -0
  6. package/dist/lib/BaseEasRoute.js.map +1 -0
  7. package/dist/lib/CompactDateTime.js +43 -0
  8. package/dist/lib/CompactDateTime.js.map +1 -0
  9. package/dist/lib/EasCommandHandler.js +2 -0
  10. package/dist/lib/EasCommandHandler.js.map +1 -0
  11. package/dist/lib/EasSyncKeyUtils.js +119 -0
  12. package/dist/lib/EasSyncKeyUtils.js.map +1 -0
  13. package/dist/lib/adapters/CalendarSyncAdapter.js +255 -0
  14. package/dist/lib/adapters/CalendarSyncAdapter.js.map +1 -0
  15. package/dist/lib/adapters/ContactsSyncAdapter.js +164 -0
  16. package/dist/lib/adapters/ContactsSyncAdapter.js.map +1 -0
  17. package/dist/lib/adapters/EasCollectionSyncAdapter.js +2 -0
  18. package/dist/lib/adapters/EasCollectionSyncAdapter.js.map +1 -0
  19. package/dist/lib/adapters/EmailSyncAdapter.js +269 -0
  20. package/dist/lib/adapters/EmailSyncAdapter.js.map +1 -0
  21. package/dist/lib/adapters/TasksSyncAdapter.js +100 -0
  22. package/dist/lib/adapters/TasksSyncAdapter.js.map +1 -0
  23. package/dist/lib/adapters/mongo/EmailSyncAdapterMongo.js +16 -0
  24. package/dist/lib/adapters/mongo/EmailSyncAdapterMongo.js.map +1 -0
  25. package/dist/lib/adapters/mongo/index.js +6 -0
  26. package/dist/lib/adapters/mongo/index.js.map +1 -0
  27. package/dist/lib/adapters/sql/EmailSyncAdapterSQL.js +16 -0
  28. package/dist/lib/adapters/sql/EmailSyncAdapterSQL.js.map +1 -0
  29. package/dist/lib/adapters/sql/index.js +6 -0
  30. package/dist/lib/adapters/sql/index.js.map +1 -0
  31. package/dist/lib/codec/WbxmlCodePages.js +706 -0
  32. package/dist/lib/codec/WbxmlCodePages.js.map +1 -0
  33. package/dist/lib/codec/WbxmlDecoder.js +154 -0
  34. package/dist/lib/codec/WbxmlDecoder.js.map +1 -0
  35. package/dist/lib/codec/WbxmlElement.js +31 -0
  36. package/dist/lib/codec/WbxmlElement.js.map +1 -0
  37. package/dist/lib/codec/WbxmlEncoder.js +88 -0
  38. package/dist/lib/codec/WbxmlEncoder.js.map +1 -0
  39. package/dist/lib/commands/ComposeMailCommand.js +187 -0
  40. package/dist/lib/commands/ComposeMailCommand.js.map +1 -0
  41. package/dist/lib/commands/FolderSyncCommand.js +155 -0
  42. package/dist/lib/commands/FolderSyncCommand.js.map +1 -0
  43. package/dist/lib/commands/GetItemEstimateCommand.js +149 -0
  44. package/dist/lib/commands/GetItemEstimateCommand.js.map +1 -0
  45. package/dist/lib/commands/ItemOperationsCommand.js +337 -0
  46. package/dist/lib/commands/ItemOperationsCommand.js.map +1 -0
  47. package/dist/lib/commands/MeetingResponseCommand.js +120 -0
  48. package/dist/lib/commands/MeetingResponseCommand.js.map +1 -0
  49. package/dist/lib/commands/MoveItemsCommand.js +103 -0
  50. package/dist/lib/commands/MoveItemsCommand.js.map +1 -0
  51. package/dist/lib/commands/PingCommand.js +145 -0
  52. package/dist/lib/commands/PingCommand.js.map +1 -0
  53. package/dist/lib/commands/ProvisionCommand.js +164 -0
  54. package/dist/lib/commands/ProvisionCommand.js.map +1 -0
  55. package/dist/lib/commands/ResolveRecipientsCommand.js +123 -0
  56. package/dist/lib/commands/ResolveRecipientsCommand.js.map +1 -0
  57. package/dist/lib/commands/SearchCommand.js +234 -0
  58. package/dist/lib/commands/SearchCommand.js.map +1 -0
  59. package/dist/lib/commands/SendMailCommand.js +18 -0
  60. package/dist/lib/commands/SendMailCommand.js.map +1 -0
  61. package/dist/lib/commands/SettingsCommand.js +138 -0
  62. package/dist/lib/commands/SettingsCommand.js.map +1 -0
  63. package/dist/lib/commands/SmartForwardCommand.js +22 -0
  64. package/dist/lib/commands/SmartForwardCommand.js.map +1 -0
  65. package/dist/lib/commands/SmartReplyCommand.js +22 -0
  66. package/dist/lib/commands/SmartReplyCommand.js.map +1 -0
  67. package/dist/lib/commands/SyncCommand.js +406 -0
  68. package/dist/lib/commands/SyncCommand.js.map +1 -0
  69. package/dist/lib/commands/mongo/FolderSyncCommandMongo.js +16 -0
  70. package/dist/lib/commands/mongo/FolderSyncCommandMongo.js.map +1 -0
  71. package/dist/lib/commands/mongo/GetItemEstimateCommandMongo.js +21 -0
  72. package/dist/lib/commands/mongo/GetItemEstimateCommandMongo.js.map +1 -0
  73. package/dist/lib/commands/mongo/ItemOperationsCommandMongo.js +18 -0
  74. package/dist/lib/commands/mongo/ItemOperationsCommandMongo.js.map +1 -0
  75. package/dist/lib/commands/mongo/MeetingResponseCommandMongo.js +17 -0
  76. package/dist/lib/commands/mongo/MeetingResponseCommandMongo.js.map +1 -0
  77. package/dist/lib/commands/mongo/MoveItemsCommandMongo.js +17 -0
  78. package/dist/lib/commands/mongo/MoveItemsCommandMongo.js.map +1 -0
  79. package/dist/lib/commands/mongo/ResolveRecipientsCommandMongo.js +16 -0
  80. package/dist/lib/commands/mongo/ResolveRecipientsCommandMongo.js.map +1 -0
  81. package/dist/lib/commands/mongo/SearchCommandMongo.js +19 -0
  82. package/dist/lib/commands/mongo/SearchCommandMongo.js.map +1 -0
  83. package/dist/lib/commands/mongo/SendMailCommandMongo.js +17 -0
  84. package/dist/lib/commands/mongo/SendMailCommandMongo.js.map +1 -0
  85. package/dist/lib/commands/mongo/SettingsCommandMongo.js +16 -0
  86. package/dist/lib/commands/mongo/SettingsCommandMongo.js.map +1 -0
  87. package/dist/lib/commands/mongo/SmartForwardCommandMongo.js +17 -0
  88. package/dist/lib/commands/mongo/SmartForwardCommandMongo.js.map +1 -0
  89. package/dist/lib/commands/mongo/SmartReplyCommandMongo.js +17 -0
  90. package/dist/lib/commands/mongo/SmartReplyCommandMongo.js.map +1 -0
  91. package/dist/lib/commands/mongo/SyncCommandMongo.js +26 -0
  92. package/dist/lib/commands/mongo/SyncCommandMongo.js.map +1 -0
  93. package/dist/lib/commands/mongo/index.js +14 -0
  94. package/dist/lib/commands/mongo/index.js.map +1 -0
  95. package/dist/lib/commands/sql/FolderSyncCommandSQL.js +16 -0
  96. package/dist/lib/commands/sql/FolderSyncCommandSQL.js.map +1 -0
  97. package/dist/lib/commands/sql/GetItemEstimateCommandSQL.js +21 -0
  98. package/dist/lib/commands/sql/GetItemEstimateCommandSQL.js.map +1 -0
  99. package/dist/lib/commands/sql/ItemOperationsCommandSQL.js +18 -0
  100. package/dist/lib/commands/sql/ItemOperationsCommandSQL.js.map +1 -0
  101. package/dist/lib/commands/sql/MeetingResponseCommandSQL.js +17 -0
  102. package/dist/lib/commands/sql/MeetingResponseCommandSQL.js.map +1 -0
  103. package/dist/lib/commands/sql/MoveItemsCommandSQL.js +17 -0
  104. package/dist/lib/commands/sql/MoveItemsCommandSQL.js.map +1 -0
  105. package/dist/lib/commands/sql/ResolveRecipientsCommandSQL.js +16 -0
  106. package/dist/lib/commands/sql/ResolveRecipientsCommandSQL.js.map +1 -0
  107. package/dist/lib/commands/sql/SearchCommandSQL.js +19 -0
  108. package/dist/lib/commands/sql/SearchCommandSQL.js.map +1 -0
  109. package/dist/lib/commands/sql/SendMailCommandSQL.js +17 -0
  110. package/dist/lib/commands/sql/SendMailCommandSQL.js.map +1 -0
  111. package/dist/lib/commands/sql/SettingsCommandSQL.js +16 -0
  112. package/dist/lib/commands/sql/SettingsCommandSQL.js.map +1 -0
  113. package/dist/lib/commands/sql/SmartForwardCommandSQL.js +17 -0
  114. package/dist/lib/commands/sql/SmartForwardCommandSQL.js.map +1 -0
  115. package/dist/lib/commands/sql/SmartReplyCommandSQL.js +17 -0
  116. package/dist/lib/commands/sql/SmartReplyCommandSQL.js.map +1 -0
  117. package/dist/lib/commands/sql/SyncCommandSQL.js +26 -0
  118. package/dist/lib/commands/sql/SyncCommandSQL.js.map +1 -0
  119. package/dist/lib/commands/sql/index.js +14 -0
  120. package/dist/lib/commands/sql/index.js.map +1 -0
  121. package/dist/lib/index.js +58 -0
  122. package/dist/lib/index.js.map +1 -0
  123. package/dist/lib/jobs/EasDeviceStateCleanupJob.js +101 -0
  124. package/dist/lib/jobs/EasDeviceStateCleanupJob.js.map +1 -0
  125. package/dist/lib/jobs/mongo/EasDeviceStateCleanupJobMongo.js +13 -0
  126. package/dist/lib/jobs/mongo/EasDeviceStateCleanupJobMongo.js.map +1 -0
  127. package/dist/lib/jobs/sql/EasDeviceStateCleanupJobSQL.js +13 -0
  128. package/dist/lib/jobs/sql/EasDeviceStateCleanupJobSQL.js.map +1 -0
  129. package/dist/lib/models/DeviceSyncState.js +2 -0
  130. package/dist/lib/models/DeviceSyncState.js.map +1 -0
  131. package/dist/lib/models/mongo/DeviceSyncStateMongo.js +130 -0
  132. package/dist/lib/models/mongo/DeviceSyncStateMongo.js.map +1 -0
  133. package/dist/lib/models/sql/DeviceSyncStateSQL.js +130 -0
  134. package/dist/lib/models/sql/DeviceSyncStateSQL.js.map +1 -0
  135. package/dist/lib/mongo/DeviceSyncStateRouteMongo.js +28 -0
  136. package/dist/lib/mongo/DeviceSyncStateRouteMongo.js.map +1 -0
  137. package/dist/lib/mongo/EasRouteMongo.js +63 -0
  138. package/dist/lib/mongo/EasRouteMongo.js.map +1 -0
  139. package/dist/lib/mongo/index.js +9 -0
  140. package/dist/lib/mongo/index.js.map +1 -0
  141. package/dist/lib/mongo.js +15 -0
  142. package/dist/lib/mongo.js.map +1 -0
  143. package/dist/lib/sql/DeviceSyncStateRouteSQL.js +28 -0
  144. package/dist/lib/sql/DeviceSyncStateRouteSQL.js.map +1 -0
  145. package/dist/lib/sql/EasRouteSQL.js +63 -0
  146. package/dist/lib/sql/EasRouteSQL.js.map +1 -0
  147. package/dist/lib/sql/index.js +9 -0
  148. package/dist/lib/sql/index.js.map +1 -0
  149. package/dist/lib/sql.js +15 -0
  150. package/dist/lib/sql.js.map +1 -0
  151. package/dist/types/BaseDeviceSyncStateRoute.d.ts +34 -0
  152. package/dist/types/BaseEasRoute.d.ts +65 -0
  153. package/dist/types/CompactDateTime.d.ts +22 -0
  154. package/dist/types/EasCommandHandler.d.ts +59 -0
  155. package/dist/types/EasSyncKeyUtils.d.ts +89 -0
  156. package/dist/types/adapters/CalendarSyncAdapter.d.ts +52 -0
  157. package/dist/types/adapters/ContactsSyncAdapter.d.ts +33 -0
  158. package/dist/types/adapters/EasCollectionSyncAdapter.d.ts +55 -0
  159. package/dist/types/adapters/EmailSyncAdapter.d.ts +71 -0
  160. package/dist/types/adapters/TasksSyncAdapter.d.ts +32 -0
  161. package/dist/types/adapters/mongo/EmailSyncAdapterMongo.d.ts +7 -0
  162. package/dist/types/adapters/mongo/index.d.ts +1 -0
  163. package/dist/types/adapters/sql/EmailSyncAdapterSQL.d.ts +7 -0
  164. package/dist/types/adapters/sql/index.d.ts +1 -0
  165. package/dist/types/codec/WbxmlCodePages.d.ts +45 -0
  166. package/dist/types/codec/WbxmlDecoder.d.ts +33 -0
  167. package/dist/types/codec/WbxmlElement.d.ts +43 -0
  168. package/dist/types/codec/WbxmlEncoder.d.ts +20 -0
  169. package/dist/types/commands/ComposeMailCommand.d.ts +50 -0
  170. package/dist/types/commands/FolderSyncCommand.d.ts +25 -0
  171. package/dist/types/commands/GetItemEstimateCommand.d.ts +43 -0
  172. package/dist/types/commands/ItemOperationsCommand.d.ts +72 -0
  173. package/dist/types/commands/MeetingResponseCommand.d.ts +32 -0
  174. package/dist/types/commands/MoveItemsCommand.d.ts +29 -0
  175. package/dist/types/commands/PingCommand.d.ts +33 -0
  176. package/dist/types/commands/ProvisionCommand.d.ts +54 -0
  177. package/dist/types/commands/ResolveRecipientsCommand.d.ts +36 -0
  178. package/dist/types/commands/SearchCommand.d.ts +60 -0
  179. package/dist/types/commands/SendMailCommand.d.ts +10 -0
  180. package/dist/types/commands/SettingsCommand.d.ts +37 -0
  181. package/dist/types/commands/SmartForwardCommand.d.ts +17 -0
  182. package/dist/types/commands/SmartReplyCommand.d.ts +17 -0
  183. package/dist/types/commands/SyncCommand.d.ts +100 -0
  184. package/dist/types/commands/mongo/FolderSyncCommandMongo.d.ts +8 -0
  185. package/dist/types/commands/mongo/GetItemEstimateCommandMongo.d.ts +7 -0
  186. package/dist/types/commands/mongo/ItemOperationsCommandMongo.d.ts +9 -0
  187. package/dist/types/commands/mongo/MeetingResponseCommandMongo.d.ts +8 -0
  188. package/dist/types/commands/mongo/MoveItemsCommandMongo.d.ts +8 -0
  189. package/dist/types/commands/mongo/ResolveRecipientsCommandMongo.d.ts +7 -0
  190. package/dist/types/commands/mongo/SearchCommandMongo.d.ts +9 -0
  191. package/dist/types/commands/mongo/SendMailCommandMongo.d.ts +8 -0
  192. package/dist/types/commands/mongo/SettingsCommandMongo.d.ts +7 -0
  193. package/dist/types/commands/mongo/SmartForwardCommandMongo.d.ts +8 -0
  194. package/dist/types/commands/mongo/SmartReplyCommandMongo.d.ts +8 -0
  195. package/dist/types/commands/mongo/SyncCommandMongo.d.ts +8 -0
  196. package/dist/types/commands/mongo/index.d.ts +9 -0
  197. package/dist/types/commands/sql/FolderSyncCommandSQL.d.ts +8 -0
  198. package/dist/types/commands/sql/GetItemEstimateCommandSQL.d.ts +7 -0
  199. package/dist/types/commands/sql/ItemOperationsCommandSQL.d.ts +9 -0
  200. package/dist/types/commands/sql/MeetingResponseCommandSQL.d.ts +8 -0
  201. package/dist/types/commands/sql/MoveItemsCommandSQL.d.ts +8 -0
  202. package/dist/types/commands/sql/ResolveRecipientsCommandSQL.d.ts +7 -0
  203. package/dist/types/commands/sql/SearchCommandSQL.d.ts +9 -0
  204. package/dist/types/commands/sql/SendMailCommandSQL.d.ts +8 -0
  205. package/dist/types/commands/sql/SettingsCommandSQL.d.ts +7 -0
  206. package/dist/types/commands/sql/SmartForwardCommandSQL.d.ts +8 -0
  207. package/dist/types/commands/sql/SmartReplyCommandSQL.d.ts +8 -0
  208. package/dist/types/commands/sql/SyncCommandSQL.d.ts +8 -0
  209. package/dist/types/commands/sql/index.d.ts +9 -0
  210. package/dist/types/index.d.ts +53 -0
  211. package/dist/types/jobs/EasDeviceStateCleanupJob.d.ts +26 -0
  212. package/dist/types/jobs/mongo/EasDeviceStateCleanupJobMongo.d.ts +5 -0
  213. package/dist/types/jobs/sql/EasDeviceStateCleanupJobSQL.d.ts +5 -0
  214. package/dist/types/models/DeviceSyncState.d.ts +30 -0
  215. package/dist/types/models/mongo/DeviceSyncStateMongo.d.ts +22 -0
  216. package/dist/types/models/sql/DeviceSyncStateSQL.d.ts +22 -0
  217. package/dist/types/mongo/DeviceSyncStateRouteMongo.d.ts +8 -0
  218. package/dist/types/mongo/EasRouteMongo.d.ts +14 -0
  219. package/dist/types/mongo/index.d.ts +4 -0
  220. package/dist/types/mongo.d.ts +10 -0
  221. package/dist/types/sql/DeviceSyncStateRouteSQL.d.ts +8 -0
  222. package/dist/types/sql/EasRouteSQL.d.ts +14 -0
  223. package/dist/types/sql/index.d.ts +4 -0
  224. package/dist/types/sql.d.ts +10 -0
  225. package/package.json +238 -0
@@ -0,0 +1,22 @@
1
+ import { BaseMongoEntity } from "@rapidrest/service-core";
2
+ import { DeviceSyncState } from "../DeviceSyncState.js";
3
+ /**
4
+ * Implementation of the `DeviceSyncState` interface for storage in a MongoDB database. If SQL is desired,
5
+ * please use `models.sql.DeviceSyncStateSQL` instead.
6
+ *
7
+ * @author Jean-Philippe Steinmetz
8
+ */
9
+ export declare class DeviceSyncStateMongo extends BaseMongoEntity implements DeviceSyncState {
10
+ mailboxUid: string;
11
+ deviceId: string;
12
+ deviceType: string;
13
+ policyKey?: string;
14
+ folderSyncKeys: Record<string, string>;
15
+ folderCollectionClasses: Record<string, string>;
16
+ lastSyncAt?: Date;
17
+ provisioned: boolean;
18
+ remoteWipeRequested?: boolean;
19
+ remoteWipeAccountOnly?: boolean;
20
+ remoteWipeAcknowledgedAt?: Date;
21
+ constructor(other?: Partial<DeviceSyncStateMongo>);
22
+ }
@@ -0,0 +1,22 @@
1
+ import { BaseEntity } from "@rapidrest/service-core";
2
+ import { DeviceSyncState } from "../DeviceSyncState.js";
3
+ /**
4
+ * Implementation of the `DeviceSyncState` interface for storage in a SQL database. If MongoDB is desired,
5
+ * please use `models.mongo.DeviceSyncStateMongo` instead.
6
+ *
7
+ * @author Jean-Philippe Steinmetz
8
+ */
9
+ export declare class DeviceSyncStateSQL extends BaseEntity implements DeviceSyncState {
10
+ mailboxUid: string;
11
+ deviceId: string;
12
+ deviceType: string;
13
+ policyKey?: string;
14
+ folderSyncKeys: Record<string, string>;
15
+ folderCollectionClasses: Record<string, string>;
16
+ lastSyncAt?: Date;
17
+ provisioned: boolean;
18
+ remoteWipeRequested?: boolean;
19
+ remoteWipeAccountOnly?: boolean;
20
+ remoteWipeAcknowledgedAt?: Date;
21
+ constructor(other?: Partial<DeviceSyncStateSQL>);
22
+ }
@@ -0,0 +1,8 @@
1
+ import { DeviceSyncStateMongo } from "../models/mongo/DeviceSyncStateMongo.js";
2
+ import { BaseDeviceSyncStateRoute } from "../BaseDeviceSyncStateRoute.js";
3
+ /**
4
+ * @author Jean-Philippe Steinmetz
5
+ */
6
+ export declare class DeviceSyncStateRouteMongo extends BaseDeviceSyncStateRoute<DeviceSyncStateMongo> {
7
+ protected deviceSyncStateClass: any;
8
+ }
@@ -0,0 +1,14 @@
1
+ import { MailboxMongo } from "@rapidmx/restapi/mongo";
2
+ import { DeviceSyncStateMongo } from "../models/mongo/DeviceSyncStateMongo.js";
3
+ import { BaseEasRoute } from "../BaseEasRoute.js";
4
+ /**
5
+ * Mongo-backed concrete `BaseEasRoute`, mounted at the protocol's well-known path. Exported from this plugin's
6
+ * `./mongo` entry point, so the server host mounts it without a wrapper class of its own.
7
+ *
8
+ * @author Jean-Philippe Steinmetz
9
+ */
10
+ export declare class EasRouteMongo extends BaseEasRoute<DeviceSyncStateMongo, MailboxMongo> {
11
+ protected deviceSyncStateClass: any;
12
+ protected mailboxClass: any;
13
+ protected commandHandlerClasses: any[];
14
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./EasRouteMongo.js";
2
+ export * from "./DeviceSyncStateRouteMongo.js";
3
+ export * from "../commands/mongo/index.js";
4
+ export * from "../adapters/mongo/index.js";
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This plugin's `./mongo` entry point: exactly the classes a server host loads for a Mongo deployment - the
3
+ * mounted routes, the device-state model and its cleanup job. Anything else exported here would be registered
4
+ * by the host too (and an abstract `BackgroundService` would even be started), so the command and adapter
5
+ * classes these routes use stay internal.
6
+ */
7
+ export { EasRouteMongo } from "./mongo/EasRouteMongo.js";
8
+ export { DeviceSyncStateRouteMongo } from "./mongo/DeviceSyncStateRouteMongo.js";
9
+ export { DeviceSyncStateMongo } from "./models/mongo/DeviceSyncStateMongo.js";
10
+ export { EasDeviceStateCleanupJobMongo } from "./jobs/mongo/EasDeviceStateCleanupJobMongo.js";
@@ -0,0 +1,8 @@
1
+ import { DeviceSyncStateSQL } from "../models/sql/DeviceSyncStateSQL.js";
2
+ import { BaseDeviceSyncStateRoute } from "../BaseDeviceSyncStateRoute.js";
3
+ /**
4
+ * @author Jean-Philippe Steinmetz
5
+ */
6
+ export declare class DeviceSyncStateRouteSQL extends BaseDeviceSyncStateRoute<DeviceSyncStateSQL> {
7
+ protected deviceSyncStateClass: any;
8
+ }
@@ -0,0 +1,14 @@
1
+ import { MailboxSQL } from "@rapidmx/restapi/sql";
2
+ import { DeviceSyncStateSQL } from "../models/sql/DeviceSyncStateSQL.js";
3
+ import { BaseEasRoute } from "../BaseEasRoute.js";
4
+ /**
5
+ * SQL-backed concrete `BaseEasRoute`, mounted at the protocol's well-known path. Exported from this plugin's
6
+ * `./sql` entry point.
7
+ *
8
+ * @author Jean-Philippe Steinmetz
9
+ */
10
+ export declare class EasRouteSQL extends BaseEasRoute<DeviceSyncStateSQL, MailboxSQL> {
11
+ protected deviceSyncStateClass: any;
12
+ protected mailboxClass: any;
13
+ protected commandHandlerClasses: any[];
14
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./EasRouteSQL.js";
2
+ export * from "./DeviceSyncStateRouteSQL.js";
3
+ export * from "../commands/sql/index.js";
4
+ export * from "../adapters/sql/index.js";
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This plugin's `./sql` entry point: exactly the classes a server host loads for a SQL deployment - the
3
+ * mounted routes, the device-state model and its cleanup job. Anything else exported here would be registered
4
+ * by the host too (and an abstract `BackgroundService` would even be started), so the command and adapter
5
+ * classes these routes use stay internal.
6
+ */
7
+ export { EasRouteSQL } from "./sql/EasRouteSQL.js";
8
+ export { DeviceSyncStateRouteSQL } from "./sql/DeviceSyncStateRouteSQL.js";
9
+ export { DeviceSyncStateSQL } from "./models/sql/DeviceSyncStateSQL.js";
10
+ export { EasDeviceStateCleanupJobSQL } from "./jobs/sql/EasDeviceStateCleanupJobSQL.js";
package/package.json ADDED
@@ -0,0 +1,238 @@
1
+ {
2
+ "name": "@rapidmx/activesync-plugin",
3
+ "version": "1.0.0-beta.2",
4
+ "description": "RapixMX plugin that provides Exchange ActiveSync (EAS) protocol support.",
5
+ "repository": "https://github.com/RapidMX/activesync.git",
6
+ "author": "RapidREST <rapidrests@gmail.com>",
7
+ "license": "MPL-2.0",
8
+ "contributors": [
9
+ "Jean-Philippe Steinmetz"
10
+ ],
11
+ "scripts": {
12
+ "build": "yarn lint && rimraf dist && tsc",
13
+ "lint": "eslint ./src ./test",
14
+ "local-audit": "yarn install && yarn npm audit -A -R \"$@\"",
15
+ "checkup": "yarn dlx @yarnpkg/doctor \"$@\"",
16
+ "dependency-check": "yarn dlx depcheck \"$@\"",
17
+ "report-coverage": "cat ./coverage/lcov.info | coveralls",
18
+ "test": "vitest run",
19
+ "test:prod": "npm run lint && vitest run --coverage",
20
+ "test:watch": "vitest",
21
+ "release": "npx @rapidrest/cli release",
22
+ "prepublish": "yarn build"
23
+ },
24
+ "peerDependencies": {
25
+ "@rapidmx/restapi": "0.x",
26
+ "@rapidrest/core": "5.x",
27
+ "@rapidrest/service-core": "2.x"
28
+ },
29
+ "dependencies": {
30
+ "mailparser": "^3.9.23"
31
+ },
32
+ "devDependencies": {
33
+ "@rapidmx/restapi": "^0.9.0",
34
+ "@rapidrest/core": "^5.2.2",
35
+ "@rapidrest/service-core": "^2.0.0",
36
+ "@swc/core": "^1.16.2",
37
+ "@types/mailparser": "^3.4.6",
38
+ "@types/nconf": "^0.10.7",
39
+ "@types/node": "^26.5.0",
40
+ "@typescript-eslint/eslint-plugin": "^8.70.0",
41
+ "@typescript-eslint/parser": "^8.70.0",
42
+ "@vitest/coverage-v8": "^5.0.0",
43
+ "better-sqlite3": "^13.0.3",
44
+ "eslint": "^10.10.0",
45
+ "eslint-config-prettier": "^10.1.8",
46
+ "eslint-plugin-import": "^2.32.0",
47
+ "eslint-plugin-jsdoc": "^64.3.6",
48
+ "globals": "^17.12.0",
49
+ "lodash-es": "^4.18.1",
50
+ "mongodb": "^7.6.0",
51
+ "mongodb-memory-server": "^11.2.0",
52
+ "nconf": "^0.13.0",
53
+ "openapi3-ts": "^4.6.1",
54
+ "prom-client": "^15.1.3",
55
+ "redis": "^6.2.1",
56
+ "reflect-metadata": "^0.2.2",
57
+ "rimraf": "^6.1.3",
58
+ "ts-node": "^10.9.2",
59
+ "tsx": "^4.23.13",
60
+ "typeorm": "^1.1.1",
61
+ "typescript": "^6.0.3",
62
+ "unplugin-swc": "^1.6.0",
63
+ "vite": "^8.2.2",
64
+ "vitest": "^5.0.0",
65
+ "winston": "^3.19.0"
66
+ },
67
+ "packageManager": "yarn@4.5.3",
68
+ "engines": {
69
+ "node": ">=24.0.0"
70
+ },
71
+ "publishConfig": {
72
+ "registry": "https://registry.npmjs.org/"
73
+ },
74
+ "type": "module",
75
+ "main": "dist/lib/index.js",
76
+ "exports": {
77
+ ".": {
78
+ "import": "./dist/lib/index.js",
79
+ "types": "./dist/types/index.d.ts"
80
+ },
81
+ "./mongo": {
82
+ "import": "./dist/lib/mongo.js",
83
+ "types": "./dist/types/mongo.d.ts"
84
+ },
85
+ "./sql": {
86
+ "import": "./dist/lib/sql.js",
87
+ "types": "./dist/types/sql.d.ts"
88
+ }
89
+ },
90
+ "typings": "dist/types/index.d.ts",
91
+ "files": [
92
+ "dist"
93
+ ],
94
+ "rapidmx": {
95
+ "plugin": {
96
+ "apiVersion": 1,
97
+ "displayName": "Exchange ActiveSync",
98
+ "description": "Lets phones and mail apps sync mail, contacts, calendars and tasks over Exchange ActiveSync (served at /Microsoft-Server-ActiveSync).",
99
+ "settings": [
100
+ {
101
+ "key": "mail:eas:sync_window_size",
102
+ "label": "Sync batch size",
103
+ "type": "number",
104
+ "default": 100,
105
+ "min": 1,
106
+ "max": 512,
107
+ "help": "Most items sent to a device in one Sync response."
108
+ },
109
+ {
110
+ "key": "mail:eas:foldersync_window_size",
111
+ "label": "Folder sync batch size",
112
+ "type": "number",
113
+ "default": 512,
114
+ "min": 1,
115
+ "max": 5000,
116
+ "help": "Most folder changes sent in one FolderSync response."
117
+ },
118
+ {
119
+ "key": "mail:eas:item_estimate_max_count",
120
+ "label": "Item estimate limit",
121
+ "type": "number",
122
+ "default": 512,
123
+ "min": 1,
124
+ "max": 100000,
125
+ "help": "Highest count GetItemEstimate reports for a folder."
126
+ },
127
+ {
128
+ "key": "mail:eas:itemoperations_max_fetch",
129
+ "label": "Fetches per request",
130
+ "type": "number",
131
+ "default": 25,
132
+ "min": 1,
133
+ "max": 500,
134
+ "help": "Most items a device may fetch in one ItemOperations request."
135
+ },
136
+ {
137
+ "key": "mail:eas:itemoperations_batch_size",
138
+ "label": "Fetch batch size",
139
+ "type": "number",
140
+ "default": 500,
141
+ "min": 1,
142
+ "max": 5000,
143
+ "help": "Rows read per database query while fetching."
144
+ },
145
+ {
146
+ "key": "mail:eas:ping_min_heartbeat_seconds",
147
+ "label": "Minimum push heartbeat (seconds)",
148
+ "type": "number",
149
+ "default": 60,
150
+ "min": 1,
151
+ "max": 3600,
152
+ "help": "Shortest Ping interval a device may request."
153
+ },
154
+ {
155
+ "key": "mail:eas:ping_max_heartbeat_seconds",
156
+ "label": "Maximum push heartbeat (seconds)",
157
+ "type": "number",
158
+ "default": 1740,
159
+ "min": 60,
160
+ "max": 3600,
161
+ "help": "Longest Ping interval a device may request."
162
+ },
163
+ {
164
+ "key": "mail:eas:search_default_range",
165
+ "label": "Default search results",
166
+ "type": "number",
167
+ "default": 9,
168
+ "min": 0,
169
+ "max": 999,
170
+ "help": "Last result index returned when a search doesn't ask for a range."
171
+ },
172
+ {
173
+ "key": "mail:eas:search_max_range",
174
+ "label": "Maximum search results",
175
+ "type": "number",
176
+ "default": 99,
177
+ "min": 0,
178
+ "max": 999,
179
+ "help": "Highest result index a search may request."
180
+ },
181
+ {
182
+ "key": "mail:eas:resolve_recipients_max_matches",
183
+ "label": "Recipient lookup matches",
184
+ "type": "number",
185
+ "default": 10,
186
+ "min": 1,
187
+ "max": 100,
188
+ "help": "Most matches returned per name when resolving recipients."
189
+ },
190
+ {
191
+ "key": "mail:eas:provision:password_enabled",
192
+ "label": "Require a device passcode",
193
+ "type": "boolean",
194
+ "default": true,
195
+ "help": "Devices must set a passcode before syncing."
196
+ },
197
+ {
198
+ "key": "mail:eas:provision:min_password_length",
199
+ "label": "Minimum passcode length",
200
+ "type": "number",
201
+ "default": 4,
202
+ "min": 1,
203
+ "max": 16
204
+ },
205
+ {
206
+ "key": "mail:eas:provision:max_failed_attempts",
207
+ "label": "Failed unlocks before wipe",
208
+ "type": "number",
209
+ "default": 8,
210
+ "min": 1,
211
+ "max": 16
212
+ },
213
+ {
214
+ "key": "mail:eas:provision:require_device_encryption",
215
+ "label": "Require device encryption",
216
+ "type": "boolean",
217
+ "default": true
218
+ },
219
+ {
220
+ "key": "mail:eas:provision:allow_simple_password",
221
+ "label": "Allow simple passcodes",
222
+ "type": "boolean",
223
+ "default": false,
224
+ "help": "For example 1111 or 1234."
225
+ },
226
+ {
227
+ "key": "mail:jobs:eas_device_cleanup:device_ttl_days",
228
+ "label": "Forget idle devices after (days)",
229
+ "type": "number",
230
+ "default": 90,
231
+ "min": 1,
232
+ "max": 3650,
233
+ "help": "Device pairings that haven't synced for this long are removed."
234
+ }
235
+ ]
236
+ }
237
+ }
238
+ }