@studyportals/campaign-management-api-interface 16.1.0 → 16.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studyportals/campaign-management-api-interface",
3
- "version": "16.1.0",
3
+ "version": "16.1.1",
4
4
  "scripts": {
5
5
  "compile": "rm -fR bin && npx tsc",
6
6
  "test-u": "jest -c jest.config.unit.json --maxWorkers=1",
@@ -34,6 +34,9 @@
34
34
  "typescript": "^5.5.4"
35
35
  },
36
36
  "dependencies": {
37
+ "@aws-crypto/sha256-js": "^5.2.0",
38
+ "@aws-sdk/credential-provider-node": "^3.972.1",
39
+ "@smithy/signature-v4": "^5.3.8",
37
40
  "@studyportals/mb-platform-date-time": "^1.3.1",
38
41
  "@studyportals/mb-platform-http-requests": "^2.8.0",
39
42
  "@studyportals/university-scheduler-interface": "^0.7.0",
@@ -0,0 +1,4 @@
1
+ export declare class IdDto {
2
+ readonly id: number;
3
+ constructor(id: number);
4
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IdDto = void 0;
4
+ class IdDto {
5
+ constructor(id) {
6
+ this.id = id;
7
+ }
8
+ }
9
+ exports.IdDto = IdDto;
10
+ //# sourceMappingURL=id.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.dto.js","sourceRoot":"","sources":["../../../src/domain/id.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;IACjB,YACiB,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;IACvB,CAAC;CACL;AAJD,sBAIC"}
@@ -1,18 +1,13 @@
1
1
  import "reflect-metadata";
2
- import { ISuperAgentRequestFactory, SignedRequestSender } from "@studyportals/mb-platform-http-requests";
3
2
  import { CreateClientDto, UserDto } from "./domain/users";
3
+ import { IdDto } from "./domain/id.dto";
4
4
  export declare class PrivateUserCampaignManagementAPIClient {
5
- private readonly superAgentRequestFactory;
6
- private readonly requestSender;
7
5
  private readonly baseUrl;
8
- constructor(superAgentRequestFactory: ISuperAgentRequestFactory, requestSender: SignedRequestSender, baseUrl: string);
6
+ constructor(baseUrl: string);
9
7
  getUserById(id: number): Promise<UserDto>;
10
8
  getUserByEmail(email: string): Promise<UserDto>;
11
- createClient(user: CreateClientDto): Promise<number>;
12
- private getRequest;
13
- private createGetRequest;
14
- private postRequest;
15
- private createPostRequest;
16
- private sendRequest;
9
+ createClient(user: CreateClientDto): Promise<IdDto>;
17
10
  private buildBaseUrl;
11
+ private signedGetRequest;
12
+ private signedPostRequest;
18
13
  }
@@ -12,53 +12,91 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.PrivateUserCampaignManagementAPIClient = void 0;
13
13
  require("reflect-metadata");
14
14
  const inversify_1 = require("inversify");
15
- const mb_platform_http_requests_1 = require("@studyportals/mb-platform-http-requests");
15
+ const signature_v4_1 = require("@smithy/signature-v4");
16
+ const credential_provider_node_1 = require("@aws-sdk/credential-provider-node");
17
+ const sha256_js_1 = require("@aws-crypto/sha256-js");
16
18
  let PrivateUserCampaignManagementAPIClient = class PrivateUserCampaignManagementAPIClient {
17
- constructor(superAgentRequestFactory, requestSender, baseUrl) {
18
- this.superAgentRequestFactory = superAgentRequestFactory;
19
- this.requestSender = requestSender;
19
+ constructor(baseUrl) {
20
20
  this.baseUrl = baseUrl;
21
21
  }
22
22
  async getUserById(id) {
23
- const path = `private/users/get-user-by-id?id=${id}`;
24
- return await this.getRequest(path);
23
+ const url = this.buildBaseUrl(`private/users/get-user-by-id?id=${id}`);
24
+ return await this.signedGetRequest(url);
25
25
  }
26
26
  async getUserByEmail(email) {
27
- const path = `private/users/get-user-by-email?email=${encodeURIComponent(email)}`;
28
- return await this.getRequest(path);
27
+ const url = this.buildBaseUrl(`private/users/get-user-by-email?email=${encodeURIComponent(email)}`);
28
+ return await this.signedGetRequest(url);
29
29
  }
30
30
  async createClient(user) {
31
- const path = 'private/users/create-client';
32
- const result = await this.postRequest(path, user);
33
- return Number(result.text);
31
+ const url = this.buildBaseUrl('private/users/create-client');
32
+ return await this.signedPostRequest(url, user);
34
33
  }
35
- async getRequest(relative = "") {
36
- const request = this.createGetRequest(relative);
37
- return await this.requestSender.sendAndExtractBody(request);
38
- }
39
- createGetRequest(relative = "") {
40
- const url = this.buildBaseUrl(relative);
41
- return this.superAgentRequestFactory.get(url);
42
- }
43
- async postRequest(relative = "", data) {
44
- const request = this.createPostRequest(relative);
45
- return await this.sendRequest(request, data);
46
- }
47
- createPostRequest(relative = "") {
48
- const url = this.buildBaseUrl(relative);
49
- return this.superAgentRequestFactory.post(url);
34
+ buildBaseUrl(relative) {
35
+ return new URL(`${this.baseUrl}/${relative}`);
50
36
  }
51
- async sendRequest(request, payload) {
52
- request.send(payload);
53
- return await this.requestSender.send(request);
37
+ async signedGetRequest(endpointUrl, headers = {}) {
38
+ const requestMethod = 'GET';
39
+ const requestHeaders = Object.assign({ 'Content-Type': 'application/json', 'Host': endpointUrl.hostname }, headers);
40
+ const request = {
41
+ method: requestMethod,
42
+ headers: requestHeaders,
43
+ protocol: endpointUrl.protocol,
44
+ hostname: endpointUrl.hostname,
45
+ path: endpointUrl.pathname,
46
+ query: Object.fromEntries(endpointUrl.searchParams.entries()),
47
+ };
48
+ const signer = new signature_v4_1.SignatureV4({
49
+ service: "execute-api",
50
+ region: process.env.region || process.env.REGION || "eu-central-1",
51
+ credentials: (0, credential_provider_node_1.defaultProvider)(),
52
+ sha256: sha256_js_1.Sha256
53
+ });
54
+ const signedRequest = await signer.sign(request);
55
+ const response = await fetch(endpointUrl, {
56
+ method: signedRequest.method,
57
+ headers: signedRequest.headers
58
+ });
59
+ if (!response.ok) {
60
+ const errorResponse = await response.text().catch(() => 'Unable to read response body');
61
+ throw new Error(`Request to ${endpointUrl.toString()} failed with status ${response.status} ${response.statusText}: ${errorResponse}`);
62
+ }
63
+ return await response.json();
54
64
  }
55
- buildBaseUrl(relative) {
56
- return `${this.baseUrl}/${relative}`;
65
+ async signedPostRequest(endpointUrl, payload, headers = {}) {
66
+ const requestMethod = 'POST';
67
+ const requestHeaders = Object.assign({ 'Content-Type': 'application/json', 'Host': endpointUrl.hostname }, headers);
68
+ const requestBody = payload ? JSON.stringify(payload) : {};
69
+ const request = {
70
+ method: requestMethod,
71
+ headers: requestHeaders,
72
+ body: requestBody,
73
+ protocol: endpointUrl.protocol,
74
+ hostname: endpointUrl.hostname,
75
+ path: endpointUrl.pathname,
76
+ query: Object.fromEntries(endpointUrl.searchParams.entries()),
77
+ };
78
+ const signer = new signature_v4_1.SignatureV4({
79
+ service: "execute-api",
80
+ region: process.env.region || process.env.REGION || "eu-central-1",
81
+ credentials: (0, credential_provider_node_1.defaultProvider)(),
82
+ sha256: sha256_js_1.Sha256
83
+ });
84
+ const signedRequest = await signer.sign(request);
85
+ const response = await fetch(endpointUrl, {
86
+ method: signedRequest.method,
87
+ headers: signedRequest.headers,
88
+ body: signedRequest.body
89
+ });
90
+ if (!response.ok) {
91
+ const errorResponse = await response.text().catch(() => 'Unable to read response body');
92
+ throw new Error(`Request to ${endpointUrl.toString()} failed with status ${response.status} ${response.statusText}: ${errorResponse}`);
93
+ }
94
+ return await response.json();
57
95
  }
58
96
  };
59
97
  exports.PrivateUserCampaignManagementAPIClient = PrivateUserCampaignManagementAPIClient;
60
98
  exports.PrivateUserCampaignManagementAPIClient = PrivateUserCampaignManagementAPIClient = __decorate([
61
99
  (0, inversify_1.injectable)(),
62
- __metadata("design:paramtypes", [Object, mb_platform_http_requests_1.SignedRequestSender, String])
100
+ __metadata("design:paramtypes", [String])
63
101
  ], PrivateUserCampaignManagementAPIClient);
64
102
  //# sourceMappingURL=private-user-campaign-management-api.client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"private-user-campaign-management-api.client.js","sourceRoot":"","sources":["../../src/private-user-campaign-management-api.client.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4BAA0B;AAG1B,yCAAuC;AACvC,uFAAyG;AAIlG,IAAM,sCAAsC,GAA5C,MAAM,sCAAsC;IAElD,YACkB,wBAAmD,EACnD,aAAkC,EAClC,OAAe;QAFf,6BAAwB,GAAxB,wBAAwB,CAA2B;QACnD,kBAAa,GAAb,aAAa,CAAqB;QAClC,YAAO,GAAP,OAAO,CAAQ;IAC7B,CAAC;IAEE,KAAK,CAAC,WAAW,CAAC,EAAU;QAClC,MAAM,IAAI,GAAG,mCAAmC,EAAE,EAAE,CAAC;QACrD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAU,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,KAAa;QACxC,MAAM,IAAI,GAAG,yCAAyC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAClF,OAAO,MAAM,IAAI,CAAC,UAAU,CAAU,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,IAAqB;QAC9C,MAAM,IAAI,GAAG,6BAA6B,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAGO,KAAK,CAAC,UAAU,CAAI,WAAmB,EAAE;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAI,OAAO,CAAC,CAAC;IAChE,CAAC;IAEO,gBAAgB,CAAC,WAAmB,EAAE;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,WAAmB,EAAE,EAAE,IAAS;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAEO,iBAAiB,CAAC,WAAmB,EAAE;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAA0B,EAAE,OAAY;QACjE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAEO,YAAY,CAAC,QAAgB;QACpC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC;IACtC,CAAC;CACD,CAAA;AArDY,wFAAsC;iDAAtC,sCAAsC;IADlD,IAAA,sBAAU,GAAE;6CAKqB,+CAAmB;GAJxC,sCAAsC,CAqDlD"}
1
+ {"version":3,"file":"private-user-campaign-management-api.client.js","sourceRoot":"","sources":["../../src/private-user-campaign-management-api.client.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4BAA0B;AAC1B,yCAAuC;AAEvC,uDAAmD;AACnD,gFAAoE;AACpE,qDAA+C;AAIxC,IAAM,sCAAsC,GAA5C,MAAM,sCAAsC;IAElD,YACkB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAC7B,CAAC;IAEE,KAAK,CAAC,WAAW,CAAC,EAAU;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;QACvE,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAU,GAAG,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,KAAa;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,yCAAyC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpG,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAU,GAAG,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,IAAqB;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC;QAC7D,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAQ,GAAG,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAGO,YAAY,CAAC,QAAgB;QACpC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAa,WAAgB,EAAE,UAAkC,EAAE;QAChG,MAAM,aAAa,GAAG,KAAK,CAAC;QAC5B,MAAM,cAAc,mBACnB,cAAc,EAAE,kBAAkB,EAClC,MAAM,EAAE,WAAW,CAAC,QAAQ,IACzB,OAAO,CACV,CAAC;QAEF,MAAM,OAAO,GAAG;YACf,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;SAC7D,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,0BAAW,CAAC;YAC9B,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,cAAc;YAClE,WAAW,EAAE,IAAA,0CAAe,GAAE;YAC9B,MAAM,EAAE,kBAAM;SACd,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;YACzC,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,OAAO,EAAE,aAAa,CAAC,OAAO;SAC9B,CAAC,CAAC;QAEH,IAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,CAAC;YACxF,MAAM,IAAI,KAAK,CAAC,cAAc,WAAW,CAAC,QAAQ,EAAE,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC,CAAC;QACxI,CAAC;QAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAgB,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAa,WAAgB,EAAE,OAAY,EAAE,UAAkC,EAAE;QAC/G,MAAM,aAAa,GAAG,MAAM,CAAC;QAC7B,MAAM,cAAc,mBACnB,cAAc,EAAE,kBAAkB,EAClC,MAAM,EAAE,WAAW,CAAC,QAAQ,IACzB,OAAO,CACV,CAAC;QACF,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3D,MAAM,OAAO,GAAG;YACf,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;SAC7D,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,0BAAW,CAAC;YAC9B,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,cAAc;YAClE,WAAW,EAAE,IAAA,0CAAe,GAAE;YAC9B,MAAM,EAAE,kBAAM;SACd,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;YACzC,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,IAAI,EAAE,aAAa,CAAC,IAAc;SAClC,CAAC,CAAC;QAEH,IAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,CAAC;YACxF,MAAM,IAAI,KAAK,CAAC,cAAc,WAAW,CAAC,QAAQ,EAAE,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC,CAAC;QACxI,CAAC;QAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAgB,CAAC;IAC5C,CAAC;CACD,CAAA;AAxGY,wFAAsC;iDAAtC,sCAAsC;IADlD,IAAA,sBAAU,GAAE;;GACA,sCAAsC,CAwGlD"}