@envoy/envoy-integrations-sdk 2.0.1-beta.5 → 2.0.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 (291) hide show
  1. package/README.md +178 -110
  2. package/dist/base/EnvoyAPI.d.ts +28 -0
  3. package/dist/base/EnvoyAPI.d.ts.map +1 -0
  4. package/dist/base/EnvoyAPI.js +121 -0
  5. package/dist/base/EnvoyPluginStoragePipeline.d.ts +51 -0
  6. package/dist/base/EnvoyPluginStoragePipeline.d.ts.map +1 -0
  7. package/dist/base/EnvoyPluginStoragePipeline.js +140 -0
  8. package/dist/constants.d.ts +5 -0
  9. package/dist/constants.d.ts.map +1 -0
  10. package/dist/constants.js +12 -0
  11. package/dist/factories/entryEventBodyFactory.d.ts +42 -0
  12. package/dist/factories/entryEventBodyFactory.d.ts.map +1 -0
  13. package/dist/factories/entryEventBodyFactory.js +105 -0
  14. package/dist/factories/eventBodyFactory.d.ts +18 -0
  15. package/dist/factories/eventBodyFactory.d.ts.map +1 -0
  16. package/dist/factories/eventBodyFactory.js +15 -0
  17. package/dist/factories/inviteEventBodyFactory.d.ts +38 -0
  18. package/dist/factories/inviteEventBodyFactory.d.ts.map +1 -0
  19. package/dist/factories/inviteEventBodyFactory.js +92 -0
  20. package/dist/factories/metaFactory.d.ts +10 -0
  21. package/dist/factories/metaFactory.d.ts.map +1 -0
  22. package/dist/factories/metaFactory.js +90 -0
  23. package/dist/factories/routeBodyFactory.d.ts +19 -0
  24. package/dist/factories/routeBodyFactory.d.ts.map +1 -0
  25. package/dist/factories/routeBodyFactory.js +15 -0
  26. package/dist/index.d.ts +52 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +74 -0
  29. package/dist/internal/EnvoyEntryEvent.d.ts +3 -0
  30. package/dist/internal/EnvoyEntryEvent.d.ts.map +1 -0
  31. package/dist/internal/EnvoyEntryEvent.js +2 -0
  32. package/dist/internal/EnvoyInviteEvent.d.ts +3 -0
  33. package/dist/internal/EnvoyInviteEvent.d.ts.map +1 -0
  34. package/dist/internal/EnvoyInviteEvent.js +2 -0
  35. package/dist/internal/EnvoyLocationEvent.d.ts +3 -0
  36. package/dist/internal/EnvoyLocationEvent.d.ts.map +1 -0
  37. package/dist/internal/EnvoyLocationEvent.js +2 -0
  38. package/dist/internal/EnvoyOption.d.ts +6 -0
  39. package/dist/internal/EnvoyOption.d.ts.map +1 -0
  40. package/dist/internal/EnvoyOption.js +2 -0
  41. package/dist/internal/EnvoyOptionsRouteParams.d.ts +7 -0
  42. package/dist/internal/EnvoyOptionsRouteParams.d.ts.map +1 -0
  43. package/dist/internal/EnvoyOptionsRouteParams.js +2 -0
  44. package/dist/internal/EnvoyOptionsRouteResponseBody.d.ts +4 -0
  45. package/dist/internal/EnvoyOptionsRouteResponseBody.d.ts.map +1 -0
  46. package/dist/internal/EnvoyOptionsRouteResponseBody.js +2 -0
  47. package/dist/internal/EnvoyPluginJobUpdate.d.ts +11 -0
  48. package/dist/internal/EnvoyPluginJobUpdate.d.ts.map +1 -0
  49. package/dist/internal/EnvoyPluginJobUpdate.js +2 -0
  50. package/dist/internal/EnvoyRemoteValueRouteResponseBody.d.ts +5 -0
  51. package/dist/internal/EnvoyRemoteValueRouteResponseBody.d.ts.map +1 -0
  52. package/dist/internal/EnvoyRemoteValueRouteResponseBody.js +2 -0
  53. package/dist/internal/EnvoySelectedValuesRouteParams.d.ts +5 -0
  54. package/dist/internal/EnvoySelectedValuesRouteParams.d.ts.map +1 -0
  55. package/dist/internal/EnvoySelectedValuesRouteParams.js +2 -0
  56. package/dist/internal/EnvoySelectedValuesRouteResponseBody.d.ts +4 -0
  57. package/dist/internal/EnvoySelectedValuesRouteResponseBody.d.ts.map +1 -0
  58. package/dist/internal/EnvoySelectedValuesRouteResponseBody.js +2 -0
  59. package/dist/internal/EnvoyStorageCommand.d.ts +42 -0
  60. package/dist/internal/EnvoyStorageCommand.d.ts.map +1 -0
  61. package/dist/internal/EnvoyStorageCommand.js +7 -0
  62. package/dist/internal/EnvoyStorageResult.d.ts +4 -0
  63. package/dist/internal/EnvoyStorageResult.d.ts.map +1 -0
  64. package/dist/internal/EnvoyStorageResult.js +2 -0
  65. package/dist/internal/HttpStatus.d.ts +13 -0
  66. package/dist/internal/HttpStatus.d.ts.map +1 -0
  67. package/dist/internal/HttpStatus.js +15 -0
  68. package/dist/mocks/EnvoyPluginJobMock.d.ts +12 -0
  69. package/dist/mocks/EnvoyPluginJobMock.d.ts.map +1 -0
  70. package/dist/mocks/EnvoyPluginJobMock.js +60 -0
  71. package/dist/mocks/EnvoyPluginStoragePipelineMock.d.ts +24 -0
  72. package/dist/mocks/EnvoyPluginStoragePipelineMock.d.ts.map +1 -0
  73. package/dist/mocks/EnvoyPluginStoragePipelineMock.js +212 -0
  74. package/dist/payloads/EntryPayload.d.ts +80 -0
  75. package/dist/payloads/EntryPayload.d.ts.map +1 -0
  76. package/dist/payloads/EntryPayload.js +28 -0
  77. package/dist/payloads/InvitePayload.d.ts +66 -0
  78. package/dist/payloads/InvitePayload.d.ts.map +1 -0
  79. package/dist/payloads/InvitePayload.js +24 -0
  80. package/dist/payloads/LocationPayload.d.ts +7 -0
  81. package/dist/payloads/LocationPayload.d.ts.map +1 -0
  82. package/dist/payloads/LocationPayload.js +2 -0
  83. package/dist/payloads/NotificationPayload.d.ts +54 -0
  84. package/dist/payloads/NotificationPayload.d.ts.map +1 -0
  85. package/dist/payloads/NotificationPayload.js +2 -0
  86. package/dist/resources/AgreementPageResource.d.ts +17 -0
  87. package/dist/resources/AgreementPageResource.d.ts.map +1 -0
  88. package/dist/resources/AgreementPageResource.js +2 -0
  89. package/dist/resources/AgreementResource.d.ts +24 -0
  90. package/dist/resources/AgreementResource.d.ts.map +1 -0
  91. package/dist/resources/AgreementResource.js +2 -0
  92. package/dist/resources/CompanyResource.d.ts +19 -0
  93. package/dist/resources/CompanyResource.d.ts.map +1 -0
  94. package/dist/resources/CompanyResource.js +2 -0
  95. package/dist/resources/CompanyRoleResource.d.ts +8 -0
  96. package/dist/resources/CompanyRoleResource.d.ts.map +1 -0
  97. package/dist/resources/CompanyRoleResource.js +2 -0
  98. package/dist/resources/CurrentUserResource.d.ts +8 -0
  99. package/dist/resources/CurrentUserResource.d.ts.map +1 -0
  100. package/dist/resources/CurrentUserResource.js +2 -0
  101. package/dist/resources/EmployeeResource.d.ts +43 -0
  102. package/dist/resources/EmployeeResource.d.ts.map +1 -0
  103. package/dist/resources/EmployeeResource.js +2 -0
  104. package/dist/resources/FlowResource.d.ts +31 -0
  105. package/dist/resources/FlowResource.d.ts.map +1 -0
  106. package/dist/resources/FlowResource.js +2 -0
  107. package/dist/resources/InviteResource.d.ts +86 -0
  108. package/dist/resources/InviteResource.d.ts.map +1 -0
  109. package/dist/resources/InviteResource.js +2 -0
  110. package/dist/resources/LocationResource.d.ts +64 -0
  111. package/dist/resources/LocationResource.d.ts.map +1 -0
  112. package/dist/resources/LocationResource.js +2 -0
  113. package/dist/resources/LocationRoleResource.d.ts +8 -0
  114. package/dist/resources/LocationRoleResource.d.ts.map +1 -0
  115. package/dist/resources/LocationRoleResource.js +2 -0
  116. package/dist/resources/SignInFieldPageResource.d.ts +17 -0
  117. package/dist/resources/SignInFieldPageResource.d.ts.map +1 -0
  118. package/dist/resources/SignInFieldPageResource.js +2 -0
  119. package/dist/resources/SignInFieldResource.d.ts +33 -0
  120. package/dist/resources/SignInFieldResource.d.ts.map +1 -0
  121. package/dist/resources/SignInFieldResource.js +2 -0
  122. package/dist/resources/UserResource.d.ts +13 -0
  123. package/dist/resources/UserResource.d.ts.map +1 -0
  124. package/dist/resources/UserResource.js +2 -0
  125. package/dist/sdk/EnvoyMeta.d.ts +96 -0
  126. package/dist/sdk/EnvoyMeta.d.ts.map +1 -0
  127. package/dist/sdk/EnvoyMeta.js +2 -0
  128. package/dist/sdk/EnvoyPluginAPI.d.ts +31 -0
  129. package/dist/sdk/EnvoyPluginAPI.d.ts.map +1 -0
  130. package/dist/sdk/EnvoyPluginAPI.js +205 -0
  131. package/dist/sdk/EnvoyPluginJob.d.ts +49 -0
  132. package/dist/sdk/EnvoyPluginJob.d.ts.map +1 -0
  133. package/dist/sdk/EnvoyPluginJob.js +99 -0
  134. package/dist/sdk/EnvoyPluginJobAttachment.d.ts +43 -0
  135. package/dist/sdk/EnvoyPluginJobAttachment.d.ts.map +1 -0
  136. package/dist/sdk/EnvoyPluginJobAttachment.js +2 -0
  137. package/dist/sdk/EnvoyPluginSDK.d.ts +100 -0
  138. package/dist/sdk/EnvoyPluginSDK.d.ts.map +1 -0
  139. package/dist/sdk/EnvoyPluginSDK.js +204 -0
  140. package/dist/sdk/EnvoyPluginStorage.d.ts +69 -0
  141. package/dist/sdk/EnvoyPluginStorage.d.ts.map +1 -0
  142. package/dist/sdk/EnvoyPluginStorage.js +78 -0
  143. package/dist/sdk/EnvoyRequest.d.ts +116 -0
  144. package/dist/sdk/EnvoyRequest.d.ts.map +1 -0
  145. package/dist/sdk/EnvoyRequest.js +7 -0
  146. package/dist/sdk/EnvoyResponse.d.ts +42 -0
  147. package/dist/sdk/EnvoyResponse.d.ts.map +1 -0
  148. package/dist/sdk/EnvoyResponse.js +2 -0
  149. package/dist/sdk/EnvoyStorageItem.d.ts +9 -0
  150. package/dist/sdk/EnvoyStorageItem.d.ts.map +1 -0
  151. package/dist/sdk/EnvoyStorageItem.js +2 -0
  152. package/dist/sdk/EnvoyUserAPI.d.ts +119 -0
  153. package/dist/sdk/EnvoyUserAPI.d.ts.map +1 -0
  154. package/dist/sdk/EnvoyUserAPI.js +493 -0
  155. package/dist/sdk/filters.d.ts +30 -0
  156. package/dist/sdk/filters.d.ts.map +1 -0
  157. package/dist/sdk/filters.js +72 -0
  158. package/dist/sdk/handlers.d.ts +125 -0
  159. package/dist/sdk/handlers.d.ts.map +1 -0
  160. package/dist/sdk/handlers.js +108 -0
  161. package/dist/sdk/loggers.d.ts +6 -0
  162. package/dist/sdk/loggers.d.ts.map +1 -0
  163. package/dist/sdk/loggers.js +161 -0
  164. package/dist/sdk/middleware.d.ts +19 -0
  165. package/dist/sdk/middleware.d.ts.map +1 -0
  166. package/dist/sdk/middleware.js +159 -0
  167. package/dist/util/EnvoyJWT.d.ts +17 -0
  168. package/dist/util/EnvoyJWT.d.ts.map +1 -0
  169. package/dist/util/EnvoyJWT.js +54 -0
  170. package/dist/util/EnvoySignatureVerifier.d.ts +26 -0
  171. package/dist/util/EnvoySignatureVerifier.d.ts.map +1 -0
  172. package/dist/util/EnvoySignatureVerifier.js +53 -0
  173. package/dist/util/axiosConstructor.d.ts +4 -0
  174. package/dist/util/axiosConstructor.d.ts.map +1 -0
  175. package/dist/util/axiosConstructor.js +58 -0
  176. package/dist/util/errorHandling.d.ts +2 -0
  177. package/dist/util/errorHandling.d.ts.map +1 -0
  178. package/dist/util/errorHandling.js +18 -0
  179. package/dist/util/json-api/JSONAPIData.d.ts +5 -0
  180. package/dist/util/json-api/JSONAPIData.d.ts.map +1 -0
  181. package/dist/util/json-api/JSONAPIData.js +2 -0
  182. package/dist/util/json-api/JSONAPIFilterParams.d.ts +5 -0
  183. package/dist/util/json-api/JSONAPIFilterParams.d.ts.map +1 -0
  184. package/dist/util/json-api/JSONAPIFilterParams.js +2 -0
  185. package/dist/util/json-api/JSONAPIModel.d.ts +10 -0
  186. package/dist/util/json-api/JSONAPIModel.d.ts.map +1 -0
  187. package/dist/util/json-api/JSONAPIModel.js +2 -0
  188. package/dist/util/json-api/JSONAPIPaginationParams.d.ts +9 -0
  189. package/dist/util/json-api/JSONAPIPaginationParams.d.ts.map +1 -0
  190. package/dist/util/json-api/JSONAPIPaginationParams.js +2 -0
  191. package/dist/util/json-api/JSONAPIParams.d.ts +4 -0
  192. package/dist/util/json-api/JSONAPIParams.d.ts.map +1 -0
  193. package/dist/util/json-api/JSONAPIParams.js +2 -0
  194. package/dist/util/json-api/JSONAPIResponse.d.ts +6 -0
  195. package/dist/util/json-api/JSONAPIResponse.d.ts.map +1 -0
  196. package/dist/util/json-api/JSONAPIResponse.js +2 -0
  197. package/package.json +48 -13
  198. package/src/base/EnvoyAPI.ts +87 -0
  199. package/src/base/EnvoyPluginStoragePipeline.ts +99 -0
  200. package/src/constants.ts +7 -0
  201. package/src/factories/entryEventBodyFactory.ts +124 -0
  202. package/src/factories/eventBodyFactory.ts +35 -0
  203. package/src/factories/inviteEventBodyFactory.ts +107 -0
  204. package/src/factories/metaFactory.ts +109 -0
  205. package/src/factories/routeBodyFactory.ts +37 -0
  206. package/src/index.ts +86 -0
  207. package/src/internal/EnvoyEntryEvent.ts +10 -0
  208. package/src/internal/EnvoyInviteEvent.ts +13 -0
  209. package/src/internal/EnvoyLocationEvent.ts +3 -0
  210. package/src/internal/EnvoyOption.ts +6 -0
  211. package/src/internal/EnvoyOptionsRouteParams.ts +7 -0
  212. package/src/internal/EnvoyOptionsRouteResponseBody.ts +4 -0
  213. package/src/internal/EnvoyPluginJobUpdate.ts +11 -0
  214. package/src/internal/EnvoyRemoteValueRouteResponseBody.ts +4 -0
  215. package/src/internal/EnvoySelectedValuesRouteParams.ts +5 -0
  216. package/src/internal/EnvoySelectedValuesRouteResponseBody.ts +4 -0
  217. package/src/internal/EnvoyStorageCommand.ts +60 -0
  218. package/src/internal/EnvoyStorageResult.ts +5 -0
  219. package/src/internal/HttpStatus.ts +12 -0
  220. package/src/mocks/EnvoyPluginJobMock.ts +33 -0
  221. package/src/mocks/EnvoyPluginStoragePipelineMock.ts +204 -0
  222. package/src/payloads/EntryPayload.ts +101 -0
  223. package/src/payloads/InvitePayload.ts +79 -0
  224. package/src/payloads/LocationPayload.ts +8 -0
  225. package/src/payloads/NotificationPayload.ts +54 -0
  226. package/src/resources/AgreementPageResource.ts +19 -0
  227. package/src/resources/AgreementResource.ts +26 -0
  228. package/src/resources/CompanyResource.ts +21 -0
  229. package/src/resources/CompanyRoleResource.ts +10 -0
  230. package/src/resources/CurrentUserResource.ts +10 -0
  231. package/src/resources/EmployeeResource.ts +47 -0
  232. package/src/resources/FlowResource.ts +35 -0
  233. package/src/resources/InviteResource.ts +92 -0
  234. package/src/resources/LocationResource.ts +68 -0
  235. package/src/resources/LocationRoleResource.ts +10 -0
  236. package/src/resources/SignInFieldPageResource.ts +23 -0
  237. package/src/resources/SignInFieldResource.ts +35 -0
  238. package/src/resources/UserResource.ts +14 -0
  239. package/src/sdk/EnvoyMeta.ts +101 -0
  240. package/src/sdk/EnvoyPluginAPI.ts +95 -0
  241. package/src/sdk/EnvoyPluginJob.ts +90 -0
  242. package/src/sdk/EnvoyPluginJobAttachment.ts +48 -0
  243. package/src/sdk/EnvoyPluginSDK.ts +185 -0
  244. package/src/sdk/EnvoyPluginStorage.ts +83 -0
  245. package/src/sdk/EnvoyRequest.ts +145 -0
  246. package/src/sdk/EnvoyResponse.ts +46 -0
  247. package/src/sdk/EnvoyStorageItem.ts +9 -0
  248. package/src/sdk/EnvoyUserAPI.ts +339 -0
  249. package/src/sdk/filters.ts +96 -0
  250. package/src/sdk/handlers.ts +234 -0
  251. package/src/sdk/loggers.ts +165 -0
  252. package/src/sdk/middleware.ts +101 -0
  253. package/src/util/EnvoyJWT.ts +51 -0
  254. package/src/util/EnvoySignatureVerifier.ts +61 -0
  255. package/src/util/axiosConstructor.ts +46 -0
  256. package/src/util/errorHandling.ts +15 -0
  257. package/src/util/json-api/JSONAPIData.ts +4 -0
  258. package/src/util/json-api/JSONAPIFilterParams.ts +5 -0
  259. package/src/util/json-api/JSONAPIModel.ts +10 -0
  260. package/src/util/json-api/JSONAPIPaginationParams.ts +12 -0
  261. package/src/util/json-api/JSONAPIParams.ts +3 -0
  262. package/src/util/json-api/JSONAPIResponse.ts +5 -0
  263. package/.eslintrc.js +0 -46
  264. package/.github/workflows/package.yaml +0 -43
  265. package/.github/workflows/test.yaml +0 -15
  266. package/asynchandler.md +0 -46
  267. package/envoyapi.md +0 -150
  268. package/envoyjwt.md +0 -46
  269. package/envoypluginjob.md +0 -106
  270. package/envoypluginsdk.md +0 -87
  271. package/envoypluginstorage.md +0 -95
  272. package/envoypluginstoragepipeline.md +0 -125
  273. package/envoysignatureverifier.md +0 -43
  274. package/errormiddleware.md +0 -41
  275. package/index.js +0 -49
  276. package/lib/EnvoyAPI.js +0 -564
  277. package/lib/EnvoyJWT.js +0 -72
  278. package/lib/EnvoyPluginJob.js +0 -124
  279. package/lib/EnvoyPluginSDK.js +0 -192
  280. package/lib/EnvoyPluginStorage.js +0 -121
  281. package/lib/EnvoyPluginStoragePipeline.js +0 -155
  282. package/lib/EnvoyResponseError.js +0 -18
  283. package/lib/EnvoySignatureVerifier.js +0 -67
  284. package/lib/HttpStatus.js +0 -20
  285. package/lib/asyncHandler.js +0 -17
  286. package/lib/axios.js +0 -34
  287. package/lib/errorMiddleware.js +0 -27
  288. package/lib/middleware.js +0 -110
  289. package/middleware.md +0 -53
  290. package/test/axios.test.js +0 -57
  291. package/test/promises.test.js +0 -82
@@ -0,0 +1,185 @@
1
+ import EnvoyMeta, { EnvoyEventMeta, EnvoyRouteMeta } from './EnvoyMeta';
2
+ import EnvoyPluginStorage from './EnvoyPluginStorage';
3
+ import EnvoyPluginJob from './EnvoyPluginJob';
4
+ import EnvoyJWT from '../util/EnvoyJWT';
5
+ import EnvoyUserAPI from './EnvoyUserAPI';
6
+ import EnvoyPluginAPI from './EnvoyPluginAPI';
7
+ import JSONAPIData from '../util/json-api/JSONAPIData';
8
+ import EntryPayload, { normalizeEntryPayload } from '../payloads/EntryPayload';
9
+ import InvitePayload, { normalizeInvitePayload } from '../payloads/InvitePayload';
10
+
11
+ /**
12
+ * Every Envoy request has a `meta` and `payload`.
13
+ * @category Request
14
+ */
15
+ export interface EnvoyRequestBody<Meta, Payload> {
16
+ meta: Meta,
17
+ payload: Payload,
18
+ }
19
+
20
+ /**
21
+ * Sets up all relevant Envoy functions.
22
+ * Attaches itself to every request object using our {@link middleware},
23
+ * to allow for easy access to Envoy functions.
24
+ *
25
+ * @category SDK
26
+ */
27
+ export default class EnvoyPluginSDK<Meta = unknown, Payload = unknown> {
28
+ /**
29
+ * Body of the request.
30
+ * use `meta` or `payload` to access the relevant properties,
31
+ * instead of this directly.
32
+ */
33
+ private readonly body: EnvoyRequestBody<Meta, Payload>;
34
+
35
+ /**
36
+ * Verified that the request comes from Envoy.
37
+ */
38
+ private readonly isVerified: boolean;
39
+
40
+ /**
41
+ * The internally managed plugin access token.
42
+ * Use the `pluginAPI` instead of this directly.
43
+ */
44
+ private readonly pluginAccessToken: string | null = null;
45
+
46
+ /**
47
+ * Don't create an instance of this class directly.
48
+ *
49
+ * Instead, use {@link middleware} to automatically attach an instance to `req` on every request.
50
+ * @param body - Request body
51
+ * @param isVerified - If the request has been verified via {@link EnvoySignatureVerifier}
52
+ * @param pluginAccessToken - An access token from {@link EnvoyPluginAPI.loginAsPlugin}
53
+ */
54
+ constructor(body: EnvoyRequestBody<Meta, Payload>, isVerified = false, pluginAccessToken: string | null = null) {
55
+ this.body = body;
56
+ this.isVerified = isVerified;
57
+ this.pluginAccessToken = pluginAccessToken;
58
+ }
59
+
60
+ /**
61
+ * The metadata for the request.
62
+ * Either an {@link EnvoyEventMeta}} or {@link EnvoyRouteMeta}.
63
+ */
64
+ get meta(): Meta {
65
+ if (!this.isVerified) {
66
+ throw new Error('Could not verify meta.');
67
+ }
68
+ return this.body.meta;
69
+ }
70
+
71
+ /**
72
+ * The payload for the request.
73
+ * For events, it's some Envoy event payload, like an {@link EntryPayload} or {@link InvitePayload}.
74
+ * For setup step validation URLs, it's the form submitted values for a validation URL.
75
+ */
76
+ get payload(): Payload {
77
+ if (!this.isVerified) {
78
+ throw new Error('Could not verify payload.');
79
+ }
80
+ const payload = this.body.payload as unknown as JSONAPIData;
81
+ switch (payload.type) {
82
+ case 'entries':
83
+ return normalizeEntryPayload(payload as unknown as EntryPayload) as unknown as Payload;
84
+ case 'invites':
85
+ return normalizeInvitePayload(payload as unknown as InvitePayload) as unknown as Payload;
86
+ default:
87
+ return payload as unknown as Payload;
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Envoy API scoped to the user.
93
+ * Used only in routes.
94
+ */
95
+ get userAPI(): EnvoyUserAPI {
96
+ const meta = this.meta as unknown as EnvoyRouteMeta;
97
+ const { auth } = meta;
98
+ let accessToken: string | undefined = auth?.access_token;
99
+ if (!accessToken && ('forwarded_bearer_token' in meta)) {
100
+ accessToken = meta.forwarded_bearer_token;
101
+ }
102
+ if (!accessToken) {
103
+ throw new Error("This user's API token was not found. Either no scopes were asked for, or this is a route.");
104
+ }
105
+ return new EnvoyUserAPI(accessToken);
106
+ }
107
+
108
+ /**
109
+ * Envoy API scoped to the plugin.
110
+ * Used to perform storage or job operations.
111
+ */
112
+ get pluginAPI(): EnvoyPluginAPI {
113
+ const { pluginAccessToken } = this;
114
+ if (!pluginAccessToken) {
115
+ throw new Error('No API token found. Are your Envoy client ID and secret set?');
116
+ }
117
+ return new EnvoyPluginAPI(pluginAccessToken);
118
+ }
119
+
120
+ /**
121
+ * A function that returns an instance of EnvoyPluginStorage,
122
+ * optionally scoped to an install ID.
123
+ *
124
+ * Use {@link installStorage} or {@link globalStorage} instead of this directly.
125
+ */
126
+ private get getStorage(): (installId?: string) => EnvoyPluginStorage {
127
+ return (installId?) => new EnvoyPluginStorage(this.pluginAPI, installId);
128
+ }
129
+
130
+ /**
131
+ * Storage scoped to the install.
132
+ */
133
+ get installStorage(): EnvoyPluginStorage {
134
+ const { install_id: installId } = this.meta as unknown as EnvoyMeta;
135
+ if (!installId) {
136
+ throw new Error('No install ID found in meta.');
137
+ }
138
+ return this.getStorage(installId);
139
+ }
140
+
141
+ /**
142
+ * Storage scoped globally (across installs).
143
+ */
144
+ get globalStorage(): EnvoyPluginStorage {
145
+ return this.getStorage();
146
+ }
147
+
148
+ /**
149
+ * Returns a job based on an ID.
150
+ */
151
+ get getJob(): (jobId: string) => EnvoyPluginJob {
152
+ return (jobId: string) => new EnvoyPluginJob(this.pluginAPI, jobId);
153
+ }
154
+
155
+ /**
156
+ * Returns the current job's ID.
157
+ */
158
+ get jobId(): string | null {
159
+ const { meta } = this;
160
+ if ('job' in meta) {
161
+ return (meta as unknown as EnvoyEventMeta).job.id;
162
+ }
163
+ return null;
164
+ }
165
+
166
+ /**
167
+ * Perform operations on the current job.
168
+ */
169
+ get job(): EnvoyPluginJob {
170
+ const { jobId } = this;
171
+ if (!jobId) {
172
+ throw new Error('No job found in meta. Are you in a worker?');
173
+ }
174
+ return this.getJob(jobId);
175
+ }
176
+
177
+ /**
178
+ * A utility to encode and decode JWTs.
179
+ * Useful for verifiable communications between plugin endpoints.
180
+ */
181
+ // eslint-disable-next-line class-methods-use-this
182
+ get jwt(): EnvoyJWT {
183
+ return new EnvoyJWT();
184
+ }
185
+ }
@@ -0,0 +1,83 @@
1
+ import EnvoyPluginStoragePipeline from '../base/EnvoyPluginStoragePipeline';
2
+ import { EnvoyStorageSetUniqueNumOptions, EnvoyStorageSetUniqueOptions } from '../internal/EnvoyStorageCommand';
3
+ import EnvoyStorageItem from './EnvoyStorageItem';
4
+ import EnvoyPluginAPI from './EnvoyPluginAPI';
5
+
6
+ /**
7
+ * A key-value storage that can be scoped to a specific install,
8
+ * or to the plugin itself.
9
+ *
10
+ * @category Storage
11
+ * @category Request Object
12
+ */
13
+ export default class EnvoyPluginStorage {
14
+ protected readonly api: EnvoyPluginAPI;
15
+
16
+ readonly installId: string | undefined;
17
+
18
+ constructor(pluginAPI: EnvoyPluginAPI, installId?: string) {
19
+ this.api = pluginAPI;
20
+ this.installId = installId;
21
+ }
22
+
23
+ /**
24
+ * Creates a new pipeline instance.
25
+ */
26
+ pipeline(): EnvoyPluginStoragePipeline {
27
+ return new EnvoyPluginStoragePipeline(this.api, this.installId);
28
+ }
29
+
30
+ /**
31
+ * Gets a single {@link EnvoyStorageItem} from storage.
32
+ *
33
+ * Wrapper for single pipeline get.
34
+ */
35
+ get<Value = unknown>(key: string) {
36
+ return this.pipeline().get(key).executeSingle<EnvoyStorageItem<Value> | { key: string, 'value': undefined }>();
37
+ }
38
+
39
+ /**
40
+ * Sets a single {@link EnvoyStorageItem} from storage.
41
+ *
42
+ * Wrapper for single pipeline set.
43
+ */
44
+ set<Value = unknown>(key: string, value: Value) {
45
+ return this.pipeline().set(key, value).executeSingle<EnvoyStorageItem<Value>>();
46
+ }
47
+
48
+ /**
49
+ * Sets a single unique string {@link EnvoyStorageItem} from storage.
50
+ *
51
+ * Wrapper for single pipeline setUnique.
52
+ */
53
+ setUnique(key: string, options: EnvoyStorageSetUniqueOptions = {}) {
54
+ return this.pipeline().setUnique(key, options).executeSingle<EnvoyStorageItem<string> | { key: string, 'value': undefined }>();
55
+ }
56
+
57
+ /**
58
+ * Sets a single unique number {@link EnvoyStorageItem} from storage.
59
+ *
60
+ * Wrapper for single pipeline setUnique.
61
+ */
62
+ setUniqueNum(key: string, options: EnvoyStorageSetUniqueNumOptions = {}) {
63
+ return this.pipeline().setUniqueNum(key, options).executeSingle<EnvoyStorageItem<number> | { key: string, 'value': undefined }>();
64
+ }
65
+
66
+ /**
67
+ * Unsets an {@link EnvoyStorageItem} from storage. Returns null if the item did not previously exist.
68
+ *
69
+ * Wrapper for single pipeline unset.
70
+ */
71
+ unset<Value = unknown>(key: string) {
72
+ return this.pipeline().unset(key).executeSingle<EnvoyStorageItem<Value> | { key: string, 'value': undefined }>();
73
+ }
74
+
75
+ /**
76
+ * Returns an array of {@link EnvoyStorageItem} from storage.
77
+ *
78
+ * Wrapper for single pipeline list.
79
+ */
80
+ list<Value = unknown>(page = 1) {
81
+ return this.pipeline().list(page).executeSingle<Array<EnvoyStorageItem<Value>>>();
82
+ }
83
+ }
@@ -0,0 +1,145 @@
1
+ import { Request } from 'express';
2
+ import EnvoyPluginSDK from './EnvoyPluginSDK';
3
+ import EnvoyMeta, { EnvoyEventMeta, EnvoyRouteMeta } from './EnvoyMeta';
4
+ import EntryPayload from '../payloads/EntryPayload';
5
+ import InvitePayload from '../payloads/InvitePayload';
6
+ import LocationPayload from '../payloads/LocationPayload';
7
+ import NotificationPayload from '../payloads/NotificationPayload';
8
+ import EnvoyEntryEvent from '../internal/EnvoyEntryEvent';
9
+ import EnvoyInviteEvent from '../internal/EnvoyInviteEvent';
10
+ import EnvoyLocationEvent from '../internal/EnvoyLocationEvent';
11
+ import EnvoyOptionsRouteResponseBody from '../internal/EnvoyOptionsRouteResponseBody';
12
+ import EnvoyOptionsRouteParams from '../internal/EnvoyOptionsRouteParams';
13
+ import EnvoySelectedValuesRouteResponseBody from '../internal/EnvoySelectedValuesRouteResponseBody';
14
+ import EnvoySelectedValuesRouteParams from '../internal/EnvoySelectedValuesRouteParams';
15
+ import EnvoyRemoteValueRouteResponseBody from '../internal/EnvoyRemoteValueRouteResponseBody';
16
+
17
+ /**
18
+ * @internal
19
+ */
20
+ export const VERIFIED = Symbol('verified');
21
+
22
+ /**
23
+ * @internal
24
+ */
25
+ export interface VerifiedRequest extends Request {
26
+ [VERIFIED]: boolean
27
+ }
28
+
29
+ /**
30
+ * Base type for Envoy requests.
31
+ * You probably won't need to use this type directly.
32
+ * For routes, use {@link EnvoyRouteRequest},
33
+ * and for events, use {@link EnvoyEntryEventRequest} or {@link EnvoyInviteEventRequest}.
34
+ *
35
+ * @category Base
36
+ */
37
+ export interface EnvoyBaseRequest<Meta = EnvoyMeta, Payload = unknown> extends VerifiedRequest {
38
+ envoy: EnvoyPluginSDK<Meta, Payload>
39
+ }
40
+
41
+ /**
42
+ * Use to type your `req` object in Envoy route handlers such as validation URLs.
43
+ *
44
+ * @category Request
45
+ */
46
+ export type EnvoyRouteRequest<
47
+ Payload = unknown,
48
+ Config = Record<string, unknown>,
49
+ Params = Record<string, unknown>,
50
+ > = EnvoyBaseRequest<EnvoyRouteMeta<Config, Params>, Payload>;
51
+
52
+ /**
53
+ * Use to type your `req` object in Envoy "migration" route handlers.
54
+ *
55
+ * @category Request
56
+ */
57
+ export type EnvoyMigrationRouteRequest<OldConfig = Record<string, unknown>> =
58
+ EnvoyRouteRequest<never, OldConfig, never>;
59
+
60
+ /**
61
+ * Use to type your `req` object in Envoy "options URL" route handlers.
62
+ *
63
+ * @category Request
64
+ */
65
+ export type EnvoyOptionsRouteRequest<Config = Record<string, unknown>> =
66
+ EnvoyRouteRequest<EnvoyOptionsRouteResponseBody, Config, EnvoyOptionsRouteParams>;
67
+
68
+ /**
69
+ * Use to type your `req` object in Envoy "selected values URL" route handlers.
70
+ *
71
+ * @category Request
72
+ */
73
+ export type EnvoySelectedValuesRouteRequest<Config = Record<string, unknown>> =
74
+ EnvoyRouteRequest<EnvoySelectedValuesRouteResponseBody, Config, EnvoySelectedValuesRouteParams>;
75
+
76
+ /**
77
+ * Use to type your `req` object in Envoy "remote value URL" route handlers.
78
+ *
79
+ * @category Request
80
+ */
81
+ export type EnvoyRemoteValueRouteRequest<Config = Record<string, unknown>> =
82
+ EnvoyRouteRequest<EnvoyRemoteValueRouteResponseBody, Config, never>;
83
+
84
+ /**
85
+ * Use to type your `req` object in Envoy "validation URL" route handlers.
86
+ *
87
+ * @category Request
88
+ */
89
+ export type EnvoyValidationRouteRequest<Payload = Record<string, unknown>, Config = Record<string, unknown>> =
90
+ EnvoyRouteRequest<Payload, Config, never>;
91
+
92
+ /**
93
+ * Base type for event requests.
94
+ * You should use {@link EnvoyEntryEventRequest} or {@link EnvoyInviteEventRequest}.
95
+ *
96
+ * @category Request
97
+ */
98
+ export type EnvoyEventRequest<Event extends string = string, Payload = unknown, Config = Record<string, unknown>> =
99
+ EnvoyBaseRequest<EnvoyEventMeta<Event, Config>, Payload>;
100
+
101
+ /**
102
+ * Use to type your `req` object in entry event handlers,
103
+ * such as handlers for `entry_sign_in`.
104
+ *
105
+ * @category Request
106
+ */
107
+ export type EnvoyEntryEventRequest<Config = Record<string, unknown>> =
108
+ EnvoyEventRequest<EnvoyEntryEvent, EntryPayload, Config>;
109
+
110
+ /**
111
+ * Use to type your `req` object in invite event handlers,
112
+ * such as handlers for `invite_created` or `upcoming_visit`.
113
+ *
114
+ * @category Request
115
+ */
116
+ export type EnvoyInviteEventRequest<Config = Record<string, unknown>> =
117
+ EnvoyEventRequest<EnvoyInviteEvent, InvitePayload, Config>;
118
+
119
+ /**
120
+ * Use to type your `req` object in location event handlers,
121
+ * such as handlers for `location_capacity_updated`.
122
+ *
123
+ * @category Request
124
+ */
125
+ export type EnvoyLocationEventRequest<Config = Record<string, unknown>> =
126
+ EnvoyEventRequest<EnvoyLocationEvent, LocationPayload, Config>;
127
+
128
+ /**
129
+ * Use to type your `req` object in your notification event handler.
130
+ *
131
+ * @category Request
132
+ */
133
+ export type EnvoyNotificationEventRequest<Config = Record<string, unknown>> =
134
+ EnvoyEventRequest<string, NotificationPayload, Config>;
135
+
136
+ /**
137
+ * You probably won't need to use this type directly.
138
+ * For routes, use {@link EnvoyRouteRequest},
139
+ * and for events, use {@link EnvoyEntryEventRequest} or {@link EnvoyInviteEventRequest}.
140
+ *
141
+ * @category Base
142
+ */
143
+ type EnvoyRequest<Payload = unknown, Config = Record<string, unknown>> =
144
+ EnvoyBaseRequest<EnvoyRouteMeta<Config> | EnvoyEventMeta<string, Config>, Payload>;
145
+ export default EnvoyRequest;
@@ -0,0 +1,46 @@
1
+ import { Response } from 'express';
2
+ import EnvoyPluginJobAttachment from './EnvoyPluginJobAttachment';
3
+ import EnvoyOptionsRouteResponseBody from '../internal/EnvoyOptionsRouteResponseBody';
4
+ import EnvoySelectedValuesRouteResponseBody from '../internal/EnvoySelectedValuesRouteResponseBody';
5
+ import EnvoyRemoteValueRouteResponseBody from '../internal/EnvoyRemoteValueRouteResponseBody';
6
+
7
+ /**
8
+ * Use to type your `res` object in Envoy event handlers.
9
+ * @category Response
10
+ */
11
+ export default interface EnvoyResponse<Body = unknown> extends Response {
12
+ send: (body?: Body) => this;
13
+ /**
14
+ * Marks the job as "ongoing". This is useful for long-running event handling.
15
+ * Later on, you should update the job using
16
+ * {@link EnvoyPluginJob.complete}, {@link EnvoyPluginJob.fail}, or {@link EnvoyPluginJob.ignore}.
17
+ */
18
+ sendOngoing: (debugInfo?: unknown) => void;
19
+ /**
20
+ * Marks the job as "ignored". Useful when you explicitly do not want to handle the event.
21
+ */
22
+ sendIgnored: (message: string, debugInfo?: unknown, ...attachments: Array<EnvoyPluginJobAttachment>) => void;
23
+
24
+ /**
25
+ * Marks the job as "failed". The message will be communicated to the Envoy Dashboard user.
26
+ */
27
+ sendFailed: (message: string, debugInfo?: unknown, ...attachments: Array<EnvoyPluginJobAttachment>) => void;
28
+ }
29
+
30
+ /**
31
+ * Use to type your `res` object in Envoy "options URL" route handlers.
32
+ * @category Response
33
+ */
34
+ export type EnvoyOptionsRouteResponse = EnvoyResponse<EnvoyOptionsRouteResponseBody>;
35
+
36
+ /**
37
+ * Use to type your `res` object in Envoy "remote value URL" route handlers.
38
+ * @category Response
39
+ */
40
+ export type EnvoyRemoteValueRouteResponse = EnvoyResponse<EnvoyRemoteValueRouteResponseBody>;
41
+
42
+ /**
43
+ * Use to type your `res` object in Envoy "selected values URL" route handlers.
44
+ * @category Response
45
+ */
46
+ export type EnvoySelectedValuesRouteResponse = EnvoyResponse<EnvoySelectedValuesRouteResponseBody>;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @category Storage
3
+ */
4
+ type EnvoyStorageItem<Value = unknown> = {
5
+ key: string,
6
+ value: Value,
7
+ };
8
+
9
+ export default EnvoyStorageItem;