@magda/typescript-common 1.1.0-alpha.2 → 1.1.0-alpha.3

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 (249) hide show
  1. package/dist/AspectBuilder.d.ts +7 -0
  2. package/dist/AspectBuilder.js +3 -0
  3. package/dist/AspectBuilder.js.map +1 -0
  4. package/dist/AspectCreationFailure.d.ts +5 -0
  5. package/dist/AspectCreationFailure.js +10 -0
  6. package/dist/AspectCreationFailure.js.map +1 -0
  7. package/dist/AsyncPage.d.ts +18 -0
  8. package/dist/AsyncPage.js +140 -0
  9. package/dist/AsyncPage.js.map +1 -0
  10. package/dist/ConnectionResult.d.ts +16 -0
  11. package/dist/ConnectionResult.js +77 -0
  12. package/dist/ConnectionResult.js.map +1 -0
  13. package/dist/ConnectorRecordId.d.ts +15 -0
  14. package/dist/ConnectorRecordId.js +46 -0
  15. package/dist/ConnectorRecordId.js.map +1 -0
  16. package/dist/JsonConnector.d.ts +195 -0
  17. package/dist/JsonConnector.js +427 -0
  18. package/dist/JsonConnector.js.map +1 -0
  19. package/dist/JsonTransformer.d.ts +112 -0
  20. package/dist/JsonTransformer.js +225 -0
  21. package/dist/JsonTransformer.js.map +1 -0
  22. package/dist/OpaCompileResponseParser.d.ts +480 -0
  23. package/dist/OpaCompileResponseParser.js +1134 -0
  24. package/dist/OpaCompileResponseParser.js.map +1 -0
  25. package/dist/RecordCreationFailure.d.ts +7 -0
  26. package/dist/RecordCreationFailure.js +11 -0
  27. package/dist/RecordCreationFailure.js.map +1 -0
  28. package/dist/SimpleOpaSQLTranslator.d.ts +14 -0
  29. package/dist/SimpleOpaSQLTranslator.js +79 -0
  30. package/dist/SimpleOpaSQLTranslator.js.map +1 -0
  31. package/dist/addTrailingSlash.d.ts +1 -0
  32. package/dist/addTrailingSlash.js +15 -0
  33. package/dist/addTrailingSlash.js.map +1 -0
  34. package/dist/appendUrlSegments.d.ts +2 -0
  35. package/dist/appendUrlSegments.js +18 -0
  36. package/dist/appendUrlSegments.js.map +1 -0
  37. package/dist/authorization-api/AccessControlError.d.ts +4 -0
  38. package/dist/authorization-api/AccessControlError.js +13 -0
  39. package/dist/authorization-api/AccessControlError.js.map +1 -0
  40. package/dist/authorization-api/ApiClient.d.ts +141 -0
  41. package/dist/authorization-api/ApiClient.js +335 -0
  42. package/dist/authorization-api/ApiClient.js.map +1 -0
  43. package/dist/authorization-api/AuthError.d.ts +4 -0
  44. package/dist/authorization-api/AuthError.js +13 -0
  45. package/dist/authorization-api/AuthError.js.map +1 -0
  46. package/dist/authorization-api/GenericError.d.ts +9 -0
  47. package/dist/authorization-api/GenericError.js +17 -0
  48. package/dist/authorization-api/GenericError.js.map +1 -0
  49. package/dist/authorization-api/authMiddleware.d.ts +7 -0
  50. package/dist/authorization-api/authMiddleware.js +52 -0
  51. package/dist/authorization-api/authMiddleware.js.map +1 -0
  52. package/dist/authorization-api/model.d.ts +99 -0
  53. package/dist/authorization-api/model.js +3 -0
  54. package/dist/authorization-api/model.js.map +1 -0
  55. package/dist/coerceJson.d.ts +2 -0
  56. package/dist/coerceJson.js +13 -0
  57. package/dist/coerceJson.js.map +1 -0
  58. package/dist/createServiceError.d.ts +19 -0
  59. package/dist/createServiceError.js +45 -0
  60. package/dist/createServiceError.js.map +1 -0
  61. package/dist/delay.d.ts +2 -0
  62. package/dist/delay.js +9 -0
  63. package/dist/delay.js.map +1 -0
  64. package/dist/express/status.d.ts +30 -0
  65. package/dist/express/status.js +180 -0
  66. package/dist/express/status.js.map +1 -0
  67. package/dist/formatServiceError.d.ts +1 -0
  68. package/dist/formatServiceError.js +23 -0
  69. package/dist/formatServiceError.js.map +1 -0
  70. package/dist/generated/registry/api.d.ts +596 -0
  71. package/dist/generated/registry/api.js +2060 -0
  72. package/dist/generated/registry/api.js.map +1 -0
  73. package/dist/getAbsoluteUrl.d.ts +12 -0
  74. package/dist/getAbsoluteUrl.js +35 -0
  75. package/dist/getAbsoluteUrl.js.map +1 -0
  76. package/dist/getBasePathFromUrl.d.ts +10 -0
  77. package/dist/getBasePathFromUrl.js +27 -0
  78. package/dist/getBasePathFromUrl.js.map +1 -0
  79. package/dist/markdownToHtml.d.ts +3 -0
  80. package/dist/markdownToHtml.js +38 -0
  81. package/dist/markdownToHtml.js.map +1 -0
  82. package/dist/opa/OpaTypes.d.ts +41 -0
  83. package/dist/opa/OpaTypes.js +3 -0
  84. package/dist/opa/OpaTypes.js.map +1 -0
  85. package/dist/opa/getAuthDecision.d.ts +19 -0
  86. package/dist/opa/getAuthDecision.js +94 -0
  87. package/dist/opa/getAuthDecision.js.map +1 -0
  88. package/dist/opa/queryOpa.d.ts +1 -0
  89. package/dist/opa/queryOpa.js +41 -0
  90. package/dist/opa/queryOpa.js.map +1 -0
  91. package/dist/registry/AuthorizedRegistryClient.d.ts +29 -0
  92. package/dist/registry/AuthorizedRegistryClient.js +115 -0
  93. package/dist/registry/AuthorizedRegistryClient.js.map +1 -0
  94. package/dist/registry/RegistryClient.d.ts +36 -0
  95. package/dist/registry/RegistryClient.js +59 -0
  96. package/dist/registry/RegistryClient.js.map +1 -0
  97. package/dist/registry/TenantConsts.d.ts +31 -0
  98. package/dist/registry/TenantConsts.js +35 -0
  99. package/dist/registry/TenantConsts.js.map +1 -0
  100. package/dist/registry-manual/api.d.ts +9 -0
  101. package/dist/registry-manual/api.js +10 -0
  102. package/dist/registry-manual/api.js.map +1 -0
  103. package/dist/request.d.ts +3 -0
  104. package/dist/request.js +19 -0
  105. package/dist/request.js.map +1 -0
  106. package/dist/retry.d.ts +1 -0
  107. package/dist/retry.js +21 -0
  108. package/dist/retry.js.map +1 -0
  109. package/dist/retryBackoff.d.ts +1 -0
  110. package/dist/retryBackoff.js +21 -0
  111. package/dist/retryBackoff.js.map +1 -0
  112. package/dist/runLater.d.ts +1 -0
  113. package/dist/runLater.js +16 -0
  114. package/dist/runLater.js.map +1 -0
  115. package/dist/session/GetUserId.d.ts +5 -0
  116. package/dist/session/GetUserId.js +41 -0
  117. package/dist/session/GetUserId.js.map +1 -0
  118. package/dist/session/GetUserSession.d.ts +3 -0
  119. package/dist/session/GetUserSession.js +22 -0
  120. package/dist/session/GetUserSession.js.map +1 -0
  121. package/dist/session/addJwtSecretFromEnvVar.d.ts +14 -0
  122. package/dist/session/addJwtSecretFromEnvVar.js +23 -0
  123. package/dist/session/addJwtSecretFromEnvVar.js.map +1 -0
  124. package/dist/session/buildJwt.d.ts +1 -0
  125. package/dist/session/buildJwt.js +8 -0
  126. package/dist/session/buildJwt.js.map +1 -0
  127. package/dist/session/cookieUtils.d.ts +16 -0
  128. package/dist/session/cookieUtils.js +19 -0
  129. package/dist/session/cookieUtils.js.map +1 -0
  130. package/dist/session/destroySession.d.ts +10 -0
  131. package/dist/session/destroySession.js +44 -0
  132. package/dist/session/destroySession.js.map +1 -0
  133. package/dist/session/getSessionId.d.ts +2 -0
  134. package/dist/session/getSessionId.js +28 -0
  135. package/dist/session/getSessionId.js.map +1 -0
  136. package/dist/tenant-api/AuthorizedTenantClient.d.ts +25 -0
  137. package/dist/tenant-api/AuthorizedTenantClient.js +61 -0
  138. package/dist/tenant-api/AuthorizedTenantClient.js.map +1 -0
  139. package/dist/tenant-api/Tenant.d.ts +17 -0
  140. package/dist/tenant-api/Tenant.js +10 -0
  141. package/dist/tenant-api/Tenant.js.map +1 -0
  142. package/dist/test/JsonConnector.spec.d.ts +1 -0
  143. package/dist/test/JsonConnector.spec.js +352 -0
  144. package/dist/test/JsonConnector.spec.js.map +1 -0
  145. package/dist/test/JsonTransformer.spec.d.ts +1 -0
  146. package/dist/test/JsonTransformer.spec.js +98 -0
  147. package/dist/test/JsonTransformer.spec.js.map +1 -0
  148. package/dist/test/arbitraries.d.ts +98 -0
  149. package/dist/test/arbitraries.js +264 -0
  150. package/dist/test/arbitraries.js.map +1 -0
  151. package/dist/test/aspect-templates/organization-details.d.ts +4 -0
  152. package/dist/test/aspect-templates/organization-details.js +11 -0
  153. package/dist/test/aspect-templates/organization-details.js.map +1 -0
  154. package/dist/test/buildApiClient.spec.d.ts +1 -0
  155. package/dist/test/buildApiClient.spec.js +177 -0
  156. package/dist/test/buildApiClient.spec.js.map +1 -0
  157. package/dist/test/buildAuthorizedTenantClient.spec.d.ts +1 -0
  158. package/dist/test/buildAuthorizedTenantClient.spec.js +60 -0
  159. package/dist/test/buildAuthorizedTenantClient.spec.js.map +1 -0
  160. package/dist/test/connectors/MockExpressServer.d.ts +5 -0
  161. package/dist/test/connectors/MockExpressServer.js +28 -0
  162. package/dist/test/connectors/MockExpressServer.js.map +1 -0
  163. package/dist/test/connectors/MockRegistry.d.ts +7 -0
  164. package/dist/test/connectors/MockRegistry.js +93 -0
  165. package/dist/test/connectors/MockRegistry.js.map +1 -0
  166. package/dist/test/connectors/runConnectorTest.d.ts +5 -0
  167. package/dist/test/connectors/runConnectorTest.js +106 -0
  168. package/dist/test/connectors/runConnectorTest.js.map +1 -0
  169. package/dist/test/db/getTestDBConfig.d.ts +7 -0
  170. package/dist/test/db/getTestDBConfig.js +13 -0
  171. package/dist/test/db/getTestDBConfig.js.map +1 -0
  172. package/dist/test/db/runMigrationSql.d.ts +9 -0
  173. package/dist/test/db/runMigrationSql.js +82 -0
  174. package/dist/test/db/runMigrationSql.js.map +1 -0
  175. package/dist/test/express/status.spec.d.ts +1 -0
  176. package/dist/test/express/status.spec.js +160 -0
  177. package/dist/test/express/status.spec.js.map +1 -0
  178. package/dist/test/fakeArgv.d.ts +2 -0
  179. package/dist/test/fakeArgv.js +7 -0
  180. package/dist/test/fakeArgv.js.map +1 -0
  181. package/dist/test/getAuthDecision.spec.d.ts +1 -0
  182. package/dist/test/getAuthDecision.spec.js +22 -0
  183. package/dist/test/getAuthDecision.spec.js.map +1 -0
  184. package/dist/test/getBasePathFromUrl.spec.d.ts +1 -0
  185. package/dist/test/getBasePathFromUrl.spec.js +25 -0
  186. package/dist/test/getBasePathFromUrl.spec.js.map +1 -0
  187. package/dist/test/jsverify.d.ts +2 -0
  188. package/dist/test/jsverify.js +8 -0
  189. package/dist/test/jsverify.js.map +1 -0
  190. package/dist/test/mockAuthApiHost.d.ts +14 -0
  191. package/dist/test/mockAuthApiHost.js +174 -0
  192. package/dist/test/mockAuthApiHost.js.map +1 -0
  193. package/dist/test/mockAuthorization.d.ts +3 -0
  194. package/dist/test/mockAuthorization.js +24 -0
  195. package/dist/test/mockAuthorization.js.map +1 -0
  196. package/dist/test/mockTenantDataStore.d.ts +8 -0
  197. package/dist/test/mockTenantDataStore.js +41 -0
  198. package/dist/test/mockTenantDataStore.js.map +1 -0
  199. package/dist/test/mockUserDataStore.d.ts +11 -0
  200. package/dist/test/mockUserDataStore.js +56 -0
  201. package/dist/test/mockUserDataStore.js.map +1 -0
  202. package/dist/test/registry/buildAuthorizedClient.spec.d.ts +1 -0
  203. package/dist/test/registry/buildAuthorizedClient.spec.js +101 -0
  204. package/dist/test/registry/buildAuthorizedClient.spec.js.map +1 -0
  205. package/dist/test/sampleOpaResponse.json +480 -0
  206. package/dist/test/sampleOpaResponseSimple.json +173 -0
  207. package/dist/test/sampleOpaResponseUnconditionalTrue.json +193 -0
  208. package/dist/test/sampleOpaResponseUnconditionalTrueWithDefaultRule.json +303 -0
  209. package/dist/test/sampleOpaResponseWithDefaultRule.json +303 -0
  210. package/dist/test/session/buildJwt.spec.d.ts +1 -0
  211. package/dist/test/session/buildJwt.spec.js +50 -0
  212. package/dist/test/session/buildJwt.spec.js.map +1 -0
  213. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.d.ts +1 -0
  214. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.js +64 -0
  215. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.js.map +1 -0
  216. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.d.ts +1 -0
  217. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.js +52 -0
  218. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.js.map +1 -0
  219. package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.d.ts +1 -0
  220. package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.js +36 -0
  221. package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.js.map +1 -0
  222. package/dist/test/testAsyncPage.spec.d.ts +1 -0
  223. package/dist/test/testAsyncPage.spec.js +463 -0
  224. package/dist/test/testAsyncPage.spec.js.map +1 -0
  225. package/dist/test/testOpaCompileResponseParser.spec.d.ts +1 -0
  226. package/dist/test/testOpaCompileResponseParser.spec.js +148 -0
  227. package/dist/test/testOpaCompileResponseParser.spec.js.map +1 -0
  228. package/dist/test/util.d.ts +1 -0
  229. package/dist/test/util.js +8 -0
  230. package/dist/test/util.js.map +1 -0
  231. package/dist/util/arrayToMaybe.d.ts +2 -0
  232. package/dist/util/arrayToMaybe.js +8 -0
  233. package/dist/util/arrayToMaybe.js.map +1 -0
  234. package/dist/util/cleanOrgTitle.d.ts +1 -0
  235. package/dist/util/cleanOrgTitle.js +13 -0
  236. package/dist/util/cleanOrgTitle.js.map +1 -0
  237. package/dist/util/getMinikubeIP.d.ts +1 -0
  238. package/dist/util/getMinikubeIP.js +13 -0
  239. package/dist/util/getMinikubeIP.js.map +1 -0
  240. package/dist/util/isUuid.d.ts +2 -0
  241. package/dist/util/isUuid.js +6 -0
  242. package/dist/util/isUuid.js.map +1 -0
  243. package/dist/util/unionToThrowable.d.ts +1 -0
  244. package/dist/util/unionToThrowable.js +12 -0
  245. package/dist/util/unionToThrowable.js.map +1 -0
  246. package/dist/utilityTypes.d.ts +1 -0
  247. package/dist/utilityTypes.js +3 -0
  248. package/dist/utilityTypes.js.map +1 -0
  249. package/package.json +3 -3
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const chai_1 = __importDefault(require("chai"));
16
+ const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
17
+ const AuthorizedTenantClient_1 = __importDefault(require("../tenant-api/AuthorizedTenantClient"));
18
+ const mockTenantDataStore_1 = __importDefault(require("./mockTenantDataStore"));
19
+ const TenantConsts_1 = require("../registry/TenantConsts");
20
+ const nock_1 = __importDefault(require("nock"));
21
+ const jwt = require("jsonwebtoken");
22
+ chai_1.default.use(chai_as_promised_1.default);
23
+ const expect = chai_1.default.expect;
24
+ describe("Test AuthorizedTenantClient.ts", function () {
25
+ const mockTenants = mockTenantDataStore_1.default.getTenants();
26
+ const jwtSecret = "a top secret";
27
+ const adminUserId = "an-admin-user";
28
+ const tenantsBaseUrl = "http://tenant.some.where";
29
+ const requestScope = nock_1.default(tenantsBaseUrl, {
30
+ reqheaders: {
31
+ // A jwt will contain timestamp by default. The value of header
32
+ // "X-Magda-Session" can not be pre-determined. The exact match
33
+ // of this header can not be guaranteed. Therefore we have to
34
+ // check the decoded user id.
35
+ "X-Magda-Session": (jwtToken) => {
36
+ return jwt.verify(jwtToken, jwtSecret).userId === adminUserId;
37
+ },
38
+ "Content-Type": "application/json",
39
+ "X-Magda-Tenant-Id": `${TenantConsts_1.MAGDA_ADMIN_PORTAL_ID}`
40
+ }
41
+ });
42
+ afterEach(() => {
43
+ nock_1.default.cleanAll();
44
+ });
45
+ it("`getTenants()` should return all tenants", function () {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ requestScope.get("/tenants").reply(200, mockTenants);
48
+ const api = new AuthorizedTenantClient_1.default({
49
+ urlStr: tenantsBaseUrl,
50
+ maxRetries: 1,
51
+ secondsBetweenRetries: 1,
52
+ jwtSecret: jwtSecret,
53
+ userId: adminUserId
54
+ });
55
+ const actual = yield api.getTenants();
56
+ return expect(actual).to.deep.equal(mockTenants);
57
+ });
58
+ });
59
+ });
60
+ //# sourceMappingURL=buildAuthorizedTenantClient.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildAuthorizedTenantClient.spec.js","sourceRoot":"","sources":["../../src/test/buildAuthorizedTenantClient.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,gDAAwB;AACxB,wEAA8C;AAC9C,kGAA0E;AAC1E,gFAAwD;AACxD,2DAAiE;AACjE,gDAAwB;AAExB,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAEpC,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,MAAM,GAAG,cAAI,CAAC,MAAM,CAAC;AAE3B,QAAQ,CAAC,gCAAgC,EAAE;IACvC,MAAM,WAAW,GAAG,6BAAmB,CAAC,UAAU,EAAE,CAAC;IACrD,MAAM,SAAS,GAAG,cAAc,CAAC;IACjC,MAAM,WAAW,GAAG,eAAe,CAAC;IACpC,MAAM,cAAc,GAAG,0BAA0B,CAAC;IAElD,MAAM,YAAY,GAAG,cAAI,CAAC,cAAc,EAAE;QACtC,UAAU,EAAE;YACR,+DAA+D;YAC/D,+DAA+D;YAC/D,6DAA6D;YAC7D,6BAA6B;YAC7B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAC5B,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;YAClE,CAAC;YACD,cAAc,EAAE,kBAAkB;YAClC,mBAAmB,EAAE,GAAG,oCAAqB,EAAE;SAClD;KACJ,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,cAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE;;YAC3C,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAErD,MAAM,GAAG,GAAG,IAAI,gCAAsB,CAAC;gBACnC,MAAM,EAAE,cAAc;gBACtB,UAAU,EAAE,CAAC;gBACb,qBAAqB,EAAE,CAAC;gBACxB,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,WAAW;aACtB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC;KAAA,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare abstract class MockExpressServer {
2
+ server: any;
3
+ run(port: number): Promise<unknown>;
4
+ abstract runImplementation(app: any): void;
5
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MockExpressServer = void 0;
13
+ const express = require("express");
14
+ class MockExpressServer {
15
+ run(port) {
16
+ return __awaiter(this, void 0, void 0, function* () {
17
+ const app = express();
18
+ yield this.runImplementation(app);
19
+ return new Promise((resolve) => {
20
+ this.server = app.listen(port, () => {
21
+ resolve(this);
22
+ });
23
+ });
24
+ });
25
+ }
26
+ }
27
+ exports.MockExpressServer = MockExpressServer;
28
+ //# sourceMappingURL=MockExpressServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockExpressServer.js","sourceRoot":"","sources":["../../../src/test/connectors/MockExpressServer.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAEnC,MAAsB,iBAAiB;IAG7B,GAAG,CAAC,IAAY;;YAClB,MAAM,GAAG,GAAQ,OAAO,EAAE,CAAC;YAE3B,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAElC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;oBAChC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;CAGJ;AAhBD,8CAgBC"}
@@ -0,0 +1,7 @@
1
+ import { MockExpressServer } from "./MockExpressServer";
2
+ export declare class MockRegistry extends MockExpressServer {
3
+ aspects: any;
4
+ records: any;
5
+ env: any;
6
+ runImplementation(registry: any): void;
7
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockRegistry = void 0;
4
+ const MockExpressServer_1 = require("./MockExpressServer");
5
+ const lodash_1 = require("lodash");
6
+ const body = require("body-parser");
7
+ const djv = require("djv");
8
+ class MockRegistry extends MockExpressServer_1.MockExpressServer {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.aspects = {};
12
+ this.records = {};
13
+ this.env = djv();
14
+ }
15
+ runImplementation(registry) {
16
+ registry.use(body.json({
17
+ limit: "500000kb"
18
+ }));
19
+ registry.put("/aspects/:id", (req, res) => {
20
+ this.aspects[req.params.id] = req.body;
21
+ // our mock registry will validate the data it gets against the schemas it gets
22
+ this.env.addSchema(req.params.id, req.body.jsonSchema);
23
+ res.json(req.body);
24
+ });
25
+ registry.put("/records/:id", (req, res) => {
26
+ this.records[req.params.id] = lodash_1.merge(this.records[req.params.id] || {}, req.body);
27
+ // validate aspects
28
+ if (req.body.aspects) {
29
+ for (const [aspect, aspectBody] of Object.entries(req.body.aspects)) {
30
+ try {
31
+ let invalid = this.env.validate(`${aspect}`, aspectBody);
32
+ if (invalid) {
33
+ return res
34
+ .status(500)
35
+ .json({
36
+ aspect,
37
+ aspectBody,
38
+ schema: this.aspects[aspect].jsonSchema,
39
+ invalid
40
+ })
41
+ .end();
42
+ }
43
+ }
44
+ catch (e) {
45
+ // https://github.com/korzio/djv/issues/71
46
+ // return res
47
+ // .status(500)
48
+ // .json({
49
+ // aspect,
50
+ // aspectBody,
51
+ // schema: this.aspects[aspect].jsonSchema,
52
+ // error: e.message
53
+ // })
54
+ // .end();
55
+ console.log(e.message);
56
+ }
57
+ }
58
+ }
59
+ res.json(req.body);
60
+ });
61
+ registry.delete("/records", (req, res) => {
62
+ let count = 0;
63
+ for (const entry of Object.entries(this.records)) {
64
+ const [recordId, record] = entry;
65
+ if (record.sourceTag === req.query.sourceTagToPreserve) {
66
+ continue;
67
+ }
68
+ if (record.aspects.source.id === req.query.sourceId) {
69
+ delete this.records[recordId];
70
+ count++;
71
+ }
72
+ }
73
+ res.json({ count });
74
+ });
75
+ registry.get("/records/*", (req, res) => {
76
+ const id = decodeURI(req.path.substr(9));
77
+ res.json(this.records[id]).end();
78
+ });
79
+ registry.get("/records", (req, res) => {
80
+ res.json(this.records).end();
81
+ });
82
+ registry.all("*", function (req, res) {
83
+ console.log("REG", req.method, req.path, req.body, req.query);
84
+ res.status(200);
85
+ });
86
+ }
87
+ }
88
+ exports.MockRegistry = MockRegistry;
89
+ if (require.main === module) {
90
+ const app = new MockRegistry();
91
+ app.run(8080);
92
+ }
93
+ //# sourceMappingURL=MockRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockRegistry.js","sourceRoot":"","sources":["../../../src/test/connectors/MockRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Hoping to re-use this functionality for all black-box style connector
3
+ * testing.
4
+ */
5
+ export declare function runConnectorTest(TEST_CASES: any[], Catalog: any, options?: any): void;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.runConnectorTest = void 0;
16
+ const cross_spawn_1 = __importDefault(require("cross-spawn"));
17
+ const assert_1 = __importDefault(require("assert"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const MockRegistry_1 = require("./MockRegistry");
20
+ const resolve_1 = __importDefault(require("resolve"));
21
+ /**
22
+ * Hoping to re-use this functionality for all black-box style connector
23
+ * testing.
24
+ */
25
+ function runConnectorTest(TEST_CASES, Catalog, options = {}) {
26
+ describe("connector", function () {
27
+ this.timeout(30000);
28
+ const registryPort = 5000 + Math.round(5000 * Math.random());
29
+ const catalogPort = registryPort + 1;
30
+ function run() {
31
+ return new Promise((resolve, reject) => {
32
+ const tsconfigPath = path_1.default.resolve("tsconfig.json");
33
+ const tsNodeExec = path_1.default.resolve(path_1.default.dirname(resolve_1.default.sync("ts-node", {
34
+ basedir: process.cwd()
35
+ })), "./bin.js");
36
+ const command = [
37
+ "-r",
38
+ resolve_1.default.sync("tsconfig-paths/register", {
39
+ basedir: process.cwd()
40
+ }),
41
+ "./src",
42
+ "--id=connector",
43
+ "--name=Connector",
44
+ `--sourceUrl=http://localhost:${catalogPort}`,
45
+ `--registryUrl=http://localhost:${registryPort}`,
46
+ "--jwtSecret=nerdgasm",
47
+ "--userId=user",
48
+ "--tenantId=1"
49
+ ];
50
+ const proc = cross_spawn_1.default(tsNodeExec, command, {
51
+ stdio: "inherit",
52
+ cwd: path_1.default.dirname(tsconfigPath),
53
+ env: Object.assign(Object.assign({}, (process.env ? process.env : {})), { TS_NODE_PROJECT: tsconfigPath })
54
+ });
55
+ proc.on("error", (err) => {
56
+ console.log("Failed to start subprocess.", err);
57
+ reject(err);
58
+ });
59
+ proc.on("close", (code) => {
60
+ if (code === 0) {
61
+ resolve();
62
+ }
63
+ else {
64
+ reject(new Error(`error exit code nonzero: ${code}`));
65
+ }
66
+ });
67
+ });
68
+ }
69
+ let servers = [];
70
+ let registry;
71
+ beforeEach(function () {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ servers.push((registry = yield new MockRegistry_1.MockRegistry().run(registryPort)));
74
+ });
75
+ });
76
+ afterEach(function () {
77
+ servers.forEach((server) => server.server.close());
78
+ });
79
+ TEST_CASES.forEach(function (testCase, index) {
80
+ it(`should run ${index}`, function () {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ const catalog = new Catalog(testCase.input);
83
+ yield catalog.run(catalogPort).then((catalog) => {
84
+ servers.push(catalog);
85
+ return run().then(() => {
86
+ Object.values(registry.records).forEach((record) => {
87
+ record.sourceTag = "stag";
88
+ if (record.aspects &&
89
+ record.aspects.source &&
90
+ record.aspects.source.url) {
91
+ record.aspects.source.url = record.aspects.source.url.replace(`http://localhost:${catalogPort}`, "SOURCE");
92
+ }
93
+ });
94
+ if (options.cleanRegistry) {
95
+ options.cleanRegistry(registry);
96
+ }
97
+ assert_1.default.deepStrictEqual(registry.records, testCase.output);
98
+ });
99
+ });
100
+ });
101
+ });
102
+ });
103
+ });
104
+ }
105
+ exports.runConnectorTest = runConnectorTest;
106
+ //# sourceMappingURL=runConnectorTest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runConnectorTest.js","sourceRoot":"","sources":["../../../src/test/connectors/runConnectorTest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ declare function getTestDBConfig(): {
2
+ host: string;
3
+ database: string;
4
+ user: string;
5
+ password: string;
6
+ };
7
+ export default getTestDBConfig;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function getTestDBConfig() {
4
+ const { POSTGRES_HOST: host, POSTGRES_DB: database, POSTGRES_USER: user, POSTGRES_PASSWORD: password } = process.env;
5
+ return {
6
+ host: host ? host : "localhost",
7
+ database: database ? database : "postgres",
8
+ user: user ? user : "postgres",
9
+ password: password ? password : ""
10
+ };
11
+ }
12
+ exports.default = getTestDBConfig;
13
+ //# sourceMappingURL=getTestDBConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTestDBConfig.js","sourceRoot":"","sources":["../../../src/test/db/getTestDBConfig.ts"],"names":[],"mappings":";;AAAA,SAAS,eAAe;IACpB,MAAM,EACF,aAAa,EAAE,IAAI,EACnB,WAAW,EAAE,QAAQ,EACrB,aAAa,EAAE,IAAI,EACnB,iBAAiB,EAAE,QAAQ,EAC9B,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhB,OAAO;QACH,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;QAC/B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;QAC1C,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;QAC9B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;KACrC,CAAC;AACN,CAAC;AAED,kBAAe,eAAe,CAAC"}
@@ -0,0 +1,9 @@
1
+ import pg from "pg";
2
+ export declare function deleteAllTables(pool: pg.Pool): Promise<void>;
3
+ /**
4
+ * rebuilt a clean (i.e. in initial state) auth db in test database
5
+ *
6
+ * @param pool
7
+ * @param deleteAllTable
8
+ */
9
+ export default function runMigrationSql(pool: pg.Pool, sqlDir: string, deleteAllTable?: boolean): Promise<void>;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.deleteAllTables = void 0;
16
+ const fs_extra_1 = __importDefault(require("fs-extra"));
17
+ const recursive_readdir_1 = __importDefault(require("recursive-readdir"));
18
+ const getTestDBConfig_1 = __importDefault(require("./getTestDBConfig"));
19
+ const path_1 = __importDefault(require("path"));
20
+ const fs_1 = __importDefault(require("fs"));
21
+ function getVersionNumber(fileName) {
22
+ const matches = fileName.match(/^V(\d+(_\d+)*)/i);
23
+ if (!matches || matches.length < 2)
24
+ return 0;
25
+ const verNum = parseFloat(matches[1].replace(/_/, "."));
26
+ if (isNaN(verNum)) {
27
+ return 0;
28
+ }
29
+ return verNum;
30
+ }
31
+ function replaceEnvVar(sql) {
32
+ const config = getTestDBConfig_1.default();
33
+ return sql
34
+ .replace(/\$\{clientUserName\}/g, config.user)
35
+ .replace(/\$\{clientPassword\}/g, config.password);
36
+ }
37
+ function deleteAllTables(pool) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ const result = yield pool.query("SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'public'");
40
+ if (!result || !result.rows || !result.rows.length)
41
+ return;
42
+ yield pool.query(result.rows
43
+ .map((r) => `DROP TABLE "${r["tablename"]}" CASCADE`)
44
+ .join(";\n"));
45
+ });
46
+ }
47
+ exports.deleteAllTables = deleteAllTables;
48
+ /**
49
+ * rebuilt a clean (i.e. in initial state) auth db in test database
50
+ *
51
+ * @param pool
52
+ * @param deleteAllTable
53
+ */
54
+ function runMigrationSql(pool, sqlDir, deleteAllTable = false) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ if (!fs_1.default.existsSync(sqlDir)) {
57
+ throw new Error("Path `sqlDir` doesn't exist!");
58
+ }
59
+ if (!fs_1.default.lstatSync(sqlDir).isDirectory()) {
60
+ throw new Error("`sqlDir` is not a path to a directory");
61
+ }
62
+ const files = yield recursive_readdir_1.default(sqlDir, ["*,sql"]);
63
+ const fileObjects = files
64
+ .map((f) => ({
65
+ path: f,
66
+ version: getVersionNumber(path_1.default.basename(f))
67
+ }))
68
+ .sort((a, b) => a.version - b.version);
69
+ if (!fileObjects.length)
70
+ throw new Error("Can't find any DB migration SQL files.");
71
+ if (deleteAllTable) {
72
+ yield deleteAllTables(pool);
73
+ }
74
+ for (let i = 0; i < fileObjects.length; i++) {
75
+ const file = fileObjects[i];
76
+ const fileContent = replaceEnvVar(yield fs_extra_1.default.readFile(file.path, { encoding: "utf-8" }));
77
+ yield pool.query(fileContent);
78
+ }
79
+ });
80
+ }
81
+ exports.default = runMigrationSql;
82
+ //# sourceMappingURL=runMigrationSql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runMigrationSql.js","sourceRoot":"","sources":["../../../src/test/db/runMigrationSql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const status_1 = require("../../express/status");
13
+ const request = require("supertest");
14
+ const express = require("express");
15
+ const assert = require("assert");
16
+ setup("status - default", undefined, (agent) => {
17
+ it("should always be live", function (done) {
18
+ agent.get("/status/live").expect(200, "OK").end(done);
19
+ });
20
+ it("should instantly be ready with no probes", function (done) {
21
+ agent.get("/status/ready").expect(200).end(done);
22
+ });
23
+ });
24
+ setup("status - not ready to ready", {
25
+ probes: {
26
+ a: () => __awaiter(void 0, void 0, void 0, function* () {
27
+ console.log("here");
28
+ yield sleep(500);
29
+ console.log("after");
30
+ return {
31
+ ready: true
32
+ };
33
+ })
34
+ },
35
+ probeUpdateMs: 1000
36
+ }, (agent) => {
37
+ it("should be ready after a while", function (done) {
38
+ agent
39
+ .get("/status/ready")
40
+ .expect(500)
41
+ .end(() => __awaiter(this, void 0, void 0, function* () {
42
+ yield sleep(1000);
43
+ agent.get("/status/ready").expect(200).end(done);
44
+ }));
45
+ });
46
+ });
47
+ setup("status - not ready", {
48
+ probes: {
49
+ a: () => __awaiter(void 0, void 0, void 0, function* () {
50
+ return {
51
+ ready: true
52
+ };
53
+ })
54
+ },
55
+ probeUpdateMs: 10
56
+ }, (agent) => {
57
+ it("should be ready with probes", function (done) {
58
+ sleep(100).then(function () {
59
+ agent.get("/status/ready").expect(200).end(done);
60
+ });
61
+ });
62
+ it("should be ready with probes", function (done) {
63
+ sleep(100).then(function () {
64
+ agent.get("/status/readySync").expect(200).end(done);
65
+ });
66
+ });
67
+ });
68
+ setup("status - error", {
69
+ probes: {
70
+ a: () => __awaiter(void 0, void 0, void 0, function* () {
71
+ throw "ERROR";
72
+ })
73
+ },
74
+ probeUpdateMs: 10
75
+ }, (agent) => {
76
+ it("should error", function (done) {
77
+ sleep(100).then(function () {
78
+ agent.get("/status/ready").expect(500).end(done);
79
+ });
80
+ });
81
+ });
82
+ setup("status - error", {
83
+ probes: {
84
+ a: () => __awaiter(void 0, void 0, void 0, function* () {
85
+ return null;
86
+ })
87
+ },
88
+ probeUpdateMs: 60
89
+ }, (agent) => {
90
+ it("should error", function (done) {
91
+ sleep(100).then(function () {
92
+ agent.get("/status/ready").expect(500).end(done);
93
+ });
94
+ });
95
+ });
96
+ describe("request", function () {
97
+ let app;
98
+ const port = Math.round(Math.random() * 8000 + 8000);
99
+ let server;
100
+ beforeEach(function (done) {
101
+ app = express();
102
+ server = app.listen(port, done);
103
+ });
104
+ afterEach(function () {
105
+ server.close();
106
+ });
107
+ it("should succeed", function () {
108
+ return __awaiter(this, void 0, void 0, function* () {
109
+ status_1.installStatusRouter(app, {});
110
+ let return_;
111
+ return_ = yield status_1.createServiceProbe(`http://127.0.0.1:${port}`)();
112
+ assert.deepEqual(return_.ready, true);
113
+ return_ = yield status_1.createServiceProbe(`http://127.0.0.1:${port}`, "/status/ready")();
114
+ assert.deepEqual(return_.ready, true);
115
+ });
116
+ });
117
+ it("should fail", function () {
118
+ return __awaiter(this, void 0, void 0, function* () {
119
+ app.use("/status/ready", function (req, res) {
120
+ res.status(500).json({ ready: false });
121
+ });
122
+ try {
123
+ yield status_1.createServiceProbe(`http://127.0.0.1:${port}`)();
124
+ throw "ERROR";
125
+ }
126
+ catch (return_) {
127
+ assert.deepEqual(return_, {
128
+ ready: false,
129
+ statusCode: 500
130
+ });
131
+ }
132
+ });
133
+ });
134
+ it("should fail", function () {
135
+ return __awaiter(this, void 0, void 0, function* () {
136
+ try {
137
+ yield status_1.createServiceProbe(`http://127.0.0.1:${port + 6}`)();
138
+ throw "ERROR";
139
+ }
140
+ catch (return_) {
141
+ assert.notDeepEqual(return_, "ERROR");
142
+ }
143
+ });
144
+ });
145
+ });
146
+ function sleep(time) {
147
+ return new Promise((resolve) => setTimeout(resolve, time));
148
+ }
149
+ function setup(text, options, callback) {
150
+ describe(text, function () {
151
+ if (options) {
152
+ options.forceRun = true;
153
+ }
154
+ const app = express();
155
+ status_1.installStatusRouter(app, options);
156
+ const agent = request.agent(app);
157
+ callback(agent, options);
158
+ });
159
+ }
160
+ //# sourceMappingURL=status.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.spec.js","sourceRoot":"","sources":["../../../src/test/express/status.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Arguments } from "yargs";
2
+ export default function fakeArgv(options: any): Arguments;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function fakeArgv(options) {
4
+ return Object.assign(Object.assign({}, options), { $0: "", _: [] });
5
+ }
6
+ exports.default = fakeArgv;
7
+ //# sourceMappingURL=fakeArgv.js.map