@prismicio/e2e-tests-utils 1.2.0 → 1.3.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/dist/clients/authenticationApi.cjs +21 -2
- package/dist/clients/authenticationApi.cjs.map +1 -1
- package/dist/clients/authenticationApi.d.ts +3 -2
- package/dist/clients/authenticationApi.js +22 -3
- package/dist/clients/authenticationApi.js.map +1 -1
- package/dist/clients/contentApi.cjs +141 -0
- package/dist/clients/contentApi.cjs.map +1 -0
- package/dist/clients/contentApi.d.ts +106 -0
- package/dist/clients/contentApi.js +141 -0
- package/dist/clients/contentApi.js.map +1 -0
- package/dist/clients/coreApi.cjs +12 -2
- package/dist/clients/coreApi.cjs.map +1 -1
- package/dist/clients/coreApi.d.ts +1 -0
- package/dist/clients/coreApi.js +12 -2
- package/dist/clients/coreApi.js.map +1 -1
- package/dist/clients/customTypesApi.cjs +1 -0
- package/dist/clients/customTypesApi.cjs.map +1 -1
- package/dist/clients/customTypesApi.js +1 -0
- package/dist/clients/customTypesApi.js.map +1 -1
- package/dist/clients/manageV2.cjs +145 -0
- package/dist/clients/manageV2.cjs.map +1 -0
- package/dist/clients/manageV2.d.ts +91 -0
- package/dist/clients/manageV2.js +145 -0
- package/dist/clients/manageV2.js.map +1 -0
- package/dist/clients/migrationApi.cjs +36 -0
- package/dist/clients/migrationApi.cjs.map +1 -0
- package/dist/clients/migrationApi.d.ts +20 -0
- package/dist/clients/migrationApi.js +36 -0
- package/dist/clients/migrationApi.js.map +1 -0
- package/dist/clients/wroom.cjs +28 -0
- package/dist/clients/wroom.cjs.map +1 -1
- package/dist/clients/wroom.d.ts +22 -2
- package/dist/clients/wroom.js +28 -0
- package/dist/clients/wroom.js.map +1 -1
- package/dist/index.cjs +4 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/managers/repositories.cjs +25 -18
- package/dist/managers/repositories.cjs.map +1 -1
- package/dist/managers/repositories.d.ts +12 -22
- package/dist/managers/repositories.js +25 -18
- package/dist/managers/repositories.js.map +1 -1
- package/dist/managers/repository.cjs +184 -41
- package/dist/managers/repository.cjs.map +1 -1
- package/dist/managers/repository.d.ts +77 -22
- package/dist/managers/repository.js +184 -41
- package/dist/managers/repository.js.map +1 -1
- package/dist/types.d.ts +20 -1
- package/dist/utils/cookies.cjs.map +1 -1
- package/dist/utils/cookies.js.map +1 -1
- package/dist/utils/log.cjs.map +1 -1
- package/dist/utils/log.js.map +1 -1
- package/package.json +9 -2
- package/src/clients/authenticationApi.ts +33 -4
- package/src/clients/contentApi.ts +235 -0
- package/src/clients/coreApi.ts +14 -1
- package/src/clients/manageV2.ts +178 -0
- package/src/clients/migrationApi.ts +69 -0
- package/src/clients/wroom.ts +42 -2
- package/src/index.ts +2 -0
- package/src/managers/repositories.ts +46 -37
- package/src/managers/repository.ts +263 -70
- package/src/types.ts +29 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wroom.cjs","sources":["../../../src/clients/wroom.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosResponse } from \"axios\";\n\nimport {
|
|
1
|
+
{"version":3,"file":"wroom.cjs","sources":["../../../src/clients/wroom.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosResponse } from \"axios\";\n\nimport { AuthConfig } from \"../types\";\n\nimport { extractCookie } from \"../utils/cookies\";\nimport { logHttpResponse, logger } from \"../utils/log\";\nimport { getRepositoryUrl } from \"../utils/urls\";\n\n/**\n * Client for interacting with the Wroom service to perform operations on\n * repositories.\n */\nexport class WroomClient {\n\tprivate readonly client: AxiosInstance;\n\tprivate loggedIn = false;\n\n\t/**\n\t * @param baseURL - The base URL of the Wroom app. ex: https://prismic.io\n\t * @param auth - Authentication credentials.\n\t */\n\tconstructor(\n\t\tbaseURL: string,\n\t\tprivate readonly auth: AuthConfig,\n\t) {\n\t\tthis.client = axios.create({\n\t\t\tbaseURL,\n\t\t\twithCredentials: true,\n\t\t\tvalidateStatus: () => true,\n\t\t\txsrfCookieName: \"X_XSRF\",\n\t\t\theaders: {\n\t\t\t\t\"User-Agent\": \"prismic-cli/prismic-e2e-tests-utils\",\n\t\t\t},\n\t\t});\n\n\t\t// cookies are not forwarded automatically in a non-browser env\n\t\tthis.client.interceptors.response.use((response) => {\n\t\t\tconst cookies = response.headers[\"set-cookie\"];\n\t\t\tif (cookies && extractCookie(cookies, \"SESSION\")) {\n\t\t\t\tthis.client.defaults.headers[\"Cookie\"] = cookies;\n\t\t\t}\n\n\t\t\treturn response;\n\t\t});\n\t}\n\n\tgetBaseURL(): string {\n\t\treturn this.client.getUri();\n\t}\n\n\t/** authenticated GET request on the wroom backend */\n\tasync get(repository: string | null, path: string): Promise<AxiosResponse> {\n\t\tif (!this.loggedIn) {\n\t\t\tawait this.login();\n\t\t}\n\n\t\tlet url = new URL(path, this.client.getUri()).toString();\n\t\tif (repository) {\n\t\t\turl = getRepositoryUrl(url, repository);\n\t\t}\n\n\t\treturn this.client.get(url);\n\t}\n\n\t/** authenticated POST request on the wroom backend */\n\tasync post(\n\t\trepository: string | null,\n\t\tpath: string,\n\t\tdata?: unknown,\n\t): Promise<AxiosResponse> {\n\t\tif (!this.loggedIn) {\n\t\t\tawait this.login();\n\t\t}\n\n\t\tlet url = new URL(path, this.client.getUri()).toString();\n\t\tif (repository) {\n\t\t\turl = getRepositoryUrl(url, repository);\n\t\t}\n\t\tconst response = await this.client.post(url.toString(), data, {\n\t\t\tparams: {\n\t\t\t\t_: extractCookie(this.client.defaults.headers[\"Cookie\"], \"X_XSRF\"),\n\t\t\t},\n\t\t});\n\n\t\treturn response;\n\t}\n\n\t/**\n\t * Update the role of a user in the repository\n\t *\n\t * @param {string} repository - The repository name\n\t * @param {string} email - The email of the user\n\t * @param {string} role - The new role to be given\n\t *\n\t * @returns The Axios Reponse\n\t */\n\tasync updateRole(\n\t\trepository: string,\n\t\temail: string,\n\t\trole: string,\n\t): Promise<AxiosResponse> {\n\t\tconst params = new URLSearchParams({ email, profile: role });\n\t\tconst path = `/app/settings/users/profiles?${params.toString()}`;\n\n\t\treturn this.post(repository, path);\n\t}\n\n\t/**\n\t * Update the role of a user in the repository\n\t *\n\t * @param {string} repository - The repository name\n\t * @param {string} email - The email of the user\n\t * @param {string} rolePerLocal - The role per local object\n\t *\n\t * @returns The Axios Reponse\n\t */\n\tasync updateRolePerLocal(\n\t\trepository: string,\n\t\temail: string,\n\t\trolePerLocal: Record<string, string>,\n\t): Promise<AxiosResponse> {\n\t\tconst params = new URLSearchParams({ email });\n\t\tconst path = `/app/settings/users/rolesperlocale?${params.toString()}`;\n\n\t\treturn this.post(repository, path, rolePerLocal);\n\t}\n\n\t/**\n\t * Authenticate Wroom to call Wroom unofficial endpoints.\n\t *\n\t * @throws Error if the login to Wroom fails.\n\t */\n\tprivate async login(): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\t\tconst response = await this.client.post<string>(\"/authentication/signin\", {\n\t\t\temail: this.auth.email,\n\t\t\tpassword: this.auth.password,\n\t\t});\n\n\t\tif (response.status !== 200) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(\"Could not login to Prismic, check your credentials\");\n\t\t}\n\t\tthis.loggedIn = true;\n\t\tprofiler.done({ message: \"logged in to Prismic\" });\n\t}\n}\n"],"names":["cookies","extractCookie","getRepositoryUrl","logger","logHttpResponse"],"mappings":";;;;;;;;;;;;MAYa,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAQvB,YACC,SACiB,MAAgB;AAAhB;AATD;AACT,oCAAW;AAQD,SAAI,OAAJ;AAEZ,SAAA,SAAS,MAAM,OAAO;AAAA,MAC1B;AAAA,MACA,iBAAiB;AAAA,MACjB,gBAAgB,MAAM;AAAA,MACtB,gBAAgB;AAAA,MAChB,SAAS;AAAA,QACR,cAAc;AAAA,MACd;AAAA,IAAA,CACD;AAGD,SAAK,OAAO,aAAa,SAAS,IAAI,CAAC,aAAY;AAC5C,YAAAA,YAAU,SAAS,QAAQ,YAAY;AAC7C,UAAIA,aAAWC,QAAAA,cAAcD,WAAS,SAAS,GAAG;AACjD,aAAK,OAAO,SAAS,QAAQ,QAAQ,IAAIA;AAAAA,MAC1C;AAEO,aAAA;AAAA,IAAA,CACP;AAAA,EACF;AAAA,EAEA,aAAU;AACF,WAAA,KAAK,OAAO;EACpB;AAAA;AAAA,EAGA,MAAM,IAAI,YAA2B,MAAY;AAC5C,QAAA,CAAC,KAAK,UAAU;AACnB,YAAM,KAAK;IACZ;AAEI,QAAA,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO,OAAA,CAAQ,EAAE;AAC9C,QAAI,YAAY;AACT,YAAAE,KAAA,iBAAiB,KAAK,UAAU;AAAA,IACvC;AAEO,WAAA,KAAK,OAAO,IAAI,GAAG;AAAA,EAC3B;AAAA;AAAA,EAGA,MAAM,KACL,YACA,MACA,MAAc;AAEV,QAAA,CAAC,KAAK,UAAU;AACnB,YAAM,KAAK;IACZ;AAEI,QAAA,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO,OAAA,CAAQ,EAAE;AAC9C,QAAI,YAAY;AACT,YAAAA,KAAA,iBAAiB,KAAK,UAAU;AAAA,IACvC;AACM,UAAA,WAAW,MAAM,KAAK,OAAO,KAAK,IAAI,YAAY,MAAM;AAAA,MAC7D,QAAQ;AAAA,QACP,GAAGD,QAAAA,cAAc,KAAK,OAAO,SAAS,QAAQ,QAAQ,GAAG,QAAQ;AAAA,MACjE;AAAA,IAAA,CACD;AAEM,WAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,WACL,YACA,OACA,MAAY;AAEZ,UAAM,SAAS,IAAI,gBAAgB,EAAE,OAAO,SAAS,MAAM;AAC3D,UAAM,OAAO,gCAAgC,OAAO,SAAA,CAAU;AAEvD,WAAA,KAAK,KAAK,YAAY,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,mBACL,YACA,OACA,cAAoC;AAEpC,UAAM,SAAS,IAAI,gBAAgB,EAAE,MAAO,CAAA;AAC5C,UAAM,OAAO,sCAAsC,OAAO,SAAA,CAAU;AAEpE,WAAO,KAAK,KAAK,YAAY,MAAM,YAAY;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,MAAM,QAAK;AACZ,UAAA,WAAWE,WAAO;AACxB,UAAM,WAAW,MAAM,KAAK,OAAO,KAAa,0BAA0B;AAAA,MACzE,OAAO,KAAK,KAAK;AAAA,MACjB,UAAU,KAAK,KAAK;AAAA,IAAA,CACpB;AAEG,QAAA,SAAS,WAAW,KAAK;AAC5BC,UAAA,gBAAgB,QAAQ;AAClB,YAAA,IAAI,MAAM,oDAAoD;AAAA,IACrE;AACA,SAAK,WAAW;AAChB,aAAS,KAAK,EAAE,SAAS,uBAAwB,CAAA;AAAA,EAClD;AACA;;"}
|
package/dist/clients/wroom.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AxiosResponse } from "axios";
|
|
2
|
-
import {
|
|
2
|
+
import { AuthConfig } from "../types";
|
|
3
3
|
/**
|
|
4
4
|
* Client for interacting with the Wroom service to perform operations on
|
|
5
5
|
* repositories.
|
|
@@ -12,12 +12,32 @@ export declare class WroomClient {
|
|
|
12
12
|
* @param baseURL - The base URL of the Wroom app. ex: https://prismic.io
|
|
13
13
|
* @param auth - Authentication credentials.
|
|
14
14
|
*/
|
|
15
|
-
constructor(baseURL: string, auth:
|
|
15
|
+
constructor(baseURL: string, auth: AuthConfig);
|
|
16
16
|
getBaseURL(): string;
|
|
17
17
|
/** authenticated GET request on the wroom backend */
|
|
18
18
|
get(repository: string | null, path: string): Promise<AxiosResponse>;
|
|
19
19
|
/** authenticated POST request on the wroom backend */
|
|
20
20
|
post(repository: string | null, path: string, data?: unknown): Promise<AxiosResponse>;
|
|
21
|
+
/**
|
|
22
|
+
* Update the role of a user in the repository
|
|
23
|
+
*
|
|
24
|
+
* @param {string} repository - The repository name
|
|
25
|
+
* @param {string} email - The email of the user
|
|
26
|
+
* @param {string} role - The new role to be given
|
|
27
|
+
*
|
|
28
|
+
* @returns The Axios Reponse
|
|
29
|
+
*/
|
|
30
|
+
updateRole(repository: string, email: string, role: string): Promise<AxiosResponse>;
|
|
31
|
+
/**
|
|
32
|
+
* Update the role of a user in the repository
|
|
33
|
+
*
|
|
34
|
+
* @param {string} repository - The repository name
|
|
35
|
+
* @param {string} email - The email of the user
|
|
36
|
+
* @param {string} rolePerLocal - The role per local object
|
|
37
|
+
*
|
|
38
|
+
* @returns The Axios Reponse
|
|
39
|
+
*/
|
|
40
|
+
updateRolePerLocal(repository: string, email: string, rolePerLocal: Record<string, string>): Promise<AxiosResponse>;
|
|
21
41
|
/**
|
|
22
42
|
* Authenticate Wroom to call Wroom unofficial endpoints.
|
|
23
43
|
*
|
package/dist/clients/wroom.js
CHANGED
|
@@ -65,6 +65,34 @@ class WroomClient {
|
|
|
65
65
|
});
|
|
66
66
|
return response;
|
|
67
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Update the role of a user in the repository
|
|
70
|
+
*
|
|
71
|
+
* @param {string} repository - The repository name
|
|
72
|
+
* @param {string} email - The email of the user
|
|
73
|
+
* @param {string} role - The new role to be given
|
|
74
|
+
*
|
|
75
|
+
* @returns The Axios Reponse
|
|
76
|
+
*/
|
|
77
|
+
async updateRole(repository, email, role) {
|
|
78
|
+
const params = new URLSearchParams({ email, profile: role });
|
|
79
|
+
const path = `/app/settings/users/profiles?${params.toString()}`;
|
|
80
|
+
return this.post(repository, path);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Update the role of a user in the repository
|
|
84
|
+
*
|
|
85
|
+
* @param {string} repository - The repository name
|
|
86
|
+
* @param {string} email - The email of the user
|
|
87
|
+
* @param {string} rolePerLocal - The role per local object
|
|
88
|
+
*
|
|
89
|
+
* @returns The Axios Reponse
|
|
90
|
+
*/
|
|
91
|
+
async updateRolePerLocal(repository, email, rolePerLocal) {
|
|
92
|
+
const params = new URLSearchParams({ email });
|
|
93
|
+
const path = `/app/settings/users/rolesperlocale?${params.toString()}`;
|
|
94
|
+
return this.post(repository, path, rolePerLocal);
|
|
95
|
+
}
|
|
68
96
|
/**
|
|
69
97
|
* Authenticate Wroom to call Wroom unofficial endpoints.
|
|
70
98
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wroom.js","sources":["../../../src/clients/wroom.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosResponse } from \"axios\";\n\nimport {
|
|
1
|
+
{"version":3,"file":"wroom.js","sources":["../../../src/clients/wroom.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosResponse } from \"axios\";\n\nimport { AuthConfig } from \"../types\";\n\nimport { extractCookie } from \"../utils/cookies\";\nimport { logHttpResponse, logger } from \"../utils/log\";\nimport { getRepositoryUrl } from \"../utils/urls\";\n\n/**\n * Client for interacting with the Wroom service to perform operations on\n * repositories.\n */\nexport class WroomClient {\n\tprivate readonly client: AxiosInstance;\n\tprivate loggedIn = false;\n\n\t/**\n\t * @param baseURL - The base URL of the Wroom app. ex: https://prismic.io\n\t * @param auth - Authentication credentials.\n\t */\n\tconstructor(\n\t\tbaseURL: string,\n\t\tprivate readonly auth: AuthConfig,\n\t) {\n\t\tthis.client = axios.create({\n\t\t\tbaseURL,\n\t\t\twithCredentials: true,\n\t\t\tvalidateStatus: () => true,\n\t\t\txsrfCookieName: \"X_XSRF\",\n\t\t\theaders: {\n\t\t\t\t\"User-Agent\": \"prismic-cli/prismic-e2e-tests-utils\",\n\t\t\t},\n\t\t});\n\n\t\t// cookies are not forwarded automatically in a non-browser env\n\t\tthis.client.interceptors.response.use((response) => {\n\t\t\tconst cookies = response.headers[\"set-cookie\"];\n\t\t\tif (cookies && extractCookie(cookies, \"SESSION\")) {\n\t\t\t\tthis.client.defaults.headers[\"Cookie\"] = cookies;\n\t\t\t}\n\n\t\t\treturn response;\n\t\t});\n\t}\n\n\tgetBaseURL(): string {\n\t\treturn this.client.getUri();\n\t}\n\n\t/** authenticated GET request on the wroom backend */\n\tasync get(repository: string | null, path: string): Promise<AxiosResponse> {\n\t\tif (!this.loggedIn) {\n\t\t\tawait this.login();\n\t\t}\n\n\t\tlet url = new URL(path, this.client.getUri()).toString();\n\t\tif (repository) {\n\t\t\turl = getRepositoryUrl(url, repository);\n\t\t}\n\n\t\treturn this.client.get(url);\n\t}\n\n\t/** authenticated POST request on the wroom backend */\n\tasync post(\n\t\trepository: string | null,\n\t\tpath: string,\n\t\tdata?: unknown,\n\t): Promise<AxiosResponse> {\n\t\tif (!this.loggedIn) {\n\t\t\tawait this.login();\n\t\t}\n\n\t\tlet url = new URL(path, this.client.getUri()).toString();\n\t\tif (repository) {\n\t\t\turl = getRepositoryUrl(url, repository);\n\t\t}\n\t\tconst response = await this.client.post(url.toString(), data, {\n\t\t\tparams: {\n\t\t\t\t_: extractCookie(this.client.defaults.headers[\"Cookie\"], \"X_XSRF\"),\n\t\t\t},\n\t\t});\n\n\t\treturn response;\n\t}\n\n\t/**\n\t * Update the role of a user in the repository\n\t *\n\t * @param {string} repository - The repository name\n\t * @param {string} email - The email of the user\n\t * @param {string} role - The new role to be given\n\t *\n\t * @returns The Axios Reponse\n\t */\n\tasync updateRole(\n\t\trepository: string,\n\t\temail: string,\n\t\trole: string,\n\t): Promise<AxiosResponse> {\n\t\tconst params = new URLSearchParams({ email, profile: role });\n\t\tconst path = `/app/settings/users/profiles?${params.toString()}`;\n\n\t\treturn this.post(repository, path);\n\t}\n\n\t/**\n\t * Update the role of a user in the repository\n\t *\n\t * @param {string} repository - The repository name\n\t * @param {string} email - The email of the user\n\t * @param {string} rolePerLocal - The role per local object\n\t *\n\t * @returns The Axios Reponse\n\t */\n\tasync updateRolePerLocal(\n\t\trepository: string,\n\t\temail: string,\n\t\trolePerLocal: Record<string, string>,\n\t): Promise<AxiosResponse> {\n\t\tconst params = new URLSearchParams({ email });\n\t\tconst path = `/app/settings/users/rolesperlocale?${params.toString()}`;\n\n\t\treturn this.post(repository, path, rolePerLocal);\n\t}\n\n\t/**\n\t * Authenticate Wroom to call Wroom unofficial endpoints.\n\t *\n\t * @throws Error if the login to Wroom fails.\n\t */\n\tprivate async login(): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\t\tconst response = await this.client.post<string>(\"/authentication/signin\", {\n\t\t\temail: this.auth.email,\n\t\t\tpassword: this.auth.password,\n\t\t});\n\n\t\tif (response.status !== 200) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(\"Could not login to Prismic, check your credentials\");\n\t\t}\n\t\tthis.loggedIn = true;\n\t\tprofiler.done({ message: \"logged in to Prismic\" });\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;;;MAYa,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAQvB,YACC,SACiB,MAAgB;AAAhB;AATD;AACT,oCAAW;AAQD,SAAI,OAAJ;AAEZ,SAAA,SAAS,MAAM,OAAO;AAAA,MAC1B;AAAA,MACA,iBAAiB;AAAA,MACjB,gBAAgB,MAAM;AAAA,MACtB,gBAAgB;AAAA,MAChB,SAAS;AAAA,QACR,cAAc;AAAA,MACd;AAAA,IAAA,CACD;AAGD,SAAK,OAAO,aAAa,SAAS,IAAI,CAAC,aAAY;AAC5C,YAAA,UAAU,SAAS,QAAQ,YAAY;AAC7C,UAAI,WAAW,cAAc,SAAS,SAAS,GAAG;AACjD,aAAK,OAAO,SAAS,QAAQ,QAAQ,IAAI;AAAA,MAC1C;AAEO,aAAA;AAAA,IAAA,CACP;AAAA,EACF;AAAA,EAEA,aAAU;AACF,WAAA,KAAK,OAAO;EACpB;AAAA;AAAA,EAGA,MAAM,IAAI,YAA2B,MAAY;AAC5C,QAAA,CAAC,KAAK,UAAU;AACnB,YAAM,KAAK;IACZ;AAEI,QAAA,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO,OAAA,CAAQ,EAAE;AAC9C,QAAI,YAAY;AACT,YAAA,iBAAiB,KAAK,UAAU;AAAA,IACvC;AAEO,WAAA,KAAK,OAAO,IAAI,GAAG;AAAA,EAC3B;AAAA;AAAA,EAGA,MAAM,KACL,YACA,MACA,MAAc;AAEV,QAAA,CAAC,KAAK,UAAU;AACnB,YAAM,KAAK;IACZ;AAEI,QAAA,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO,OAAA,CAAQ,EAAE;AAC9C,QAAI,YAAY;AACT,YAAA,iBAAiB,KAAK,UAAU;AAAA,IACvC;AACM,UAAA,WAAW,MAAM,KAAK,OAAO,KAAK,IAAI,YAAY,MAAM;AAAA,MAC7D,QAAQ;AAAA,QACP,GAAG,cAAc,KAAK,OAAO,SAAS,QAAQ,QAAQ,GAAG,QAAQ;AAAA,MACjE;AAAA,IAAA,CACD;AAEM,WAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,WACL,YACA,OACA,MAAY;AAEZ,UAAM,SAAS,IAAI,gBAAgB,EAAE,OAAO,SAAS,MAAM;AAC3D,UAAM,OAAO,gCAAgC,OAAO,SAAA,CAAU;AAEvD,WAAA,KAAK,KAAK,YAAY,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,mBACL,YACA,OACA,cAAoC;AAEpC,UAAM,SAAS,IAAI,gBAAgB,EAAE,MAAO,CAAA;AAC5C,UAAM,OAAO,sCAAsC,OAAO,SAAA,CAAU;AAEpE,WAAO,KAAK,KAAK,YAAY,MAAM,YAAY;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,MAAM,QAAK;AACZ,UAAA,WAAW,OAAO;AACxB,UAAM,WAAW,MAAM,KAAK,OAAO,KAAa,0BAA0B;AAAA,MACzE,OAAO,KAAK,KAAK;AAAA,MACjB,UAAU,KAAK,KAAK;AAAA,IAAA,CACpB;AAEG,QAAA,SAAS,WAAW,KAAK;AAC5B,sBAAgB,QAAQ;AAClB,YAAA,IAAI,MAAM,oDAAoD;AAAA,IACrE;AACA,SAAK,WAAW;AAChB,aAAS,KAAK,EAAE,SAAS,uBAAwB,CAAA;AAAA,EAClD;AACA;"}
|
package/dist/index.cjs
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const repositories = require("./managers/repositories.cjs");
|
|
4
4
|
const repository = require("./managers/repository.cjs");
|
|
5
|
+
const contentApi = require("./clients/contentApi.cjs");
|
|
6
|
+
const migrationApi = require("./clients/migrationApi.cjs");
|
|
5
7
|
exports.RepositoriesManager = repositories.RepositoriesManager;
|
|
6
8
|
exports.createRepositoriesManager = repositories.createRepositoriesManager;
|
|
7
9
|
exports.RepositoryManager = repository.RepositoryManager;
|
|
10
|
+
exports.ContentApiClient = contentApi.ContentApiClient;
|
|
11
|
+
exports.createMigrationApiClient = migrationApi.createMigrationApiClient;
|
|
8
12
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { RepositoriesManager, createRepositoriesManager } from "./managers/repositories.js";
|
|
2
2
|
import { RepositoryManager } from "./managers/repository.js";
|
|
3
|
+
import { ContentApiClient } from "./clients/contentApi.js";
|
|
4
|
+
import { createMigrationApiClient } from "./clients/migrationApi.js";
|
|
3
5
|
export {
|
|
6
|
+
ContentApiClient,
|
|
4
7
|
RepositoriesManager,
|
|
5
8
|
RepositoryManager,
|
|
9
|
+
createMigrationApiClient,
|
|
6
10
|
createRepositoriesManager
|
|
7
11
|
};
|
|
8
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -9,37 +9,41 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
9
9
|
const authenticationApi = require("../clients/authenticationApi.cjs");
|
|
10
10
|
const coreApi = require("../clients/coreApi.cjs");
|
|
11
11
|
const customTypesApi = require("../clients/customTypesApi.cjs");
|
|
12
|
+
const manageV2 = require("../clients/manageV2.cjs");
|
|
13
|
+
const migrationApi = require("../clients/migrationApi.cjs");
|
|
12
14
|
const wroom = require("../clients/wroom.cjs");
|
|
13
15
|
const envVariableManager = require("../utils/envVariableManager.cjs");
|
|
14
16
|
const log = require("../utils/log.cjs");
|
|
15
17
|
const random = require("../utils/random.cjs");
|
|
16
18
|
const urls = require("../utils/urls.cjs");
|
|
17
19
|
const repository = require("./repository.cjs");
|
|
18
|
-
const createRepositoriesManager = (
|
|
19
|
-
return new RepositoriesManager(
|
|
20
|
+
const createRepositoriesManager = (configuration) => {
|
|
21
|
+
return new RepositoriesManager(configuration);
|
|
20
22
|
};
|
|
21
23
|
class RepositoriesManager {
|
|
22
24
|
/**
|
|
23
|
-
* @param
|
|
25
|
+
* @param configuration - Global object containing the different configuration
|
|
26
|
+
* required to setup the different clients.
|
|
24
27
|
* @param credentials - Authentication credentials (email and password)
|
|
25
28
|
*/
|
|
26
|
-
constructor(
|
|
27
|
-
__publicField(this, "
|
|
28
|
-
__publicField(this, "urls");
|
|
29
|
+
constructor(configuration) {
|
|
30
|
+
__publicField(this, "config");
|
|
29
31
|
__publicField(this, "wroomClient");
|
|
30
32
|
__publicField(this, "authClient");
|
|
33
|
+
__publicField(this, "manageV2Client");
|
|
31
34
|
/**
|
|
32
35
|
* helper to keep track of repositories across independent test phases (setup,
|
|
33
36
|
* teardown)
|
|
34
37
|
*/
|
|
35
38
|
__publicField(this, "repositories", new envVariableManager.EnvVariableManager("_PRISMIC_E2E_TESTS_REPOS"));
|
|
36
|
-
this.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.wroomClient = new wroom.WroomClient(this.
|
|
42
|
-
this.authClient = authenticationApi.createAuthenticationApiClient(this.
|
|
39
|
+
this.config = {
|
|
40
|
+
...configuration,
|
|
41
|
+
// When a string is provided, treat it as the 'base' property
|
|
42
|
+
urlConfig: typeof configuration.urlConfig === "string" ? this.inferUrls(configuration.urlConfig) : configuration.urlConfig
|
|
43
|
+
};
|
|
44
|
+
this.wroomClient = new wroom.WroomClient(this.config.urlConfig.baseURL, this.config.authConfig);
|
|
45
|
+
this.authClient = authenticationApi.createAuthenticationApiClient(this.config.urlConfig.authenticationApi, this.config.authConfig);
|
|
46
|
+
this.manageV2Client = new manageV2.ManageV2Client(this.config.urlConfig.baseURL, this.config.manageV2Config);
|
|
43
47
|
}
|
|
44
48
|
/**
|
|
45
49
|
* If the baseURL is prismic.io, assume the other services have the format
|
|
@@ -51,7 +55,8 @@ class RepositoriesManager {
|
|
|
51
55
|
return {
|
|
52
56
|
baseURL,
|
|
53
57
|
authenticationApi: `${protocol}://auth.${url.hostname}`,
|
|
54
|
-
customTypesApi: `${protocol}://customtypes.${url.hostname}
|
|
58
|
+
customTypesApi: `${protocol}://customtypes.${url.hostname}`,
|
|
59
|
+
migrationApi: `${protocol}://migration.${url.hostname}`
|
|
55
60
|
};
|
|
56
61
|
}
|
|
57
62
|
/**
|
|
@@ -101,7 +106,7 @@ class RepositoriesManager {
|
|
|
101
106
|
const profiler = log.logger.startTimer();
|
|
102
107
|
const post = async () => this.wroomClient.post(repository2, "app/settings/delete", {
|
|
103
108
|
confirm: repository2,
|
|
104
|
-
password: this.
|
|
109
|
+
password: this.config.authConfig.password
|
|
105
110
|
});
|
|
106
111
|
const response = await post();
|
|
107
112
|
if (response.status !== 200) {
|
|
@@ -130,10 +135,12 @@ class RepositoriesManager {
|
|
|
130
135
|
* @param name - The name of the repository.
|
|
131
136
|
*/
|
|
132
137
|
getRepositoryManager(name) {
|
|
133
|
-
const
|
|
134
|
-
const
|
|
138
|
+
const { urlConfig } = this.config;
|
|
139
|
+
const customTypeClient = customTypesApi.createCustomTypesApiClient(urlConfig.customTypesApi, name, this.authClient);
|
|
140
|
+
const coreApiUrl = urls.getRepositoryUrl(urlConfig.baseURL, name);
|
|
135
141
|
const coreApiClient = coreApi.createCoreApiClient(coreApiUrl, this.authClient);
|
|
136
|
-
|
|
142
|
+
const migrationApiClient = urlConfig.migrationApi ? migrationApi.createMigrationApiClient(urlConfig.migrationApi, name, this.authClient) : void 0;
|
|
143
|
+
return new repository.RepositoryManager(name, coreApiClient, this.authClient, this.wroomClient, customTypeClient, migrationApiClient, this.manageV2Client);
|
|
137
144
|
}
|
|
138
145
|
}
|
|
139
146
|
exports.RepositoriesManager = RepositoriesManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repositories.cjs","sources":["../../../src/managers/repositories.ts"],"sourcesContent":["import { Credentials } from \"../types\";\n\nimport {\n\tAuthenticationClient,\n\tcreateAuthenticationApiClient,\n} from \"../clients/authenticationApi\";\nimport { createCoreApiClient } from \"../clients/coreApi\";\nimport { createCustomTypesApiClient } from \"../clients/customTypesApi\";\nimport { WroomClient } from \"../clients/wroom\";\nimport { EnvVariableManager } from \"../utils/envVariableManager\";\nimport { logHttpResponse, logger } from \"../utils/log\";\nimport { randomString } from \"../utils/random\";\nimport { getRepositoryUrl } from \"../utils/urls\";\n\nimport { RepositoryConfig, RepositoryManager } from \"./repository\";\n\n/**\n * Factory method to create a RepositoriesManager to manage repositories test\n * data.\n *\n * @param urlConfig - If provided as an object:\n *\n * - {@link UrlConfig.baseURL}: The Prismic base URL.\n * - {@link UrlConfig.customTypesApi}: The base URL for the Custom Types API.\n * - {@link UrlConfig.authenticationApi}: The base URL for the Authentication API.\n *\n * If provided as a string: It is treated as the base URL for Prismic. Other\n * URLs (Custom Types API, Auth API) will be derived from it.\n * @param auth - The authentication credentials\n *\n * @returns An instance of {@link RepositoriesManager} to manage test data.\n */\nexport const createRepositoriesManager = (\n\turlConfig: UrlConfig | string,\n\tauth: Credentials,\n): RepositoriesManager => {\n\treturn new RepositoriesManager(urlConfig, auth);\n};\n\n/** Utility object to manage Prismic test data */\nexport class RepositoriesManager {\n\tprivate readonly urls: UrlConfig;\n\tprivate readonly wroomClient: WroomClient;\n\tprivate readonly authClient: AuthenticationClient;\n\t/**\n\t * helper to keep track of repositories across independent test phases (setup,\n\t * teardown)\n\t */\n\tprivate readonly repositories = new EnvVariableManager(\n\t\t\"_PRISMIC_E2E_TESTS_REPOS\",\n\t);\n\n\t/**\n\t * @param urlConfig - The base URL of the Wroom app.\n\t * @param credentials - Authentication credentials (email and password)\n\t */\n\tconstructor(\n\t\turlConfig: UrlConfig | string,\n\t\tprivate readonly credentials: Credentials,\n\t) {\n\t\tif (typeof urlConfig === \"string\") {\n\t\t\t// When a string is provided, treat it as the 'base' property\n\t\t\turlConfig = this.inferUrls(urlConfig);\n\t\t}\n\t\tthis.urls = urlConfig;\n\t\tthis.wroomClient = new WroomClient(this.urls.baseURL, this.credentials);\n\t\tthis.authClient = createAuthenticationApiClient(\n\t\t\tthis.urls.authenticationApi,\n\t\t\tthis.credentials,\n\t\t);\n\t}\n\n\t/**\n\t * If the baseURL is prismic.io, assume the other services have the format\n\t * <name>.prismic.io\n\t */\n\tprivate inferUrls(baseURL: string): UrlConfig {\n\t\tconst url = new URL(baseURL);\n\t\tconst protocol = url.protocol.slice(0, -1); // Remove the trailing colon from the protocol\n\n\t\treturn {\n\t\t\tbaseURL: baseURL,\n\t\t\tauthenticationApi: `${protocol}://auth.${url.hostname}`,\n\t\t\tcustomTypesApi: `${protocol}://customtypes.${url.hostname}`,\n\t\t};\n\t}\n\n\t/**\n\t * Generate a user token from the authentication service.\n\t *\n\t * @returns a JWT token\n\t */\n\tasync getUserApiToken(): Promise<string> {\n\t\treturn this.authClient.getToken();\n\t}\n\n\t/**\n\t * Create a new repository in Wroom.\n\t *\n\t * @param repositoryName - The name of the repository.\n\t *\n\t * @throws Error if the repository creation fails.\n\t */\n\tasync createRepository(\n\t\tconfig: {\n\t\t\tprefix?: string;\n\t\t} & RepositoryConfig = {},\n\t): Promise<RepositoryManager> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst { prefix = \"e2e-tests\" } = config;\n\t\tconst repositoryName = `${prefix}-${randomString()}`;\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tnull,\n\t\t\t\"authentication/newrepository\",\n\t\t\t{\n\t\t\t\tdomain: repositoryName,\n\t\t\t\tframework: \"vue\",\n\t\t\t\tplan: \"personal\",\n\t\t\t\tisAnnual: \"false\",\n\t\t\t\trole: \"developer\",\n\t\t\t},\n\t\t);\n\t\tif (response.status !== 200) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not create repository ${repositoryName}`);\n\t\t}\n\t\tthis.repositories.add(repositoryName);\n\n\t\tprofiler.done({ message: `created repository '${repositoryName}'` });\n\n\t\tconst repository = this.getRepositoryManager(repositoryName);\n\t\tawait repository.configure(config);\n\n\t\treturn repository;\n\t}\n\n\t/**\n\t * Delete a repository from Wroom.\n\t *\n\t * @param repository - The name of the repository.\n\t *\n\t * @throws Error if the repository deletion fails.\n\t */\n\tasync deleteRepository(repository: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst post = async () =>\n\t\t\tthis.wroomClient.post(repository, \"app/settings/delete\", {\n\t\t\t\tconfirm: repository,\n\t\t\t\tpassword: this.credentials.password,\n\t\t\t});\n\t\tconst response = await post();\n\t\tif (response.status !== 200) {\n\t\t\t// sometimes the deletion returns 500 but actually succeeds\n\t\t\t// we run the query again and check the repo is actually deleted (404)\n\t\t\tconst retry = await post();\n\t\t\tif (retry.status !== 404) {\n\t\t\t\tlogHttpResponse(response);\n\t\t\t\tthrow new Error(`Could not delete repository ${repository}`);\n\t\t\t}\n\t\t}\n\t\tthis.repositories.remove(repository);\n\t\tprofiler.done({ message: `deleted repository '${repository}'` });\n\t}\n\n\t/**\n\t * Cleanup test data. For example, it deletes repositories created using\n\t * createRepository()\n\t */\n\tasync tearDown(): Promise<void> {\n\t\tconst repositories = this.repositories.getAll();\n\t\tfor (const repository of repositories) {\n\t\t\tawait this.deleteRepository(repository);\n\t\t}\n\t}\n\n\t/**\n\t * Return a repository utilities object for a repository.\n\t *\n\t * @param name - The name of the repository.\n\t */\n\tgetRepositoryManager(name: string): RepositoryManager {\n\t\tconst customTypeClient = createCustomTypesApiClient(\n\t\t\tthis.urls.customTypesApi,\n\t\t\tname,\n\t\t\tthis.authClient,\n\t\t);\n\t\tconst coreApiUrl = getRepositoryUrl(this.urls.baseURL, name);\n\t\tconst coreApiClient = createCoreApiClient(coreApiUrl, this.authClient);\n\n\t\treturn new RepositoryManager(\n\t\t\tname,\n\t\t\tcoreApiClient,\n\t\t\tthis.wroomClient,\n\t\t\tcustomTypeClient,\n\t\t);\n\t}\n}\n\nexport type UrlConfig = {\n\t/** Prismic base url */\n\tbaseURL: string;\n\t/** Custom types api base url */\n\tcustomTypesApi: string;\n\t/** Auth service api base url */\n\tauthenticationApi: string;\n};\n"],"names":["EnvVariableManager","WroomClient","createAuthenticationApiClient","logger","randomString","logHttpResponse","repository","createCustomTypesApiClient","getRepositoryUrl","createCoreApiClient","RepositoryManager"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repositories.cjs","sources":["../../../src/managers/repositories.ts"],"sourcesContent":["import { SetupConfiguration, UrlConfig } from \"../types\";\n\nimport {\n\tAuthenticationClient,\n\tcreateAuthenticationApiClient,\n} from \"../clients/authenticationApi\";\nimport { createCoreApiClient } from \"../clients/coreApi\";\nimport { createCustomTypesApiClient } from \"../clients/customTypesApi\";\nimport { ManageV2Client } from \"../clients/manageV2\";\nimport { createMigrationApiClient } from \"../clients/migrationApi\";\nimport { WroomClient } from \"../clients/wroom\";\nimport { EnvVariableManager } from \"../utils/envVariableManager\";\nimport { logHttpResponse, logger } from \"../utils/log\";\nimport { randomString } from \"../utils/random\";\nimport { getRepositoryUrl } from \"../utils/urls\";\n\nimport { RepositoryConfig, RepositoryManager } from \"./repository\";\n\n/**\n * Factory method to create a RepositoriesManager to manage repositories test\n * data.\n *\n * @param configuration - Global object containing the different configurations\n * required to setup the RepositoriesManager.\n *\n * - {@link configuration.urlConfig}: Configuration around the API's URLs management.\n * - {@link configuration.authConfig}: Configuration around the authentication of a user.\n * - {@link configuration.manageV2Config}: Optional Configuration used to make calls to ManageV2.\n *\n * @returns An instance of {@link RepositoriesManager} to manage test data.\n */\nexport const createRepositoriesManager = (\n\tconfiguration: SetupConfiguration,\n): RepositoriesManager => {\n\treturn new RepositoriesManager(configuration);\n};\n\n/** Utility object to manage Prismic test data */\nexport class RepositoriesManager {\n\tprivate readonly config: Omit<SetupConfiguration, \"urlConfig\"> & {\n\t\turlConfig: UrlConfig;\n\t};\n\tprivate readonly wroomClient: WroomClient;\n\tprivate readonly authClient: AuthenticationClient;\n\tprivate readonly manageV2Client: ManageV2Client;\n\t/**\n\t * helper to keep track of repositories across independent test phases (setup,\n\t * teardown)\n\t */\n\tprivate readonly repositories = new EnvVariableManager(\n\t\t\"_PRISMIC_E2E_TESTS_REPOS\",\n\t);\n\n\t/**\n\t * @param configuration - Global object containing the different configuration\n\t * required to setup the different clients.\n\t * @param credentials - Authentication credentials (email and password)\n\t */\n\tconstructor(configuration: SetupConfiguration) {\n\t\tthis.config = {\n\t\t\t...configuration,\n\t\t\t// When a string is provided, treat it as the 'base' property\n\t\t\turlConfig:\n\t\t\t\ttypeof configuration.urlConfig === \"string\"\n\t\t\t\t\t? this.inferUrls(configuration.urlConfig)\n\t\t\t\t\t: configuration.urlConfig,\n\t\t};\n\n\t\tthis.wroomClient = new WroomClient(\n\t\t\tthis.config.urlConfig.baseURL,\n\t\t\tthis.config.authConfig,\n\t\t);\n\t\tthis.authClient = createAuthenticationApiClient(\n\t\t\tthis.config.urlConfig.authenticationApi,\n\t\t\tthis.config.authConfig,\n\t\t);\n\t\tthis.manageV2Client = new ManageV2Client(\n\t\t\tthis.config.urlConfig.baseURL,\n\t\t\tthis.config.manageV2Config,\n\t\t);\n\t}\n\n\t/**\n\t * If the baseURL is prismic.io, assume the other services have the format\n\t * <name>.prismic.io\n\t */\n\tprivate inferUrls(baseURL: string): UrlConfig {\n\t\tconst url = new URL(baseURL);\n\t\tconst protocol = url.protocol.slice(0, -1); // Remove the trailing colon from the protocol\n\n\t\treturn {\n\t\t\tbaseURL: baseURL,\n\t\t\tauthenticationApi: `${protocol}://auth.${url.hostname}`,\n\t\t\tcustomTypesApi: `${protocol}://customtypes.${url.hostname}`,\n\t\t\tmigrationApi: `${protocol}://migration.${url.hostname}`,\n\t\t};\n\t}\n\n\t/**\n\t * Generate a user token from the authentication service.\n\t *\n\t * @returns a JWT token\n\t */\n\tasync getUserApiToken(): Promise<string> {\n\t\treturn this.authClient.getToken();\n\t}\n\n\t/**\n\t * Create a new repository in Wroom.\n\t *\n\t * @param repositoryName - The name of the repository.\n\t *\n\t * @throws Error if the repository creation fails.\n\t */\n\tasync createRepository(\n\t\tconfig: {\n\t\t\tprefix?: string;\n\t\t} & RepositoryConfig = {},\n\t): Promise<RepositoryManager> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst { prefix = \"e2e-tests\" } = config;\n\t\tconst repositoryName = `${prefix}-${randomString()}`;\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tnull,\n\t\t\t\"authentication/newrepository\",\n\t\t\t{\n\t\t\t\tdomain: repositoryName,\n\t\t\t\tframework: \"vue\",\n\t\t\t\tplan: \"personal\",\n\t\t\t\tisAnnual: \"false\",\n\t\t\t\trole: \"developer\",\n\t\t\t},\n\t\t);\n\t\tif (response.status !== 200) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not create repository ${repositoryName}`);\n\t\t}\n\t\tthis.repositories.add(repositoryName);\n\n\t\tprofiler.done({ message: `created repository '${repositoryName}'` });\n\n\t\tconst repository = this.getRepositoryManager(repositoryName);\n\t\tawait repository.configure(config);\n\n\t\treturn repository;\n\t}\n\n\t/**\n\t * Delete a repository from Wroom.\n\t *\n\t * @param repository - The name of the repository.\n\t *\n\t * @throws Error if the repository deletion fails.\n\t */\n\tasync deleteRepository(repository: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst post = async () =>\n\t\t\tthis.wroomClient.post(repository, \"app/settings/delete\", {\n\t\t\t\tconfirm: repository,\n\t\t\t\tpassword: this.config.authConfig.password,\n\t\t\t});\n\t\tconst response = await post();\n\t\tif (response.status !== 200) {\n\t\t\t// sometimes the deletion returns 500 but actually succeeds\n\t\t\t// we run the query again and check the repo is actually deleted (404)\n\t\t\tconst retry = await post();\n\t\t\tif (retry.status !== 404) {\n\t\t\t\tlogHttpResponse(response);\n\t\t\t\tthrow new Error(`Could not delete repository ${repository}`);\n\t\t\t}\n\t\t}\n\t\tthis.repositories.remove(repository);\n\t\tprofiler.done({ message: `deleted repository '${repository}'` });\n\t}\n\n\t/**\n\t * Cleanup test data. For example, it deletes repositories created using\n\t * createRepository()\n\t */\n\tasync tearDown(): Promise<void> {\n\t\tconst repositories = this.repositories.getAll();\n\t\tfor (const repository of repositories) {\n\t\t\tawait this.deleteRepository(repository);\n\t\t}\n\t}\n\n\t/**\n\t * Return a repository utilities object for a repository.\n\t *\n\t * @param name - The name of the repository.\n\t */\n\tgetRepositoryManager(name: string): RepositoryManager {\n\t\tconst { urlConfig } = this.config;\n\t\tconst customTypeClient = createCustomTypesApiClient(\n\t\t\turlConfig.customTypesApi,\n\t\t\tname,\n\t\t\tthis.authClient,\n\t\t);\n\t\tconst coreApiUrl = getRepositoryUrl(urlConfig.baseURL, name);\n\t\tconst coreApiClient = createCoreApiClient(coreApiUrl, this.authClient);\n\t\tconst migrationApiClient = urlConfig.migrationApi\n\t\t\t? createMigrationApiClient(urlConfig.migrationApi, name, this.authClient)\n\t\t\t: undefined;\n\n\t\treturn new RepositoryManager(\n\t\t\tname,\n\t\t\tcoreApiClient,\n\t\t\tthis.authClient,\n\t\t\tthis.wroomClient,\n\t\t\tcustomTypeClient,\n\t\t\tmigrationApiClient,\n\t\t\tthis.manageV2Client,\n\t\t);\n\t}\n}\n"],"names":["EnvVariableManager","WroomClient","createAuthenticationApiClient","ManageV2Client","logger","randomString","logHttpResponse","repository","createCustomTypesApiClient","getRepositoryUrl","createCoreApiClient","createMigrationApiClient","RepositoryManager"],"mappings":"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"}
|
|
@@ -1,38 +1,36 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SetupConfiguration } from "../types";
|
|
2
2
|
import { RepositoryConfig, RepositoryManager } from "./repository";
|
|
3
3
|
/**
|
|
4
4
|
* Factory method to create a RepositoriesManager to manage repositories test
|
|
5
5
|
* data.
|
|
6
6
|
*
|
|
7
|
-
* @param
|
|
7
|
+
* @param configuration - Global object containing the different configurations
|
|
8
|
+
* required to setup the RepositoriesManager.
|
|
8
9
|
*
|
|
9
|
-
* - {@link
|
|
10
|
-
* - {@link
|
|
11
|
-
* - {@link
|
|
12
|
-
*
|
|
13
|
-
* If provided as a string: It is treated as the base URL for Prismic. Other
|
|
14
|
-
* URLs (Custom Types API, Auth API) will be derived from it.
|
|
15
|
-
* @param auth - The authentication credentials
|
|
10
|
+
* - {@link configuration.urlConfig}: Configuration around the API's URLs management.
|
|
11
|
+
* - {@link configuration.authConfig}: Configuration around the authentication of a user.
|
|
12
|
+
* - {@link configuration.manageV2Config}: Optional Configuration used to make calls to ManageV2.
|
|
16
13
|
*
|
|
17
14
|
* @returns An instance of {@link RepositoriesManager} to manage test data.
|
|
18
15
|
*/
|
|
19
|
-
export declare const createRepositoriesManager: (
|
|
16
|
+
export declare const createRepositoriesManager: (configuration: SetupConfiguration) => RepositoriesManager;
|
|
20
17
|
/** Utility object to manage Prismic test data */
|
|
21
18
|
export declare class RepositoriesManager {
|
|
22
|
-
private readonly
|
|
23
|
-
private readonly urls;
|
|
19
|
+
private readonly config;
|
|
24
20
|
private readonly wroomClient;
|
|
25
21
|
private readonly authClient;
|
|
22
|
+
private readonly manageV2Client;
|
|
26
23
|
/**
|
|
27
24
|
* helper to keep track of repositories across independent test phases (setup,
|
|
28
25
|
* teardown)
|
|
29
26
|
*/
|
|
30
27
|
private readonly repositories;
|
|
31
28
|
/**
|
|
32
|
-
* @param
|
|
29
|
+
* @param configuration - Global object containing the different configuration
|
|
30
|
+
* required to setup the different clients.
|
|
33
31
|
* @param credentials - Authentication credentials (email and password)
|
|
34
32
|
*/
|
|
35
|
-
constructor(
|
|
33
|
+
constructor(configuration: SetupConfiguration);
|
|
36
34
|
/**
|
|
37
35
|
* If the baseURL is prismic.io, assume the other services have the format
|
|
38
36
|
* <name>.prismic.io
|
|
@@ -74,11 +72,3 @@ export declare class RepositoriesManager {
|
|
|
74
72
|
*/
|
|
75
73
|
getRepositoryManager(name: string): RepositoryManager;
|
|
76
74
|
}
|
|
77
|
-
export type UrlConfig = {
|
|
78
|
-
/** Prismic base url */
|
|
79
|
-
baseURL: string;
|
|
80
|
-
/** Custom types api base url */
|
|
81
|
-
customTypesApi: string;
|
|
82
|
-
/** Auth service api base url */
|
|
83
|
-
authenticationApi: string;
|
|
84
|
-
};
|
|
@@ -7,37 +7,41 @@ var __publicField = (obj, key, value) => {
|
|
|
7
7
|
import { createAuthenticationApiClient } from "../clients/authenticationApi.js";
|
|
8
8
|
import { createCoreApiClient } from "../clients/coreApi.js";
|
|
9
9
|
import { createCustomTypesApiClient } from "../clients/customTypesApi.js";
|
|
10
|
+
import { ManageV2Client } from "../clients/manageV2.js";
|
|
11
|
+
import { createMigrationApiClient } from "../clients/migrationApi.js";
|
|
10
12
|
import { WroomClient } from "../clients/wroom.js";
|
|
11
13
|
import { EnvVariableManager } from "../utils/envVariableManager.js";
|
|
12
14
|
import { logger, logHttpResponse } from "../utils/log.js";
|
|
13
15
|
import { randomString } from "../utils/random.js";
|
|
14
16
|
import { getRepositoryUrl } from "../utils/urls.js";
|
|
15
17
|
import { RepositoryManager } from "./repository.js";
|
|
16
|
-
const createRepositoriesManager = (
|
|
17
|
-
return new RepositoriesManager(
|
|
18
|
+
const createRepositoriesManager = (configuration) => {
|
|
19
|
+
return new RepositoriesManager(configuration);
|
|
18
20
|
};
|
|
19
21
|
class RepositoriesManager {
|
|
20
22
|
/**
|
|
21
|
-
* @param
|
|
23
|
+
* @param configuration - Global object containing the different configuration
|
|
24
|
+
* required to setup the different clients.
|
|
22
25
|
* @param credentials - Authentication credentials (email and password)
|
|
23
26
|
*/
|
|
24
|
-
constructor(
|
|
25
|
-
__publicField(this, "
|
|
26
|
-
__publicField(this, "urls");
|
|
27
|
+
constructor(configuration) {
|
|
28
|
+
__publicField(this, "config");
|
|
27
29
|
__publicField(this, "wroomClient");
|
|
28
30
|
__publicField(this, "authClient");
|
|
31
|
+
__publicField(this, "manageV2Client");
|
|
29
32
|
/**
|
|
30
33
|
* helper to keep track of repositories across independent test phases (setup,
|
|
31
34
|
* teardown)
|
|
32
35
|
*/
|
|
33
36
|
__publicField(this, "repositories", new EnvVariableManager("_PRISMIC_E2E_TESTS_REPOS"));
|
|
34
|
-
this.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.wroomClient = new WroomClient(this.
|
|
40
|
-
this.authClient = createAuthenticationApiClient(this.
|
|
37
|
+
this.config = {
|
|
38
|
+
...configuration,
|
|
39
|
+
// When a string is provided, treat it as the 'base' property
|
|
40
|
+
urlConfig: typeof configuration.urlConfig === "string" ? this.inferUrls(configuration.urlConfig) : configuration.urlConfig
|
|
41
|
+
};
|
|
42
|
+
this.wroomClient = new WroomClient(this.config.urlConfig.baseURL, this.config.authConfig);
|
|
43
|
+
this.authClient = createAuthenticationApiClient(this.config.urlConfig.authenticationApi, this.config.authConfig);
|
|
44
|
+
this.manageV2Client = new ManageV2Client(this.config.urlConfig.baseURL, this.config.manageV2Config);
|
|
41
45
|
}
|
|
42
46
|
/**
|
|
43
47
|
* If the baseURL is prismic.io, assume the other services have the format
|
|
@@ -49,7 +53,8 @@ class RepositoriesManager {
|
|
|
49
53
|
return {
|
|
50
54
|
baseURL,
|
|
51
55
|
authenticationApi: `${protocol}://auth.${url.hostname}`,
|
|
52
|
-
customTypesApi: `${protocol}://customtypes.${url.hostname}
|
|
56
|
+
customTypesApi: `${protocol}://customtypes.${url.hostname}`,
|
|
57
|
+
migrationApi: `${protocol}://migration.${url.hostname}`
|
|
53
58
|
};
|
|
54
59
|
}
|
|
55
60
|
/**
|
|
@@ -99,7 +104,7 @@ class RepositoriesManager {
|
|
|
99
104
|
const profiler = logger.startTimer();
|
|
100
105
|
const post = async () => this.wroomClient.post(repository, "app/settings/delete", {
|
|
101
106
|
confirm: repository,
|
|
102
|
-
password: this.
|
|
107
|
+
password: this.config.authConfig.password
|
|
103
108
|
});
|
|
104
109
|
const response = await post();
|
|
105
110
|
if (response.status !== 200) {
|
|
@@ -128,10 +133,12 @@ class RepositoriesManager {
|
|
|
128
133
|
* @param name - The name of the repository.
|
|
129
134
|
*/
|
|
130
135
|
getRepositoryManager(name) {
|
|
131
|
-
const
|
|
132
|
-
const
|
|
136
|
+
const { urlConfig } = this.config;
|
|
137
|
+
const customTypeClient = createCustomTypesApiClient(urlConfig.customTypesApi, name, this.authClient);
|
|
138
|
+
const coreApiUrl = getRepositoryUrl(urlConfig.baseURL, name);
|
|
133
139
|
const coreApiClient = createCoreApiClient(coreApiUrl, this.authClient);
|
|
134
|
-
|
|
140
|
+
const migrationApiClient = urlConfig.migrationApi ? createMigrationApiClient(urlConfig.migrationApi, name, this.authClient) : void 0;
|
|
141
|
+
return new RepositoryManager(name, coreApiClient, this.authClient, this.wroomClient, customTypeClient, migrationApiClient, this.manageV2Client);
|
|
135
142
|
}
|
|
136
143
|
}
|
|
137
144
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repositories.js","sources":["../../../src/managers/repositories.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"repositories.js","sources":["../../../src/managers/repositories.ts"],"sourcesContent":["import { SetupConfiguration, UrlConfig } from \"../types\";\n\nimport {\n\tAuthenticationClient,\n\tcreateAuthenticationApiClient,\n} from \"../clients/authenticationApi\";\nimport { createCoreApiClient } from \"../clients/coreApi\";\nimport { createCustomTypesApiClient } from \"../clients/customTypesApi\";\nimport { ManageV2Client } from \"../clients/manageV2\";\nimport { createMigrationApiClient } from \"../clients/migrationApi\";\nimport { WroomClient } from \"../clients/wroom\";\nimport { EnvVariableManager } from \"../utils/envVariableManager\";\nimport { logHttpResponse, logger } from \"../utils/log\";\nimport { randomString } from \"../utils/random\";\nimport { getRepositoryUrl } from \"../utils/urls\";\n\nimport { RepositoryConfig, RepositoryManager } from \"./repository\";\n\n/**\n * Factory method to create a RepositoriesManager to manage repositories test\n * data.\n *\n * @param configuration - Global object containing the different configurations\n * required to setup the RepositoriesManager.\n *\n * - {@link configuration.urlConfig}: Configuration around the API's URLs management.\n * - {@link configuration.authConfig}: Configuration around the authentication of a user.\n * - {@link configuration.manageV2Config}: Optional Configuration used to make calls to ManageV2.\n *\n * @returns An instance of {@link RepositoriesManager} to manage test data.\n */\nexport const createRepositoriesManager = (\n\tconfiguration: SetupConfiguration,\n): RepositoriesManager => {\n\treturn new RepositoriesManager(configuration);\n};\n\n/** Utility object to manage Prismic test data */\nexport class RepositoriesManager {\n\tprivate readonly config: Omit<SetupConfiguration, \"urlConfig\"> & {\n\t\turlConfig: UrlConfig;\n\t};\n\tprivate readonly wroomClient: WroomClient;\n\tprivate readonly authClient: AuthenticationClient;\n\tprivate readonly manageV2Client: ManageV2Client;\n\t/**\n\t * helper to keep track of repositories across independent test phases (setup,\n\t * teardown)\n\t */\n\tprivate readonly repositories = new EnvVariableManager(\n\t\t\"_PRISMIC_E2E_TESTS_REPOS\",\n\t);\n\n\t/**\n\t * @param configuration - Global object containing the different configuration\n\t * required to setup the different clients.\n\t * @param credentials - Authentication credentials (email and password)\n\t */\n\tconstructor(configuration: SetupConfiguration) {\n\t\tthis.config = {\n\t\t\t...configuration,\n\t\t\t// When a string is provided, treat it as the 'base' property\n\t\t\turlConfig:\n\t\t\t\ttypeof configuration.urlConfig === \"string\"\n\t\t\t\t\t? this.inferUrls(configuration.urlConfig)\n\t\t\t\t\t: configuration.urlConfig,\n\t\t};\n\n\t\tthis.wroomClient = new WroomClient(\n\t\t\tthis.config.urlConfig.baseURL,\n\t\t\tthis.config.authConfig,\n\t\t);\n\t\tthis.authClient = createAuthenticationApiClient(\n\t\t\tthis.config.urlConfig.authenticationApi,\n\t\t\tthis.config.authConfig,\n\t\t);\n\t\tthis.manageV2Client = new ManageV2Client(\n\t\t\tthis.config.urlConfig.baseURL,\n\t\t\tthis.config.manageV2Config,\n\t\t);\n\t}\n\n\t/**\n\t * If the baseURL is prismic.io, assume the other services have the format\n\t * <name>.prismic.io\n\t */\n\tprivate inferUrls(baseURL: string): UrlConfig {\n\t\tconst url = new URL(baseURL);\n\t\tconst protocol = url.protocol.slice(0, -1); // Remove the trailing colon from the protocol\n\n\t\treturn {\n\t\t\tbaseURL: baseURL,\n\t\t\tauthenticationApi: `${protocol}://auth.${url.hostname}`,\n\t\t\tcustomTypesApi: `${protocol}://customtypes.${url.hostname}`,\n\t\t\tmigrationApi: `${protocol}://migration.${url.hostname}`,\n\t\t};\n\t}\n\n\t/**\n\t * Generate a user token from the authentication service.\n\t *\n\t * @returns a JWT token\n\t */\n\tasync getUserApiToken(): Promise<string> {\n\t\treturn this.authClient.getToken();\n\t}\n\n\t/**\n\t * Create a new repository in Wroom.\n\t *\n\t * @param repositoryName - The name of the repository.\n\t *\n\t * @throws Error if the repository creation fails.\n\t */\n\tasync createRepository(\n\t\tconfig: {\n\t\t\tprefix?: string;\n\t\t} & RepositoryConfig = {},\n\t): Promise<RepositoryManager> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst { prefix = \"e2e-tests\" } = config;\n\t\tconst repositoryName = `${prefix}-${randomString()}`;\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tnull,\n\t\t\t\"authentication/newrepository\",\n\t\t\t{\n\t\t\t\tdomain: repositoryName,\n\t\t\t\tframework: \"vue\",\n\t\t\t\tplan: \"personal\",\n\t\t\t\tisAnnual: \"false\",\n\t\t\t\trole: \"developer\",\n\t\t\t},\n\t\t);\n\t\tif (response.status !== 200) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not create repository ${repositoryName}`);\n\t\t}\n\t\tthis.repositories.add(repositoryName);\n\n\t\tprofiler.done({ message: `created repository '${repositoryName}'` });\n\n\t\tconst repository = this.getRepositoryManager(repositoryName);\n\t\tawait repository.configure(config);\n\n\t\treturn repository;\n\t}\n\n\t/**\n\t * Delete a repository from Wroom.\n\t *\n\t * @param repository - The name of the repository.\n\t *\n\t * @throws Error if the repository deletion fails.\n\t */\n\tasync deleteRepository(repository: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst post = async () =>\n\t\t\tthis.wroomClient.post(repository, \"app/settings/delete\", {\n\t\t\t\tconfirm: repository,\n\t\t\t\tpassword: this.config.authConfig.password,\n\t\t\t});\n\t\tconst response = await post();\n\t\tif (response.status !== 200) {\n\t\t\t// sometimes the deletion returns 500 but actually succeeds\n\t\t\t// we run the query again and check the repo is actually deleted (404)\n\t\t\tconst retry = await post();\n\t\t\tif (retry.status !== 404) {\n\t\t\t\tlogHttpResponse(response);\n\t\t\t\tthrow new Error(`Could not delete repository ${repository}`);\n\t\t\t}\n\t\t}\n\t\tthis.repositories.remove(repository);\n\t\tprofiler.done({ message: `deleted repository '${repository}'` });\n\t}\n\n\t/**\n\t * Cleanup test data. For example, it deletes repositories created using\n\t * createRepository()\n\t */\n\tasync tearDown(): Promise<void> {\n\t\tconst repositories = this.repositories.getAll();\n\t\tfor (const repository of repositories) {\n\t\t\tawait this.deleteRepository(repository);\n\t\t}\n\t}\n\n\t/**\n\t * Return a repository utilities object for a repository.\n\t *\n\t * @param name - The name of the repository.\n\t */\n\tgetRepositoryManager(name: string): RepositoryManager {\n\t\tconst { urlConfig } = this.config;\n\t\tconst customTypeClient = createCustomTypesApiClient(\n\t\t\turlConfig.customTypesApi,\n\t\t\tname,\n\t\t\tthis.authClient,\n\t\t);\n\t\tconst coreApiUrl = getRepositoryUrl(urlConfig.baseURL, name);\n\t\tconst coreApiClient = createCoreApiClient(coreApiUrl, this.authClient);\n\t\tconst migrationApiClient = urlConfig.migrationApi\n\t\t\t? createMigrationApiClient(urlConfig.migrationApi, name, this.authClient)\n\t\t\t: undefined;\n\n\t\treturn new RepositoryManager(\n\t\t\tname,\n\t\t\tcoreApiClient,\n\t\t\tthis.authClient,\n\t\t\tthis.wroomClient,\n\t\t\tcustomTypeClient,\n\t\t\tmigrationApiClient,\n\t\t\tthis.manageV2Client,\n\t\t);\n\t}\n}\n"],"names":[],"mappings":"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"}
|