@learncard/network-brain-service 4.1.2 → 5.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 (375) hide show
  1. package/.env.example +14 -0
  2. package/CHANGELOG.md +164 -0
  3. package/README.md +27 -1
  4. package/bootstrapLambda.test.ts +70 -32
  5. package/config/config.dev.json +1 -0
  6. package/config/config.example.json +2 -1
  7. package/config/config.production.json +1 -0
  8. package/config/config.scouts.dev.json +1 -0
  9. package/config/config.scouts.production.json +1 -0
  10. package/consentFlowDeadlineLambda.test.ts +108 -0
  11. package/consentFlowDeadlineLambda.ts +18 -0
  12. package/consentFlowDeadlineLambdaApp.ts +14 -0
  13. package/dist/accesslayer/boost/create.d.ts +8 -2
  14. package/dist/accesslayer/boost/create.d.ts.map +1 -1
  15. package/dist/accesslayer/campaign/audience.d.ts +4 -4
  16. package/dist/accesslayer/campaign/audience.d.ts.map +1 -1
  17. package/dist/accesslayer/campaign/create.d.ts +1 -1
  18. package/dist/accesslayer/campaign/create.d.ts.map +1 -1
  19. package/dist/accesslayer/campaign/delivery.d.ts +5 -0
  20. package/dist/accesslayer/campaign/delivery.d.ts.map +1 -0
  21. package/dist/accesslayer/campaign/dispatch.d.ts +5 -0
  22. package/dist/accesslayer/campaign/dispatch.d.ts.map +1 -0
  23. package/dist/accesslayer/campaign/dispatch.test.d.ts +2 -0
  24. package/dist/accesslayer/campaign/dispatch.test.d.ts.map +1 -0
  25. package/dist/accesslayer/campaign/email.d.ts +10 -0
  26. package/dist/accesslayer/campaign/email.d.ts.map +1 -0
  27. package/dist/accesslayer/campaign/email.test.d.ts +2 -0
  28. package/dist/accesslayer/campaign/email.test.d.ts.map +1 -0
  29. package/dist/accesslayer/campaign/preferences.d.ts +5 -0
  30. package/dist/accesslayer/campaign/preferences.d.ts.map +1 -0
  31. package/dist/accesslayer/campaign/read.d.ts.map +1 -1
  32. package/dist/accesslayer/campaign/test.d.ts +5 -0
  33. package/dist/accesslayer/campaign/test.d.ts.map +1 -0
  34. package/dist/accesslayer/campaign/test.test.d.ts +2 -0
  35. package/dist/accesslayer/campaign/test.test.d.ts.map +1 -0
  36. package/dist/accesslayer/campaign/update.d.ts.map +1 -1
  37. package/dist/accesslayer/consentflowcontract/create.d.ts.map +1 -1
  38. package/dist/accesslayer/consentflowcontract/delete.d.ts +1 -1
  39. package/dist/accesslayer/consentflowcontract/delete.d.ts.map +1 -1
  40. package/dist/accesslayer/consentflowcontract/read.d.ts.map +1 -1
  41. package/dist/accesslayer/consentflowcontract/relationships/create.d.ts +2 -1
  42. package/dist/accesslayer/consentflowcontract/relationships/create.d.ts.map +1 -1
  43. package/dist/accesslayer/consentflowcontract/relationships/read.d.ts +19 -4
  44. package/dist/accesslayer/consentflowcontract/relationships/read.d.ts.map +1 -1
  45. package/dist/accesslayer/consentflowcontract/relationships/update.d.ts +6 -1
  46. package/dist/accesslayer/consentflowcontract/relationships/update.d.ts.map +1 -1
  47. package/dist/accesslayer/consentflowcontract/versions.d.ts +68 -0
  48. package/dist/accesslayer/consentflowcontract/versions.d.ts.map +1 -0
  49. package/dist/accesslayer/credential/create.d.ts +3 -1
  50. package/dist/accesslayer/credential/create.d.ts.map +1 -1
  51. package/dist/accesslayer/credential/delete.d.ts +1 -0
  52. package/dist/accesslayer/credential/delete.d.ts.map +1 -1
  53. package/dist/accesslayer/credential/relationships/create.d.ts +15 -3
  54. package/dist/accesslayer/credential/relationships/create.d.ts.map +1 -1
  55. package/dist/accesslayer/credential/relationships/read.d.ts +2 -0
  56. package/dist/accesslayer/credential/relationships/read.d.ts.map +1 -1
  57. package/dist/accesslayer/credential/relationships/update.d.ts.map +1 -1
  58. package/dist/accesslayer/credential-refresh/read.d.ts +1 -0
  59. package/dist/accesslayer/credential-refresh/read.d.ts.map +1 -1
  60. package/dist/accesslayer/credential-refresh/update.d.ts.map +1 -1
  61. package/dist/accesslayer/inbox-credential/create.d.ts +1 -0
  62. package/dist/accesslayer/inbox-credential/create.d.ts.map +1 -1
  63. package/dist/accesslayer/inbox-credential/refresh.d.ts +7 -0
  64. package/dist/accesslayer/inbox-credential/refresh.d.ts.map +1 -1
  65. package/dist/app.d.ts +11 -1
  66. package/dist/app.d.ts.map +1 -1
  67. package/dist/cache/app-store.caches.d.ts +61 -1
  68. package/dist/cache/app-store.caches.d.ts.map +1 -1
  69. package/dist/campaign-unsubscribe.d.ts +7 -0
  70. package/dist/campaign-unsubscribe.d.ts.map +1 -0
  71. package/dist/campaign-unsubscribe.test.d.ts +2 -0
  72. package/dist/campaign-unsubscribe.test.d.ts.map +1 -0
  73. package/dist/config/environment.d.ts +42 -0
  74. package/dist/config/environment.d.ts.map +1 -1
  75. package/dist/config/stageConfig.d.ts +4 -0
  76. package/dist/config/stageConfig.d.ts.map +1 -1
  77. package/dist/credential-refresh.d.ts.map +1 -1
  78. package/dist/helpers/boost.helpers.d.ts +4 -1
  79. package/dist/helpers/boost.helpers.d.ts.map +1 -1
  80. package/dist/helpers/campaign-app-origin.helpers.d.ts +2 -0
  81. package/dist/helpers/campaign-app-origin.helpers.d.ts.map +1 -0
  82. package/dist/helpers/campaign-email.helpers.d.ts +13 -0
  83. package/dist/helpers/campaign-email.helpers.d.ts.map +1 -0
  84. package/dist/helpers/campaign-notifications.helpers.d.ts +7 -0
  85. package/dist/helpers/campaign-notifications.helpers.d.ts.map +1 -0
  86. package/dist/helpers/campaign-queue.helpers.d.ts +7 -0
  87. package/dist/helpers/campaign-queue.helpers.d.ts.map +1 -0
  88. package/dist/helpers/campaign-queue.helpers.test.d.ts +2 -0
  89. package/dist/helpers/campaign-queue.helpers.test.d.ts.map +1 -0
  90. package/dist/helpers/campaign-unsubscribe-page.d.ts +2 -0
  91. package/dist/helpers/campaign-unsubscribe-page.d.ts.map +1 -0
  92. package/dist/helpers/campaign-unsubscribe.helpers.d.ts +7 -0
  93. package/dist/helpers/campaign-unsubscribe.helpers.d.ts.map +1 -0
  94. package/dist/helpers/campaign-webhook.helpers.test.d.ts +2 -0
  95. package/dist/helpers/campaign-webhook.helpers.test.d.ts.map +1 -0
  96. package/dist/helpers/consentflow-deadline.helpers.d.ts +5 -0
  97. package/dist/helpers/consentflow-deadline.helpers.d.ts.map +1 -0
  98. package/dist/helpers/consentflow-legacy-migration.helpers.d.ts +2 -0
  99. package/dist/helpers/consentflow-legacy-migration.helpers.d.ts.map +1 -0
  100. package/dist/helpers/contract-events.helpers.d.ts.map +1 -1
  101. package/dist/helpers/contract.helpers.d.ts +1 -1
  102. package/dist/helpers/contract.helpers.d.ts.map +1 -1
  103. package/dist/helpers/credential-display.helpers.d.ts +5 -0
  104. package/dist/helpers/credential-display.helpers.d.ts.map +1 -0
  105. package/dist/helpers/credential-display.helpers.test.d.ts +2 -0
  106. package/dist/helpers/credential-display.helpers.test.d.ts.map +1 -0
  107. package/dist/helpers/credential-refresh-email.helpers.d.ts.map +1 -1
  108. package/dist/helpers/credential-refresh-materiality.helpers.d.ts +4 -0
  109. package/dist/helpers/credential-refresh-materiality.helpers.d.ts.map +1 -1
  110. package/dist/helpers/credential-refresh.helpers.d.ts +30 -1
  111. package/dist/helpers/credential-refresh.helpers.d.ts.map +1 -1
  112. package/dist/helpers/credential-status-mutation.helpers.d.ts +5 -0
  113. package/dist/helpers/credential-status-mutation.helpers.d.ts.map +1 -0
  114. package/dist/helpers/credential-status-mutation.helpers.test.d.ts +2 -0
  115. package/dist/helpers/credential-status-mutation.helpers.test.d.ts.map +1 -0
  116. package/dist/helpers/credential.helpers.d.ts +1 -1
  117. package/dist/helpers/credential.helpers.d.ts.map +1 -1
  118. package/dist/helpers/inbox-refresh.helpers.d.ts +4 -2
  119. package/dist/helpers/inbox-refresh.helpers.d.ts.map +1 -1
  120. package/dist/helpers/inbox.helpers.d.ts +1 -0
  121. package/dist/helpers/inbox.helpers.d.ts.map +1 -1
  122. package/dist/helpers/learnCard.helpers.d.ts +1 -0
  123. package/dist/helpers/learnCard.helpers.d.ts.map +1 -1
  124. package/dist/helpers/managed-status.helpers.d.ts +7 -0
  125. package/dist/helpers/managed-status.helpers.d.ts.map +1 -0
  126. package/dist/helpers/managed-status.helpers.test.d.ts +2 -0
  127. package/dist/helpers/managed-status.helpers.test.d.ts.map +1 -0
  128. package/dist/helpers/notification-delivery-boundary.helpers.test.d.ts +2 -0
  129. package/dist/helpers/notification-delivery-boundary.helpers.test.d.ts.map +1 -0
  130. package/dist/helpers/notification-webhook-fetch.helpers.d.ts +13 -0
  131. package/dist/helpers/notification-webhook-fetch.helpers.d.ts.map +1 -0
  132. package/dist/helpers/notification-webhook-fetch.helpers.test.d.ts +2 -0
  133. package/dist/helpers/notification-webhook-fetch.helpers.test.d.ts.map +1 -0
  134. package/dist/helpers/notificationQueue.helpers.d.ts.map +1 -1
  135. package/dist/helpers/notifications.helpers.d.ts.map +1 -1
  136. package/dist/helpers/refresh-send-intent.helpers.d.ts +13 -5
  137. package/dist/helpers/refresh-send-intent.helpers.d.ts.map +1 -1
  138. package/dist/helpers/refresh-send-intent.helpers.test.d.ts +2 -0
  139. package/dist/helpers/refresh-send-intent.helpers.test.d.ts.map +1 -0
  140. package/dist/helpers/send-contract.helpers.d.ts +11 -0
  141. package/dist/helpers/send-contract.helpers.d.ts.map +1 -0
  142. package/dist/helpers/status-list.helpers.d.ts +12 -1
  143. package/dist/helpers/status-list.helpers.d.ts.map +1 -1
  144. package/dist/index.js +2 -2
  145. package/dist/models/ConsentFlowContract.d.ts.map +1 -1
  146. package/dist/models/ConsentFlowContractVersion.d.ts +12 -0
  147. package/dist/models/ConsentFlowContractVersion.d.ts.map +1 -0
  148. package/dist/models/ConsentFlowTerms.d.ts.map +1 -1
  149. package/dist/models/Credential.d.ts +2 -0
  150. package/dist/models/Credential.d.ts.map +1 -1
  151. package/dist/models/CredentialRefresh.d.ts +5 -0
  152. package/dist/models/CredentialRefresh.d.ts.map +1 -1
  153. package/dist/models/Integration.d.ts +1 -1
  154. package/dist/models/Profile.d.ts.map +1 -1
  155. package/dist/models/campaign-constraints.d.ts.map +1 -1
  156. package/dist/models/index.d.ts +1 -0
  157. package/dist/models/index.d.ts.map +1 -1
  158. package/dist/openapi.d.ts.map +1 -1
  159. package/dist/publish-metafile.json +1 -1
  160. package/dist/routes/activity.d.ts +15 -5
  161. package/dist/routes/activity.d.ts.map +1 -1
  162. package/dist/routes/app-store.d.ts +15 -5
  163. package/dist/routes/app-store.d.ts.map +1 -1
  164. package/dist/routes/auth-grants.d.ts +12 -2
  165. package/dist/routes/auth-grants.d.ts.map +1 -1
  166. package/dist/routes/bench.d.ts +11 -1
  167. package/dist/routes/bench.d.ts.map +1 -1
  168. package/dist/routes/boosts.d.ts +70 -15
  169. package/dist/routes/boosts.d.ts.map +1 -1
  170. package/dist/routes/campaigns.d.ts +183 -51
  171. package/dist/routes/campaigns.d.ts.map +1 -1
  172. package/dist/routes/claim-hooks.d.ts +11 -1
  173. package/dist/routes/claim-hooks.d.ts.map +1 -1
  174. package/dist/routes/contact-methods.d.ts +11 -1
  175. package/dist/routes/contact-methods.d.ts.map +1 -1
  176. package/dist/routes/contracts.d.ts +374 -8
  177. package/dist/routes/contracts.d.ts.map +1 -1
  178. package/dist/routes/credential-input-privacy.test.d.ts +2 -0
  179. package/dist/routes/credential-input-privacy.test.d.ts.map +1 -0
  180. package/dist/routes/credential-refreshes.d.ts +210 -1
  181. package/dist/routes/credential-refreshes.d.ts.map +1 -1
  182. package/dist/routes/credential-share-previews.d.ts +11 -1
  183. package/dist/routes/credential-share-previews.d.ts.map +1 -1
  184. package/dist/routes/credentials.d.ts +132 -3
  185. package/dist/routes/credentials.d.ts.map +1 -1
  186. package/dist/routes/did-metadata.d.ts +11 -1
  187. package/dist/routes/did-metadata.d.ts.map +1 -1
  188. package/dist/routes/federation.d.ts +11 -1
  189. package/dist/routes/federation.d.ts.map +1 -1
  190. package/dist/routes/inbox.d.ts +54 -19
  191. package/dist/routes/inbox.d.ts.map +1 -1
  192. package/dist/routes/index.d.ts +100 -1
  193. package/dist/routes/index.d.ts.map +1 -1
  194. package/dist/routes/integrations.d.ts +14 -4
  195. package/dist/routes/integrations.d.ts.map +1 -1
  196. package/dist/routes/presentations.d.ts +11 -1
  197. package/dist/routes/presentations.d.ts.map +1 -1
  198. package/dist/routes/profile-manager.d.ts +11 -1
  199. package/dist/routes/profile-manager.d.ts.map +1 -1
  200. package/dist/routes/profiles.d.ts +11 -1
  201. package/dist/routes/profiles.d.ts.map +1 -1
  202. package/dist/routes/public-share-links.d.ts +22 -2
  203. package/dist/routes/public-share-links.d.ts.map +1 -1
  204. package/dist/routes/share-links.d.ts +36 -16
  205. package/dist/routes/share-links.d.ts.map +1 -1
  206. package/dist/routes/skill-frameworks.d.ts +11 -1
  207. package/dist/routes/skill-frameworks.d.ts.map +1 -1
  208. package/dist/routes/skills.d.ts +11 -1
  209. package/dist/routes/skills.d.ts.map +1 -1
  210. package/dist/routes/storage.d.ts +37 -23
  211. package/dist/routes/storage.d.ts.map +1 -1
  212. package/dist/routes/test.d.ts +79 -3
  213. package/dist/routes/test.d.ts.map +1 -1
  214. package/dist/routes/utilities.d.ts +11 -1
  215. package/dist/routes/utilities.d.ts.map +1 -1
  216. package/dist/routes/workflows.d.ts +11 -1
  217. package/dist/routes/workflows.d.ts.map +1 -1
  218. package/dist/services/delivery/adapters/postmark.adapter.d.ts +3 -0
  219. package/dist/services/delivery/adapters/postmark.adapter.d.ts.map +1 -1
  220. package/dist/services/delivery/delivery.service.d.ts +10 -0
  221. package/dist/services/delivery/delivery.service.d.ts.map +1 -1
  222. package/dist/types/activity.d.ts +3 -3
  223. package/dist/types/app-manifest.d.ts +10 -10
  224. package/dist/types/campaign.d.ts +13 -1
  225. package/dist/types/campaign.d.ts.map +1 -1
  226. package/dist/types/consentflowcontract.d.ts +175 -7
  227. package/dist/types/consentflowcontract.d.ts.map +1 -1
  228. package/dist/types/credential-refresh.d.ts +27 -0
  229. package/dist/types/credential-refresh.d.ts.map +1 -1
  230. package/dist/types/credential.d.ts +5 -0
  231. package/dist/types/credential.d.ts.map +1 -1
  232. package/dist/types/integration.d.ts +3 -3
  233. package/lambda.ts +44 -14
  234. package/lambdaApp.ts +20 -0
  235. package/package.json +20 -19
  236. package/project.json +5 -0
  237. package/scripts/migrate-consent-flow-versions.ts +9 -0
  238. package/scripts/report-send-template-exposure.ts +47 -0
  239. package/scripts/verify-python-contracts.ts +16 -1
  240. package/serverless-local.yml +15 -2
  241. package/serverless.function-env.cjs +4 -0
  242. package/serverless.local.yml +12 -0
  243. package/serverless.yml +48 -3
  244. package/src/accesslayer/boost/create.ts +62 -7
  245. package/src/accesslayer/campaign/README.md +275 -6
  246. package/src/accesslayer/campaign/audience.ts +39 -7
  247. package/src/accesslayer/campaign/create.ts +4 -2
  248. package/src/accesslayer/campaign/delivery.ts +66 -0
  249. package/src/accesslayer/campaign/dispatch.test.ts +59 -0
  250. package/src/accesslayer/campaign/dispatch.ts +172 -0
  251. package/src/accesslayer/campaign/email.test.ts +73 -0
  252. package/src/accesslayer/campaign/email.ts +91 -0
  253. package/src/accesslayer/campaign/preferences.ts +53 -0
  254. package/src/accesslayer/campaign/read.ts +3 -1
  255. package/src/accesslayer/campaign/state.ts +1 -1
  256. package/src/accesslayer/campaign/test.test.ts +31 -0
  257. package/src/accesslayer/campaign/test.ts +75 -0
  258. package/src/accesslayer/campaign/update.ts +15 -4
  259. package/src/accesslayer/consentflowcontract/create.ts +20 -1
  260. package/src/accesslayer/consentflowcontract/delete.ts +121 -3
  261. package/src/accesslayer/consentflowcontract/read.ts +15 -9
  262. package/src/accesslayer/consentflowcontract/relationships/create.ts +70 -36
  263. package/src/accesslayer/consentflowcontract/relationships/read.ts +305 -73
  264. package/src/accesslayer/consentflowcontract/relationships/smartResume.ts +1 -1
  265. package/src/accesslayer/consentflowcontract/relationships/update.ts +269 -98
  266. package/src/accesslayer/consentflowcontract/versions.ts +790 -0
  267. package/src/accesslayer/credential/create.ts +33 -9
  268. package/src/accesslayer/credential/delete.ts +45 -0
  269. package/src/accesslayer/credential/relationships/create.ts +102 -47
  270. package/src/accesslayer/credential/relationships/update.ts +8 -116
  271. package/src/accesslayer/credential-refresh/read.ts +26 -2
  272. package/src/accesslayer/credential-refresh/update.ts +6 -2
  273. package/src/accesslayer/inbox-credential/create.ts +7 -1
  274. package/src/accesslayer/inbox-credential/refresh.ts +14 -4
  275. package/src/campaign-unsubscribe.test.ts +158 -0
  276. package/src/campaign-unsubscribe.ts +86 -0
  277. package/src/config/environment.test.ts +52 -0
  278. package/src/config/environment.ts +58 -0
  279. package/src/config/serverlessFunctionEnv.test.ts +59 -0
  280. package/src/credential-refresh.ts +1 -0
  281. package/src/docker-entry.ts +26 -1
  282. package/src/helpers/boost-storage.helpers.test.ts +107 -41
  283. package/src/helpers/boost.helpers.ts +88 -40
  284. package/src/helpers/campaign-app-origin.helpers.ts +25 -0
  285. package/src/helpers/campaign-email.helpers.ts +113 -0
  286. package/src/helpers/campaign-notifications.helpers.ts +127 -0
  287. package/src/helpers/campaign-queue.helpers.test.ts +442 -0
  288. package/src/helpers/campaign-queue.helpers.ts +122 -0
  289. package/src/helpers/campaign-unsubscribe-page.ts +107 -0
  290. package/src/helpers/campaign-unsubscribe.helpers.ts +56 -0
  291. package/src/helpers/campaign-webhook.helpers.test.ts +137 -0
  292. package/src/helpers/consentflow-deadline.helpers.ts +22 -0
  293. package/src/helpers/consentflow-legacy-migration.helpers.ts +179 -0
  294. package/src/helpers/contract-events.helpers.ts +35 -3
  295. package/src/helpers/contract-requests.helpers.ts +1 -1
  296. package/src/helpers/contract.helpers.ts +5 -1
  297. package/src/helpers/credential-display.helpers.test.ts +68 -0
  298. package/src/helpers/credential-display.helpers.ts +15 -0
  299. package/src/helpers/credential-refresh-email.helpers.ts +5 -12
  300. package/src/helpers/credential-refresh-materiality.helpers.test.ts +138 -1
  301. package/src/helpers/credential-refresh-materiality.helpers.ts +62 -1
  302. package/src/helpers/credential-refresh-proof.helpers.test.ts +1 -1
  303. package/src/helpers/credential-refresh-proof.helpers.ts +2 -2
  304. package/src/helpers/credential-refresh.helpers.ts +1166 -376
  305. package/src/helpers/credential-status-mutation.helpers.test.ts +155 -0
  306. package/src/helpers/credential-status-mutation.helpers.ts +166 -0
  307. package/src/helpers/credential.helpers.ts +19 -11
  308. package/src/helpers/finalize-inbox.helpers.ts +1 -1
  309. package/src/helpers/inbox-refresh.helpers.ts +34 -8
  310. package/src/helpers/inbox.helpers.ts +2 -0
  311. package/src/helpers/learnCard.helpers.ts +23 -0
  312. package/src/helpers/managed-status.helpers.test.ts +101 -0
  313. package/src/helpers/managed-status.helpers.ts +147 -0
  314. package/src/helpers/notification-delivery-boundary.helpers.test.ts +114 -0
  315. package/src/helpers/notification-webhook-fetch.helpers.test.ts +228 -0
  316. package/src/helpers/notification-webhook-fetch.helpers.ts +166 -0
  317. package/src/helpers/notificationQueue.helpers.ts +5 -0
  318. package/src/helpers/notifications.helpers.ts +19 -12
  319. package/src/helpers/refresh-send-intent.helpers.test.ts +60 -0
  320. package/src/helpers/refresh-send-intent.helpers.ts +81 -18
  321. package/src/helpers/send-contract.helpers.ts +36 -0
  322. package/src/helpers/status-list.helpers.test.ts +29 -12
  323. package/src/helpers/status-list.helpers.ts +329 -20
  324. package/src/models/ConsentFlowContract.ts +3 -0
  325. package/src/models/ConsentFlowContractVersion.ts +50 -0
  326. package/src/models/ConsentFlowTerms.ts +4 -0
  327. package/src/models/Credential.ts +2 -0
  328. package/src/models/CredentialRefresh.ts +2 -0
  329. package/src/models/Profile.ts +2 -0
  330. package/src/models/campaign-constraints.ts +13 -8
  331. package/src/models/index.ts +2 -0
  332. package/src/openapi.ts +21 -0
  333. package/src/routes/app-store.ts +2 -1
  334. package/src/routes/boosts.ts +219 -137
  335. package/src/routes/campaigns.ts +98 -19
  336. package/src/routes/contracts.ts +433 -115
  337. package/src/routes/credential-input-privacy.test.ts +92 -0
  338. package/src/routes/credential-refreshes.ts +273 -2
  339. package/src/routes/federation.ts +7 -2
  340. package/src/routes/inbox.ts +6 -1
  341. package/src/routes/index.ts +31 -2
  342. package/src/routes/workflows.ts +61 -46
  343. package/src/services/delivery/adapters/postmark.adapter.test.ts +70 -1
  344. package/src/services/delivery/adapters/postmark.adapter.ts +84 -11
  345. package/src/services/delivery/delivery.service.ts +4 -0
  346. package/src/types/campaign.ts +14 -1
  347. package/src/types/consentflowcontract.ts +43 -2
  348. package/src/types/credential-refresh.ts +11 -1
  349. package/src/types/credential.ts +2 -0
  350. package/test/boost-status-cleanup.spec.ts +123 -0
  351. package/test/campaigns-email.unit.spec.ts +268 -0
  352. package/test/campaigns.spec.ts +804 -30
  353. package/test/consent-autoboost-idempotency.spec.ts +432 -0
  354. package/test/consent-data-boundaries.spec.ts +322 -26
  355. package/test/consent-legacy-migration.spec.ts +315 -0
  356. package/test/consent-recipients.spec.ts +7 -7
  357. package/test/consent-version-updates.spec.ts +761 -0
  358. package/test/consentflow.spec.ts +698 -226
  359. package/test/contract-requests.spec.ts +55 -9
  360. package/test/credential-refresh-allocation.spec.ts +212 -14
  361. package/test/credential-refresh-email.spec.ts +6 -10
  362. package/test/credential-refresh-endpoint.spec.ts +3 -0
  363. package/test/credential-refresh-publication.spec.ts +52 -15
  364. package/test/credential-storage.neo4j.spec.ts +33 -6
  365. package/test/helpers/legacy-autoboost.ts +48 -0
  366. package/test/holder-mode-send.spec.ts +710 -0
  367. package/test/inbox-refresh.spec.ts +105 -0
  368. package/test/inbox-security.e2e.ts +18 -22
  369. package/test/managed-status-revocation.spec.ts +970 -0
  370. package/test/notifications-worker.spec.ts +31 -25
  371. package/test/refresh-send.spec.ts +334 -5
  372. package/test/smart-resume-consent.spec.ts +1 -1
  373. package/test/verification/campaigns.ts +40 -0
  374. package/vitest.campaigns.config.ts +2 -0
  375. package/vitest.config.ts +14 -0
@@ -12,12 +12,12 @@ export declare const AppManifestTypeValidator: z.ZodObject<{
12
12
  rawCredential: z.ZodRecord<z.ZodString, z.ZodUnknown>;
13
13
  category: z.ZodOptional<z.ZodEnum<{
14
14
  Achievement: "Achievement";
15
- Membership: "Membership";
16
15
  Skill: "Skill";
17
16
  ID: "ID";
18
17
  "Learning History": "Learning History";
19
18
  "Work History": "Work History";
20
19
  "Social Badges": "Social Badges";
20
+ Membership: "Membership";
21
21
  Accomplishment: "Accomplishment";
22
22
  Experiences: "Experiences";
23
23
  Accommodation: "Accommodation";
@@ -37,12 +37,12 @@ export declare const AppManifestTypeValidator: z.ZodObject<{
37
37
  achievementType: z.ZodOptional<z.ZodString>;
38
38
  category: z.ZodOptional<z.ZodEnum<{
39
39
  Achievement: "Achievement";
40
- Membership: "Membership";
41
40
  Skill: "Skill";
42
41
  ID: "ID";
43
42
  "Learning History": "Learning History";
44
43
  "Work History": "Work History";
45
44
  "Social Badges": "Social Badges";
45
+ Membership: "Membership";
46
46
  Accomplishment: "Accomplishment";
47
47
  Experiences: "Experiences";
48
48
  Accommodation: "Accommodation";
@@ -87,12 +87,12 @@ export declare const AppManifestTypeValidator: z.ZodObject<{
87
87
  read: z.ZodObject<{
88
88
  credentialCategories: z.ZodDefault<z.ZodArray<z.ZodEnum<{
89
89
  Achievement: "Achievement";
90
- Membership: "Membership";
91
90
  Skill: "Skill";
92
91
  ID: "ID";
93
92
  "Learning History": "Learning History";
94
93
  "Work History": "Work History";
95
94
  "Social Badges": "Social Badges";
95
+ Membership: "Membership";
96
96
  Accomplishment: "Accomplishment";
97
97
  Experiences: "Experiences";
98
98
  Accommodation: "Accommodation";
@@ -100,8 +100,8 @@ export declare const AppManifestTypeValidator: z.ZodObject<{
100
100
  }>>>;
101
101
  personalFields: z.ZodDefault<z.ZodArray<z.ZodEnum<{
102
102
  name: "name";
103
- email: "email";
104
103
  phone: "phone";
104
+ email: "email";
105
105
  country: "country";
106
106
  birthDate: "birthDate";
107
107
  avatar: "avatar";
@@ -110,12 +110,12 @@ export declare const AppManifestTypeValidator: z.ZodObject<{
110
110
  write: z.ZodObject<{
111
111
  credentialCategories: z.ZodDefault<z.ZodArray<z.ZodEnum<{
112
112
  Achievement: "Achievement";
113
- Membership: "Membership";
114
113
  Skill: "Skill";
115
114
  ID: "ID";
116
115
  "Learning History": "Learning History";
117
116
  "Work History": "Work History";
118
117
  "Social Badges": "Social Badges";
118
+ Membership: "Membership";
119
119
  Accomplishment: "Accomplishment";
120
120
  Experiences: "Experiences";
121
121
  Accommodation: "Accommodation";
@@ -152,12 +152,12 @@ export declare const AppManifestVersionTypeValidator: z.ZodObject<{
152
152
  rawCredential: z.ZodRecord<z.ZodString, z.ZodUnknown>;
153
153
  category: z.ZodOptional<z.ZodEnum<{
154
154
  Achievement: "Achievement";
155
- Membership: "Membership";
156
155
  Skill: "Skill";
157
156
  ID: "ID";
158
157
  "Learning History": "Learning History";
159
158
  "Work History": "Work History";
160
159
  "Social Badges": "Social Badges";
160
+ Membership: "Membership";
161
161
  Accomplishment: "Accomplishment";
162
162
  Experiences: "Experiences";
163
163
  Accommodation: "Accommodation";
@@ -177,12 +177,12 @@ export declare const AppManifestVersionTypeValidator: z.ZodObject<{
177
177
  achievementType: z.ZodOptional<z.ZodString>;
178
178
  category: z.ZodOptional<z.ZodEnum<{
179
179
  Achievement: "Achievement";
180
- Membership: "Membership";
181
180
  Skill: "Skill";
182
181
  ID: "ID";
183
182
  "Learning History": "Learning History";
184
183
  "Work History": "Work History";
185
184
  "Social Badges": "Social Badges";
185
+ Membership: "Membership";
186
186
  Accomplishment: "Accomplishment";
187
187
  Experiences: "Experiences";
188
188
  Accommodation: "Accommodation";
@@ -227,12 +227,12 @@ export declare const AppManifestVersionTypeValidator: z.ZodObject<{
227
227
  read: z.ZodObject<{
228
228
  credentialCategories: z.ZodDefault<z.ZodArray<z.ZodEnum<{
229
229
  Achievement: "Achievement";
230
- Membership: "Membership";
231
230
  Skill: "Skill";
232
231
  ID: "ID";
233
232
  "Learning History": "Learning History";
234
233
  "Work History": "Work History";
235
234
  "Social Badges": "Social Badges";
235
+ Membership: "Membership";
236
236
  Accomplishment: "Accomplishment";
237
237
  Experiences: "Experiences";
238
238
  Accommodation: "Accommodation";
@@ -240,8 +240,8 @@ export declare const AppManifestVersionTypeValidator: z.ZodObject<{
240
240
  }>>>;
241
241
  personalFields: z.ZodDefault<z.ZodArray<z.ZodEnum<{
242
242
  name: "name";
243
- email: "email";
244
243
  phone: "phone";
244
+ email: "email";
245
245
  country: "country";
246
246
  birthDate: "birthDate";
247
247
  avatar: "avatar";
@@ -250,12 +250,12 @@ export declare const AppManifestVersionTypeValidator: z.ZodObject<{
250
250
  write: z.ZodObject<{
251
251
  credentialCategories: z.ZodDefault<z.ZodArray<z.ZodEnum<{
252
252
  Achievement: "Achievement";
253
- Membership: "Membership";
254
253
  Skill: "Skill";
255
254
  ID: "ID";
256
255
  "Learning History": "Learning History";
257
256
  "Work History": "Work History";
258
257
  "Social Badges": "Social Badges";
258
+ Membership: "Membership";
259
259
  Accomplishment: "Accomplishment";
260
260
  Experiences: "Experiences";
261
261
  Accommodation: "Accommodation";
@@ -1,4 +1,5 @@
1
- import type { CampaignStatus } from '@learncard/types';
1
+ import { z } from 'zod';
2
+ import { type CampaignStatus } from '@learncard/types';
2
3
  export type CampaignRecord = {
3
4
  id: string;
4
5
  name: string;
@@ -16,4 +17,15 @@ export type CampaignAudienceQuery = {
16
17
  match: string;
17
18
  params: Record<string, unknown>;
18
19
  };
20
+ export declare const CampaignDispatchJobValidator: z.ZodObject<{
21
+ campaignId: z.ZodString;
22
+ campaignCreatedAt: z.ZodISODateTime;
23
+ channel: z.ZodDefault<z.ZodEnum<{
24
+ email: "email";
25
+ notify: "notify";
26
+ }>>;
27
+ afterProfileId: z.ZodOptional<z.ZodString>;
28
+ dispatchId: z.ZodUUID;
29
+ }, z.core.$strict>;
30
+ export type CampaignDispatchJob = z.input<typeof CampaignDispatchJobValidator>;
19
31
  //# sourceMappingURL=campaign.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"campaign.d.ts","sourceRoot":"","sources":["../../src/types/campaign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"campaign.d.ts","sourceRoot":"","sources":["../../src/types/campaign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,MAAM,cAAc,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAEvF,eAAO,MAAM,4BAA4B;;;;;;;;;kBAQ5B,CAAC;AAEd,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC"}
@@ -7,6 +7,60 @@ type FlatReferral = {
7
7
  [Key in keyof z.infer<typeof ConsentFlowReferralValidator> as `referral.${Key}`]?: string;
8
8
  };
9
9
  type FlatConsentTerms = Partial<Record<`terms.${string}`, string | boolean | string[]>>;
10
+ export declare const DbContractVersionValidator: z.ZodObject<{
11
+ id: z.ZodString;
12
+ version: z.ZodCoercedNumber<unknown>;
13
+ contract: z.ZodObject<{
14
+ read: z.ZodPrefault<z.ZodObject<{
15
+ anonymize: z.ZodOptional<z.ZodBoolean>;
16
+ credentials: z.ZodPrefault<z.ZodObject<{
17
+ categories: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
18
+ required: z.ZodBoolean;
19
+ defaultEnabled: z.ZodOptional<z.ZodBoolean>;
20
+ reason: z.ZodOptional<z.ZodString>;
21
+ }, z.core.$strip>>>;
22
+ }, z.core.$strip>>;
23
+ personal: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
24
+ required: z.ZodBoolean;
25
+ defaultEnabled: z.ZodOptional<z.ZodBoolean>;
26
+ reason: z.ZodOptional<z.ZodString>;
27
+ }, z.core.$strip>>>;
28
+ }, z.core.$strip>>;
29
+ write: z.ZodPrefault<z.ZodObject<{
30
+ credentials: z.ZodPrefault<z.ZodObject<{
31
+ categories: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
32
+ required: z.ZodBoolean;
33
+ defaultEnabled: z.ZodOptional<z.ZodBoolean>;
34
+ reason: z.ZodOptional<z.ZodString>;
35
+ }, z.core.$strip>>>;
36
+ }, z.core.$strip>>;
37
+ personal: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
38
+ required: z.ZodBoolean;
39
+ defaultEnabled: z.ZodOptional<z.ZodBoolean>;
40
+ reason: z.ZodOptional<z.ZodString>;
41
+ }, z.core.$strip>>>;
42
+ }, z.core.$strip>>;
43
+ }, z.core.$strip>;
44
+ name: z.ZodString;
45
+ subtitle: z.ZodOptional<z.ZodString>;
46
+ description: z.ZodOptional<z.ZodString>;
47
+ reasonForAccessing: z.ZodOptional<z.ZodString>;
48
+ image: z.ZodOptional<z.ZodString>;
49
+ needsGuardianConsent: z.ZodOptional<z.ZodBoolean>;
50
+ redirectUrl: z.ZodOptional<z.ZodString>;
51
+ frontDoorBoostUri: z.ZodOptional<z.ZodString>;
52
+ expiresAt: z.ZodOptional<z.ZodString>;
53
+ autoboosts: z.ZodDefault<z.ZodArray<z.ZodUnknown>>;
54
+ writers: z.ZodDefault<z.ZodArray<z.ZodString>>;
55
+ reason: z.ZodOptional<z.ZodString>;
56
+ createdAt: z.ZodString;
57
+ kind: z.ZodOptional<z.ZodEnum<{
58
+ relaxed: "relaxed";
59
+ expanded_optional: "expanded_optional";
60
+ requires_consent: "requires_consent";
61
+ }>>;
62
+ }, z.core.$strip>;
63
+ export type DbContractVersionType = z.infer<typeof DbContractVersionValidator>;
10
64
  export declare const DbContractValidator: z.ZodObject<{
11
65
  id: z.ZodString;
12
66
  name: z.ZodString;
@@ -17,18 +71,20 @@ export declare const DbContractValidator: z.ZodObject<{
17
71
  redirectUrl: z.ZodOptional<z.ZodString>;
18
72
  frontDoorBoostUri: z.ZodOptional<z.ZodString>;
19
73
  image: z.ZodOptional<z.ZodString>;
20
- contract: z.ZodObject<{
74
+ contract: z.ZodPrefault<z.ZodObject<{
21
75
  read: z.ZodPrefault<z.ZodObject<{
22
76
  anonymize: z.ZodOptional<z.ZodBoolean>;
23
77
  credentials: z.ZodPrefault<z.ZodObject<{
24
78
  categories: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
25
79
  required: z.ZodBoolean;
26
80
  defaultEnabled: z.ZodOptional<z.ZodBoolean>;
81
+ reason: z.ZodOptional<z.ZodString>;
27
82
  }, z.core.$strip>>>;
28
83
  }, z.core.$strip>>;
29
84
  personal: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
30
85
  required: z.ZodBoolean;
31
86
  defaultEnabled: z.ZodOptional<z.ZodBoolean>;
87
+ reason: z.ZodOptional<z.ZodString>;
32
88
  }, z.core.$strip>>>;
33
89
  }, z.core.$strip>>;
34
90
  write: z.ZodPrefault<z.ZodObject<{
@@ -36,32 +92,138 @@ export declare const DbContractValidator: z.ZodObject<{
36
92
  categories: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
37
93
  required: z.ZodBoolean;
38
94
  defaultEnabled: z.ZodOptional<z.ZodBoolean>;
95
+ reason: z.ZodOptional<z.ZodString>;
39
96
  }, z.core.$strip>>>;
40
97
  }, z.core.$strip>>;
41
98
  personal: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
42
99
  required: z.ZodBoolean;
43
100
  defaultEnabled: z.ZodOptional<z.ZodBoolean>;
101
+ reason: z.ZodOptional<z.ZodString>;
44
102
  }, z.core.$strip>>>;
45
103
  }, z.core.$strip>>;
46
- }, z.core.$strip>;
104
+ }, z.core.$strip>>;
47
105
  createdAt: z.ZodString;
48
106
  updatedAt: z.ZodString;
49
107
  expiresAt: z.ZodOptional<z.ZodString>;
50
108
  audienceVersion: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
51
109
  hasConsented: z.ZodOptional<z.ZodBoolean>;
110
+ currentVersion: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
111
+ status: z.ZodOptional<z.ZodEnum<{
112
+ active: "active";
113
+ retired: "retired";
114
+ }>>;
115
+ version: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
116
+ latestUpdate: z.ZodPreprocess<z.ZodOptional<z.ZodOptional<z.ZodObject<{
117
+ fromVersion: z.ZodNumber;
118
+ toVersion: z.ZodNumber;
119
+ kind: z.ZodEnum<{
120
+ relaxed: "relaxed";
121
+ expanded_optional: "expanded_optional";
122
+ requires_consent: "requires_consent";
123
+ }>;
124
+ reason: z.ZodOptional<z.ZodString>;
125
+ diff: z.ZodObject<{
126
+ added: z.ZodArray<z.ZodObject<{
127
+ area: z.ZodEnum<{
128
+ read: "read";
129
+ write: "write";
130
+ }>;
131
+ type: z.ZodEnum<{
132
+ credential: "credential";
133
+ personal: "personal";
134
+ }>;
135
+ key: z.ZodString;
136
+ required: z.ZodBoolean;
137
+ reason: z.ZodOptional<z.ZodString>;
138
+ }, z.core.$strip>>;
139
+ removed: z.ZodArray<z.ZodObject<{
140
+ area: z.ZodEnum<{
141
+ read: "read";
142
+ write: "write";
143
+ }>;
144
+ type: z.ZodEnum<{
145
+ credential: "credential";
146
+ personal: "personal";
147
+ }>;
148
+ key: z.ZodString;
149
+ required: z.ZodBoolean;
150
+ reason: z.ZodOptional<z.ZodString>;
151
+ }, z.core.$strip>>;
152
+ changed: z.ZodArray<z.ZodObject<{
153
+ area: z.ZodEnum<{
154
+ read: "read";
155
+ write: "write";
156
+ }>;
157
+ type: z.ZodEnum<{
158
+ credential: "credential";
159
+ personal: "personal";
160
+ }>;
161
+ key: z.ZodString;
162
+ required: z.ZodBoolean;
163
+ reason: z.ZodOptional<z.ZodString>;
164
+ }, z.core.$strip>>;
165
+ details: z.ZodOptional<z.ZodArray<z.ZodObject<{
166
+ field: z.ZodEnum<{
167
+ name: "name";
168
+ description: "description";
169
+ image: "image";
170
+ expiresAt: "expiresAt";
171
+ subtitle: "subtitle";
172
+ reasonForAccessing: "reasonForAccessing";
173
+ needsGuardianConsent: "needsGuardianConsent";
174
+ redirectUrl: "redirectUrl";
175
+ frontDoorBoostUri: "frontDoorBoostUri";
176
+ writers: "writers";
177
+ autoboosts: "autoboosts";
178
+ }>;
179
+ before: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodArray<z.ZodString>]>>;
180
+ after: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodArray<z.ZodString>]>>;
181
+ }, z.core.$strip>>>;
182
+ }, z.core.$strip>;
183
+ reconsentDeadline: z.ZodOptional<z.ZodString>;
184
+ createdAt: z.ZodString;
185
+ preview: z.ZodObject<{
186
+ headline: z.ZodString;
187
+ subhead: z.ZodString;
188
+ rows: z.ZodArray<z.ZodObject<{
189
+ scope: z.ZodObject<{
190
+ area: z.ZodEnum<{
191
+ read: "read";
192
+ write: "write";
193
+ }>;
194
+ type: z.ZodEnum<{
195
+ credential: "credential";
196
+ personal: "personal";
197
+ }>;
198
+ key: z.ZodString;
199
+ required: z.ZodBoolean;
200
+ reason: z.ZodOptional<z.ZodString>;
201
+ }, z.core.$strip>;
202
+ change: z.ZodEnum<{
203
+ added: "added";
204
+ removed: "removed";
205
+ changed: "changed";
206
+ }>;
207
+ label: z.ZodString;
208
+ subtitle: z.ZodString;
209
+ }, z.core.$strip>>;
210
+ primaryLabel: z.ZodString;
211
+ }, z.core.$strip>;
212
+ }, z.core.$strip>>>, unknown>;
52
213
  }, z.core.$strip>;
53
214
  export type DbContractType = z.infer<typeof DbContractValidator>;
54
- export type FlatDbContractType = DbContractType & {
55
- contract: any;
215
+ export type FlatDbContractType = Omit<DbContractType, 'contract' | 'latestUpdate'> & Partial<Record<`contract.${string}`, string | boolean>> & {
216
+ latestUpdate?: string;
56
217
  };
57
218
  export declare const DbTransactionValidator: z.ZodObject<{
58
219
  id: z.ZodString;
59
220
  action: z.ZodEnum<{
60
- update: "update";
61
- write: "write";
62
221
  consent: "consent";
222
+ write: "write";
223
+ update: "update";
63
224
  sync: "sync";
64
225
  withdraw: "withdraw";
226
+ reconsent: "reconsent";
65
227
  }>;
66
228
  terms: z.ZodObject<{
67
229
  read: z.ZodPrefault<z.ZodObject<{
@@ -118,10 +280,16 @@ export declare const DbTermsValidator: z.ZodObject<{
118
280
  mutationVersion: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
119
281
  id: z.ZodString;
120
282
  status: z.ZodEnum<{
121
- stale: "stale";
122
283
  live: "live";
284
+ suspended: "suspended";
285
+ consumed: "consumed";
123
286
  withdrawn: "withdrawn";
287
+ needs_reconsent: "needs_reconsent";
124
288
  }>;
289
+ consentedVersion: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
290
+ lastReviewedVersion: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
291
+ reconsentDeadline: z.ZodOptional<z.ZodString>;
292
+ newOptionsUntil: z.ZodOptional<z.ZodString>;
125
293
  terms: z.ZodPrefault<z.ZodObject<{
126
294
  read: z.ZodPrefault<z.ZodObject<{
127
295
  anonymize: z.ZodOptional<z.ZodBoolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"consentflowcontract.d.ts","sourceRoot":"","sources":["../../src/types/consentflowcontract.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,oCAAoC,EACpC,4BAA4B,EAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,KAAK,oBAAoB,GAAG;KAEpB,GAAG,IAAI,MAAM,CAAC,CAAC,KAAK,CAChB,OAAO,oCAAoC,CAC9C,IAAI,oBAAoB,GAAG,EAAE,CACjC,CAAC,EAAE,MAAM;CACb,CAAC;AAEF,KAAK,YAAY,GAAG;KACf,GAAG,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,IAAI,YAAY,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM;CAC5F,CAAC;AAEF,KAAK,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;AAExF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgB9B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACjE,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG;IAAE,QAAQ,EAAE,GAAG,CAAA;CAAE,CAAC;AAEpE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASjC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACvE,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACpC,iBAAiB,EACjB,kBAAkB,GAAG,OAAO,GAAG,UAAU,CAC5C,GACG,gBAAgB,GAChB,oBAAoB,GACpB,YAAY,CAAC;AAEjB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkB3B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC3D,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,kBAAkB,GAAG,OAAO,GAAG,UAAU,CAAC,GACtF,gBAAgB,GAChB,oBAAoB,GACpB,YAAY,CAAC"}
1
+ {"version":3,"file":"consentflowcontract.d.ts","sourceRoot":"","sources":["../../src/types/consentflowcontract.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,oCAAoC,EACpC,4BAA4B,EAE/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,KAAK,oBAAoB,GAAG;KAEpB,GAAG,IAAI,MAAM,CAAC,CAAC,KAAK,CAChB,OAAO,oCAAoC,CAC9C,IAAI,oBAAoB,GAAG,EAAE,CACjC,CAAC,EAAE,MAAM;CACb,CAAC;AAEF,KAAK,YAAY,GAAG;KACf,GAAG,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,IAAI,YAAY,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM;CAC5F,CAAC;AAEF,KAAK,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;AAExF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBrC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE/E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4B9B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACjE,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,cAAc,CAAC,GAC9E,OAAO,CAAC,MAAM,CAAC,YAAY,MAAM,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASjC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACvE,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACpC,iBAAiB,EACjB,kBAAkB,GAAG,OAAO,GAAG,UAAU,CAC5C,GACG,gBAAgB,GAChB,oBAAoB,GACpB,YAAY,CAAC;AAEjB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsB3B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC3D,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,kBAAkB,GAAG,OAAO,GAAG,UAAU,CAAC,GACtF,gBAAgB,GAChB,oBAAoB,GACpB,YAAY,CAAC"}
@@ -26,6 +26,13 @@ export declare const CredentialRefreshRecordValidator: z.ZodObject<{
26
26
  materialDigest: z.ZodOptional<z.ZodString>;
27
27
  rootMaterialDigest: z.ZodOptional<z.ZodString>;
28
28
  credentialStatusDigest: z.ZodOptional<z.ZodString>;
29
+ credentialStatusBinding: z.ZodOptional<z.ZodString>;
30
+ refreshServiceBinding: z.ZodOptional<z.ZodString>;
31
+ encryptionMode: z.ZodOptional<z.ZodEnum<{
32
+ network: "network";
33
+ holder: "holder";
34
+ }>>;
35
+ statusEntries: z.ZodOptional<z.ZodString>;
29
36
  credentialSubjectDigest: z.ZodOptional<z.ZodString>;
30
37
  boostId: z.ZodOptional<z.ZodString>;
31
38
  signingMode: z.ZodOptional<z.ZodEnum<{
@@ -34,6 +41,11 @@ export declare const CredentialRefreshRecordValidator: z.ZodObject<{
34
41
  }>>;
35
42
  idempotencyKey: z.ZodOptional<z.ZodString>;
36
43
  updateSummary: z.ZodOptional<z.ZodString>;
44
+ updateReason: z.ZodOptional<z.ZodEnum<{
45
+ corrected: "corrected";
46
+ updated: "updated";
47
+ reissued: "reissued";
48
+ }>>;
37
49
  credentialDisplayName: z.ZodOptional<z.ZodString>;
38
50
  lastPublishedAt: z.ZodOptional<z.ZodString>;
39
51
  notificationWindowKey: z.ZodOptional<z.ZodString>;
@@ -76,6 +88,11 @@ export declare const CredentialRefreshVersionNodeValidator: z.ZodObject<{
76
88
  "signing-authority": "signing-authority";
77
89
  }>;
78
90
  updateSummary: z.ZodOptional<z.ZodString>;
91
+ updateReason: z.ZodOptional<z.ZodEnum<{
92
+ corrected: "corrected";
93
+ updated: "updated";
94
+ reissued: "reissued";
95
+ }>>;
79
96
  credentialDisplayName: z.ZodOptional<z.ZodString>;
80
97
  idempotencyKey: z.ZodOptional<z.ZodString>;
81
98
  refreshIdempotencyKey: z.ZodOptional<z.ZodString>;
@@ -103,6 +120,11 @@ export declare const CredentialRefreshVersionRecordValidator: z.ZodObject<{
103
120
  }>;
104
121
  idempotencyKey: z.ZodOptional<z.ZodString>;
105
122
  updateSummary: z.ZodOptional<z.ZodString>;
123
+ updateReason: z.ZodOptional<z.ZodEnum<{
124
+ corrected: "corrected";
125
+ updated: "updated";
126
+ reissued: "reissued";
127
+ }>>;
106
128
  credentialDisplayName: z.ZodOptional<z.ZodString>;
107
129
  refreshVersionKey: z.ZodString;
108
130
  publishedAt: z.ZodString;
@@ -134,6 +156,11 @@ export declare const AdvanceCredentialRefreshHeadParamsValidator: z.ZodObject<{
134
156
  "signing-authority": "signing-authority";
135
157
  }>;
136
158
  updateSummary: z.ZodOptional<z.ZodString>;
159
+ updateReason: z.ZodOptional<z.ZodEnum<{
160
+ corrected: "corrected";
161
+ updated: "updated";
162
+ reissued: "reissued";
163
+ }>>;
137
164
  credentialDisplayName: z.ZodOptional<z.ZodString>;
138
165
  idempotencyKey: z.ZodOptional<z.ZodString>;
139
166
  expectedState: z.ZodOptional<z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"credential-refresh.d.ts","sourceRoot":"","sources":["../../src/types/credential-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,+BAA+B;;;;;EAK1C,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAGrF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkD3C,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAEvF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;iBAajD,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sCAAsC,CAAC,CAAC;AASnG,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6BhD,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAGjG,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAElD,CAAC;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAChD,OAAO,uCAAuC,CACjD,CAAC;AAEF,eAAO,MAAM,2CAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuBtD,CAAC;AACH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,2CAA2C,CACrD,CAAC;AAEF,eAAO,MAAM,2CAA2C;;;;EAOtD,CAAC;AACH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,2CAA2C,CACrD,CAAC;AAEF,eAAO,MAAM,2CAA2C;;;;;;;;;iBAKtD,CAAC;AACH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,2CAA2C,CACrD,CAAC"}
1
+ {"version":3,"file":"credential-refresh.d.ts","sourceRoot":"","sources":["../../src/types/credential-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,eAAO,MAAM,+BAA+B;;;;;EAK1C,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAGrF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyD3C,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAEvF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;iBAajD,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sCAAsC,CAAC,CAAC;AASnG,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BhD,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAGjG,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAElD,CAAC;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAChD,OAAO,uCAAuC,CACjD,CAAC;AAEF,eAAO,MAAM,2CAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwBtD,CAAC;AACH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,2CAA2C,CACrD,CAAC;AAEF,eAAO,MAAM,2CAA2C;;;;EAOtD,CAAC;AACH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,2CAA2C,CACrD,CAAC;AAEF,eAAO,MAAM,2CAA2C;;;;;;;;;iBAKtD,CAAC;AACH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,2CAA2C,CACrD,CAAC"}
@@ -9,6 +9,11 @@ export declare const CredentialValidator: z.ZodObject<{
9
9
  id: z.ZodString;
10
10
  credential: z.ZodString;
11
11
  statusEntries: z.ZodOptional<z.ZodString>;
12
+ statusOwnerProfileId: z.ZodOptional<z.ZodString>;
13
+ statusReservationMode: z.ZodOptional<z.ZodEnum<{
14
+ strict: "strict";
15
+ lenient: "lenient";
16
+ }>>;
12
17
  }, z.core.$strip>;
13
18
  export type CredentialType = z.infer<typeof CredentialValidator>;
14
19
  //# sourceMappingURL=credential.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../src/types/credential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAG1E,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,wBAAwB,EAAE,CAAC;CACtD;AAED,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../src/types/credential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAG1E,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,wBAAwB,EAAE,CAAC;CACtD;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;iBAM9B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -7,8 +7,8 @@ export declare const IntegrationValidator: z.ZodObject<{
7
7
  whitelistedDomains: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
8
8
  status: z.ZodDefault<z.ZodEnum<{
9
9
  active: "active";
10
- paused: "paused";
11
10
  setup: "setup";
11
+ paused: "paused";
12
12
  }>>;
13
13
  guideType: z.ZodOptional<z.ZodString>;
14
14
  guideState: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
@@ -24,8 +24,8 @@ export declare const FlatIntegrationValidator: z.ZodObject<{
24
24
  whitelistedDomains: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
25
25
  status: z.ZodDefault<z.ZodEnum<{
26
26
  active: "active";
27
- paused: "paused";
28
27
  setup: "setup";
28
+ paused: "paused";
29
29
  }>>;
30
30
  guideType: z.ZodOptional<z.ZodString>;
31
31
  guideState: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
@@ -47,8 +47,8 @@ export declare const IntegrationUpdateValidator: z.ZodObject<{
47
47
  rotatePublishableKey: z.ZodOptional<z.ZodBoolean>;
48
48
  status: z.ZodOptional<z.ZodEnum<{
49
49
  active: "active";
50
- paused: "paused";
51
50
  setup: "setup";
51
+ paused: "paused";
52
52
  }>>;
53
53
  guideType: z.ZodOptional<z.ZodString>;
54
54
  guideState: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
package/lambda.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { bootstrapLambda } from '@learncard/service-config';
2
+ import type * as LambdaApplication from './lambdaApp';
2
3
 
3
4
  import { base, stages } from './src/config/stageConfig';
4
5
 
5
- type LambdaApp = typeof import('./lambdaApp');
6
+ type LambdaApp = typeof LambdaApplication;
6
7
 
7
8
  const getApplication = bootstrapLambda<LambdaApp>({
8
9
  base,
@@ -10,48 +11,77 @@ const getApplication = bootstrapLambda<LambdaApp>({
10
11
  stage: process.env.AWS_LAMBDA_FUNCTION_NAME
11
12
  ? process.env.LAMBDA_STAGE
12
13
  : process.env.CONFIG_STAGE,
14
+ // Stage configuration must be installed before importing database-bound modules.
13
15
  importApp: () => import('./lambdaApp'),
14
16
  });
15
17
 
18
+ let migrationReadiness: Promise<void> | undefined;
19
+ const ensureMigrationReady = async () => {
20
+ if (!migrationReadiness) {
21
+ const migration = import('./src/helpers/consentflow-legacy-migration.helpers').then(
22
+ ({ migrateLegacyConsentFlowContracts }) => migrateLegacyConsentFlowContracts()
23
+ );
24
+ migrationReadiness = migration;
25
+ migration.catch(() => {
26
+ if (migrationReadiness === migration) migrationReadiness = undefined;
27
+ });
28
+ }
29
+ await migrationReadiness;
30
+ };
31
+
32
+ const getReadyApplication = async () => {
33
+ const application = await getApplication();
34
+ await ensureMigrationReady();
35
+ return application;
36
+ };
37
+
16
38
  export const trpcHandler = async (...args: Parameters<LambdaApp['trpcHandler']>) =>
17
- (await getApplication()).trpcHandler(...args);
39
+ (await getReadyApplication()).trpcHandler(...args);
18
40
 
19
41
  export const openApiHandler = async (...args: Parameters<LambdaApp['openApiHandler']>) =>
20
- (await getApplication()).openApiHandler(...args);
42
+ (await getReadyApplication()).openApiHandler(...args);
21
43
 
22
44
  export const _trpcHandler = async (...args: Parameters<LambdaApp['_trpcHandler']>) =>
23
- (await getApplication())._trpcHandler(...args);
45
+ (await getReadyApplication())._trpcHandler(...args);
24
46
 
25
47
  export const _openApiHandler = async (...args: Parameters<LambdaApp['_openApiHandler']>) =>
26
- (await getApplication())._openApiHandler(...args);
48
+ (await getReadyApplication())._openApiHandler(...args);
27
49
 
28
50
  export const swaggerUiHandler = async (...args: Parameters<LambdaApp['swaggerUiHandler']>) =>
29
- (await getApplication()).swaggerUiHandler(...args);
51
+ (await getReadyApplication()).swaggerUiHandler(...args);
30
52
 
31
53
  export const skillsViewerHandler = async (...args: Parameters<LambdaApp['skillsViewerHandler']>) =>
32
- (await getApplication()).skillsViewerHandler(...args);
54
+ (await getReadyApplication()).skillsViewerHandler(...args);
33
55
 
34
56
  export const statusListsHandler = async (...args: Parameters<LambdaApp['statusListsHandler']>) =>
35
- (await getApplication()).statusListsHandler(...args);
57
+ (await getReadyApplication()).statusListsHandler(...args);
36
58
 
37
59
  export const credentialRefreshHandler = async (
38
60
  ...args: Parameters<LambdaApp['credentialRefreshHandler']>
39
- ) => (await getApplication()).credentialRefreshHandler(...args);
61
+ ) => (await getReadyApplication()).credentialRefreshHandler(...args);
40
62
 
41
63
  export const inboxQueueWorker = async (...args: Parameters<LambdaApp['inboxQueueWorker']>) =>
42
- (await getApplication()).inboxQueueWorker(...args);
64
+ (await getReadyApplication()).inboxQueueWorker(...args);
43
65
 
44
66
  export const inboxQueueDispatcher = async (
45
67
  ...args: Parameters<LambdaApp['inboxQueueDispatcher']>
46
- ) => (await getApplication()).inboxQueueDispatcher(...args);
68
+ ) => (await getReadyApplication()).inboxQueueDispatcher(...args);
47
69
 
48
70
  export const inboxDeadLetterWorker = async (
49
71
  ...args: Parameters<LambdaApp['inboxDeadLetterWorker']>
50
- ) => (await getApplication()).inboxDeadLetterWorker(...args);
72
+ ) => (await getReadyApplication()).inboxDeadLetterWorker(...args);
51
73
 
52
74
  export const notificationsWorker = async (...args: Parameters<LambdaApp['notificationsWorker']>) =>
53
- (await getApplication()).notificationsWorker(...args);
75
+ (await getReadyApplication()).notificationsWorker(...args);
76
+
77
+ export const campaignDispatchWorker = async (
78
+ ...args: Parameters<LambdaApp['campaignDispatchWorker']>
79
+ ) => (await getReadyApplication()).campaignDispatchWorker(...args);
54
80
 
55
81
  export const inboxMaintenanceHandler = async (
56
82
  ...args: Parameters<LambdaApp['inboxMaintenanceHandler']>
57
- ) => (await getApplication()).inboxMaintenanceHandler(...args);
83
+ ) => (await getReadyApplication()).inboxMaintenanceHandler(...args);
84
+
85
+ export const campaignUnsubscribeHandler = async (
86
+ ...args: Parameters<LambdaApp['campaignUnsubscribeHandler']>
87
+ ) => (await getReadyApplication()).campaignUnsubscribeHandler(...args);