@prismicio/e2e-tests-utils 1.18.0 → 1.19.0-pr.37.21fc0dd
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/README.md +24 -27
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/clients/apiClient.cjs +38 -38
- package/dist/clients/apiClient.cjs.map +1 -1
- package/dist/clients/apiClient.d.cts +30 -0
- package/dist/clients/apiClient.d.cts.map +1 -0
- package/dist/clients/apiClient.d.ts +23 -23
- package/dist/clients/apiClient.d.ts.map +1 -0
- package/dist/clients/apiClient.js +38 -38
- package/dist/clients/apiClient.js.map +1 -1
- package/dist/clients/assetApi.cjs +81 -93
- package/dist/clients/assetApi.cjs.map +1 -1
- package/dist/clients/assetApi.d.cts +105 -0
- package/dist/clients/assetApi.d.cts.map +1 -0
- package/dist/clients/assetApi.d.ts +96 -97
- package/dist/clients/assetApi.d.ts.map +1 -0
- package/dist/clients/assetApi.js +79 -91
- package/dist/clients/assetApi.js.map +1 -1
- package/dist/clients/authenticationApi.cjs +66 -73
- package/dist/clients/authenticationApi.cjs.map +1 -1
- package/dist/clients/authenticationApi.d.cts +20 -0
- package/dist/clients/authenticationApi.d.cts.map +1 -0
- package/dist/clients/authenticationApi.d.ts +18 -13
- package/dist/clients/authenticationApi.d.ts.map +1 -0
- package/dist/clients/authenticationApi.js +65 -72
- package/dist/clients/authenticationApi.js.map +1 -1
- package/dist/clients/contentApi.cjs +94 -103
- package/dist/clients/contentApi.cjs.map +1 -1
- package/dist/clients/contentApi.d.cts +116 -0
- package/dist/clients/contentApi.d.cts.map +1 -0
- package/dist/clients/contentApi.d.ts +102 -98
- package/dist/clients/contentApi.d.ts.map +1 -0
- package/dist/clients/contentApi.js +94 -103
- package/dist/clients/contentApi.js.map +1 -1
- package/dist/clients/coreApi.cjs +154 -145
- package/dist/clients/coreApi.cjs.map +1 -1
- package/dist/clients/coreApi.d.cts +142 -0
- package/dist/clients/coreApi.d.cts.map +1 -0
- package/dist/clients/coreApi.d.ts +131 -109
- package/dist/clients/coreApi.d.ts.map +1 -0
- package/dist/clients/coreApi.js +153 -144
- package/dist/clients/coreApi.js.map +1 -1
- package/dist/clients/customTypesApi.cjs +90 -99
- package/dist/clients/customTypesApi.cjs.map +1 -1
- package/dist/clients/customTypesApi.d.cts +46 -0
- package/dist/clients/customTypesApi.d.cts.map +1 -0
- package/dist/clients/customTypesApi.d.ts +45 -45
- package/dist/clients/customTypesApi.d.ts.map +1 -0
- package/dist/clients/customTypesApi.js +87 -98
- package/dist/clients/customTypesApi.js.map +1 -1
- package/dist/clients/integrationFields.cjs +96 -87
- package/dist/clients/integrationFields.cjs.map +1 -1
- package/dist/clients/integrationFields.d.cts +30 -0
- package/dist/clients/integrationFields.d.cts.map +1 -0
- package/dist/clients/integrationFields.d.ts +27 -22
- package/dist/clients/integrationFields.d.ts.map +1 -0
- package/dist/clients/integrationFields.js +93 -86
- package/dist/clients/integrationFields.js.map +1 -1
- package/dist/clients/manageV2.cjs +154 -171
- package/dist/clients/manageV2.cjs.map +1 -1
- package/dist/clients/manageV2.d.cts +105 -0
- package/dist/clients/manageV2.d.cts.map +1 -0
- package/dist/clients/manageV2.d.ts +103 -111
- package/dist/clients/manageV2.d.ts.map +1 -0
- package/dist/clients/manageV2.js +149 -169
- package/dist/clients/manageV2.js.map +1 -1
- package/dist/clients/migrationApi.cjs +37 -36
- package/dist/clients/migrationApi.cjs.map +1 -1
- package/dist/clients/migrationApi.d.cts +48 -0
- package/dist/clients/migrationApi.d.cts.map +1 -0
- package/dist/clients/migrationApi.d.ts +45 -39
- package/dist/clients/migrationApi.d.ts.map +1 -0
- package/dist/clients/migrationApi.js +35 -34
- package/dist/clients/migrationApi.js.map +1 -1
- package/dist/clients/wroom.cjs +101 -122
- package/dist/clients/wroom.cjs.map +1 -1
- package/dist/clients/wroom.d.cts +48 -0
- package/dist/clients/wroom.d.cts.map +1 -0
- package/dist/clients/wroom.d.ts +46 -47
- package/dist/clients/wroom.d.ts.map +1 -0
- package/dist/clients/wroom.js +99 -122
- package/dist/clients/wroom.js.map +1 -1
- package/dist/index.cjs +13 -15
- package/dist/index.d.cts +8 -0
- package/dist/index.d.ts +8 -7
- package/dist/index.js +5 -14
- package/dist/managers/repositories.cjs +159 -169
- package/dist/managers/repositories.cjs.map +1 -1
- package/dist/managers/repositories.d.cts +67 -0
- package/dist/managers/repositories.d.cts.map +1 -0
- package/dist/managers/repositories.d.ts +56 -63
- package/dist/managers/repositories.d.ts.map +1 -0
- package/dist/managers/repositories.js +148 -159
- package/dist/managers/repositories.js.map +1 -1
- package/dist/managers/repository.cjs +592 -616
- package/dist/managers/repository.cjs.map +1 -1
- package/dist/managers/repository.d.cts +339 -0
- package/dist/managers/repository.d.cts.map +1 -0
- package/dist/managers/repository.d.ts +334 -307
- package/dist/managers/repository.d.ts.map +1 -0
- package/dist/managers/repository.js +592 -616
- package/dist/managers/repository.js.map +1 -1
- package/dist/types.d.cts +41 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.ts +35 -37
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/cookies.cjs +19 -17
- package/dist/utils/cookies.cjs.map +1 -1
- package/dist/utils/cookies.js +20 -18
- package/dist/utils/cookies.js.map +1 -1
- package/dist/utils/envVariableManager.cjs +33 -34
- package/dist/utils/envVariableManager.cjs.map +1 -1
- package/dist/utils/envVariableManager.js +34 -35
- package/dist/utils/envVariableManager.js.map +1 -1
- package/dist/utils/log.cjs +18 -19
- package/dist/utils/log.cjs.map +1 -1
- package/dist/utils/log.js +18 -21
- package/dist/utils/log.js.map +1 -1
- package/dist/utils/random.cjs +13 -6
- package/dist/utils/random.cjs.map +1 -1
- package/dist/utils/random.js +13 -6
- package/dist/utils/random.js.map +1 -1
- package/dist/utils/strings.cjs +13 -7
- package/dist/utils/strings.cjs.map +1 -1
- package/dist/utils/strings.js +14 -8
- package/dist/utils/strings.js.map +1 -1
- package/dist/utils/urls.cjs +21 -10
- package/dist/utils/urls.cjs.map +1 -1
- package/dist/utils/urls.js +22 -12
- package/dist/utils/urls.js.map +1 -1
- package/package.json +42 -67
- package/src/clients/apiClient.ts +16 -21
- package/src/clients/assetApi.ts +75 -82
- package/src/clients/authenticationApi.ts +54 -27
- package/src/clients/contentApi.ts +111 -129
- package/src/clients/coreApi.ts +165 -117
- package/src/clients/customTypesApi.ts +54 -74
- package/src/clients/integrationFields.ts +59 -74
- package/src/clients/manageV2.ts +72 -96
- package/src/clients/migrationApi.ts +35 -39
- package/src/clients/wroom.ts +42 -56
- package/src/index.ts +7 -7
- package/src/managers/repositories.ts +85 -108
- package/src/managers/repository.ts +394 -368
- package/src/types.ts +31 -31
- package/src/utils/cookies.ts +8 -8
- package/src/utils/envVariableManager.ts +15 -15
- package/src/utils/log.ts +17 -21
- package/src/utils/random.ts +5 -6
- package/src/utils/strings.ts +7 -9
- package/src/utils/urls.ts +10 -12
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/utils/cookies.d.ts +0 -8
- package/dist/utils/envVariableManager.d.ts +0 -16
- package/dist/utils/log.d.ts +0 -5
- package/dist/utils/random.d.ts +0 -8
- package/dist/utils/strings.d.ts +0 -11
- package/dist/utils/urls.d.ts +0 -16
|
@@ -1,75 +1,68 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
__publicField(this, "authToken");
|
|
16
|
-
__publicField(this, "_context");
|
|
17
|
-
this.baseURL = baseURL;
|
|
18
|
-
this.auth = auth;
|
|
19
|
-
}
|
|
20
|
-
async getContext() {
|
|
21
|
-
if (!this._context) {
|
|
22
|
-
this._context = await test.request.newContext({
|
|
23
|
-
baseURL: this.baseURL
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
return this._context;
|
|
27
|
-
}
|
|
28
|
-
async login() {
|
|
29
|
-
const profiler = log.logger.startTimer();
|
|
30
|
-
const context = await this.getContext();
|
|
31
|
-
const result = await context.post("login", {
|
|
32
|
-
data: {
|
|
33
|
-
email: this.auth.email,
|
|
34
|
-
password: this.auth.password
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
const token = await result.text();
|
|
38
|
-
if (!result.ok() || !token) {
|
|
39
|
-
log.logPlaywrightApiResponse(result);
|
|
40
|
-
throw new Error("Authentication failed, no token received.");
|
|
41
|
-
}
|
|
42
|
-
profiler.done({
|
|
43
|
-
message: `generated user token for ${this.auth.email} from auth service`
|
|
44
|
-
});
|
|
45
|
-
return token;
|
|
46
|
-
}
|
|
47
|
-
/** Return an api user token. Creates one if needed. */
|
|
48
|
-
async getToken() {
|
|
49
|
-
if (!this.authToken) {
|
|
50
|
-
this.authToken = await this.login();
|
|
51
|
-
}
|
|
52
|
-
return this.authToken;
|
|
53
|
-
}
|
|
54
|
-
/** Return an api user token. Creates one if needed. */
|
|
55
|
-
async getMachine2MachineToken(repository) {
|
|
56
|
-
if (!this.authToken) {
|
|
57
|
-
this.authToken = await this.login();
|
|
58
|
-
}
|
|
59
|
-
const context = await this.getContext();
|
|
60
|
-
const result = await context.get("machine2machine", {
|
|
61
|
-
headers: {
|
|
62
|
-
Authorization: `Bearer ${this.authToken}`,
|
|
63
|
-
repository
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
if (!result.ok()) {
|
|
67
|
-
log.logPlaywrightApiResponse(result);
|
|
68
|
-
throw new Error("Machine2Machine token generation failed, no token received.");
|
|
69
|
-
}
|
|
70
|
-
const token = (await result.json()).token;
|
|
71
|
-
return token;
|
|
72
|
-
}
|
|
1
|
+
const require_log = require("../utils/log.cjs");
|
|
2
|
+
let _playwright_test = require("@playwright/test");
|
|
3
|
+
//#region src/clients/authenticationApi.ts
|
|
4
|
+
const AUTH_API_TOKENS_ENV = "PRISMIC_E2E_TEST_UTILS_AUTH_API_TOKENS";
|
|
5
|
+
function getAuthApiTokenFromEnv(email) {
|
|
6
|
+
const value = process.env[AUTH_API_TOKENS_ENV];
|
|
7
|
+
if (!value) return;
|
|
8
|
+
for (const entry of value.split(",")) {
|
|
9
|
+
const separatorIndex = entry.indexOf(":");
|
|
10
|
+
if (separatorIndex === -1) continue;
|
|
11
|
+
const entryEmail = entry.slice(0, separatorIndex).trim();
|
|
12
|
+
const token = entry.slice(separatorIndex + 1).trim();
|
|
13
|
+
if (entryEmail === email && token) return token;
|
|
14
|
+
}
|
|
73
15
|
}
|
|
16
|
+
/** Client for interacting with the authentication service to manage tokens */
|
|
17
|
+
var AuthenticationApiClient = class {
|
|
18
|
+
baseURL;
|
|
19
|
+
auth;
|
|
20
|
+
authToken;
|
|
21
|
+
_context;
|
|
22
|
+
constructor(baseURL, auth) {
|
|
23
|
+
this.baseURL = baseURL;
|
|
24
|
+
this.auth = auth;
|
|
25
|
+
this.authToken = getAuthApiTokenFromEnv(auth.email);
|
|
26
|
+
if (this.authToken) require_log.logger.info(`using user token for ${auth.email} from ${AUTH_API_TOKENS_ENV}`);
|
|
27
|
+
}
|
|
28
|
+
async getContext() {
|
|
29
|
+
if (!this._context) this._context = await _playwright_test.request.newContext({ baseURL: this.baseURL });
|
|
30
|
+
return this._context;
|
|
31
|
+
}
|
|
32
|
+
async login() {
|
|
33
|
+
const profiler = require_log.logger.startTimer();
|
|
34
|
+
const result = await (await this.getContext()).post("login", { data: {
|
|
35
|
+
email: this.auth.email,
|
|
36
|
+
password: this.auth.password
|
|
37
|
+
} });
|
|
38
|
+
const token = await result.text();
|
|
39
|
+
if (!result.ok() || !token) {
|
|
40
|
+
require_log.logPlaywrightApiResponse(result);
|
|
41
|
+
throw new Error("Authentication failed, no token received.");
|
|
42
|
+
}
|
|
43
|
+
profiler.done({ message: `generated user token for ${this.auth.email} from auth service` });
|
|
44
|
+
return token;
|
|
45
|
+
}
|
|
46
|
+
/** Return an api user token. Creates one if needed. */
|
|
47
|
+
async getToken() {
|
|
48
|
+
if (!this.authToken) this.authToken = await this.login();
|
|
49
|
+
return this.authToken;
|
|
50
|
+
}
|
|
51
|
+
/** Return an api user token. Creates one if needed. */
|
|
52
|
+
async getMachine2MachineToken(repository) {
|
|
53
|
+
if (!this.authToken) this.authToken = await this.login();
|
|
54
|
+
const result = await (await this.getContext()).get("machine2machine", { headers: {
|
|
55
|
+
Authorization: `Bearer ${this.authToken}`,
|
|
56
|
+
repository
|
|
57
|
+
} });
|
|
58
|
+
if (!result.ok()) {
|
|
59
|
+
require_log.logPlaywrightApiResponse(result);
|
|
60
|
+
throw new Error("Machine2Machine token generation failed, no token received.");
|
|
61
|
+
}
|
|
62
|
+
return (await result.json()).token;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
//#endregion
|
|
74
66
|
exports.AuthenticationApiClient = AuthenticationApiClient;
|
|
75
|
-
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=authenticationApi.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticationApi.cjs","sources":["
|
|
1
|
+
{"version":3,"file":"authenticationApi.cjs","names":["request","logger"],"sources":["../../src/clients/authenticationApi.ts"],"sourcesContent":["import type { APIRequestContext } from \"@playwright/test\"\nimport { request } from \"@playwright/test\"\n\nimport type { AuthConfig } from \"../types\"\nimport { logPlaywrightApiResponse, logger } from \"../utils/log\"\n\nconst AUTH_API_TOKENS_ENV = \"PRISMIC_E2E_TEST_UTILS_AUTH_API_TOKENS\"\n\nfunction getAuthApiTokenFromEnv(email: string): string | undefined {\n\tconst value = process.env[AUTH_API_TOKENS_ENV]\n\tif (!value) {\n\t\treturn undefined\n\t}\n\n\tfor (const entry of value.split(\",\")) {\n\t\tconst separatorIndex = entry.indexOf(\":\")\n\t\tif (separatorIndex === -1) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst entryEmail = entry.slice(0, separatorIndex).trim()\n\t\tconst token = entry.slice(separatorIndex + 1).trim()\n\t\tif (entryEmail === email && token) {\n\t\t\treturn token\n\t\t}\n\t}\n\n\treturn undefined\n}\n\n/** Client for interacting with the authentication service to manage tokens */\nexport class AuthenticationApiClient {\n\tprivate authToken?: string\n\tprivate _context?: APIRequestContext\n\n\tconstructor(\n\t\tprivate readonly baseURL: string,\n\t\tprivate readonly auth: AuthConfig,\n\t) {\n\t\tthis.authToken = getAuthApiTokenFromEnv(auth.email)\n\t\tif (this.authToken) {\n\t\t\tlogger.info(`using user token for ${auth.email} from ${AUTH_API_TOKENS_ENV}`)\n\t\t}\n\t}\n\n\tprivate async getContext(): Promise<APIRequestContext> {\n\t\tif (!this._context) {\n\t\t\tthis._context = await request.newContext({\n\t\t\t\tbaseURL: this.baseURL,\n\t\t\t})\n\t\t}\n\n\t\treturn this._context\n\t}\n\n\tprivate async login(): Promise<string> {\n\t\tconst profiler = logger.startTimer()\n\n\t\tconst context = await this.getContext()\n\t\tconst result = await context.post(\"login\", {\n\t\t\tdata: {\n\t\t\t\temail: this.auth.email,\n\t\t\t\tpassword: this.auth.password,\n\t\t\t},\n\t\t})\n\n\t\tconst token = await result.text()\n\t\tif (!result.ok() || !token) {\n\t\t\tlogPlaywrightApiResponse(result)\n\t\t\tthrow new Error(\"Authentication failed, no token received.\")\n\t\t}\n\n\t\tprofiler.done({\n\t\t\tmessage: `generated user token for ${this.auth.email} from auth service`,\n\t\t})\n\n\t\treturn token\n\t}\n\n\t/** Return an api user token. Creates one if needed. */\n\tasync getToken(): Promise<string> {\n\t\tif (!this.authToken) {\n\t\t\tthis.authToken = await this.login()\n\t\t}\n\n\t\treturn this.authToken\n\t}\n\n\t/** Return an api user token. Creates one if needed. */\n\tasync getMachine2MachineToken(repository: string): Promise<string> {\n\t\tif (!this.authToken) {\n\t\t\tthis.authToken = await this.login()\n\t\t}\n\n\t\tconst context = await this.getContext()\n\t\tconst result = await context.get(\"machine2machine\", {\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${this.authToken}`,\n\t\t\t\trepository,\n\t\t\t},\n\t\t})\n\n\t\tif (!result.ok()) {\n\t\t\tlogPlaywrightApiResponse(result)\n\t\t\tthrow new Error(\"Machine2Machine token generation failed, no token received.\")\n\t\t}\n\t\tconst token = (await result.json()).token\n\n\t\treturn token\n\t}\n}\n"],"mappings":";;;AAMA,MAAM,sBAAsB;AAE5B,SAAS,uBAAuB,OAAmC;CAClE,MAAM,QAAQ,QAAQ,IAAI;CAC1B,IAAI,CAAC,OACJ;CAGD,KAAK,MAAM,SAAS,MAAM,MAAM,GAAG,GAAG;EACrC,MAAM,iBAAiB,MAAM,QAAQ,GAAG;EACxC,IAAI,mBAAmB,IACtB;EAGD,MAAM,aAAa,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,KAAK;EACvD,MAAM,QAAQ,MAAM,MAAM,iBAAiB,CAAC,CAAC,CAAC,KAAK;EACnD,IAAI,eAAe,SAAS,OAC3B,OAAO;CAET;AAGD;;AAGA,IAAa,0BAAb,MAAqC;CAKlB;CACA;CALlB;CACA;CAEA,YACC,SACA,MACC;EAFgB,KAAA,UAAA;EACA,KAAA,OAAA;EAEjB,KAAK,YAAY,uBAAuB,KAAK,KAAK;EAClD,IAAI,KAAK,WACR,YAAA,OAAO,KAAK,wBAAwB,KAAK,MAAM,QAAQ,qBAAqB;CAE9E;CAEA,MAAc,aAAyC;EACtD,IAAI,CAAC,KAAK,UACT,KAAK,WAAW,MAAMA,iBAAAA,QAAQ,WAAW,EACxC,SAAS,KAAK,QACf,CAAC;EAGF,OAAO,KAAK;CACb;CAEA,MAAc,QAAyB;EACtC,MAAM,WAAWC,YAAAA,OAAO,WAAW;EAGnC,MAAM,SAAS,OAAM,MADC,KAAK,WAAW,EAAA,CACT,KAAK,SAAS,EAC1C,MAAM;GACL,OAAO,KAAK,KAAK;GACjB,UAAU,KAAK,KAAK;EACrB,EACD,CAAC;EAED,MAAM,QAAQ,MAAM,OAAO,KAAK;EAChC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;GAC3B,YAAA,yBAAyB,MAAM;GAC/B,MAAM,IAAI,MAAM,2CAA2C;EAC5D;EAEA,SAAS,KAAK,EACb,SAAS,4BAA4B,KAAK,KAAK,MAAM,oBACtD,CAAC;EAED,OAAO;CACR;;CAGA,MAAM,WAA4B;EACjC,IAAI,CAAC,KAAK,WACT,KAAK,YAAY,MAAM,KAAK,MAAM;EAGnC,OAAO,KAAK;CACb;;CAGA,MAAM,wBAAwB,YAAqC;EAClE,IAAI,CAAC,KAAK,WACT,KAAK,YAAY,MAAM,KAAK,MAAM;EAInC,MAAM,SAAS,OAAM,MADC,KAAK,WAAW,EAAA,CACT,IAAI,mBAAmB,EACnD,SAAS;GACR,eAAe,UAAU,KAAK;GAC9B;EACD,EACD,CAAC;EAED,IAAI,CAAC,OAAO,GAAG,GAAG;GACjB,YAAA,yBAAyB,MAAM;GAC/B,MAAM,IAAI,MAAM,6DAA6D;EAC9E;EAGA,QAFe,MAAM,OAAO,KAAK,EAAA,CAAG;CAGrC;AACD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AuthConfig } from "../types.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/clients/authenticationApi.d.ts
|
|
4
|
+
/** Client for interacting with the authentication service to manage tokens */
|
|
5
|
+
declare class AuthenticationApiClient {
|
|
6
|
+
private readonly baseURL;
|
|
7
|
+
private readonly auth;
|
|
8
|
+
private authToken?;
|
|
9
|
+
private _context?;
|
|
10
|
+
constructor(baseURL: string, auth: AuthConfig);
|
|
11
|
+
private getContext;
|
|
12
|
+
private login;
|
|
13
|
+
/** Return an api user token. Creates one if needed. */
|
|
14
|
+
getToken(): Promise<string>;
|
|
15
|
+
/** Return an api user token. Creates one if needed. */
|
|
16
|
+
getMachine2MachineToken(repository: string): Promise<string>;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { AuthenticationApiClient };
|
|
20
|
+
//# sourceMappingURL=authenticationApi.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticationApi.d.cts","names":[],"sources":["../../src/clients/authenticationApi.ts"],"mappings":";;;;cA+Ba,uBAAA;EAAA,iBAKM,OAAA;EAAA,iBACA,IAAA;EAAA,QALV,SAAA;EAAA,QACA,QAAA;cAGU,OAAA,UACA,IAAA,EAAM,UAAA;EAAA,QAQV,UAAA;EAAA,QAUA,KAAA;EAkC4C;EATpD,QAAA,IAAY,OAAA;EA3CA;EAoDZ,uBAAA,CAAwB,UAAA,WAAqB,OAAA;AAAA"}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
|
-
import { AuthConfig } from "../types";
|
|
1
|
+
import { AuthConfig } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/clients/authenticationApi.d.ts
|
|
2
4
|
/** Client for interacting with the authentication service to manage tokens */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
declare class AuthenticationApiClient {
|
|
6
|
+
private readonly baseURL;
|
|
7
|
+
private readonly auth;
|
|
8
|
+
private authToken?;
|
|
9
|
+
private _context?;
|
|
10
|
+
constructor(baseURL: string, auth: AuthConfig);
|
|
11
|
+
private getContext;
|
|
12
|
+
private login;
|
|
13
|
+
/** Return an api user token. Creates one if needed. */
|
|
14
|
+
getToken(): Promise<string>;
|
|
15
|
+
/** Return an api user token. Creates one if needed. */
|
|
16
|
+
getMachine2MachineToken(repository: string): Promise<string>;
|
|
15
17
|
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { AuthenticationApiClient };
|
|
20
|
+
//# sourceMappingURL=authenticationApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticationApi.d.ts","names":[],"sources":["../../src/clients/authenticationApi.ts"],"mappings":";;;;cA+Ba,uBAAA;EAAA,iBAKM,OAAA;EAAA,iBACA,IAAA;EAAA,QALV,SAAA;EAAA,QACA,QAAA;cAGU,OAAA,UACA,IAAA,EAAM,UAAA;EAAA,QAQV,UAAA;EAAA,QAUA,KAAA;EAkC4C;EATpD,QAAA,IAAY,OAAA;EA3CA;EAoDZ,uBAAA,CAAwB,UAAA,WAAqB,OAAA;AAAA"}
|
|
@@ -1,75 +1,68 @@
|
|
|
1
|
-
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __publicField = (obj, key, value) => {
|
|
4
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
-
return value;
|
|
6
|
-
};
|
|
1
|
+
import { logPlaywrightApiResponse, logger } from "../utils/log.js";
|
|
7
2
|
import { request } from "@playwright/test";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this._context = await request.newContext({
|
|
21
|
-
baseURL: this.baseURL
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
return this._context;
|
|
25
|
-
}
|
|
26
|
-
async login() {
|
|
27
|
-
const profiler = logger.startTimer();
|
|
28
|
-
const context = await this.getContext();
|
|
29
|
-
const result = await context.post("login", {
|
|
30
|
-
data: {
|
|
31
|
-
email: this.auth.email,
|
|
32
|
-
password: this.auth.password
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
const token = await result.text();
|
|
36
|
-
if (!result.ok() || !token) {
|
|
37
|
-
logPlaywrightApiResponse(result);
|
|
38
|
-
throw new Error("Authentication failed, no token received.");
|
|
39
|
-
}
|
|
40
|
-
profiler.done({
|
|
41
|
-
message: `generated user token for ${this.auth.email} from auth service`
|
|
42
|
-
});
|
|
43
|
-
return token;
|
|
44
|
-
}
|
|
45
|
-
/** Return an api user token. Creates one if needed. */
|
|
46
|
-
async getToken() {
|
|
47
|
-
if (!this.authToken) {
|
|
48
|
-
this.authToken = await this.login();
|
|
49
|
-
}
|
|
50
|
-
return this.authToken;
|
|
51
|
-
}
|
|
52
|
-
/** Return an api user token. Creates one if needed. */
|
|
53
|
-
async getMachine2MachineToken(repository) {
|
|
54
|
-
if (!this.authToken) {
|
|
55
|
-
this.authToken = await this.login();
|
|
56
|
-
}
|
|
57
|
-
const context = await this.getContext();
|
|
58
|
-
const result = await context.get("machine2machine", {
|
|
59
|
-
headers: {
|
|
60
|
-
Authorization: `Bearer ${this.authToken}`,
|
|
61
|
-
repository
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
if (!result.ok()) {
|
|
65
|
-
logPlaywrightApiResponse(result);
|
|
66
|
-
throw new Error("Machine2Machine token generation failed, no token received.");
|
|
67
|
-
}
|
|
68
|
-
const token = (await result.json()).token;
|
|
69
|
-
return token;
|
|
70
|
-
}
|
|
3
|
+
//#region src/clients/authenticationApi.ts
|
|
4
|
+
const AUTH_API_TOKENS_ENV = "PRISMIC_E2E_TEST_UTILS_AUTH_API_TOKENS";
|
|
5
|
+
function getAuthApiTokenFromEnv(email) {
|
|
6
|
+
const value = process.env[AUTH_API_TOKENS_ENV];
|
|
7
|
+
if (!value) return;
|
|
8
|
+
for (const entry of value.split(",")) {
|
|
9
|
+
const separatorIndex = entry.indexOf(":");
|
|
10
|
+
if (separatorIndex === -1) continue;
|
|
11
|
+
const entryEmail = entry.slice(0, separatorIndex).trim();
|
|
12
|
+
const token = entry.slice(separatorIndex + 1).trim();
|
|
13
|
+
if (entryEmail === email && token) return token;
|
|
14
|
+
}
|
|
71
15
|
}
|
|
72
|
-
|
|
73
|
-
|
|
16
|
+
/** Client for interacting with the authentication service to manage tokens */
|
|
17
|
+
var AuthenticationApiClient = class {
|
|
18
|
+
baseURL;
|
|
19
|
+
auth;
|
|
20
|
+
authToken;
|
|
21
|
+
_context;
|
|
22
|
+
constructor(baseURL, auth) {
|
|
23
|
+
this.baseURL = baseURL;
|
|
24
|
+
this.auth = auth;
|
|
25
|
+
this.authToken = getAuthApiTokenFromEnv(auth.email);
|
|
26
|
+
if (this.authToken) logger.info(`using user token for ${auth.email} from ${AUTH_API_TOKENS_ENV}`);
|
|
27
|
+
}
|
|
28
|
+
async getContext() {
|
|
29
|
+
if (!this._context) this._context = await request.newContext({ baseURL: this.baseURL });
|
|
30
|
+
return this._context;
|
|
31
|
+
}
|
|
32
|
+
async login() {
|
|
33
|
+
const profiler = logger.startTimer();
|
|
34
|
+
const result = await (await this.getContext()).post("login", { data: {
|
|
35
|
+
email: this.auth.email,
|
|
36
|
+
password: this.auth.password
|
|
37
|
+
} });
|
|
38
|
+
const token = await result.text();
|
|
39
|
+
if (!result.ok() || !token) {
|
|
40
|
+
logPlaywrightApiResponse(result);
|
|
41
|
+
throw new Error("Authentication failed, no token received.");
|
|
42
|
+
}
|
|
43
|
+
profiler.done({ message: `generated user token for ${this.auth.email} from auth service` });
|
|
44
|
+
return token;
|
|
45
|
+
}
|
|
46
|
+
/** Return an api user token. Creates one if needed. */
|
|
47
|
+
async getToken() {
|
|
48
|
+
if (!this.authToken) this.authToken = await this.login();
|
|
49
|
+
return this.authToken;
|
|
50
|
+
}
|
|
51
|
+
/** Return an api user token. Creates one if needed. */
|
|
52
|
+
async getMachine2MachineToken(repository) {
|
|
53
|
+
if (!this.authToken) this.authToken = await this.login();
|
|
54
|
+
const result = await (await this.getContext()).get("machine2machine", { headers: {
|
|
55
|
+
Authorization: `Bearer ${this.authToken}`,
|
|
56
|
+
repository
|
|
57
|
+
} });
|
|
58
|
+
if (!result.ok()) {
|
|
59
|
+
logPlaywrightApiResponse(result);
|
|
60
|
+
throw new Error("Machine2Machine token generation failed, no token received.");
|
|
61
|
+
}
|
|
62
|
+
return (await result.json()).token;
|
|
63
|
+
}
|
|
74
64
|
};
|
|
75
|
-
//#
|
|
65
|
+
//#endregion
|
|
66
|
+
export { AuthenticationApiClient };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=authenticationApi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticationApi.js","sources":["
|
|
1
|
+
{"version":3,"file":"authenticationApi.js","names":[],"sources":["../../src/clients/authenticationApi.ts"],"sourcesContent":["import type { APIRequestContext } from \"@playwright/test\"\nimport { request } from \"@playwright/test\"\n\nimport type { AuthConfig } from \"../types\"\nimport { logPlaywrightApiResponse, logger } from \"../utils/log\"\n\nconst AUTH_API_TOKENS_ENV = \"PRISMIC_E2E_TEST_UTILS_AUTH_API_TOKENS\"\n\nfunction getAuthApiTokenFromEnv(email: string): string | undefined {\n\tconst value = process.env[AUTH_API_TOKENS_ENV]\n\tif (!value) {\n\t\treturn undefined\n\t}\n\n\tfor (const entry of value.split(\",\")) {\n\t\tconst separatorIndex = entry.indexOf(\":\")\n\t\tif (separatorIndex === -1) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst entryEmail = entry.slice(0, separatorIndex).trim()\n\t\tconst token = entry.slice(separatorIndex + 1).trim()\n\t\tif (entryEmail === email && token) {\n\t\t\treturn token\n\t\t}\n\t}\n\n\treturn undefined\n}\n\n/** Client for interacting with the authentication service to manage tokens */\nexport class AuthenticationApiClient {\n\tprivate authToken?: string\n\tprivate _context?: APIRequestContext\n\n\tconstructor(\n\t\tprivate readonly baseURL: string,\n\t\tprivate readonly auth: AuthConfig,\n\t) {\n\t\tthis.authToken = getAuthApiTokenFromEnv(auth.email)\n\t\tif (this.authToken) {\n\t\t\tlogger.info(`using user token for ${auth.email} from ${AUTH_API_TOKENS_ENV}`)\n\t\t}\n\t}\n\n\tprivate async getContext(): Promise<APIRequestContext> {\n\t\tif (!this._context) {\n\t\t\tthis._context = await request.newContext({\n\t\t\t\tbaseURL: this.baseURL,\n\t\t\t})\n\t\t}\n\n\t\treturn this._context\n\t}\n\n\tprivate async login(): Promise<string> {\n\t\tconst profiler = logger.startTimer()\n\n\t\tconst context = await this.getContext()\n\t\tconst result = await context.post(\"login\", {\n\t\t\tdata: {\n\t\t\t\temail: this.auth.email,\n\t\t\t\tpassword: this.auth.password,\n\t\t\t},\n\t\t})\n\n\t\tconst token = await result.text()\n\t\tif (!result.ok() || !token) {\n\t\t\tlogPlaywrightApiResponse(result)\n\t\t\tthrow new Error(\"Authentication failed, no token received.\")\n\t\t}\n\n\t\tprofiler.done({\n\t\t\tmessage: `generated user token for ${this.auth.email} from auth service`,\n\t\t})\n\n\t\treturn token\n\t}\n\n\t/** Return an api user token. Creates one if needed. */\n\tasync getToken(): Promise<string> {\n\t\tif (!this.authToken) {\n\t\t\tthis.authToken = await this.login()\n\t\t}\n\n\t\treturn this.authToken\n\t}\n\n\t/** Return an api user token. Creates one if needed. */\n\tasync getMachine2MachineToken(repository: string): Promise<string> {\n\t\tif (!this.authToken) {\n\t\t\tthis.authToken = await this.login()\n\t\t}\n\n\t\tconst context = await this.getContext()\n\t\tconst result = await context.get(\"machine2machine\", {\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${this.authToken}`,\n\t\t\t\trepository,\n\t\t\t},\n\t\t})\n\n\t\tif (!result.ok()) {\n\t\t\tlogPlaywrightApiResponse(result)\n\t\t\tthrow new Error(\"Machine2Machine token generation failed, no token received.\")\n\t\t}\n\t\tconst token = (await result.json()).token\n\n\t\treturn token\n\t}\n}\n"],"mappings":";;;AAMA,MAAM,sBAAsB;AAE5B,SAAS,uBAAuB,OAAmC;CAClE,MAAM,QAAQ,QAAQ,IAAI;CAC1B,IAAI,CAAC,OACJ;CAGD,KAAK,MAAM,SAAS,MAAM,MAAM,GAAG,GAAG;EACrC,MAAM,iBAAiB,MAAM,QAAQ,GAAG;EACxC,IAAI,mBAAmB,IACtB;EAGD,MAAM,aAAa,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,KAAK;EACvD,MAAM,QAAQ,MAAM,MAAM,iBAAiB,CAAC,CAAC,CAAC,KAAK;EACnD,IAAI,eAAe,SAAS,OAC3B,OAAO;CAET;AAGD;;AAGA,IAAa,0BAAb,MAAqC;CAKlB;CACA;CALlB;CACA;CAEA,YACC,SACA,MACC;EAFgB,KAAA,UAAA;EACA,KAAA,OAAA;EAEjB,KAAK,YAAY,uBAAuB,KAAK,KAAK;EAClD,IAAI,KAAK,WACR,OAAO,KAAK,wBAAwB,KAAK,MAAM,QAAQ,qBAAqB;CAE9E;CAEA,MAAc,aAAyC;EACtD,IAAI,CAAC,KAAK,UACT,KAAK,WAAW,MAAM,QAAQ,WAAW,EACxC,SAAS,KAAK,QACf,CAAC;EAGF,OAAO,KAAK;CACb;CAEA,MAAc,QAAyB;EACtC,MAAM,WAAW,OAAO,WAAW;EAGnC,MAAM,SAAS,OAAM,MADC,KAAK,WAAW,EAAA,CACT,KAAK,SAAS,EAC1C,MAAM;GACL,OAAO,KAAK,KAAK;GACjB,UAAU,KAAK,KAAK;EACrB,EACD,CAAC;EAED,MAAM,QAAQ,MAAM,OAAO,KAAK;EAChC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;GAC3B,yBAAyB,MAAM;GAC/B,MAAM,IAAI,MAAM,2CAA2C;EAC5D;EAEA,SAAS,KAAK,EACb,SAAS,4BAA4B,KAAK,KAAK,MAAM,oBACtD,CAAC;EAED,OAAO;CACR;;CAGA,MAAM,WAA4B;EACjC,IAAI,CAAC,KAAK,WACT,KAAK,YAAY,MAAM,KAAK,MAAM;EAGnC,OAAO,KAAK;CACb;;CAGA,MAAM,wBAAwB,YAAqC;EAClE,IAAI,CAAC,KAAK,WACT,KAAK,YAAY,MAAM,KAAK,MAAM;EAInC,MAAM,SAAS,OAAM,MADC,KAAK,WAAW,EAAA,CACT,IAAI,mBAAmB,EACnD,SAAS;GACR,eAAe,UAAU,KAAK;GAC9B;EACD,EACD,CAAC;EAED,IAAI,CAAC,OAAO,GAAG,GAAG;GACjB,yBAAyB,MAAM;GAC/B,MAAM,IAAI,MAAM,6DAA6D;EAC9E;EAGA,QAFe,MAAM,OAAO,KAAK,EAAA,CAAG;CAGrC;AACD"}
|
|
@@ -1,105 +1,96 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
const require_apiClient = require("./apiClient.cjs");
|
|
2
|
+
//#region src/clients/contentApi.ts
|
|
3
|
+
/**
|
|
4
|
+
* Client to query the Prismic content api. Uses Playwright to benefit from network request traces
|
|
5
|
+
* in your reports. See api docs: https://prismic.io/docs/rest-api-technical-reference
|
|
6
|
+
*/
|
|
7
|
+
var ContentApiClient = class extends require_apiClient.AuthenticatedApiClient {
|
|
8
|
+
version;
|
|
9
|
+
accessToken;
|
|
10
|
+
/**
|
|
11
|
+
* @example
|
|
12
|
+
* To instantiate the class:
|
|
13
|
+
*
|
|
14
|
+
* ```js
|
|
15
|
+
* new ContentApiClient("https://my-repo.cdn.prismic.io", {
|
|
16
|
+
* version: "v2",
|
|
17
|
+
* accessToken: "my-secret-token",
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @param baseURL - The api base URL like https://my-repo.cdn.prismic.io
|
|
22
|
+
* @param config - Optional configuration
|
|
23
|
+
*
|
|
24
|
+
* - {@link config.version}: Api version, default is "v2"
|
|
25
|
+
* - {@link config.accessToken}: Access token for the content api -
|
|
26
|
+
* https://prismic.io/docs/access-token
|
|
27
|
+
*/
|
|
28
|
+
constructor(baseURL, config = {}) {
|
|
29
|
+
super(baseURL, config.accessToken || "");
|
|
30
|
+
this.version = config.version || "v2";
|
|
31
|
+
this.accessToken = config.accessToken;
|
|
32
|
+
}
|
|
33
|
+
async get(path, params, headers) {
|
|
34
|
+
const context = await this.getContext();
|
|
35
|
+
const securityParams = this.accessToken ? { access_token: this.accessToken } : {};
|
|
36
|
+
return context.get(path, {
|
|
37
|
+
params: {
|
|
38
|
+
...securityParams,
|
|
39
|
+
...params
|
|
40
|
+
},
|
|
41
|
+
headers
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async getAsJson(url, params, headers) {
|
|
45
|
+
return (await this.get(url, params, headers)).json();
|
|
46
|
+
}
|
|
47
|
+
/** Query the graphql api - https://prismic.io/docs/graphql-technical-reference */
|
|
48
|
+
async graphql(ref, query) {
|
|
49
|
+
return this.getAsJson("graphql", { query }, { "Prismic-ref": ref });
|
|
50
|
+
}
|
|
51
|
+
async getRefs() {
|
|
52
|
+
return (await this.getAsJson(`api/${this.version}`)).refs;
|
|
53
|
+
}
|
|
54
|
+
async getMasterRef() {
|
|
55
|
+
const masterRef = (await this.getRefs()).find(({ isMasterRef }) => isMasterRef === true);
|
|
56
|
+
if (!masterRef) throw "No master ref found";
|
|
57
|
+
return masterRef.ref;
|
|
58
|
+
}
|
|
59
|
+
async getRefByReleaseID(releaseID) {
|
|
60
|
+
const release = (await this.getRefs()).find(({ id }) => id === releaseID);
|
|
61
|
+
if (!release) throw `No ref found for release ${releaseID}`;
|
|
62
|
+
return release.ref;
|
|
63
|
+
}
|
|
64
|
+
/** Search documents from the `/api/v<version>/documents/search` endpoint. */
|
|
65
|
+
async search(filters) {
|
|
66
|
+
let ref = filters?.ref;
|
|
67
|
+
if (!ref) ref = await this.getMasterRef();
|
|
68
|
+
return this.getAsJson(`api/${this.version}/documents/search`, {
|
|
69
|
+
...filters,
|
|
70
|
+
ref
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Search for a single document by its it, using the `/api/v<version>/documents/search` endpoint
|
|
75
|
+
* and a default filter.
|
|
76
|
+
*/
|
|
77
|
+
async searchByID(id, filters) {
|
|
78
|
+
return this.search({
|
|
79
|
+
...filters,
|
|
80
|
+
q: `[[at(document.id, "${id}")]]`
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/** Retrieve a single document or undefined if not found. */
|
|
84
|
+
async getDocumentByID(id, filters) {
|
|
85
|
+
const data = await this.searchByID(id, filters);
|
|
86
|
+
switch (data.results_size) {
|
|
87
|
+
case 0: return;
|
|
88
|
+
case 1: return data.results[0];
|
|
89
|
+
default: throw new Error(`Too many documents returned with the same id ${id}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
7
92
|
};
|
|
8
|
-
|
|
9
|
-
const apiClient = require("./apiClient.cjs");
|
|
10
|
-
class ContentApiClient extends apiClient.AuthenticatedApiClient {
|
|
11
|
-
/**
|
|
12
|
-
* @example To instantiate the class:
|
|
13
|
-
*
|
|
14
|
-
* ```js
|
|
15
|
-
* new ContentApiClient("https://my-repo.cdn.prismic.io", {
|
|
16
|
-
* version: "v2",
|
|
17
|
-
* accessToken: "my-secret-token",
|
|
18
|
-
* });
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @param baseURL - the api base URL like https://my-repo.cdn.prismic.io
|
|
22
|
-
* @param config - Optional configuration
|
|
23
|
-
*
|
|
24
|
-
* - {@link config.version}: Api version, default is "v2"
|
|
25
|
-
* - {@link config.accessToken}: Access token for the content api -
|
|
26
|
-
* https://prismic.io/docs/access-token
|
|
27
|
-
*/
|
|
28
|
-
constructor(baseURL, config = {}) {
|
|
29
|
-
super(baseURL, config.accessToken || "");
|
|
30
|
-
__publicField(this, "version");
|
|
31
|
-
__publicField(this, "accessToken");
|
|
32
|
-
this.version = config.version || "v2";
|
|
33
|
-
this.accessToken = config.accessToken;
|
|
34
|
-
}
|
|
35
|
-
async get(path, params, headers) {
|
|
36
|
-
const context = await this.getContext();
|
|
37
|
-
const securityParams = {
|
|
38
|
-
...this.accessToken ? { access_token: this.accessToken } : {}
|
|
39
|
-
};
|
|
40
|
-
return context.get(path, {
|
|
41
|
-
params: { ...securityParams, ...params },
|
|
42
|
-
headers
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
async getAsJson(url, params, headers) {
|
|
46
|
-
const response = await this.get(url, params, headers);
|
|
47
|
-
return response.json();
|
|
48
|
-
}
|
|
49
|
-
/** Query the graphql api - https://prismic.io/docs/graphql-technical-reference */
|
|
50
|
-
async graphql(ref, query) {
|
|
51
|
-
return this.getAsJson("graphql", { query }, { "Prismic-ref": ref });
|
|
52
|
-
}
|
|
53
|
-
async getRefs() {
|
|
54
|
-
const data = await this.getAsJson(`api/${this.version}`);
|
|
55
|
-
return data.refs;
|
|
56
|
-
}
|
|
57
|
-
async getMasterRef() {
|
|
58
|
-
const refs = await this.getRefs();
|
|
59
|
-
const masterRef = refs.find(({ isMasterRef }) => isMasterRef === true);
|
|
60
|
-
if (!masterRef) {
|
|
61
|
-
throw "No master ref found";
|
|
62
|
-
}
|
|
63
|
-
return masterRef.ref;
|
|
64
|
-
}
|
|
65
|
-
async getRefByReleaseID(releaseID) {
|
|
66
|
-
const refs = await this.getRefs();
|
|
67
|
-
const release = refs.find(({ id }) => id === releaseID);
|
|
68
|
-
if (!release) {
|
|
69
|
-
throw `No ref found for release ${releaseID}`;
|
|
70
|
-
}
|
|
71
|
-
return release.ref;
|
|
72
|
-
}
|
|
73
|
-
/** Search documents from the `/api/v<version>/documents/search` endpoint. */
|
|
74
|
-
async search(filters) {
|
|
75
|
-
let ref = filters == null ? void 0 : filters.ref;
|
|
76
|
-
if (!ref) {
|
|
77
|
-
ref = await this.getMasterRef();
|
|
78
|
-
}
|
|
79
|
-
return this.getAsJson(`api/${this.version}/documents/search`, {
|
|
80
|
-
...filters,
|
|
81
|
-
ref
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Search for a single document by its it, using the
|
|
86
|
-
* `/api/v<version>/documents/search` endpoint and a default filter.
|
|
87
|
-
*/
|
|
88
|
-
async searchByID(id, filters) {
|
|
89
|
-
return this.search({ ...filters, q: `[[at(document.id, "${id}")]]` });
|
|
90
|
-
}
|
|
91
|
-
/** Retrieve a single document or undefined if not found. */
|
|
92
|
-
async getDocumentByID(id, filters) {
|
|
93
|
-
const data = await this.searchByID(id, filters);
|
|
94
|
-
switch (data.results_size) {
|
|
95
|
-
case 0:
|
|
96
|
-
return;
|
|
97
|
-
case 1:
|
|
98
|
-
return data.results[0];
|
|
99
|
-
default:
|
|
100
|
-
throw new Error(`Too many documents returned with the same id ${id}`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
93
|
+
//#endregion
|
|
104
94
|
exports.ContentApiClient = ContentApiClient;
|
|
105
|
-
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=contentApi.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentApi.cjs","sources":["
|
|
1
|
+
{"version":3,"file":"contentApi.cjs","names":["AuthenticatedApiClient"],"sources":["../../src/clients/contentApi.ts"],"sourcesContent":["import type { APIResponse } from \"@playwright/test\"\n\nimport { AuthenticatedApiClient } from \"./apiClient\"\n\nexport interface ContentApiError {\n\ttype: string\n\tmessage: string\n}\nexport interface ContentApiSearchResponse {\n\tpage: number\n\tresults_per_page: number\n\tresults_size: number\n\ttotal_results_size: number\n\ttotal_pages: number\n\tnext_page: string | null\n\tprev_page: string | null\n\tresults: ContentApiDocument[]\n}\n\nexport interface ContentApiDocument {\n\tid: string\n\tuid: string | null\n\turl: string | null\n\ttype: string\n\thref: string\n\ttags: string[]\n\tfirst_publication_date: string\n\tlast_publication_date: string\n\tslugs: string[]\n\tlinked_documents: unknown[]\n\tlang: string\n\talternate_languages: ContentApiAlternateLanguage[]\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata: Record<string, any>\n}\n\nexport interface ContentApiGraphQLResponse {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata: Record<string, any>\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\terrors?: { message: string; locations: any }[]\n}\n\nexport interface ContentApiRef {\n\tid: string\n\tref: string\n\tlabel: string\n\tisMasterRef?: boolean\n\tscheduledAt?: number | undefined\n}\n\ninterface ContentApiAlternateLanguage {\n\tid: string\n\ttype: string\n\tlang: string\n\tuid?: string\n}\n\ninterface ContentApiRepoConfigResponse {\n\trefs: ContentApiRef[]\n\tbookmarks: Record<string, unknown>\n\ttypes: Record<string, string>\n\tlanguages: {\n\t\tid: string\n\t\tname: string\n\t\tis_master: boolean\n\t}[]\n\toauth_initiate: string\n\toauth_token: string\n\ttags: string[]\n\tlicense: string\n\tversion: string\n}\n\ntype SearchQueryParams = {\n\tref?: string\n\tquery?: string\n\tq?: string\n\tgraphQuery?: string\n\tfetchLinks?: string\n\torderings?: string\n\tpageSize?: number\n\tpage?: number\n\tlang?: string\n\tafter?: string\n\troutes?: string\n}\n\ntype ApiVersions = \"v1\" | \"v2\"\n\n/**\n * Client to query the Prismic content api. Uses Playwright to benefit from network request traces\n * in your reports. See api docs: https://prismic.io/docs/rest-api-technical-reference\n */\nexport class ContentApiClient extends AuthenticatedApiClient {\n\tprivate version: ApiVersions\n\tprivate accessToken: string | undefined\n\n\t/**\n\t * @example\n\t * \tTo instantiate the class:\n\t *\n\t * \t```js\n\t * \tnew ContentApiClient(\"https://my-repo.cdn.prismic.io\", {\n\t * \tversion: \"v2\",\n\t * \taccessToken: \"my-secret-token\",\n\t * \t});\n\t * \t```\n\t *\n\t * @param baseURL - The api base URL like https://my-repo.cdn.prismic.io\n\t * @param config - Optional configuration\n\t *\n\t * - {@link config.version}: Api version, default is \"v2\"\n\t * - {@link config.accessToken}: Access token for the content api -\n\t * https://prismic.io/docs/access-token\n\t */\n\tconstructor(baseURL: string, config: { version?: ApiVersions; accessToken?: string } = {}) {\n\t\t// Use an empty string as Authorization header in case it is already set globally in the project Playwright config file.\n\t\t// This is because the content api returns an error in case it gets an non-empty invalid Authorization\n\t\t// even though it actually checks authorization from the access_token query parameter.\n\t\tsuper(baseURL, config.accessToken || \"\")\n\t\tthis.version = config.version || \"v2\"\n\t\tthis.accessToken = config.accessToken\n\t}\n\n\tasync get(\n\t\tpath: string,\n\t\tparams?: SearchQueryParams,\n\t\theaders?: Record<string, string>,\n\t): Promise<APIResponse> {\n\t\tconst context = await this.getContext()\n\t\tconst securityParams = this.accessToken\n\t\t\t? { access_token: this.accessToken }\n\t\t\t: ({} as Record<string, never>)\n\n\t\treturn context.get(path, {\n\t\t\tparams: { ...securityParams, ...params },\n\t\t\theaders,\n\t\t})\n\t}\n\n\tasync getAsJson<T>(\n\t\turl: string,\n\t\tparams?: SearchQueryParams,\n\t\theaders?: Record<string, string>,\n\t): Promise<T> {\n\t\tconst response = await this.get(url, params, headers)\n\n\t\treturn response.json() as T\n\t}\n\n\t/** Query the graphql api - https://prismic.io/docs/graphql-technical-reference */\n\tasync graphql(ref: string, query: string): Promise<ContentApiGraphQLResponse> {\n\t\treturn this.getAsJson<ContentApiGraphQLResponse>(\"graphql\", { query }, { \"Prismic-ref\": ref })\n\t}\n\n\tasync getRefs(): Promise<ContentApiRef[]> {\n\t\tconst data = await this.getAsJson<ContentApiRepoConfigResponse>(`api/${this.version}`)\n\n\t\treturn data.refs\n\t}\n\n\tasync getMasterRef(): Promise<string> {\n\t\tconst refs = await this.getRefs()\n\n\t\tconst masterRef = refs.find(({ isMasterRef }) => isMasterRef === true)\n\t\tif (!masterRef) {\n\t\t\tthrow \"No master ref found\"\n\t\t}\n\n\t\treturn masterRef.ref\n\t}\n\n\tasync getRefByReleaseID(releaseID: string): Promise<string> {\n\t\tconst refs = await this.getRefs()\n\t\tconst release = refs.find(({ id }) => id === releaseID)\n\t\tif (!release) {\n\t\t\tthrow `No ref found for release ${releaseID}`\n\t\t}\n\n\t\treturn release.ref\n\t}\n\n\t/** Search documents from the `/api/v<version>/documents/search` endpoint. */\n\tasync search(filters?: SearchQueryParams): Promise<ContentApiSearchResponse> {\n\t\tlet ref = filters?.ref\n\t\tif (!ref) {\n\t\t\tref = await this.getMasterRef()\n\t\t}\n\n\t\treturn this.getAsJson<ContentApiSearchResponse>(`api/${this.version}/documents/search`, {\n\t\t\t...filters,\n\t\t\tref,\n\t\t})\n\t}\n\n\t/**\n\t * Search for a single document by its it, using the `/api/v<version>/documents/search` endpoint\n\t * and a default filter.\n\t */\n\tasync searchByID(id: string, filters?: SearchQueryParams): Promise<ContentApiSearchResponse> {\n\t\treturn this.search({ ...filters, q: `[[at(document.id, \"${id}\")]]` })\n\t}\n\n\t/** Retrieve a single document or undefined if not found. */\n\tasync getDocumentByID(\n\t\tid: string,\n\t\tfilters?: SearchQueryParams,\n\t): Promise<ContentApiDocument | undefined> {\n\t\tconst data = await this.searchByID(id, filters)\n\t\tswitch (data.results_size) {\n\t\t\tcase 0:\n\t\t\t\treturn\n\t\t\tcase 1:\n\t\t\t\treturn data.results[0]\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Too many documents returned with the same id ${id}`)\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;AA8FA,IAAa,mBAAb,cAAsCA,kBAAAA,uBAAuB;CAC5D;CACA;;;;;;;;;;;;;;;;;;;CAoBA,YAAY,SAAiB,SAA0D,CAAC,GAAG;EAI1F,MAAM,SAAS,OAAO,eAAe,EAAE;EACvC,KAAK,UAAU,OAAO,WAAW;EACjC,KAAK,cAAc,OAAO;CAC3B;CAEA,MAAM,IACL,MACA,QACA,SACuB;EACvB,MAAM,UAAU,MAAM,KAAK,WAAW;EACtC,MAAM,iBAAiB,KAAK,cACzB,EAAE,cAAc,KAAK,YAAY,IAChC,CAAC;EAEL,OAAO,QAAQ,IAAI,MAAM;GACxB,QAAQ;IAAE,GAAG;IAAgB,GAAG;GAAO;GACvC;EACD,CAAC;CACF;CAEA,MAAM,UACL,KACA,QACA,SACa;EAGb,QAAO,MAFgB,KAAK,IAAI,KAAK,QAAQ,OAAO,EAAA,CAEpC,KAAK;CACtB;;CAGA,MAAM,QAAQ,KAAa,OAAmD;EAC7E,OAAO,KAAK,UAAqC,WAAW,EAAE,MAAM,GAAG,EAAE,eAAe,IAAI,CAAC;CAC9F;CAEA,MAAM,UAAoC;EAGzC,QAAO,MAFY,KAAK,UAAwC,OAAO,KAAK,SAAS,EAAA,CAEzE;CACb;CAEA,MAAM,eAAgC;EAGrC,MAAM,aAAY,MAFC,KAAK,QAAQ,EAAA,CAET,MAAM,EAAE,kBAAkB,gBAAgB,IAAI;EACrE,IAAI,CAAC,WACJ,MAAM;EAGP,OAAO,UAAU;CAClB;CAEA,MAAM,kBAAkB,WAAoC;EAE3D,MAAM,WAAU,MADG,KAAK,QAAQ,EAAA,CACX,MAAM,EAAE,SAAS,OAAO,SAAS;EACtD,IAAI,CAAC,SACJ,MAAM,4BAA4B;EAGnC,OAAO,QAAQ;CAChB;;CAGA,MAAM,OAAO,SAAgE;EAC5E,IAAI,MAAM,SAAS;EACnB,IAAI,CAAC,KACJ,MAAM,MAAM,KAAK,aAAa;EAG/B,OAAO,KAAK,UAAoC,OAAO,KAAK,QAAQ,oBAAoB;GACvF,GAAG;GACH;EACD,CAAC;CACF;;;;;CAMA,MAAM,WAAW,IAAY,SAAgE;EAC5F,OAAO,KAAK,OAAO;GAAE,GAAG;GAAS,GAAG,sBAAsB,GAAG;EAAM,CAAC;CACrE;;CAGA,MAAM,gBACL,IACA,SAC0C;EAC1C,MAAM,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO;EAC9C,QAAQ,KAAK,cAAb;GACC,KAAK,GACJ;GACD,KAAK,GACJ,OAAO,KAAK,QAAQ;GACrB,SACC,MAAM,IAAI,MAAM,gDAAgD,IAAI;EACtE;CACD;AACD"}
|