@boxyhq/saml-jackson 1.33.0 → 1.33.1-beta.1

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 (288) hide show
  1. package/dist/controller/oauth/oidc-client.d.ts +3 -3
  2. package/dist/controller/oauth/oidc-client.js +2 -1
  3. package/dist/controller/oauth/oidc-client.js.map +1 -1
  4. package/dist/controller/oauth/oidc-issuer.d.ts +2 -0
  5. package/dist/controller/oauth/oidc-issuer.js +25 -0
  6. package/dist/controller/oauth/oidc-issuer.js.map +1 -0
  7. package/dist/controller/oauth.js +36 -35
  8. package/dist/controller/oauth.js.map +1 -1
  9. package/dist/controller/sso-handler.js +1 -1
  10. package/dist/controller/sso-handler.js.map +1 -1
  11. package/dist/controller/utils.d.ts +5 -3
  12. package/dist/controller/utils.js +10 -2
  13. package/dist/controller/utils.js.map +1 -1
  14. package/dist/src/controller/admin.d.ts +27 -0
  15. package/dist/src/controller/admin.js +60 -0
  16. package/dist/src/controller/admin.js.map +1 -0
  17. package/dist/src/controller/analytics.d.ts +16 -0
  18. package/dist/src/controller/analytics.js +79 -0
  19. package/dist/src/controller/analytics.js.map +1 -0
  20. package/dist/src/controller/api.d.ts +557 -0
  21. package/dist/src/controller/api.js +806 -0
  22. package/dist/src/controller/api.js.map +1 -0
  23. package/dist/src/controller/connection/oidc.d.ts +7 -0
  24. package/dist/src/controller/connection/oidc.js +181 -0
  25. package/dist/src/controller/connection/oidc.js.map +1 -0
  26. package/dist/src/controller/connection/saml.d.ts +7 -0
  27. package/dist/src/controller/connection/saml.js +250 -0
  28. package/dist/src/controller/connection/saml.js.map +1 -0
  29. package/dist/src/controller/error.d.ts +10 -0
  30. package/dist/src/controller/error.js +13 -0
  31. package/dist/src/controller/error.js.map +1 -0
  32. package/dist/src/controller/health-check.d.ts +11 -0
  33. package/dist/src/controller/health-check.js +51 -0
  34. package/dist/src/controller/health-check.js.map +1 -0
  35. package/dist/src/controller/logout.d.ts +18 -0
  36. package/dist/src/controller/logout.js +132 -0
  37. package/dist/src/controller/logout.js.map +1 -0
  38. package/dist/src/controller/oauth/allowed.d.ts +1 -0
  39. package/dist/src/controller/oauth/allowed.js +30 -0
  40. package/dist/src/controller/oauth/allowed.js.map +1 -0
  41. package/dist/src/controller/oauth/code-verifier.d.ts +1 -0
  42. package/dist/src/controller/oauth/code-verifier.js +8 -0
  43. package/dist/src/controller/oauth/code-verifier.js.map +1 -0
  44. package/dist/src/controller/oauth/oidc-client.d.ts +12 -0
  45. package/dist/src/controller/oauth/oidc-client.js +89 -0
  46. package/dist/src/controller/oauth/oidc-client.js.map +1 -0
  47. package/dist/src/controller/oauth/redirect.d.ts +1 -0
  48. package/dist/src/controller/oauth/redirect.js +13 -0
  49. package/dist/src/controller/oauth/redirect.js.map +1 -0
  50. package/dist/src/controller/oauth.d.ts +142 -0
  51. package/dist/src/controller/oauth.js +1112 -0
  52. package/dist/src/controller/oauth.js.map +1 -0
  53. package/dist/src/controller/oidc-discovery.d.ts +22 -0
  54. package/dist/src/controller/oidc-discovery.js +47 -0
  55. package/dist/src/controller/oidc-discovery.js.map +1 -0
  56. package/dist/src/controller/setup-link.d.ts +307 -0
  57. package/dist/src/controller/setup-link.js +462 -0
  58. package/dist/src/controller/setup-link.js.map +1 -0
  59. package/dist/src/controller/sp-config.d.ts +22 -0
  60. package/dist/src/controller/sp-config.js +89 -0
  61. package/dist/src/controller/sp-config.js.map +1 -0
  62. package/dist/src/controller/sso-handler.d.ts +66 -0
  63. package/dist/src/controller/sso-handler.js +306 -0
  64. package/dist/src/controller/sso-handler.js.map +1 -0
  65. package/dist/src/controller/utils.d.ts +84 -0
  66. package/dist/src/controller/utils.js +328 -0
  67. package/dist/src/controller/utils.js.map +1 -0
  68. package/dist/src/cron/lock.d.ts +18 -0
  69. package/dist/src/cron/lock.js +98 -0
  70. package/dist/src/cron/lock.js.map +1 -0
  71. package/dist/src/db/db.d.ts +5 -0
  72. package/dist/src/db/db.js +178 -0
  73. package/dist/src/db/db.js.map +1 -0
  74. package/dist/src/db/defaultDb.d.ts +2 -0
  75. package/dist/src/db/defaultDb.js +18 -0
  76. package/dist/src/db/defaultDb.js.map +1 -0
  77. package/dist/src/db/dynamoDb.d.ts +19 -0
  78. package/dist/src/db/dynamoDb.js +320 -0
  79. package/dist/src/db/dynamoDb.js.map +1 -0
  80. package/dist/src/db/encrypter.d.ts +3 -0
  81. package/dist/src/db/encrypter.js +22 -0
  82. package/dist/src/db/encrypter.js.map +1 -0
  83. package/dist/src/db/mem.d.ts +23 -0
  84. package/dist/src/db/mem.js +186 -0
  85. package/dist/src/db/mem.js.map +1 -0
  86. package/dist/src/db/mongo.d.ts +22 -0
  87. package/dist/src/db/mongo.js +177 -0
  88. package/dist/src/db/mongo.js.map +1 -0
  89. package/dist/src/db/planetscale/entity/JacksonIndex.d.ts +5 -0
  90. package/dist/src/db/planetscale/entity/JacksonIndex.js +32 -0
  91. package/dist/src/db/planetscale/entity/JacksonIndex.js.map +1 -0
  92. package/dist/src/db/planetscale/entity/JacksonStore.d.ts +9 -0
  93. package/dist/src/db/planetscale/entity/JacksonStore.js +63 -0
  94. package/dist/src/db/planetscale/entity/JacksonStore.js.map +1 -0
  95. package/dist/src/db/planetscale/entity/JacksonTTL.d.ts +4 -0
  96. package/dist/src/db/planetscale/entity/JacksonTTL.js +27 -0
  97. package/dist/src/db/planetscale/entity/JacksonTTL.js.map +1 -0
  98. package/dist/src/db/redis.d.ts +18 -0
  99. package/dist/src/db/redis.js +214 -0
  100. package/dist/src/db/redis.js.map +1 -0
  101. package/dist/src/db/sql/entity/JacksonIndex.d.ts +7 -0
  102. package/dist/src/db/sql/entity/JacksonIndex.js +39 -0
  103. package/dist/src/db/sql/entity/JacksonIndex.js.map +1 -0
  104. package/dist/src/db/sql/entity/JacksonStore.d.ts +9 -0
  105. package/dist/src/db/sql/entity/JacksonStore.js +61 -0
  106. package/dist/src/db/sql/entity/JacksonStore.js.map +1 -0
  107. package/dist/src/db/sql/entity/JacksonTTL.d.ts +4 -0
  108. package/dist/src/db/sql/entity/JacksonTTL.js +27 -0
  109. package/dist/src/db/sql/entity/JacksonTTL.js.map +1 -0
  110. package/dist/src/db/sql/mariadb/entity/JacksonIndex.d.ts +7 -0
  111. package/dist/src/db/sql/mariadb/entity/JacksonIndex.js +39 -0
  112. package/dist/src/db/sql/mariadb/entity/JacksonIndex.js.map +1 -0
  113. package/dist/src/db/sql/mariadb/entity/JacksonStore.d.ts +9 -0
  114. package/dist/src/db/sql/mariadb/entity/JacksonStore.js +63 -0
  115. package/dist/src/db/sql/mariadb/entity/JacksonStore.js.map +1 -0
  116. package/dist/src/db/sql/mariadb/entity/JacksonTTL.d.ts +4 -0
  117. package/dist/src/db/sql/mariadb/entity/JacksonTTL.js +27 -0
  118. package/dist/src/db/sql/mariadb/entity/JacksonTTL.js.map +1 -0
  119. package/dist/src/db/sql/mssql/entity/JacksonIndex.d.ts +7 -0
  120. package/dist/src/db/sql/mssql/entity/JacksonIndex.js +39 -0
  121. package/dist/src/db/sql/mssql/entity/JacksonIndex.js.map +1 -0
  122. package/dist/src/db/sql/mssql/entity/JacksonStore.d.ts +9 -0
  123. package/dist/src/db/sql/mssql/entity/JacksonStore.js +61 -0
  124. package/dist/src/db/sql/mssql/entity/JacksonStore.js.map +1 -0
  125. package/dist/src/db/sql/mssql/entity/JacksonTTL.d.ts +4 -0
  126. package/dist/src/db/sql/mssql/entity/JacksonTTL.js +27 -0
  127. package/dist/src/db/sql/mssql/entity/JacksonTTL.js.map +1 -0
  128. package/dist/src/db/sql/mssql.d.ts +1 -0
  129. package/dist/src/db/sql/mssql.js +44 -0
  130. package/dist/src/db/sql/mssql.js.map +1 -0
  131. package/dist/src/db/sql/sql.d.ts +32 -0
  132. package/dist/src/db/sql/sql.js +318 -0
  133. package/dist/src/db/sql/sql.js.map +1 -0
  134. package/dist/src/db/sql/sqlite/entity/JacksonIndex.d.ts +7 -0
  135. package/dist/src/db/sql/sqlite/entity/JacksonIndex.js +39 -0
  136. package/dist/src/db/sql/sqlite/entity/JacksonIndex.js.map +1 -0
  137. package/dist/src/db/sql/sqlite/entity/JacksonStore.d.ts +9 -0
  138. package/dist/src/db/sql/sqlite/entity/JacksonStore.js +61 -0
  139. package/dist/src/db/sql/sqlite/entity/JacksonStore.js.map +1 -0
  140. package/dist/src/db/sql/sqlite/entity/JacksonTTL.d.ts +4 -0
  141. package/dist/src/db/sql/sqlite/entity/JacksonTTL.js +27 -0
  142. package/dist/src/db/sql/sqlite/entity/JacksonTTL.js.map +1 -0
  143. package/dist/src/db/store.d.ts +5 -0
  144. package/dist/src/db/store.js +65 -0
  145. package/dist/src/db/store.js.map +1 -0
  146. package/dist/src/db/utils.d.ts +16 -0
  147. package/dist/src/db/utils.js +28 -0
  148. package/dist/src/db/utils.js.map +1 -0
  149. package/dist/src/directory-sync/batch-events/queue.d.ts +40 -0
  150. package/dist/src/directory-sync/batch-events/queue.js +225 -0
  151. package/dist/src/directory-sync/batch-events/queue.js.map +1 -0
  152. package/dist/src/directory-sync/index.d.ts +27 -0
  153. package/dist/src/directory-sync/index.js +97 -0
  154. package/dist/src/directory-sync/index.js.map +1 -0
  155. package/dist/src/directory-sync/non-scim/google/api.d.ts +36 -0
  156. package/dist/src/directory-sync/non-scim/google/api.js +143 -0
  157. package/dist/src/directory-sync/non-scim/google/api.js.map +1 -0
  158. package/dist/src/directory-sync/non-scim/google/index.d.ts +12 -0
  159. package/dist/src/directory-sync/non-scim/google/index.js +10 -0
  160. package/dist/src/directory-sync/non-scim/google/index.js.map +1 -0
  161. package/dist/src/directory-sync/non-scim/google/oauth.d.ts +27 -0
  162. package/dist/src/directory-sync/non-scim/google/oauth.js +105 -0
  163. package/dist/src/directory-sync/non-scim/google/oauth.js.map +1 -0
  164. package/dist/src/directory-sync/non-scim/index.d.ts +24 -0
  165. package/dist/src/directory-sync/non-scim/index.js +85 -0
  166. package/dist/src/directory-sync/non-scim/index.js.map +1 -0
  167. package/dist/src/directory-sync/non-scim/syncGroupMembers.d.ts +23 -0
  168. package/dist/src/directory-sync/non-scim/syncGroupMembers.js +105 -0
  169. package/dist/src/directory-sync/non-scim/syncGroupMembers.js.map +1 -0
  170. package/dist/src/directory-sync/non-scim/syncGroups.d.ts +24 -0
  171. package/dist/src/directory-sync/non-scim/syncGroups.js +120 -0
  172. package/dist/src/directory-sync/non-scim/syncGroups.js.map +1 -0
  173. package/dist/src/directory-sync/non-scim/syncUsers.d.ts +24 -0
  174. package/dist/src/directory-sync/non-scim/syncUsers.js +120 -0
  175. package/dist/src/directory-sync/non-scim/syncUsers.js.map +1 -0
  176. package/dist/src/directory-sync/non-scim/utils.d.ts +36 -0
  177. package/dist/src/directory-sync/non-scim/utils.js +109 -0
  178. package/dist/src/directory-sync/non-scim/utils.js.map +1 -0
  179. package/dist/src/directory-sync/request.d.ts +14 -0
  180. package/dist/src/directory-sync/request.js +29 -0
  181. package/dist/src/directory-sync/request.js.map +1 -0
  182. package/dist/src/directory-sync/scim/Base.d.ts +12 -0
  183. package/dist/src/directory-sync/scim/Base.js +23 -0
  184. package/dist/src/directory-sync/scim/Base.js.map +1 -0
  185. package/dist/src/directory-sync/scim/DirectoryConfig.d.ts +343 -0
  186. package/dist/src/directory-sync/scim/DirectoryConfig.js +580 -0
  187. package/dist/src/directory-sync/scim/DirectoryConfig.js.map +1 -0
  188. package/dist/src/directory-sync/scim/DirectoryGroups.d.ts +28 -0
  189. package/dist/src/directory-sync/scim/DirectoryGroups.js +252 -0
  190. package/dist/src/directory-sync/scim/DirectoryGroups.js.map +1 -0
  191. package/dist/src/directory-sync/scim/DirectoryUsers.d.ts +25 -0
  192. package/dist/src/directory-sync/scim/DirectoryUsers.js +193 -0
  193. package/dist/src/directory-sync/scim/DirectoryUsers.js.map +1 -0
  194. package/dist/src/directory-sync/scim/Groups.d.ts +166 -0
  195. package/dist/src/directory-sync/scim/Groups.js +348 -0
  196. package/dist/src/directory-sync/scim/Groups.js.map +1 -0
  197. package/dist/src/directory-sync/scim/Users.d.ts +99 -0
  198. package/dist/src/directory-sync/scim/Users.js +215 -0
  199. package/dist/src/directory-sync/scim/Users.js.map +1 -0
  200. package/dist/src/directory-sync/scim/WebhookEventsLogger.d.ts +101 -0
  201. package/dist/src/directory-sync/scim/WebhookEventsLogger.js +165 -0
  202. package/dist/src/directory-sync/scim/WebhookEventsLogger.js.map +1 -0
  203. package/dist/src/directory-sync/scim/transform.d.ts +6 -0
  204. package/dist/src/directory-sync/scim/transform.js +37 -0
  205. package/dist/src/directory-sync/scim/transform.js.map +1 -0
  206. package/dist/src/directory-sync/scim/utils.d.ts +33 -0
  207. package/dist/src/directory-sync/scim/utils.js +129 -0
  208. package/dist/src/directory-sync/scim/utils.js.map +1 -0
  209. package/dist/src/directory-sync/types.d.ts +195 -0
  210. package/dist/src/directory-sync/types.js +10 -0
  211. package/dist/src/directory-sync/types.js.map +1 -0
  212. package/dist/src/directory-sync/utils.d.ts +19 -0
  213. package/dist/src/directory-sync/utils.js +56 -0
  214. package/dist/src/directory-sync/utils.js.map +1 -0
  215. package/dist/src/ee/branding/index.d.ts +17 -0
  216. package/dist/src/ee/branding/index.js +49 -0
  217. package/dist/src/ee/branding/index.js.map +1 -0
  218. package/dist/src/ee/common/checkLicense.d.ts +3 -0
  219. package/dist/src/ee/common/checkLicense.js +23 -0
  220. package/dist/src/ee/common/checkLicense.js.map +1 -0
  221. package/dist/src/ee/identity-federation/app.d.ts +328 -0
  222. package/dist/src/ee/identity-federation/app.js +532 -0
  223. package/dist/src/ee/identity-federation/app.js.map +1 -0
  224. package/dist/src/ee/identity-federation/idp-login.d.ts +18 -0
  225. package/dist/src/ee/identity-federation/idp-login.js +98 -0
  226. package/dist/src/ee/identity-federation/idp-login.js.map +1 -0
  227. package/dist/src/ee/identity-federation/index.d.ts +15 -0
  228. package/dist/src/ee/identity-federation/index.js +43 -0
  229. package/dist/src/ee/identity-federation/index.js.map +1 -0
  230. package/dist/src/ee/identity-federation/sso.d.ts +24 -0
  231. package/dist/src/ee/identity-federation/sso.js +124 -0
  232. package/dist/src/ee/identity-federation/sso.js.map +1 -0
  233. package/dist/src/ee/identity-federation/types.d.ts +38 -0
  234. package/dist/src/ee/identity-federation/types.js +2 -0
  235. package/dist/src/ee/identity-federation/types.js.map +1 -0
  236. package/dist/src/ee/ory/ory.d.ts +18 -0
  237. package/dist/src/ee/ory/ory.js +195 -0
  238. package/dist/src/ee/ory/ory.js.map +1 -0
  239. package/dist/src/ee/product/index.d.ts +14 -0
  240. package/dist/src/ee/product/index.js +45 -0
  241. package/dist/src/ee/product/index.js.map +1 -0
  242. package/dist/src/event/axios.d.ts +2 -0
  243. package/dist/src/event/axios.js +27 -0
  244. package/dist/src/event/axios.js.map +1 -0
  245. package/dist/src/event/index.d.ts +11 -0
  246. package/dist/src/event/index.js +53 -0
  247. package/dist/src/event/index.js.map +1 -0
  248. package/dist/src/event/types.d.ts +21 -0
  249. package/dist/src/event/types.js +2 -0
  250. package/dist/src/event/types.js.map +1 -0
  251. package/dist/src/event/utils.d.ts +4 -0
  252. package/dist/src/event/utils.js +33 -0
  253. package/dist/src/event/utils.js.map +1 -0
  254. package/dist/src/event/webhook.d.ts +3 -0
  255. package/dist/src/event/webhook.js +34 -0
  256. package/dist/src/event/webhook.js.map +1 -0
  257. package/dist/src/index.d.ts +35 -0
  258. package/dist/src/index.js +161 -0
  259. package/dist/src/index.js.map +1 -0
  260. package/dist/src/loadConnection.d.ts +4 -0
  261. package/dist/src/loadConnection.js +38 -0
  262. package/dist/src/loadConnection.js.map +1 -0
  263. package/dist/src/opentelemetry/metrics.d.ts +14 -0
  264. package/dist/src/opentelemetry/metrics.js +64 -0
  265. package/dist/src/opentelemetry/metrics.js.map +1 -0
  266. package/dist/src/saml/claims.d.ts +12 -0
  267. package/dist/src/saml/claims.js +57 -0
  268. package/dist/src/saml/claims.js.map +1 -0
  269. package/dist/src/saml/lib.d.ts +8 -0
  270. package/dist/src/saml/lib.js +29 -0
  271. package/dist/src/saml/lib.js.map +1 -0
  272. package/dist/src/saml/x509.d.ts +9 -0
  273. package/dist/src/saml/x509.js +93 -0
  274. package/dist/src/saml/x509.js.map +1 -0
  275. package/dist/src/sso-traces/index.d.ts +114 -0
  276. package/dist/src/sso-traces/index.js +229 -0
  277. package/dist/src/sso-traces/index.js.map +1 -0
  278. package/dist/src/sso-traces/types.d.ts +44 -0
  279. package/dist/src/sso-traces/types.js +2 -0
  280. package/dist/src/sso-traces/types.js.map +1 -0
  281. package/dist/src/typings.d.ts +540 -0
  282. package/dist/src/typings.js +5 -0
  283. package/dist/src/typings.js.map +1 -0
  284. package/dist/typeorm.d.ts +3 -0
  285. package/dist/typeorm.js +58 -0
  286. package/dist/typeorm.js.map +1 -0
  287. package/dist/typings.d.ts +1 -1
  288. package/package.json +7 -7
@@ -0,0 +1,328 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import crypto from 'crypto';
11
+ import * as jose from 'jose';
12
+ import saml from '@boxyhq/saml20';
13
+ import * as dbutils from '../db/utils';
14
+ import { JacksonError } from './error';
15
+ import * as redirect from './oauth/redirect';
16
+ export var IndexNames;
17
+ (function (IndexNames) {
18
+ IndexNames["EntityID"] = "entityID";
19
+ IndexNames["TenantProduct"] = "tenantProduct";
20
+ IndexNames["OIDCProviderClientID"] = "OIDCProviderClientID";
21
+ IndexNames["SSOClientID"] = "SSOClientID";
22
+ IndexNames["Product"] = "product";
23
+ // For Setup link
24
+ IndexNames["Service"] = "service";
25
+ IndexNames["SetupToken"] = "token";
26
+ IndexNames["ProductService"] = "productService";
27
+ IndexNames["TenantProductService"] = "tenantProductService";
28
+ })(IndexNames || (IndexNames = {}));
29
+ // The namespace prefix for the database store
30
+ export const storeNamespacePrefix = {
31
+ dsync: {
32
+ config: 'dsync:config',
33
+ logs: 'dsync:logs',
34
+ users: 'dsync:users',
35
+ groups: 'dsync:groups',
36
+ members: 'dsync:members',
37
+ providers: 'dsync:providers',
38
+ events: 'dsync:events',
39
+ lock: 'dsync:lock',
40
+ },
41
+ saml: {
42
+ config: 'saml:config',
43
+ },
44
+ };
45
+ export const relayStatePrefix = 'boxyhq_jackson_';
46
+ export const clientIDFederatedPrefix = 'fed_';
47
+ export const clientIDOIDCPrefix = 'oidc_';
48
+ export const validateAbsoluteUrl = (url, message) => {
49
+ try {
50
+ new URL(url);
51
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
52
+ }
53
+ catch (err) {
54
+ throw new JacksonError(message ? message : 'Invalid url', 400);
55
+ }
56
+ };
57
+ export const OAuthErrorResponse = ({ error, error_description, redirect_uri, state, }) => {
58
+ return redirect.success(redirect_uri, { error, error_description, state });
59
+ };
60
+ // https://kentcdodds.com/blog/get-a-catch-block-error-message-with-typescript
61
+ export function getErrorMessage(error) {
62
+ if (error instanceof saml.WrapError) {
63
+ return error.message + ' ' + error.inner.message;
64
+ }
65
+ if (error instanceof Error) {
66
+ return error.message;
67
+ }
68
+ return String(error);
69
+ }
70
+ export const createRandomSecret = (length) => __awaiter(void 0, void 0, void 0, function* () {
71
+ return crypto
72
+ .randomBytes(length)
73
+ .toString('base64')
74
+ .replace(/\+/g, '-')
75
+ .replace(/\//g, '_')
76
+ .replace(/=/g, '');
77
+ });
78
+ export function loadJWSPrivateKey(key, alg) {
79
+ return __awaiter(this, void 0, void 0, function* () {
80
+ const pkcs8 = Buffer.from(key, 'base64').toString('ascii');
81
+ const privateKey = yield jose.importPKCS8(pkcs8, alg);
82
+ return privateKey;
83
+ });
84
+ }
85
+ export function isJWSKeyPairLoaded(jwsKeyPair) {
86
+ if (!jwsKeyPair.private || !jwsKeyPair.public) {
87
+ return false;
88
+ }
89
+ return true;
90
+ }
91
+ export const importJWTPublicKey = (key, jwsAlg) => __awaiter(void 0, void 0, void 0, function* () {
92
+ const spki = Buffer.from(key, 'base64').toString('ascii');
93
+ const publicKey = yield jose.importSPKI(spki, jwsAlg);
94
+ return publicKey;
95
+ });
96
+ export const exportPublicKeyJWK = (key) => __awaiter(void 0, void 0, void 0, function* () {
97
+ const publicJWK = yield jose.exportJWK(key);
98
+ return publicJWK;
99
+ });
100
+ export const generateJwkThumbprint = (jwk) => __awaiter(void 0, void 0, void 0, function* () {
101
+ const thumbprint = yield jose.calculateJwkThumbprint(jwk);
102
+ return thumbprint;
103
+ });
104
+ export const computeKid = (key, jwsAlg) => __awaiter(void 0, void 0, void 0, function* () {
105
+ const importedPublicKey = yield importJWTPublicKey(key, jwsAlg);
106
+ const publicKeyJWK = yield exportPublicKeyJWK(importedPublicKey);
107
+ return yield generateJwkThumbprint(publicKeyJWK);
108
+ });
109
+ export const validateSSOConnection = (body, strategy) => {
110
+ const { defaultRedirectUrl, redirectUrl, tenant, product, description } = body;
111
+ const encodedRawMetadata = 'encodedRawMetadata' in body ? body.encodedRawMetadata : undefined;
112
+ const rawMetadata = 'rawMetadata' in body ? body.rawMetadata : undefined;
113
+ const oidcDiscoveryUrl = 'oidcDiscoveryUrl' in body ? body.oidcDiscoveryUrl : undefined;
114
+ const oidcMetadata = 'oidcMetadata' in body ? body.oidcMetadata : undefined;
115
+ const oidcClientId = 'oidcClientId' in body ? body.oidcClientId : undefined;
116
+ const oidcClientSecret = 'oidcClientSecret' in body ? body.oidcClientSecret : undefined;
117
+ const metadataUrl = 'metadataUrl' in body ? body.metadataUrl : undefined;
118
+ if (strategy !== 'saml' && strategy !== 'oidc') {
119
+ throw new JacksonError(`Strategy: ${strategy} not supported`, 400);
120
+ }
121
+ if (strategy === 'saml') {
122
+ if (!rawMetadata && !encodedRawMetadata && !metadataUrl) {
123
+ throw new JacksonError('Please provide rawMetadata or encodedRawMetadata or metadataUrl', 400);
124
+ }
125
+ }
126
+ if (strategy === 'oidc') {
127
+ if (!oidcClientId) {
128
+ throw new JacksonError('Please provide the clientId from OpenID Provider', 400);
129
+ }
130
+ if (!oidcClientSecret) {
131
+ throw new JacksonError('Please provide the clientSecret from OpenID Provider', 400);
132
+ }
133
+ if (!oidcDiscoveryUrl && !oidcMetadata) {
134
+ throw new JacksonError('Please provide the discoveryUrl or issuer metadata for the OpenID Provider', 400);
135
+ }
136
+ if (!oidcDiscoveryUrl && oidcMetadata) {
137
+ const { issuer, authorization_endpoint, token_endpoint, userinfo_endpoint, jwks_uri } = oidcMetadata;
138
+ if (!issuer) {
139
+ throw new JacksonError('"issuer" missing in the metadata for the OpenID Provider', 400);
140
+ }
141
+ if (!authorization_endpoint) {
142
+ throw new JacksonError('"authorization_endpoint" missing in the metadata for the OpenID Provider', 400);
143
+ }
144
+ if (!token_endpoint) {
145
+ throw new JacksonError('"token_endpoint" missing in the metadata for the OpenID Provider', 400);
146
+ }
147
+ if (!userinfo_endpoint) {
148
+ throw new JacksonError('"userinfo_endpoint" missing in the metadata for the OpenID Provider', 400);
149
+ }
150
+ if (!jwks_uri) {
151
+ throw new JacksonError('"jwks_uri" missing in the metadata for the OpenID Provider', 400);
152
+ }
153
+ }
154
+ }
155
+ if (!defaultRedirectUrl) {
156
+ throw new JacksonError('Please provide a defaultRedirectUrl', 400);
157
+ }
158
+ if (!redirectUrl) {
159
+ throw new JacksonError('Please provide redirectUrl', 400);
160
+ }
161
+ if (!tenant) {
162
+ throw new JacksonError('Please provide tenant', 400);
163
+ }
164
+ if (!product) {
165
+ throw new JacksonError('Please provide product', 400);
166
+ }
167
+ if (description && description.length > 100) {
168
+ throw new JacksonError('Description should not exceed 100 characters', 400);
169
+ }
170
+ };
171
+ export const validateRedirectUrl = ({ redirectUrlList, defaultRedirectUrl }) => {
172
+ if (redirectUrlList) {
173
+ if (redirectUrlList.length > 100) {
174
+ throw new JacksonError('Exceeded maximum number of allowed redirect urls', 400);
175
+ }
176
+ for (const url of redirectUrlList) {
177
+ validateAbsoluteUrl(url, 'redirectUrl is invalid');
178
+ }
179
+ }
180
+ if (defaultRedirectUrl) {
181
+ validateAbsoluteUrl(defaultRedirectUrl, 'defaultRedirectUrl is invalid');
182
+ }
183
+ };
184
+ export const extractRedirectUrls = (urls) => {
185
+ if (!urls) {
186
+ return [];
187
+ }
188
+ if (typeof urls === 'string') {
189
+ if (urls.startsWith('[')) {
190
+ // redirectUrl is a stringified array
191
+ return JSON.parse(urls);
192
+ }
193
+ // redirectUrl is a single URL
194
+ return [urls];
195
+ }
196
+ // redirectUrl is an array of URLs
197
+ return urls;
198
+ };
199
+ export const extractHostName = (url) => {
200
+ try {
201
+ const pUrl = new URL(url);
202
+ if (pUrl.hostname.startsWith('www.')) {
203
+ return pUrl.hostname.substring(4);
204
+ }
205
+ return pUrl.hostname;
206
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
207
+ }
208
+ catch (err) {
209
+ return null;
210
+ }
211
+ };
212
+ export const extractOIDCUserProfile = (tokens, oidcConfig) => __awaiter(void 0, void 0, void 0, function* () {
213
+ var _a, _b;
214
+ const idTokenClaims = tokens.claims();
215
+ const client = yield import('openid-client');
216
+ const userinfo = yield client.fetchUserInfo(oidcConfig, tokens.access_token, idTokenClaims.sub);
217
+ const profile = { claims: {} };
218
+ profile.claims.id = idTokenClaims.sub;
219
+ profile.claims.email = typeof idTokenClaims.email === 'string' ? idTokenClaims.email : userinfo.email;
220
+ profile.claims.firstName =
221
+ typeof idTokenClaims.given_name === 'string' ? idTokenClaims.given_name : userinfo.given_name;
222
+ profile.claims.lastName =
223
+ typeof idTokenClaims.family_name === 'string' ? idTokenClaims.family_name : userinfo.family_name;
224
+ profile.claims.roles = (_a = idTokenClaims.roles) !== null && _a !== void 0 ? _a : userinfo.roles;
225
+ profile.claims.groups = (_b = idTokenClaims.groups) !== null && _b !== void 0 ? _b : userinfo.groups;
226
+ profile.claims.raw = Object.assign(Object.assign({}, idTokenClaims), userinfo);
227
+ return profile;
228
+ });
229
+ export const getScopeValues = (scope) => {
230
+ return typeof scope === 'string' ? scope.split(' ').filter((s) => s.length > 0) : [];
231
+ };
232
+ export const getEncodedTenantProduct = (param) => {
233
+ try {
234
+ const sp = new URLSearchParams(param);
235
+ const tenant = sp.get('tenant');
236
+ const product = sp.get('product');
237
+ if (tenant && product) {
238
+ return {
239
+ tenant: sp.get('tenant'),
240
+ product: sp.get('product'),
241
+ };
242
+ }
243
+ return null;
244
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
245
+ }
246
+ catch (err) {
247
+ return null;
248
+ }
249
+ };
250
+ export const validateTenantAndProduct = (tenant, product) => {
251
+ if (tenant.indexOf(':') !== -1) {
252
+ throw new JacksonError('tenant cannot contain the character :', 400);
253
+ }
254
+ if (product.indexOf(':') !== -1) {
255
+ throw new JacksonError('product cannot contain the character :', 400);
256
+ }
257
+ };
258
+ export const appID = (tenant, product) => {
259
+ return dbutils.keyDigest(dbutils.keyFromParts(tenant, product));
260
+ };
261
+ export const fedAppID = (tenant, product, type) => {
262
+ return (type === 'oidc' ? clientIDOIDCPrefix : '') + appID(tenant, product);
263
+ };
264
+ // List of well known providers
265
+ const wellKnownProviders = {
266
+ 'okta.com': 'Okta',
267
+ 'sts.windows.net': 'Entra ID',
268
+ 'mocksaml.com': 'MockSAML',
269
+ 'onelogin.com': 'OneLogin',
270
+ 'keycloak.com': 'Keycloak',
271
+ 'jumpcloud.com': 'JumpCloud',
272
+ 'google.com': 'Google',
273
+ 'auth0.com': 'Auth0',
274
+ 'pingone.com': 'PingOne',
275
+ };
276
+ // Find the friendly name of the provider from the entityID
277
+ export const findFriendlyProviderName = (providerName) => {
278
+ const provider = Object.keys(wellKnownProviders).find((provider) => providerName.includes(provider));
279
+ return provider ? wellKnownProviders[provider] : null;
280
+ };
281
+ export const transformConnections = (connections) => {
282
+ if (connections.length === 0) {
283
+ return connections;
284
+ }
285
+ return connections.map(transformConnection);
286
+ };
287
+ export const transformConnection = (connection) => {
288
+ if ('idpMetadata' in connection) {
289
+ connection.idpMetadata.friendlyProviderName = findFriendlyProviderName(connection.idpMetadata.provider);
290
+ }
291
+ if ('oidcProvider' in connection) {
292
+ connection.oidcProvider.friendlyProviderName = findFriendlyProviderName(connection.oidcProvider.provider);
293
+ }
294
+ if (!('deactivated' in connection)) {
295
+ connection.deactivated = false;
296
+ }
297
+ return connection;
298
+ };
299
+ export const isLocalhost = (url) => {
300
+ let givenURL;
301
+ try {
302
+ givenURL = new URL(url);
303
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
304
+ }
305
+ catch (error) {
306
+ return false;
307
+ }
308
+ return givenURL.hostname === 'localhost' || givenURL.hostname === '127.0.0.1';
309
+ };
310
+ export const isConnectionActive = (connection) => {
311
+ if ('deactivated' in connection) {
312
+ return connection.deactivated === false;
313
+ }
314
+ return true;
315
+ };
316
+ export const validateSortOrder = (sortOrder) => {
317
+ if (sortOrder === null || sortOrder === '') {
318
+ return;
319
+ }
320
+ const _sortOrder = parseInt(sortOrder);
321
+ if (isNaN(_sortOrder)) {
322
+ throw new JacksonError('The field `sortOrder` must be a number.', 400);
323
+ }
324
+ if (_sortOrder < 0) {
325
+ throw new JacksonError('The field `sortOrder` must be a number greater than or equal to 0.', 400);
326
+ }
327
+ };
328
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/controller/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Storable } from '../typings';
2
+ interface LockParams {
3
+ lockStore: Storable;
4
+ key: string;
5
+ }
6
+ export declare class CronLock {
7
+ private lockStore;
8
+ private key;
9
+ private intervalId;
10
+ constructor({ key, lockStore }: LockParams);
11
+ acquire(): Promise<boolean>;
12
+ private renew;
13
+ private add;
14
+ private get;
15
+ release(): Promise<void>;
16
+ private isExpired;
17
+ }
18
+ export {};
@@ -0,0 +1,98 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { randomUUID } from 'crypto';
11
+ import { eventLockTTL } from '../directory-sync/utils';
12
+ const lockRenewalInterval = (eventLockTTL / 2) * 1000;
13
+ const g = global;
14
+ if (!g._instanceKey) {
15
+ g._instanceKey = randomUUID();
16
+ }
17
+ const instanceKey = g._instanceKey;
18
+ export class CronLock {
19
+ constructor({ key, lockStore }) {
20
+ this.lockStore = lockStore;
21
+ this.key = key;
22
+ }
23
+ acquire() {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ try {
26
+ const lock = yield this.get();
27
+ if (lock && !this.isExpired(lock)) {
28
+ return lock.key === instanceKey;
29
+ }
30
+ yield this.add();
31
+ // Renew the lock periodically
32
+ if (!this.intervalId) {
33
+ this.intervalId = setInterval(() => __awaiter(this, void 0, void 0, function* () {
34
+ this.renew();
35
+ }), lockRenewalInterval);
36
+ }
37
+ return true;
38
+ }
39
+ catch (e) {
40
+ console.error(`Error acquiring lock for ${instanceKey}: ${e}`);
41
+ return false;
42
+ }
43
+ });
44
+ }
45
+ renew() {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ try {
48
+ const lock = yield this.get();
49
+ if (!lock) {
50
+ return;
51
+ }
52
+ if (lock.key != instanceKey) {
53
+ return;
54
+ }
55
+ yield this.add();
56
+ }
57
+ catch (e) {
58
+ console.error(`Error renewing lock for ${instanceKey}: ${e}`);
59
+ }
60
+ });
61
+ }
62
+ add() {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const record = {
65
+ key: instanceKey,
66
+ created_at: new Date().toISOString(),
67
+ };
68
+ yield this.lockStore.put(this.key, record);
69
+ });
70
+ }
71
+ get() {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ return (yield this.lockStore.get(this.key));
74
+ });
75
+ }
76
+ release() {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ if (this.intervalId) {
79
+ clearInterval(this.intervalId);
80
+ }
81
+ const lock = yield this.get();
82
+ if (!lock) {
83
+ return;
84
+ }
85
+ if (lock.key != instanceKey) {
86
+ return;
87
+ }
88
+ yield this.lockStore.delete(this.key);
89
+ });
90
+ }
91
+ isExpired(lock) {
92
+ const lockDate = new Date(lock.created_at);
93
+ const currentDate = new Date();
94
+ const diffSeconds = (currentDate.getTime() - lockDate.getTime()) / 1000;
95
+ return diffSeconds > eventLockTTL;
96
+ }
97
+ }
98
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/cron/lock.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,mBAAmB,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AACtD,MAAM,CAAC,GAAG,MAAa,CAAC;AACxB,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IACpB,CAAC,CAAC,YAAY,GAAG,UAAU,EAAE,CAAC;AAChC,CAAC;AACD,MAAM,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC;AAYnC,MAAM,OAAO,QAAQ;IAKnB,YAAY,EAAE,GAAG,EAAE,SAAS,EAAc;QACxC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAEY,OAAO;;YAClB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE9B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,OAAO,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC;gBAClC,CAAC;gBAED,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEjB,8BAA8B;gBAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBACrB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAS,EAAE;wBACvC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,CAAC,CAAA,EAAE,mBAAmB,CAAC,CAAC;gBAC1B,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,4BAA4B,WAAW,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC/D,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KAAA;IAEa,KAAK;;YACjB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE9B,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBAED,IAAI,IAAI,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC;oBAC5B,OAAO;gBACT,CAAC;gBAED,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,2BAA2B,WAAW,KAAK,CAAC,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;KAAA;IAEa,GAAG;;YACf,MAAM,MAAM,GAAG;gBACb,GAAG,EAAE,WAAW;gBAChB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACrC,CAAC;YAEF,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;KAAA;IAEa,GAAG;;YACf,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAS,CAAC;QACtD,CAAC;KAAA;IAEY,OAAO;;YAClB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;KAAA;IAEO,SAAS,CAAC,IAAU;QAC1B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;QAExE,OAAO,WAAW,GAAG,YAAY,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import { DatabaseDriverOption, DatabaseOption } from '../typings';
2
+ declare const _default: {
3
+ new: (options: DatabaseOption | DatabaseDriverOption, noCache?: boolean) => Promise<any>;
4
+ };
5
+ export default _default;
@@ -0,0 +1,178 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import * as encrypter from './encrypter';
11
+ import mem from './mem';
12
+ import mongo from './mongo';
13
+ import redis from './redis';
14
+ import sql from './sql/sql';
15
+ import store from './store';
16
+ import dynamodb from './dynamoDb';
17
+ import { JacksonStore } from './sql/entity/JacksonStore';
18
+ import { JacksonIndex } from './sql/entity/JacksonIndex';
19
+ import { JacksonTTL } from './sql/entity/JacksonTTL';
20
+ import { JacksonStore as JacksonStorePlanetscale } from './planetscale/entity/JacksonStore';
21
+ import { JacksonIndex as JacksonIndexPlanetscale } from './planetscale/entity/JacksonIndex';
22
+ import { JacksonTTL as JacksonTTLPlanetscale } from './planetscale/entity/JacksonTTL';
23
+ import { JacksonStore as JacksonStoreMSSQL } from './sql/mssql/entity/JacksonStore';
24
+ import { JacksonIndex as JacksonIndexMSSQL } from './sql/mssql/entity/JacksonIndex';
25
+ import { JacksonTTL as JacksonTTLMSSQL } from './sql/mssql/entity/JacksonTTL';
26
+ import { JacksonStore as JacksonStoreSQLITE } from './sql/sqlite/entity/JacksonStore';
27
+ import { JacksonIndex as JacksonIndexSQLITE } from './sql/sqlite/entity/JacksonIndex';
28
+ import { JacksonTTL as JacksonTTLSQLITE } from './sql/sqlite/entity/JacksonTTL';
29
+ import { JacksonStore as JacksonStoreMariaDB } from './sql/mariadb/entity/JacksonStore';
30
+ import { JacksonIndex as JacksonIndexMariaDB } from './sql/mariadb/entity/JacksonIndex';
31
+ import { JacksonTTL as JacksonTTLMariaDB } from './sql/mariadb/entity/JacksonTTL';
32
+ const decrypt = (res, encryptionKey) => {
33
+ if (res.iv && res.tag) {
34
+ return JSON.parse(encrypter.decrypt(res.value, res.iv, res.tag, encryptionKey));
35
+ }
36
+ return JSON.parse(res.value);
37
+ };
38
+ class DB {
39
+ constructor(db, encryptionKey) {
40
+ this.db = db;
41
+ this.encryptionKey = encryptionKey;
42
+ }
43
+ get(namespace, key) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ const res = yield this.db.get(namespace, key);
46
+ if (!res) {
47
+ return null;
48
+ }
49
+ return decrypt(res, this.encryptionKey);
50
+ });
51
+ }
52
+ getAll(namespace, pageOffset, pageLimit, pageToken, sortOrder) {
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ const res = yield this.db.getAll(namespace, pageOffset, pageLimit, pageToken, sortOrder);
55
+ const encryptionKey = this.encryptionKey;
56
+ return {
57
+ data: res.data.map((r) => {
58
+ return decrypt(r, encryptionKey);
59
+ }),
60
+ pageToken: res.pageToken,
61
+ };
62
+ });
63
+ }
64
+ getByIndex(namespace, idx, pageOffset, pageLimit, pageToken, sortOrder) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ const res = yield this.db.getByIndex(namespace, idx, pageOffset, pageLimit, pageToken, sortOrder);
67
+ const encryptionKey = this.encryptionKey;
68
+ return {
69
+ data: res.data.map((r) => {
70
+ return decrypt(r, encryptionKey);
71
+ }),
72
+ pageToken: res.pageToken,
73
+ };
74
+ });
75
+ }
76
+ getCount(namespace, idx) {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ if (typeof this.db.getCount !== 'function') {
79
+ return;
80
+ }
81
+ return yield this.db.getCount(namespace, idx);
82
+ });
83
+ }
84
+ // ttl is in seconds
85
+ put(namespace_1, key_1, val_1) {
86
+ return __awaiter(this, arguments, void 0, function* (namespace, key, val, ttl = 0, ...indexes) {
87
+ const dbVal = this.encryptionKey
88
+ ? encrypter.encrypt(JSON.stringify(val), this.encryptionKey)
89
+ : { value: JSON.stringify(val) };
90
+ return yield this.db.put(namespace, key, dbVal, ttl, ...indexes);
91
+ });
92
+ }
93
+ delete(namespace, key) {
94
+ return __awaiter(this, void 0, void 0, function* () {
95
+ return yield this.db.delete(namespace, key);
96
+ });
97
+ }
98
+ deleteMany(namespace, keys) {
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ return yield this.db.deleteMany(namespace, keys);
101
+ });
102
+ }
103
+ close() {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ yield this.db.close();
106
+ });
107
+ }
108
+ store(namespace, ttl = 0) {
109
+ return store.new(namespace, this, ttl);
110
+ }
111
+ }
112
+ const _new = (options) => __awaiter(void 0, void 0, void 0, function* () {
113
+ const encryptionKey = options.encryptionKey
114
+ ? options.encryptionKey.length === 32
115
+ ? Buffer.from(options.encryptionKey, 'latin1')
116
+ : Buffer.from(options.encryptionKey, 'base64')
117
+ : null;
118
+ if ('driver' in options) {
119
+ return new DB(options.driver, encryptionKey);
120
+ }
121
+ switch (options.engine) {
122
+ case 'redis':
123
+ return new DB(yield redis.new(options), encryptionKey);
124
+ case 'sql':
125
+ switch (options.type) {
126
+ case 'mssql':
127
+ return new DB(yield sql.new(options, {
128
+ JacksonStore: JacksonStoreMSSQL,
129
+ JacksonIndex: JacksonIndexMSSQL,
130
+ JacksonTTL: JacksonTTLMSSQL,
131
+ }), encryptionKey);
132
+ case 'mariadb':
133
+ case 'mysql':
134
+ return new DB(yield sql.new(options, {
135
+ JacksonStore: JacksonStoreMariaDB,
136
+ JacksonIndex: JacksonIndexMariaDB,
137
+ JacksonTTL: JacksonTTLMariaDB,
138
+ }), encryptionKey);
139
+ case 'sqlite':
140
+ return new DB(yield sql.new(options, {
141
+ JacksonStore: JacksonStoreSQLITE,
142
+ JacksonIndex: JacksonIndexSQLITE,
143
+ JacksonTTL: JacksonTTLSQLITE,
144
+ }), encryptionKey);
145
+ default:
146
+ return new DB(yield sql.new(options, {
147
+ JacksonStore,
148
+ JacksonIndex,
149
+ JacksonTTL,
150
+ }), encryptionKey);
151
+ }
152
+ case 'planetscale':
153
+ return new DB(yield sql.new(options, {
154
+ JacksonStore: JacksonStorePlanetscale,
155
+ JacksonIndex: JacksonIndexPlanetscale,
156
+ JacksonTTL: JacksonTTLPlanetscale,
157
+ }), encryptionKey);
158
+ case 'mongo':
159
+ return new DB(yield mongo.new(options), encryptionKey);
160
+ case 'mem':
161
+ return new DB(yield mem.new(options), encryptionKey);
162
+ case 'dynamodb':
163
+ return new DB(yield dynamodb.new(options), encryptionKey);
164
+ default:
165
+ throw new Error('unsupported db engine: ' + options.engine);
166
+ }
167
+ });
168
+ const g = global;
169
+ export default {
170
+ new: (options_1, ...args_1) => __awaiter(void 0, [options_1, ...args_1], void 0, function* (options, noCache = false) {
171
+ if (g.__jacksonDb && !noCache) {
172
+ return g.__jacksonDb;
173
+ }
174
+ g.__jacksonDb = yield _new(options);
175
+ return g.__jacksonDb;
176
+ }),
177
+ };
178
+ //# sourceMappingURL=db.js.map