@prismicio/e2e-tests-utils 1.3.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.
Files changed (52) hide show
  1. package/dist/clients/authenticationApi.cjs.map +1 -1
  2. package/dist/clients/authenticationApi.js.map +1 -1
  3. package/dist/clients/contentApi.cjs +141 -0
  4. package/dist/clients/contentApi.cjs.map +1 -0
  5. package/dist/clients/contentApi.d.ts +106 -0
  6. package/dist/clients/contentApi.js +141 -0
  7. package/dist/clients/contentApi.js.map +1 -0
  8. package/dist/clients/coreApi.cjs +12 -2
  9. package/dist/clients/coreApi.cjs.map +1 -1
  10. package/dist/clients/coreApi.d.ts +1 -0
  11. package/dist/clients/coreApi.js +12 -2
  12. package/dist/clients/coreApi.js.map +1 -1
  13. package/dist/clients/customTypesApi.cjs +1 -0
  14. package/dist/clients/customTypesApi.cjs.map +1 -1
  15. package/dist/clients/customTypesApi.js +1 -0
  16. package/dist/clients/customTypesApi.js.map +1 -1
  17. package/dist/clients/manageV2.cjs.map +1 -1
  18. package/dist/clients/manageV2.js.map +1 -1
  19. package/dist/clients/migrationApi.cjs +36 -0
  20. package/dist/clients/migrationApi.cjs.map +1 -0
  21. package/dist/clients/migrationApi.d.ts +20 -0
  22. package/dist/clients/migrationApi.js +36 -0
  23. package/dist/clients/migrationApi.js.map +1 -0
  24. package/dist/clients/wroom.cjs.map +1 -1
  25. package/dist/clients/wroom.js.map +1 -1
  26. package/dist/index.cjs +4 -0
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.js +4 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/managers/repositories.cjs +8 -4
  32. package/dist/managers/repositories.cjs.map +1 -1
  33. package/dist/managers/repositories.js +8 -4
  34. package/dist/managers/repositories.js.map +1 -1
  35. package/dist/managers/repository.cjs +49 -1
  36. package/dist/managers/repository.cjs.map +1 -1
  37. package/dist/managers/repository.d.ts +26 -1
  38. package/dist/managers/repository.js +49 -1
  39. package/dist/managers/repository.js.map +1 -1
  40. package/dist/types.d.ts +2 -0
  41. package/dist/utils/cookies.cjs.map +1 -1
  42. package/dist/utils/cookies.js.map +1 -1
  43. package/dist/utils/log.cjs.map +1 -1
  44. package/dist/utils/log.js.map +1 -1
  45. package/package.json +7 -2
  46. package/src/clients/contentApi.ts +235 -0
  47. package/src/clients/coreApi.ts +14 -1
  48. package/src/clients/migrationApi.ts +69 -0
  49. package/src/index.ts +2 -0
  50. package/src/managers/repositories.ts +9 -2
  51. package/src/managers/repository.ts +67 -0
  52. package/src/types.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"repository.cjs","sources":["../../../src/managers/repository.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\n\nimport {\n\tCustomType,\n\tSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\n\nimport type { AuthenticationClient } from \"../clients/authenticationApi\";\nimport type { CoreClient } from \"../clients/coreApi\";\nimport { CustomTypesClient } from \"../clients/customTypesApi\";\nimport { ManageV2Client } from \"../clients/manageV2\";\nimport { WroomClient } from \"../clients/wroom\";\nimport { logHttpResponse, logger } from \"../utils/log\";\nimport { getRepositoryUrl } from \"../utils/urls\";\n\n/** Utility to manage test data for a Prismic repository */\nexport class RepositoryManager {\n\tconstructor(\n\t\treadonly name: string,\n\t\tprivate readonly coreApiClient: CoreClient,\n\t\tprivate readonly authApiClient: AuthenticationClient,\n\t\tprivate readonly wroomClient: WroomClient,\n\t\tprivate readonly customTypesApiClient: CustomTypesClient,\n\t\tprivate readonly manageV2Client: ManageV2Client,\n\t) {}\n\n\tasync configure(config: RepositoryConfig): Promise<void> {\n\t\tconst hasLangConfig =\n\t\t\tconfig.defaultLocale || config.locales || config.customLocale;\n\t\tif (hasLangConfig) {\n\t\t\tconst languages = await this.coreApiClient.getLanguages();\n\n\t\t\t// default locale must be set first\n\t\t\tif (config.defaultLocale) {\n\t\t\t\tconst master = languages.find(({ is_master }) => is_master === true);\n\t\t\t\tif (!master) {\n\t\t\t\t\tawait this.setDefaultLocale(config.defaultLocale);\n\t\t\t\t} else if (master.id !== config.defaultLocale) {\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`Master locale is already set to '${master.id}', cannot update it to '${config.defaultLocale}'`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.locales) {\n\t\t\t\tconst localesToAdd = config.locales.filter(\n\t\t\t\t\t(id) => !languages.some((language) => language.id === id),\n\t\t\t\t);\n\t\t\t\tif (localesToAdd.length > 0) {\n\t\t\t\t\tawait this.createLocales(localesToAdd);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.customLocale) {\n\t\t\t\tif (!languages.find(({ id }) => id === config.customLocale?.lang.id)) {\n\t\t\t\t\tawait this.createCustomLocale(config.customLocale);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (config.slices) {\n\t\t\tawait this.createSlices(config.slices);\n\t\t}\n\n\t\tif (config.customTypes) {\n\t\t\tawait this.createCustomTypes(config.customTypes);\n\t\t}\n\n\t\tif (config.preview) {\n\t\t\tawait this.createPreview(config.preview);\n\t\t}\n\n\t\tif (config.rolePerLocal) {\n\t\t\tawait this.toggleRolePerLocal(true);\n\t\t}\n\t}\n\t/** @returns the repository base url, like https://my-repo.prismic.io */\n\tgetBaseURL(): string {\n\t\treturn getRepositoryUrl(this.wroomClient.getBaseURL(), this.name);\n\t}\n\n\t/**\n\t * Set additional standard locales for a repository in Wroom, does not fail if\n\t * the locales already exist.\n\t *\n\t * @param locales - An array of all locales to be added to the repository.\n\t *\n\t * @throws Error if setting the locales fails.\n\t */\n\tasync createLocales(locales: string[]): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t\"app/settings/multilanguages\",\n\t\t\t{ languages: locales },\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 &&\n\t\t\t\t(data as string).includes(\"already existing languages\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not add locales ${locales.join(\", \")}`);\n\t\t}\n\t\tprofiler.done({ message: `locales '${locales}' created` });\n\t}\n\n\t/**\n\t * Set additional custom locale for a repository in Wroom, does not fail if\n\t * the locales already exist.\n\t *\n\t * @param locale - The locale to be added to the repository.\n\t *\n\t * @throws Error if setting the locale fails.\n\t */\n\tasync createCustomLocale(locale: CustomLocale): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t\"app/settings/multilanguages/custom\",\n\t\t\tlocale,\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 && JSON.stringify(data).includes(\"code is already used\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not create custom locale ${locale}`);\n\t\t}\n\t\tprofiler.done({\n\t\t\tmessage: `custom locale ${JSON.stringify(locale)} created`,\n\t\t});\n\t}\n\n\tprivate failIfNot200(response: AxiosResponse, msg: string) {\n\t\tif (response.status !== 200) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(msg);\n\t\t}\n\t}\n\n\t/**\n\t * Delete a locale from a repository.\n\t *\n\t * @param locale - locale to remove from the repository configuration.\n\t *\n\t * @throws Error if deleting the locale fails.\n\t */\n\tasync deleteLocale(locale: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`app/settings/multilanguages/${locale}/delete`,\n\t\t);\n\t\tthis.failIfNot200(response, `Could not delete locale ${locale}`);\n\t\tprofiler.done({ message: `locale '${locale}' deleted` });\n\t}\n\n\t/**\n\t * Set the default (master) locale for a repository in Wroom, the locale needs\n\t * to exist for the repository.\n\t *\n\t * @param locale - The locale to be set as the default.\n\t *\n\t * @throws Error if setting the default locale fails.\n\t */\n\tasync setDefaultLocale(locale: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`/app/settings/multilanguages/${locale}/createMasterLang`,\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 &&\n\t\t\t\t// returns 400 if master lang is already set\n\t\t\t\tJSON.stringify(data).includes(\"Unable to set as master language\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not set default locale to ${locale}`);\n\t\t}\n\t\tprofiler.done({ message: `default locale set to '${locale}'` });\n\t}\n\n\t/**\n\t * Creates a release.\n\t *\n\t * @param label - The label for the release.\n\t *\n\t * @returns A Promise that resolves when the release is created.\n\t */\n\tasync createRelease(label: string): Promise<{ id: string }> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(this.name, \"app/releases\", {\n\t\t\tlabel,\n\t\t});\n\t\tthis.failIfNot200(response, `Could not create release ${label}`);\n\t\tprofiler.done({ message: `release '${label}' created` });\n\n\t\treturn response.data;\n\t}\n\n\t/**\n\t * Deletes a repository release.\n\t *\n\t * @param repository - The name of the repository.\n\t * @param id - The ID of the release to be deleted.\n\t */\n\tasync deleteRelease(id: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`app/releases/${id}/delete`,\n\t\t\t{},\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not delete release with id ${id}`);\n\t\tprofiler.done({ message: `release '${id}' deleted` });\n\t}\n\n\t/**\n\t * Creates a preview for a repository.\n\t *\n\t * @param data - The data for creating the preview.\n\t */\n\tasync createPreview(data: Preview): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`previews/new`,\n\t\t\tdata,\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not create preview ${data.name}`);\n\t\tprofiler.done({ message: `preview '${data.name}' created` });\n\n\t\treturn response.data;\n\t}\n\n\t/**\n\t * Deletes a preview from a repository.\n\t *\n\t * @param id - The ID of the preview to be deleted.\n\t */\n\tasync deletePreview(id: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`previews/delete/${id}`,\n\t\t\t{},\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not delete preview with id ${id}`);\n\t\tprofiler.done({ message: `preview '${id}' deleted` });\n\t}\n\n\t/**\n\t * Create Custom Types using the Custom types api.\n\t *\n\t * @param customTypes -\n\t */\n\tasync createCustomTypes(customTypes: CustomType[]): Promise<void> {\n\t\tawait this.customTypesApiClient.createCustomTypes(customTypes);\n\t}\n\n\t/**\n\t * Create slices using the Custom types api.\n\t *\n\t * @param slices -\n\t */\n\tasync createSlices(slices: SharedSlice[]): Promise<void> {\n\t\tawait this.customTypesApiClient.createSlices(slices);\n\t}\n\n\t/**\n\t * Create an access token to query private items of the Content api.\n\t *\n\t * @param appName - mandatory authorized application name\n\t * @param tokenScope - access token scope. Use \"master\" to when your content\n\t * api is fully private or \"master+releases\" to access private releases\n\t */\n\tasync createContentAPIToken(\n\t\tappName: string,\n\t\ttokenScope: \"master\" | \"master+releases\" = \"master\",\n\t): Promise<string> {\n\t\tconst profiler = logger.startTimer();\n\t\ttype AuthorizedAppResponse = {\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\twroom_auths: { token: string; scope: \"master\" | \"master+releases\" }[];\n\t\t};\n\t\tconst existingApps: AxiosResponse<AuthorizedAppResponse[]> =\n\t\t\tawait this.wroomClient.get(this.name, \"settings/security/contentapi\");\n\n\t\tthis.failIfNot200(\n\t\t\texistingApps,\n\t\t\t`Could not get status of existing applications to generate a content api token`,\n\t\t);\n\t\tlet app = existingApps.data.find(({ name, wroom_auths }) => {\n\t\t\treturn name === appName && wroom_auths.length > 0;\n\t\t});\n\n\t\tif (!app) {\n\t\t\tconst response: AxiosResponse<AuthorizedAppResponse> =\n\t\t\t\tawait this.wroomClient.post(this.name, \"settings/security/oauthapp\", {\n\t\t\t\t\tapp_name: appName,\n\t\t\t\t});\n\n\t\t\tthis.failIfNot200(\n\t\t\t\tresponse,\n\t\t\t\t`Could not create content api app ${appName}`,\n\t\t\t);\n\t\t\tapp = response.data;\n\t\t}\n\n\t\tlet tokenInfo = app.wroom_auths.find(({ scope }) => scope === tokenScope);\n\t\tif (!tokenInfo) {\n\t\t\tconst response = await this.wroomClient.post(\n\t\t\t\tthis.name,\n\t\t\t\t\"settings/security/authorizations\",\n\t\t\t\t{\n\t\t\t\t\tapp: app.id,\n\t\t\t\t\tscope: tokenScope,\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.failIfNot200(\n\t\t\t\tresponse,\n\t\t\t\t`Could not create content api access token for app ${appName} with scope ${tokenScope}`,\n\t\t\t);\n\t\t\ttokenInfo = response.data;\n\t\t}\n\n\t\tprofiler.done({\n\t\t\tmessage: `content api access token for app '${appName}' created`,\n\t\t});\n\n\t\tif (!tokenInfo?.token) {\n\t\t\tthrow `Could not create content api access token for app ${appName} with scope ${tokenScope}`;\n\t\t}\n\n\t\treturn tokenInfo.token;\n\t}\n\n\t/** Create a permanent access token to authenticate to Prismic public apis. */\n\tasync createPermanentAccessToken(): Promise<string> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst token = await this.authApiClient.getMachine2MachineToken(this.name);\n\n\t\tprofiler.done({\n\t\t\tmessage: `machine2machine token created`,\n\t\t});\n\n\t\treturn token;\n\t}\n\n\t/**\n\t * Toggle the Role per local feature\n\t *\n\t * @param enabled - The feature new status\n\t */\n\tasync toggleRolePerLocal(enabled: boolean): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.toggleRolePerLocal({\n\t\t\trepository: this.name,\n\t\t\tenabled: enabled,\n\t\t});\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not ${enabled ? \"enable\" : \"disable\"} Role per local for ${\n\t\t\t\tthis.name\n\t\t\t}`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `Role per local ${enabled ? \"enabled\" : \"disabled\"}`,\n\t\t});\n\t}\n\n\t/**\n\t * Change the Repository Plan\n\t *\n\t * @param {string} newPlanId - The Id of the new Plan to apply\n\t */\n\tasync changePlan(newPlanId: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.changePlan({\n\t\t\trepository: this.name,\n\t\t\tnewPlanId: newPlanId,\n\t\t\tbypassManualBilling: true, // For now the library does not support Stripe features\n\t\t});\n\n\t\tthis.failIfNot200(response, \"Could not change the Repository Plan\");\n\t\tprofiler.done({\n\t\t\tmessage: `Repository Plan changed to ${newPlanId}`,\n\t\t});\n\t}\n\n\t/**\n\t * Add a new user to the repository\n\t *\n\t * @param {string} email - The email of the user\n\t */\n\tasync addUser(email: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.addUserToRepository({\n\t\t\trepository: this.name,\n\t\t\temail: email,\n\t\t});\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 409 &&\n\t\t\t\tJSON.stringify(data).includes(\"already a member of the repo\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not add a new user ${email} to the repository`);\n\t\t}\n\t\tprofiler.done({\n\t\t\tmessage: `User ${email} was added to the repository`,\n\t\t});\n\t}\n\n\t/**\n\t * Remove a user from the repository\n\t *\n\t * @param {string} email - The email of the user\n\t */\n\tasync removeUser(email: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.removeUserFromRepository({\n\t\t\trepository: this.name,\n\t\t\temail: email,\n\t\t});\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not remove the user ${email} from the repository`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `User ${email} was removed from the repository`,\n\t\t});\n\t}\n\n\t/**\n\t * Update the role of a user in a repository\n\t *\n\t * @param {string} email - The email of the user\n\t * @param {string | Record<string, string>} role - The new Role of the user,\n\t * either a string for basic workflow or an object such as `{ \"lang_id\":\n\t * \"Writer\" }`\n\t *\n\t * Example of roles are\n\t *\n\t * - Administrator\n\t * - Writer\n\t * - Contributor\n\t * - Manager (publisher)\n\t */\n\tasync updateUserRole(\n\t\temail: string,\n\t\trole: string | Record<string, string>,\n\t): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response =\n\t\t\ttypeof role === \"string\"\n\t\t\t\t? await this.wroomClient.updateRole(this.name, email, role)\n\t\t\t\t: await this.wroomClient.updateRolePerLocal(this.name, email, role);\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not update the ${\n\t\t\t\ttypeof role === \"string\" ? \"role\" : \"rolePerLocal\"\n\t\t\t} of the user ${email}`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `Updated User's ${\n\t\t\t\ttypeof role === \"string\" ? \"role\" : \"rolePerLocal\"\n\t\t\t} for user ${email}`,\n\t\t});\n\t}\n}\n\nexport type RepositoryConfig = {\n\tcustomLocale?: CustomLocale;\n\tlocales?: string[];\n\tdefaultLocale?: string;\n\tslices?: SharedSlice[];\n\tcustomTypes?: CustomType[];\n\tpreview?: Preview;\n\trolePerLocal?: boolean;\n};\n\nexport type Preview = {\n\tname: string;\n\twebsiteURL: string;\n\tresolverPath: string;\n};\n\nexport type CustomLocale = {\n\tlang: {\n\t\tlabel: string;\n\t\tid: string;\n\t\tuseStandardAnalyzer?: boolean;\n\t};\n\tregion: {\n\t\tlabel: string;\n\t\tid: string;\n\t};\n};\n"],"names":["logger","getRepositoryUrl","logHttpResponse"],"mappings":"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"}
1
+ {"version":3,"file":"repository.cjs","sources":["../../../src/managers/repository.ts"],"sourcesContent":["import { expect } from \"@playwright/test\";\nimport { AxiosResponse } from \"axios\";\n\nimport {\n\tCustomType,\n\tSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\n\nimport type { AuthenticationClient } from \"../clients/authenticationApi\";\nimport { ContentApiClient } from \"../clients/contentApi\";\nimport type { CoreClient } from \"../clients/coreApi\";\nimport { CustomTypesClient } from \"../clients/customTypesApi\";\nimport { ManageV2Client } from \"../clients/manageV2\";\nimport {\n\tDocumentPayload,\n\tDocumentResponse,\n\tMigrationClient,\n} from \"../clients/migrationApi\";\nimport { WroomClient } from \"../clients/wroom\";\nimport { logHttpResponse, logger } from \"../utils/log\";\nimport { getRepositoryUrl } from \"../utils/urls\";\n\n/** Utility to manage test data for a Prismic repository */\nexport class RepositoryManager {\n\tconstructor(\n\t\treadonly name: string,\n\t\tprivate readonly coreApiClient: CoreClient,\n\t\tprivate readonly authApiClient: AuthenticationClient,\n\t\tprivate readonly wroomClient: WroomClient,\n\t\tprivate readonly customTypesApiClient: CustomTypesClient,\n\t\tprivate readonly migrationApiClient: MigrationClient | undefined,\n\t\tprivate readonly manageV2Client: ManageV2Client,\n\t) {}\n\n\tasync configure(config: RepositoryConfig): Promise<void> {\n\t\tconst hasLangConfig =\n\t\t\tconfig.defaultLocale || config.locales || config.customLocale;\n\t\tif (hasLangConfig) {\n\t\t\tconst languages = await this.coreApiClient.getLanguages();\n\n\t\t\t// default locale must be set first\n\t\t\tif (config.defaultLocale) {\n\t\t\t\tconst master = languages.find(({ is_master }) => is_master === true);\n\t\t\t\tif (!master) {\n\t\t\t\t\tawait this.setDefaultLocale(config.defaultLocale);\n\t\t\t\t} else if (master.id !== config.defaultLocale) {\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`Master locale is already set to '${master.id}', cannot update it to '${config.defaultLocale}'`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.locales) {\n\t\t\t\tconst localesToAdd = config.locales.filter(\n\t\t\t\t\t(id) => !languages.some((language) => language.id === id),\n\t\t\t\t);\n\t\t\t\tif (localesToAdd.length > 0) {\n\t\t\t\t\tawait this.createLocales(localesToAdd);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.customLocale) {\n\t\t\t\tif (!languages.find(({ id }) => id === config.customLocale?.lang.id)) {\n\t\t\t\t\tawait this.createCustomLocale(config.customLocale);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (config.slices) {\n\t\t\tawait this.createSlices(config.slices);\n\t\t}\n\n\t\tif (config.customTypes) {\n\t\t\tawait this.createCustomTypes(config.customTypes);\n\t\t}\n\n\t\tif (config.preview) {\n\t\t\tawait this.createPreview(config.preview);\n\t\t}\n\n\t\tif (config.rolePerLocal) {\n\t\t\tawait this.toggleRolePerLocal(true);\n\t\t}\n\t}\n\n\t/** @returns the repository base url, like https://my-repo.prismic.io */\n\tgetBaseURL(): string {\n\t\treturn getRepositoryUrl(this.wroomClient.getBaseURL(), this.name);\n\t}\n\n\t/** @returns the repository base cdn url, like https://my-repo.cdn.prismic.io */\n\tgetBaseCdnURL(): string {\n\t\treturn getRepositoryUrl(this.wroomClient.getBaseURL(), `${this.name}.cdn`);\n\t}\n\n\t/**\n\t * @returns a Content Type api client configured to target the repository CDN\n\t * url. Uses Playwright for requests so if your project uses Playwright too,\n\t * any network request will be present in Playwright test reports.\n\t */\n\tgetContentApiClient(config?: {\n\t\tversion?: \"v1\" | \"v2\";\n\t\taccessToken?: string;\n\t}): ContentApiClient {\n\t\treturn new ContentApiClient(this.getBaseCdnURL(), config);\n\t}\n\n\t/**\n\t * Set additional standard locales for a repository in Wroom, does not fail if\n\t * the locales already exist.\n\t *\n\t * @param locales - An array of all locales to be added to the repository.\n\t *\n\t * @throws Error if setting the locales fails.\n\t */\n\tasync createLocales(locales: string[]): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t\"app/settings/multilanguages\",\n\t\t\t{ languages: locales },\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 &&\n\t\t\t\t(data as string).includes(\"already existing languages\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not add locales ${locales.join(\", \")}`);\n\t\t}\n\t\tprofiler.done({ message: `locales '${locales}' created` });\n\t}\n\n\t/**\n\t * Set additional custom locale for a repository in Wroom, does not fail if\n\t * the locales already exist.\n\t *\n\t * @param locale - The locale to be added to the repository.\n\t *\n\t * @throws Error if setting the locale fails.\n\t */\n\tasync createCustomLocale(locale: CustomLocale): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t\"app/settings/multilanguages/custom\",\n\t\t\tlocale,\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 && JSON.stringify(data).includes(\"code is already used\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not create custom locale ${locale}`);\n\t\t}\n\t\tprofiler.done({\n\t\t\tmessage: `custom locale ${JSON.stringify(locale)} created`,\n\t\t});\n\t}\n\n\tprivate failIfNot200(response: AxiosResponse, msg: string) {\n\t\tif (response.status !== 200) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(msg);\n\t\t}\n\t}\n\n\t/**\n\t * Delete a locale from a repository.\n\t *\n\t * @param locale - locale to remove from the repository configuration.\n\t *\n\t * @throws Error if deleting the locale fails.\n\t */\n\tasync deleteLocale(locale: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`app/settings/multilanguages/${locale}/delete`,\n\t\t);\n\t\tthis.failIfNot200(response, `Could not delete locale ${locale}`);\n\t\tprofiler.done({ message: `locale '${locale}' deleted` });\n\t}\n\n\t/**\n\t * Set the default (master) locale for a repository in Wroom, the locale needs\n\t * to exist for the repository.\n\t *\n\t * @param locale - The locale to be set as the default.\n\t *\n\t * @throws Error if setting the default locale fails.\n\t */\n\tasync setDefaultLocale(locale: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`/app/settings/multilanguages/${locale}/createMasterLang`,\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 &&\n\t\t\t\t// returns 400 if master lang is already set\n\t\t\t\tJSON.stringify(data).includes(\"Unable to set as master language\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not set default locale to ${locale}`);\n\t\t}\n\t\tprofiler.done({ message: `default locale set to '${locale}'` });\n\t}\n\n\t/**\n\t * Creates a release.\n\t *\n\t * @param label - The label for the release.\n\t *\n\t * @returns A Promise that resolves when the release is created.\n\t */\n\tasync createRelease(label: string): Promise<{ id: string }> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(this.name, \"app/releases\", {\n\t\t\tlabel,\n\t\t});\n\t\tthis.failIfNot200(response, `Could not create release ${label}`);\n\t\tprofiler.done({ message: `release '${label}' created` });\n\n\t\treturn response.data;\n\t}\n\n\t/**\n\t * Deletes a repository release.\n\t *\n\t * @param repository - The name of the repository.\n\t * @param id - The ID of the release to be deleted.\n\t */\n\tasync deleteRelease(id: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`app/releases/${id}/delete`,\n\t\t\t{},\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not delete release with id ${id}`);\n\t\tprofiler.done({ message: `release '${id}' deleted` });\n\t}\n\n\t/**\n\t * Creates a preview for a repository.\n\t *\n\t * @param data - The data for creating the preview.\n\t */\n\tasync createPreview(data: Preview): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`previews/new`,\n\t\t\tdata,\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not create preview ${data.name}`);\n\t\tprofiler.done({ message: `preview '${data.name}' created` });\n\n\t\treturn response.data;\n\t}\n\n\t/**\n\t * Deletes a preview from a repository.\n\t *\n\t * @param id - The ID of the preview to be deleted.\n\t */\n\tasync deletePreview(id: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`previews/delete/${id}`,\n\t\t\t{},\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not delete preview with id ${id}`);\n\t\tprofiler.done({ message: `preview '${id}' deleted` });\n\t}\n\n\t/**\n\t * Create Custom Types using the Custom types api.\n\t *\n\t * @param customTypes -\n\t */\n\tasync createCustomTypes(customTypes: CustomType[]): Promise<void> {\n\t\tawait this.customTypesApiClient.createCustomTypes(customTypes);\n\t}\n\n\t/**\n\t * Create slices using the Custom types api.\n\t *\n\t * @param slices -\n\t */\n\tasync createSlices(slices: SharedSlice[]): Promise<void> {\n\t\tawait this.customTypesApiClient.createSlices(slices);\n\t}\n\n\t/**\n\t * Create an access token to query private items of the Content api.\n\t *\n\t * @param appName - mandatory authorized application name\n\t * @param tokenScope - access token scope. Use \"master\" to when your content\n\t * api is fully private or \"master+releases\" to access private releases\n\t */\n\tasync createContentAPIToken(\n\t\tappName: string,\n\t\ttokenScope: \"master\" | \"master+releases\" = \"master\",\n\t): Promise<string> {\n\t\tconst profiler = logger.startTimer();\n\t\ttype AuthorizedAppResponse = {\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\twroom_auths: { token: string; scope: \"master\" | \"master+releases\" }[];\n\t\t};\n\t\tconst existingApps: AxiosResponse<AuthorizedAppResponse[]> =\n\t\t\tawait this.wroomClient.get(this.name, \"settings/security/contentapi\");\n\n\t\tthis.failIfNot200(\n\t\t\texistingApps,\n\t\t\t`Could not get status of existing applications to generate a content api token`,\n\t\t);\n\t\tlet app = existingApps.data.find(({ name, wroom_auths }) => {\n\t\t\treturn name === appName && wroom_auths.length > 0;\n\t\t});\n\n\t\tif (!app) {\n\t\t\tconst response: AxiosResponse<AuthorizedAppResponse> =\n\t\t\t\tawait this.wroomClient.post(this.name, \"settings/security/oauthapp\", {\n\t\t\t\t\tapp_name: appName,\n\t\t\t\t});\n\n\t\t\tthis.failIfNot200(\n\t\t\t\tresponse,\n\t\t\t\t`Could not create content api app ${appName}`,\n\t\t\t);\n\t\t\tapp = response.data;\n\t\t}\n\n\t\tlet tokenInfo = app.wroom_auths.find(({ scope }) => scope === tokenScope);\n\t\tif (!tokenInfo) {\n\t\t\tconst response = await this.wroomClient.post(\n\t\t\t\tthis.name,\n\t\t\t\t\"settings/security/authorizations\",\n\t\t\t\t{\n\t\t\t\t\tapp: app.id,\n\t\t\t\t\tscope: tokenScope,\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.failIfNot200(\n\t\t\t\tresponse,\n\t\t\t\t`Could not create content api access token for app ${appName} with scope ${tokenScope}`,\n\t\t\t);\n\t\t\ttokenInfo = response.data;\n\t\t}\n\n\t\tprofiler.done({\n\t\t\tmessage: `content api access token for app '${appName}' created`,\n\t\t});\n\n\t\tif (!tokenInfo?.token) {\n\t\t\tthrow `Could not create content api access token for app ${appName} with scope ${tokenScope}`;\n\t\t}\n\n\t\treturn tokenInfo.token;\n\t}\n\n\t/** Create a permanent access token to authenticate to Prismic public apis. */\n\tasync createPermanentAccessToken(): Promise<string> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst token = await this.authApiClient.getMachine2MachineToken(this.name);\n\n\t\tprofiler.done({\n\t\t\tmessage: `machine2machine token created`,\n\t\t});\n\n\t\treturn token;\n\t}\n\n\t/**\n\t * Toggle the Role per local feature\n\t *\n\t * @param enabled - The feature new status\n\t */\n\tasync toggleRolePerLocal(enabled: boolean): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.toggleRolePerLocal({\n\t\t\trepository: this.name,\n\t\t\tenabled: enabled,\n\t\t});\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not ${enabled ? \"enable\" : \"disable\"} Role per local for ${\n\t\t\t\tthis.name\n\t\t\t}`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `Role per local ${enabled ? \"enabled\" : \"disabled\"}`,\n\t\t});\n\t}\n\n\t/**\n\t * Change the Repository Plan\n\t *\n\t * @param {string} newPlanId - The Id of the new Plan to apply\n\t */\n\tasync changePlan(newPlanId: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.changePlan({\n\t\t\trepository: this.name,\n\t\t\tnewPlanId: newPlanId,\n\t\t\tbypassManualBilling: true, // For now the library does not support Stripe features\n\t\t});\n\n\t\tthis.failIfNot200(response, \"Could not change the Repository Plan\");\n\t\tprofiler.done({\n\t\t\tmessage: `Repository Plan changed to ${newPlanId}`,\n\t\t});\n\t}\n\n\t/**\n\t * Add a new user to the repository\n\t *\n\t * @param {string} email - The email of the user\n\t */\n\tasync addUser(email: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.addUserToRepository({\n\t\t\trepository: this.name,\n\t\t\temail: email,\n\t\t});\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 409 &&\n\t\t\t\tJSON.stringify(data).includes(\"already a member of the repo\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not add a new user ${email} to the repository`);\n\t\t}\n\t\tprofiler.done({\n\t\t\tmessage: `User ${email} was added to the repository`,\n\t\t});\n\t}\n\n\t/**\n\t * Remove a user from the repository\n\t *\n\t * @param {string} email - The email of the user\n\t */\n\tasync removeUser(email: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.removeUserFromRepository({\n\t\t\trepository: this.name,\n\t\t\temail: email,\n\t\t});\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not remove the user ${email} from the repository`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `User ${email} was removed from the repository`,\n\t\t});\n\t}\n\n\t/**\n\t * Update the role of a user in a repository\n\t *\n\t * @param {string} email - The email of the user\n\t * @param {string | Record<string, string>} role - The new Role of the user,\n\t * either a string for basic workflow or an object such as `{ \"lang_id\":\n\t * \"Writer\" }`\n\t *\n\t * Example of roles are\n\t *\n\t * - Administrator\n\t * - Writer\n\t * - Contributor\n\t * - Manager (publisher)\n\t */\n\tasync updateUserRole(\n\t\temail: string,\n\t\trole: string | Record<string, string>,\n\t): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response =\n\t\t\ttypeof role === \"string\"\n\t\t\t\t? await this.wroomClient.updateRole(this.name, email, role)\n\t\t\t\t: await this.wroomClient.updateRolePerLocal(this.name, email, role);\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not update the ${\n\t\t\t\ttypeof role === \"string\" ? \"role\" : \"rolePerLocal\"\n\t\t\t} of the user ${email}`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `Updated User's ${\n\t\t\t\ttypeof role === \"string\" ? \"role\" : \"rolePerLocal\"\n\t\t\t} for user ${email}`,\n\t\t});\n\t}\n\n\t/**\n\t * Creates a document using the migration api, see\n\t * https://prismic.io/docs/migration-api-technical-reference\n\t *\n\t * @param {DocumentPayload} document - in the migration api format\n\t * @param {string} status - status of the document, if published, the function\n\t * will wait for a new content api master ref to be created\n\t *\n\t * @returns\n\t */\n\tasync createDocument(\n\t\tdocument: DocumentPayload,\n\t\tstatus: \"draft\" | \"published\",\n\t): Promise<DocumentResponse> {\n\t\tif (!this.migrationApiClient) {\n\t\t\tthrow \"No client found for the migration api. Did you provide a migration api url in your configuration?\";\n\t\t}\n\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst result = await this.migrationApiClient.createDocument(document);\n\t\tlet message = `Document created with id '${result.id}'`;\n\t\tif (status === \"published\") {\n\t\t\tconst contentApi = this.getContentApiClient();\n\t\t\tconst masterRef = await contentApi.getMasterRef();\n\t\t\tawait this.coreApiClient.publishDraft(result.id);\n\t\t\tawait expect\n\t\t\t\t.poll(async () => contentApi.getMasterRef(), {\n\t\t\t\t\ttimeout: 10_000,\n\t\t\t\t\tmessage: \"Waiting for new master ref to be available\",\n\t\t\t\t})\n\t\t\t\t.not.toBe(masterRef);\n\t\t\tmessage += \", status 'published' and new master ref available\";\n\t\t}\n\t\tprofiler.done({\n\t\t\tmessage,\n\t\t});\n\n\t\treturn result;\n\t}\n}\n\nexport type RepositoryConfig = {\n\tcustomLocale?: CustomLocale;\n\tlocales?: string[];\n\tdefaultLocale?: string;\n\tslices?: SharedSlice[];\n\tcustomTypes?: CustomType[];\n\tpreview?: Preview;\n\trolePerLocal?: boolean;\n};\n\nexport type Preview = {\n\tname: string;\n\twebsiteURL: string;\n\tresolverPath: string;\n};\n\nexport type CustomLocale = {\n\tlang: {\n\t\tlabel: string;\n\t\tid: string;\n\t\tuseStandardAnalyzer?: boolean;\n\t};\n\tregion: {\n\t\tlabel: string;\n\t\tid: string;\n\t};\n};\n"],"names":["logger","getRepositoryUrl","ContentApiClient","logHttpResponse","contentApi","expect"],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import { CustomType, SharedSlice } from "@prismicio/types-internal/lib/customtypes";
2
2
  import type { AuthenticationClient } from "../clients/authenticationApi";
3
+ import { ContentApiClient } from "../clients/contentApi";
3
4
  import type { CoreClient } from "../clients/coreApi";
4
5
  import { CustomTypesClient } from "../clients/customTypesApi";
5
6
  import { ManageV2Client } from "../clients/manageV2";
7
+ import { DocumentPayload, DocumentResponse, MigrationClient } from "../clients/migrationApi";
6
8
  import { WroomClient } from "../clients/wroom";
7
9
  /** Utility to manage test data for a Prismic repository */
8
10
  export declare class RepositoryManager {
@@ -11,11 +13,23 @@ export declare class RepositoryManager {
11
13
  private readonly authApiClient;
12
14
  private readonly wroomClient;
13
15
  private readonly customTypesApiClient;
16
+ private readonly migrationApiClient;
14
17
  private readonly manageV2Client;
15
- constructor(name: string, coreApiClient: CoreClient, authApiClient: AuthenticationClient, wroomClient: WroomClient, customTypesApiClient: CustomTypesClient, manageV2Client: ManageV2Client);
18
+ constructor(name: string, coreApiClient: CoreClient, authApiClient: AuthenticationClient, wroomClient: WroomClient, customTypesApiClient: CustomTypesClient, migrationApiClient: MigrationClient | undefined, manageV2Client: ManageV2Client);
16
19
  configure(config: RepositoryConfig): Promise<void>;
17
20
  /** @returns the repository base url, like https://my-repo.prismic.io */
18
21
  getBaseURL(): string;
22
+ /** @returns the repository base cdn url, like https://my-repo.cdn.prismic.io */
23
+ getBaseCdnURL(): string;
24
+ /**
25
+ * @returns a Content Type api client configured to target the repository CDN
26
+ * url. Uses Playwright for requests so if your project uses Playwright too,
27
+ * any network request will be present in Playwright test reports.
28
+ */
29
+ getContentApiClient(config?: {
30
+ version?: "v1" | "v2";
31
+ accessToken?: string;
32
+ }): ContentApiClient;
19
33
  /**
20
34
  * Set additional standard locales for a repository in Wroom, does not fail if
21
35
  * the locales already exist.
@@ -143,6 +157,17 @@ export declare class RepositoryManager {
143
157
  * - Manager (publisher)
144
158
  */
145
159
  updateUserRole(email: string, role: string | Record<string, string>): Promise<void>;
160
+ /**
161
+ * Creates a document using the migration api, see
162
+ * https://prismic.io/docs/migration-api-technical-reference
163
+ *
164
+ * @param {DocumentPayload} document - in the migration api format
165
+ * @param {string} status - status of the document, if published, the function
166
+ * will wait for a new content api master ref to be created
167
+ *
168
+ * @returns
169
+ */
170
+ createDocument(document: DocumentPayload, status: "draft" | "published"): Promise<DocumentResponse>;
146
171
  }
147
172
  export type RepositoryConfig = {
148
173
  customLocale?: CustomLocale;
@@ -4,21 +4,25 @@ var __publicField = (obj, key, value) => {
4
4
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  return value;
6
6
  };
7
+ import { expect } from "@playwright/test";
8
+ import { ContentApiClient } from "../clients/contentApi.js";
7
9
  import { logger, logHttpResponse } from "../utils/log.js";
8
10
  import { getRepositoryUrl } from "../utils/urls.js";
9
11
  class RepositoryManager {
10
- constructor(name, coreApiClient, authApiClient, wroomClient, customTypesApiClient, manageV2Client) {
12
+ constructor(name, coreApiClient, authApiClient, wroomClient, customTypesApiClient, migrationApiClient, manageV2Client) {
11
13
  __publicField(this, "name");
12
14
  __publicField(this, "coreApiClient");
13
15
  __publicField(this, "authApiClient");
14
16
  __publicField(this, "wroomClient");
15
17
  __publicField(this, "customTypesApiClient");
18
+ __publicField(this, "migrationApiClient");
16
19
  __publicField(this, "manageV2Client");
17
20
  this.name = name;
18
21
  this.coreApiClient = coreApiClient;
19
22
  this.authApiClient = authApiClient;
20
23
  this.wroomClient = wroomClient;
21
24
  this.customTypesApiClient = customTypesApiClient;
25
+ this.migrationApiClient = migrationApiClient;
22
26
  this.manageV2Client = manageV2Client;
23
27
  }
24
28
  async configure(config) {
@@ -65,6 +69,18 @@ class RepositoryManager {
65
69
  getBaseURL() {
66
70
  return getRepositoryUrl(this.wroomClient.getBaseURL(), this.name);
67
71
  }
72
+ /** @returns the repository base cdn url, like https://my-repo.cdn.prismic.io */
73
+ getBaseCdnURL() {
74
+ return getRepositoryUrl(this.wroomClient.getBaseURL(), `${this.name}.cdn`);
75
+ }
76
+ /**
77
+ * @returns a Content Type api client configured to target the repository CDN
78
+ * url. Uses Playwright for requests so if your project uses Playwright too,
79
+ * any network request will be present in Playwright test reports.
80
+ */
81
+ getContentApiClient(config) {
82
+ return new ContentApiClient(this.getBaseCdnURL(), config);
83
+ }
68
84
  /**
69
85
  * Set additional standard locales for a repository in Wroom, does not fail if
70
86
  * the locales already exist.
@@ -352,6 +368,38 @@ class RepositoryManager {
352
368
  message: `Updated User's ${typeof role === "string" ? "role" : "rolePerLocal"} for user ${email}`
353
369
  });
354
370
  }
371
+ /**
372
+ * Creates a document using the migration api, see
373
+ * https://prismic.io/docs/migration-api-technical-reference
374
+ *
375
+ * @param {DocumentPayload} document - in the migration api format
376
+ * @param {string} status - status of the document, if published, the function
377
+ * will wait for a new content api master ref to be created
378
+ *
379
+ * @returns
380
+ */
381
+ async createDocument(document, status) {
382
+ if (!this.migrationApiClient) {
383
+ throw "No client found for the migration api. Did you provide a migration api url in your configuration?";
384
+ }
385
+ const profiler = logger.startTimer();
386
+ const result = await this.migrationApiClient.createDocument(document);
387
+ let message = `Document created with id '${result.id}'`;
388
+ if (status === "published") {
389
+ const contentApi = this.getContentApiClient();
390
+ const masterRef = await contentApi.getMasterRef();
391
+ await this.coreApiClient.publishDraft(result.id);
392
+ await expect.poll(async () => contentApi.getMasterRef(), {
393
+ timeout: 1e4,
394
+ message: "Waiting for new master ref to be available"
395
+ }).not.toBe(masterRef);
396
+ message += ", status 'published' and new master ref available";
397
+ }
398
+ profiler.done({
399
+ message
400
+ });
401
+ return result;
402
+ }
355
403
  }
356
404
  export {
357
405
  RepositoryManager
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sources":["../../../src/managers/repository.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\n\nimport {\n\tCustomType,\n\tSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\n\nimport type { AuthenticationClient } from \"../clients/authenticationApi\";\nimport type { CoreClient } from \"../clients/coreApi\";\nimport { CustomTypesClient } from \"../clients/customTypesApi\";\nimport { ManageV2Client } from \"../clients/manageV2\";\nimport { WroomClient } from \"../clients/wroom\";\nimport { logHttpResponse, logger } from \"../utils/log\";\nimport { getRepositoryUrl } from \"../utils/urls\";\n\n/** Utility to manage test data for a Prismic repository */\nexport class RepositoryManager {\n\tconstructor(\n\t\treadonly name: string,\n\t\tprivate readonly coreApiClient: CoreClient,\n\t\tprivate readonly authApiClient: AuthenticationClient,\n\t\tprivate readonly wroomClient: WroomClient,\n\t\tprivate readonly customTypesApiClient: CustomTypesClient,\n\t\tprivate readonly manageV2Client: ManageV2Client,\n\t) {}\n\n\tasync configure(config: RepositoryConfig): Promise<void> {\n\t\tconst hasLangConfig =\n\t\t\tconfig.defaultLocale || config.locales || config.customLocale;\n\t\tif (hasLangConfig) {\n\t\t\tconst languages = await this.coreApiClient.getLanguages();\n\n\t\t\t// default locale must be set first\n\t\t\tif (config.defaultLocale) {\n\t\t\t\tconst master = languages.find(({ is_master }) => is_master === true);\n\t\t\t\tif (!master) {\n\t\t\t\t\tawait this.setDefaultLocale(config.defaultLocale);\n\t\t\t\t} else if (master.id !== config.defaultLocale) {\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`Master locale is already set to '${master.id}', cannot update it to '${config.defaultLocale}'`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.locales) {\n\t\t\t\tconst localesToAdd = config.locales.filter(\n\t\t\t\t\t(id) => !languages.some((language) => language.id === id),\n\t\t\t\t);\n\t\t\t\tif (localesToAdd.length > 0) {\n\t\t\t\t\tawait this.createLocales(localesToAdd);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.customLocale) {\n\t\t\t\tif (!languages.find(({ id }) => id === config.customLocale?.lang.id)) {\n\t\t\t\t\tawait this.createCustomLocale(config.customLocale);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (config.slices) {\n\t\t\tawait this.createSlices(config.slices);\n\t\t}\n\n\t\tif (config.customTypes) {\n\t\t\tawait this.createCustomTypes(config.customTypes);\n\t\t}\n\n\t\tif (config.preview) {\n\t\t\tawait this.createPreview(config.preview);\n\t\t}\n\n\t\tif (config.rolePerLocal) {\n\t\t\tawait this.toggleRolePerLocal(true);\n\t\t}\n\t}\n\t/** @returns the repository base url, like https://my-repo.prismic.io */\n\tgetBaseURL(): string {\n\t\treturn getRepositoryUrl(this.wroomClient.getBaseURL(), this.name);\n\t}\n\n\t/**\n\t * Set additional standard locales for a repository in Wroom, does not fail if\n\t * the locales already exist.\n\t *\n\t * @param locales - An array of all locales to be added to the repository.\n\t *\n\t * @throws Error if setting the locales fails.\n\t */\n\tasync createLocales(locales: string[]): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t\"app/settings/multilanguages\",\n\t\t\t{ languages: locales },\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 &&\n\t\t\t\t(data as string).includes(\"already existing languages\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not add locales ${locales.join(\", \")}`);\n\t\t}\n\t\tprofiler.done({ message: `locales '${locales}' created` });\n\t}\n\n\t/**\n\t * Set additional custom locale for a repository in Wroom, does not fail if\n\t * the locales already exist.\n\t *\n\t * @param locale - The locale to be added to the repository.\n\t *\n\t * @throws Error if setting the locale fails.\n\t */\n\tasync createCustomLocale(locale: CustomLocale): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t\"app/settings/multilanguages/custom\",\n\t\t\tlocale,\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 && JSON.stringify(data).includes(\"code is already used\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not create custom locale ${locale}`);\n\t\t}\n\t\tprofiler.done({\n\t\t\tmessage: `custom locale ${JSON.stringify(locale)} created`,\n\t\t});\n\t}\n\n\tprivate failIfNot200(response: AxiosResponse, msg: string) {\n\t\tif (response.status !== 200) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(msg);\n\t\t}\n\t}\n\n\t/**\n\t * Delete a locale from a repository.\n\t *\n\t * @param locale - locale to remove from the repository configuration.\n\t *\n\t * @throws Error if deleting the locale fails.\n\t */\n\tasync deleteLocale(locale: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`app/settings/multilanguages/${locale}/delete`,\n\t\t);\n\t\tthis.failIfNot200(response, `Could not delete locale ${locale}`);\n\t\tprofiler.done({ message: `locale '${locale}' deleted` });\n\t}\n\n\t/**\n\t * Set the default (master) locale for a repository in Wroom, the locale needs\n\t * to exist for the repository.\n\t *\n\t * @param locale - The locale to be set as the default.\n\t *\n\t * @throws Error if setting the default locale fails.\n\t */\n\tasync setDefaultLocale(locale: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`/app/settings/multilanguages/${locale}/createMasterLang`,\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 &&\n\t\t\t\t// returns 400 if master lang is already set\n\t\t\t\tJSON.stringify(data).includes(\"Unable to set as master language\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not set default locale to ${locale}`);\n\t\t}\n\t\tprofiler.done({ message: `default locale set to '${locale}'` });\n\t}\n\n\t/**\n\t * Creates a release.\n\t *\n\t * @param label - The label for the release.\n\t *\n\t * @returns A Promise that resolves when the release is created.\n\t */\n\tasync createRelease(label: string): Promise<{ id: string }> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(this.name, \"app/releases\", {\n\t\t\tlabel,\n\t\t});\n\t\tthis.failIfNot200(response, `Could not create release ${label}`);\n\t\tprofiler.done({ message: `release '${label}' created` });\n\n\t\treturn response.data;\n\t}\n\n\t/**\n\t * Deletes a repository release.\n\t *\n\t * @param repository - The name of the repository.\n\t * @param id - The ID of the release to be deleted.\n\t */\n\tasync deleteRelease(id: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`app/releases/${id}/delete`,\n\t\t\t{},\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not delete release with id ${id}`);\n\t\tprofiler.done({ message: `release '${id}' deleted` });\n\t}\n\n\t/**\n\t * Creates a preview for a repository.\n\t *\n\t * @param data - The data for creating the preview.\n\t */\n\tasync createPreview(data: Preview): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`previews/new`,\n\t\t\tdata,\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not create preview ${data.name}`);\n\t\tprofiler.done({ message: `preview '${data.name}' created` });\n\n\t\treturn response.data;\n\t}\n\n\t/**\n\t * Deletes a preview from a repository.\n\t *\n\t * @param id - The ID of the preview to be deleted.\n\t */\n\tasync deletePreview(id: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`previews/delete/${id}`,\n\t\t\t{},\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not delete preview with id ${id}`);\n\t\tprofiler.done({ message: `preview '${id}' deleted` });\n\t}\n\n\t/**\n\t * Create Custom Types using the Custom types api.\n\t *\n\t * @param customTypes -\n\t */\n\tasync createCustomTypes(customTypes: CustomType[]): Promise<void> {\n\t\tawait this.customTypesApiClient.createCustomTypes(customTypes);\n\t}\n\n\t/**\n\t * Create slices using the Custom types api.\n\t *\n\t * @param slices -\n\t */\n\tasync createSlices(slices: SharedSlice[]): Promise<void> {\n\t\tawait this.customTypesApiClient.createSlices(slices);\n\t}\n\n\t/**\n\t * Create an access token to query private items of the Content api.\n\t *\n\t * @param appName - mandatory authorized application name\n\t * @param tokenScope - access token scope. Use \"master\" to when your content\n\t * api is fully private or \"master+releases\" to access private releases\n\t */\n\tasync createContentAPIToken(\n\t\tappName: string,\n\t\ttokenScope: \"master\" | \"master+releases\" = \"master\",\n\t): Promise<string> {\n\t\tconst profiler = logger.startTimer();\n\t\ttype AuthorizedAppResponse = {\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\twroom_auths: { token: string; scope: \"master\" | \"master+releases\" }[];\n\t\t};\n\t\tconst existingApps: AxiosResponse<AuthorizedAppResponse[]> =\n\t\t\tawait this.wroomClient.get(this.name, \"settings/security/contentapi\");\n\n\t\tthis.failIfNot200(\n\t\t\texistingApps,\n\t\t\t`Could not get status of existing applications to generate a content api token`,\n\t\t);\n\t\tlet app = existingApps.data.find(({ name, wroom_auths }) => {\n\t\t\treturn name === appName && wroom_auths.length > 0;\n\t\t});\n\n\t\tif (!app) {\n\t\t\tconst response: AxiosResponse<AuthorizedAppResponse> =\n\t\t\t\tawait this.wroomClient.post(this.name, \"settings/security/oauthapp\", {\n\t\t\t\t\tapp_name: appName,\n\t\t\t\t});\n\n\t\t\tthis.failIfNot200(\n\t\t\t\tresponse,\n\t\t\t\t`Could not create content api app ${appName}`,\n\t\t\t);\n\t\t\tapp = response.data;\n\t\t}\n\n\t\tlet tokenInfo = app.wroom_auths.find(({ scope }) => scope === tokenScope);\n\t\tif (!tokenInfo) {\n\t\t\tconst response = await this.wroomClient.post(\n\t\t\t\tthis.name,\n\t\t\t\t\"settings/security/authorizations\",\n\t\t\t\t{\n\t\t\t\t\tapp: app.id,\n\t\t\t\t\tscope: tokenScope,\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.failIfNot200(\n\t\t\t\tresponse,\n\t\t\t\t`Could not create content api access token for app ${appName} with scope ${tokenScope}`,\n\t\t\t);\n\t\t\ttokenInfo = response.data;\n\t\t}\n\n\t\tprofiler.done({\n\t\t\tmessage: `content api access token for app '${appName}' created`,\n\t\t});\n\n\t\tif (!tokenInfo?.token) {\n\t\t\tthrow `Could not create content api access token for app ${appName} with scope ${tokenScope}`;\n\t\t}\n\n\t\treturn tokenInfo.token;\n\t}\n\n\t/** Create a permanent access token to authenticate to Prismic public apis. */\n\tasync createPermanentAccessToken(): Promise<string> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst token = await this.authApiClient.getMachine2MachineToken(this.name);\n\n\t\tprofiler.done({\n\t\t\tmessage: `machine2machine token created`,\n\t\t});\n\n\t\treturn token;\n\t}\n\n\t/**\n\t * Toggle the Role per local feature\n\t *\n\t * @param enabled - The feature new status\n\t */\n\tasync toggleRolePerLocal(enabled: boolean): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.toggleRolePerLocal({\n\t\t\trepository: this.name,\n\t\t\tenabled: enabled,\n\t\t});\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not ${enabled ? \"enable\" : \"disable\"} Role per local for ${\n\t\t\t\tthis.name\n\t\t\t}`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `Role per local ${enabled ? \"enabled\" : \"disabled\"}`,\n\t\t});\n\t}\n\n\t/**\n\t * Change the Repository Plan\n\t *\n\t * @param {string} newPlanId - The Id of the new Plan to apply\n\t */\n\tasync changePlan(newPlanId: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.changePlan({\n\t\t\trepository: this.name,\n\t\t\tnewPlanId: newPlanId,\n\t\t\tbypassManualBilling: true, // For now the library does not support Stripe features\n\t\t});\n\n\t\tthis.failIfNot200(response, \"Could not change the Repository Plan\");\n\t\tprofiler.done({\n\t\t\tmessage: `Repository Plan changed to ${newPlanId}`,\n\t\t});\n\t}\n\n\t/**\n\t * Add a new user to the repository\n\t *\n\t * @param {string} email - The email of the user\n\t */\n\tasync addUser(email: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.addUserToRepository({\n\t\t\trepository: this.name,\n\t\t\temail: email,\n\t\t});\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 409 &&\n\t\t\t\tJSON.stringify(data).includes(\"already a member of the repo\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not add a new user ${email} to the repository`);\n\t\t}\n\t\tprofiler.done({\n\t\t\tmessage: `User ${email} was added to the repository`,\n\t\t});\n\t}\n\n\t/**\n\t * Remove a user from the repository\n\t *\n\t * @param {string} email - The email of the user\n\t */\n\tasync removeUser(email: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.removeUserFromRepository({\n\t\t\trepository: this.name,\n\t\t\temail: email,\n\t\t});\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not remove the user ${email} from the repository`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `User ${email} was removed from the repository`,\n\t\t});\n\t}\n\n\t/**\n\t * Update the role of a user in a repository\n\t *\n\t * @param {string} email - The email of the user\n\t * @param {string | Record<string, string>} role - The new Role of the user,\n\t * either a string for basic workflow or an object such as `{ \"lang_id\":\n\t * \"Writer\" }`\n\t *\n\t * Example of roles are\n\t *\n\t * - Administrator\n\t * - Writer\n\t * - Contributor\n\t * - Manager (publisher)\n\t */\n\tasync updateUserRole(\n\t\temail: string,\n\t\trole: string | Record<string, string>,\n\t): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response =\n\t\t\ttypeof role === \"string\"\n\t\t\t\t? await this.wroomClient.updateRole(this.name, email, role)\n\t\t\t\t: await this.wroomClient.updateRolePerLocal(this.name, email, role);\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not update the ${\n\t\t\t\ttypeof role === \"string\" ? \"role\" : \"rolePerLocal\"\n\t\t\t} of the user ${email}`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `Updated User's ${\n\t\t\t\ttypeof role === \"string\" ? \"role\" : \"rolePerLocal\"\n\t\t\t} for user ${email}`,\n\t\t});\n\t}\n}\n\nexport type RepositoryConfig = {\n\tcustomLocale?: CustomLocale;\n\tlocales?: string[];\n\tdefaultLocale?: string;\n\tslices?: SharedSlice[];\n\tcustomTypes?: CustomType[];\n\tpreview?: Preview;\n\trolePerLocal?: boolean;\n};\n\nexport type Preview = {\n\tname: string;\n\twebsiteURL: string;\n\tresolverPath: string;\n};\n\nexport type CustomLocale = {\n\tlang: {\n\t\tlabel: string;\n\t\tid: string;\n\t\tuseStandardAnalyzer?: boolean;\n\t};\n\tregion: {\n\t\tlabel: string;\n\t\tid: string;\n\t};\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sources":["../../../src/managers/repository.ts"],"sourcesContent":["import { expect } from \"@playwright/test\";\nimport { AxiosResponse } from \"axios\";\n\nimport {\n\tCustomType,\n\tSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\n\nimport type { AuthenticationClient } from \"../clients/authenticationApi\";\nimport { ContentApiClient } from \"../clients/contentApi\";\nimport type { CoreClient } from \"../clients/coreApi\";\nimport { CustomTypesClient } from \"../clients/customTypesApi\";\nimport { ManageV2Client } from \"../clients/manageV2\";\nimport {\n\tDocumentPayload,\n\tDocumentResponse,\n\tMigrationClient,\n} from \"../clients/migrationApi\";\nimport { WroomClient } from \"../clients/wroom\";\nimport { logHttpResponse, logger } from \"../utils/log\";\nimport { getRepositoryUrl } from \"../utils/urls\";\n\n/** Utility to manage test data for a Prismic repository */\nexport class RepositoryManager {\n\tconstructor(\n\t\treadonly name: string,\n\t\tprivate readonly coreApiClient: CoreClient,\n\t\tprivate readonly authApiClient: AuthenticationClient,\n\t\tprivate readonly wroomClient: WroomClient,\n\t\tprivate readonly customTypesApiClient: CustomTypesClient,\n\t\tprivate readonly migrationApiClient: MigrationClient | undefined,\n\t\tprivate readonly manageV2Client: ManageV2Client,\n\t) {}\n\n\tasync configure(config: RepositoryConfig): Promise<void> {\n\t\tconst hasLangConfig =\n\t\t\tconfig.defaultLocale || config.locales || config.customLocale;\n\t\tif (hasLangConfig) {\n\t\t\tconst languages = await this.coreApiClient.getLanguages();\n\n\t\t\t// default locale must be set first\n\t\t\tif (config.defaultLocale) {\n\t\t\t\tconst master = languages.find(({ is_master }) => is_master === true);\n\t\t\t\tif (!master) {\n\t\t\t\t\tawait this.setDefaultLocale(config.defaultLocale);\n\t\t\t\t} else if (master.id !== config.defaultLocale) {\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`Master locale is already set to '${master.id}', cannot update it to '${config.defaultLocale}'`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.locales) {\n\t\t\t\tconst localesToAdd = config.locales.filter(\n\t\t\t\t\t(id) => !languages.some((language) => language.id === id),\n\t\t\t\t);\n\t\t\t\tif (localesToAdd.length > 0) {\n\t\t\t\t\tawait this.createLocales(localesToAdd);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.customLocale) {\n\t\t\t\tif (!languages.find(({ id }) => id === config.customLocale?.lang.id)) {\n\t\t\t\t\tawait this.createCustomLocale(config.customLocale);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (config.slices) {\n\t\t\tawait this.createSlices(config.slices);\n\t\t}\n\n\t\tif (config.customTypes) {\n\t\t\tawait this.createCustomTypes(config.customTypes);\n\t\t}\n\n\t\tif (config.preview) {\n\t\t\tawait this.createPreview(config.preview);\n\t\t}\n\n\t\tif (config.rolePerLocal) {\n\t\t\tawait this.toggleRolePerLocal(true);\n\t\t}\n\t}\n\n\t/** @returns the repository base url, like https://my-repo.prismic.io */\n\tgetBaseURL(): string {\n\t\treturn getRepositoryUrl(this.wroomClient.getBaseURL(), this.name);\n\t}\n\n\t/** @returns the repository base cdn url, like https://my-repo.cdn.prismic.io */\n\tgetBaseCdnURL(): string {\n\t\treturn getRepositoryUrl(this.wroomClient.getBaseURL(), `${this.name}.cdn`);\n\t}\n\n\t/**\n\t * @returns a Content Type api client configured to target the repository CDN\n\t * url. Uses Playwright for requests so if your project uses Playwright too,\n\t * any network request will be present in Playwright test reports.\n\t */\n\tgetContentApiClient(config?: {\n\t\tversion?: \"v1\" | \"v2\";\n\t\taccessToken?: string;\n\t}): ContentApiClient {\n\t\treturn new ContentApiClient(this.getBaseCdnURL(), config);\n\t}\n\n\t/**\n\t * Set additional standard locales for a repository in Wroom, does not fail if\n\t * the locales already exist.\n\t *\n\t * @param locales - An array of all locales to be added to the repository.\n\t *\n\t * @throws Error if setting the locales fails.\n\t */\n\tasync createLocales(locales: string[]): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t\"app/settings/multilanguages\",\n\t\t\t{ languages: locales },\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 &&\n\t\t\t\t(data as string).includes(\"already existing languages\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not add locales ${locales.join(\", \")}`);\n\t\t}\n\t\tprofiler.done({ message: `locales '${locales}' created` });\n\t}\n\n\t/**\n\t * Set additional custom locale for a repository in Wroom, does not fail if\n\t * the locales already exist.\n\t *\n\t * @param locale - The locale to be added to the repository.\n\t *\n\t * @throws Error if setting the locale fails.\n\t */\n\tasync createCustomLocale(locale: CustomLocale): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t\"app/settings/multilanguages/custom\",\n\t\t\tlocale,\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 && JSON.stringify(data).includes(\"code is already used\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not create custom locale ${locale}`);\n\t\t}\n\t\tprofiler.done({\n\t\t\tmessage: `custom locale ${JSON.stringify(locale)} created`,\n\t\t});\n\t}\n\n\tprivate failIfNot200(response: AxiosResponse, msg: string) {\n\t\tif (response.status !== 200) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(msg);\n\t\t}\n\t}\n\n\t/**\n\t * Delete a locale from a repository.\n\t *\n\t * @param locale - locale to remove from the repository configuration.\n\t *\n\t * @throws Error if deleting the locale fails.\n\t */\n\tasync deleteLocale(locale: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`app/settings/multilanguages/${locale}/delete`,\n\t\t);\n\t\tthis.failIfNot200(response, `Could not delete locale ${locale}`);\n\t\tprofiler.done({ message: `locale '${locale}' deleted` });\n\t}\n\n\t/**\n\t * Set the default (master) locale for a repository in Wroom, the locale needs\n\t * to exist for the repository.\n\t *\n\t * @param locale - The locale to be set as the default.\n\t *\n\t * @throws Error if setting the default locale fails.\n\t */\n\tasync setDefaultLocale(locale: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`/app/settings/multilanguages/${locale}/createMasterLang`,\n\t\t);\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 400 &&\n\t\t\t\t// returns 400 if master lang is already set\n\t\t\t\tJSON.stringify(data).includes(\"Unable to set as master language\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not set default locale to ${locale}`);\n\t\t}\n\t\tprofiler.done({ message: `default locale set to '${locale}'` });\n\t}\n\n\t/**\n\t * Creates a release.\n\t *\n\t * @param label - The label for the release.\n\t *\n\t * @returns A Promise that resolves when the release is created.\n\t */\n\tasync createRelease(label: string): Promise<{ id: string }> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(this.name, \"app/releases\", {\n\t\t\tlabel,\n\t\t});\n\t\tthis.failIfNot200(response, `Could not create release ${label}`);\n\t\tprofiler.done({ message: `release '${label}' created` });\n\n\t\treturn response.data;\n\t}\n\n\t/**\n\t * Deletes a repository release.\n\t *\n\t * @param repository - The name of the repository.\n\t * @param id - The ID of the release to be deleted.\n\t */\n\tasync deleteRelease(id: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`app/releases/${id}/delete`,\n\t\t\t{},\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not delete release with id ${id}`);\n\t\tprofiler.done({ message: `release '${id}' deleted` });\n\t}\n\n\t/**\n\t * Creates a preview for a repository.\n\t *\n\t * @param data - The data for creating the preview.\n\t */\n\tasync createPreview(data: Preview): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`previews/new`,\n\t\t\tdata,\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not create preview ${data.name}`);\n\t\tprofiler.done({ message: `preview '${data.name}' created` });\n\n\t\treturn response.data;\n\t}\n\n\t/**\n\t * Deletes a preview from a repository.\n\t *\n\t * @param id - The ID of the preview to be deleted.\n\t */\n\tasync deletePreview(id: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.wroomClient.post(\n\t\t\tthis.name,\n\t\t\t`previews/delete/${id}`,\n\t\t\t{},\n\t\t);\n\n\t\tthis.failIfNot200(response, `Could not delete preview with id ${id}`);\n\t\tprofiler.done({ message: `preview '${id}' deleted` });\n\t}\n\n\t/**\n\t * Create Custom Types using the Custom types api.\n\t *\n\t * @param customTypes -\n\t */\n\tasync createCustomTypes(customTypes: CustomType[]): Promise<void> {\n\t\tawait this.customTypesApiClient.createCustomTypes(customTypes);\n\t}\n\n\t/**\n\t * Create slices using the Custom types api.\n\t *\n\t * @param slices -\n\t */\n\tasync createSlices(slices: SharedSlice[]): Promise<void> {\n\t\tawait this.customTypesApiClient.createSlices(slices);\n\t}\n\n\t/**\n\t * Create an access token to query private items of the Content api.\n\t *\n\t * @param appName - mandatory authorized application name\n\t * @param tokenScope - access token scope. Use \"master\" to when your content\n\t * api is fully private or \"master+releases\" to access private releases\n\t */\n\tasync createContentAPIToken(\n\t\tappName: string,\n\t\ttokenScope: \"master\" | \"master+releases\" = \"master\",\n\t): Promise<string> {\n\t\tconst profiler = logger.startTimer();\n\t\ttype AuthorizedAppResponse = {\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\twroom_auths: { token: string; scope: \"master\" | \"master+releases\" }[];\n\t\t};\n\t\tconst existingApps: AxiosResponse<AuthorizedAppResponse[]> =\n\t\t\tawait this.wroomClient.get(this.name, \"settings/security/contentapi\");\n\n\t\tthis.failIfNot200(\n\t\t\texistingApps,\n\t\t\t`Could not get status of existing applications to generate a content api token`,\n\t\t);\n\t\tlet app = existingApps.data.find(({ name, wroom_auths }) => {\n\t\t\treturn name === appName && wroom_auths.length > 0;\n\t\t});\n\n\t\tif (!app) {\n\t\t\tconst response: AxiosResponse<AuthorizedAppResponse> =\n\t\t\t\tawait this.wroomClient.post(this.name, \"settings/security/oauthapp\", {\n\t\t\t\t\tapp_name: appName,\n\t\t\t\t});\n\n\t\t\tthis.failIfNot200(\n\t\t\t\tresponse,\n\t\t\t\t`Could not create content api app ${appName}`,\n\t\t\t);\n\t\t\tapp = response.data;\n\t\t}\n\n\t\tlet tokenInfo = app.wroom_auths.find(({ scope }) => scope === tokenScope);\n\t\tif (!tokenInfo) {\n\t\t\tconst response = await this.wroomClient.post(\n\t\t\t\tthis.name,\n\t\t\t\t\"settings/security/authorizations\",\n\t\t\t\t{\n\t\t\t\t\tapp: app.id,\n\t\t\t\t\tscope: tokenScope,\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.failIfNot200(\n\t\t\t\tresponse,\n\t\t\t\t`Could not create content api access token for app ${appName} with scope ${tokenScope}`,\n\t\t\t);\n\t\t\ttokenInfo = response.data;\n\t\t}\n\n\t\tprofiler.done({\n\t\t\tmessage: `content api access token for app '${appName}' created`,\n\t\t});\n\n\t\tif (!tokenInfo?.token) {\n\t\t\tthrow `Could not create content api access token for app ${appName} with scope ${tokenScope}`;\n\t\t}\n\n\t\treturn tokenInfo.token;\n\t}\n\n\t/** Create a permanent access token to authenticate to Prismic public apis. */\n\tasync createPermanentAccessToken(): Promise<string> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst token = await this.authApiClient.getMachine2MachineToken(this.name);\n\n\t\tprofiler.done({\n\t\t\tmessage: `machine2machine token created`,\n\t\t});\n\n\t\treturn token;\n\t}\n\n\t/**\n\t * Toggle the Role per local feature\n\t *\n\t * @param enabled - The feature new status\n\t */\n\tasync toggleRolePerLocal(enabled: boolean): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.toggleRolePerLocal({\n\t\t\trepository: this.name,\n\t\t\tenabled: enabled,\n\t\t});\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not ${enabled ? \"enable\" : \"disable\"} Role per local for ${\n\t\t\t\tthis.name\n\t\t\t}`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `Role per local ${enabled ? \"enabled\" : \"disabled\"}`,\n\t\t});\n\t}\n\n\t/**\n\t * Change the Repository Plan\n\t *\n\t * @param {string} newPlanId - The Id of the new Plan to apply\n\t */\n\tasync changePlan(newPlanId: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.changePlan({\n\t\t\trepository: this.name,\n\t\t\tnewPlanId: newPlanId,\n\t\t\tbypassManualBilling: true, // For now the library does not support Stripe features\n\t\t});\n\n\t\tthis.failIfNot200(response, \"Could not change the Repository Plan\");\n\t\tprofiler.done({\n\t\t\tmessage: `Repository Plan changed to ${newPlanId}`,\n\t\t});\n\t}\n\n\t/**\n\t * Add a new user to the repository\n\t *\n\t * @param {string} email - The email of the user\n\t */\n\tasync addUser(email: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.addUserToRepository({\n\t\t\trepository: this.name,\n\t\t\temail: email,\n\t\t});\n\n\t\tconst { data, status } = response;\n\t\tconst success =\n\t\t\tstatus === 200 ||\n\t\t\t(status === 409 &&\n\t\t\t\tJSON.stringify(data).includes(\"already a member of the repo\"));\n\t\tif (!success) {\n\t\t\tlogHttpResponse(response);\n\t\t\tthrow new Error(`Could not add a new user ${email} to the repository`);\n\t\t}\n\t\tprofiler.done({\n\t\t\tmessage: `User ${email} was added to the repository`,\n\t\t});\n\t}\n\n\t/**\n\t * Remove a user from the repository\n\t *\n\t * @param {string} email - The email of the user\n\t */\n\tasync removeUser(email: string): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response = await this.manageV2Client.removeUserFromRepository({\n\t\t\trepository: this.name,\n\t\t\temail: email,\n\t\t});\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not remove the user ${email} from the repository`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `User ${email} was removed from the repository`,\n\t\t});\n\t}\n\n\t/**\n\t * Update the role of a user in a repository\n\t *\n\t * @param {string} email - The email of the user\n\t * @param {string | Record<string, string>} role - The new Role of the user,\n\t * either a string for basic workflow or an object such as `{ \"lang_id\":\n\t * \"Writer\" }`\n\t *\n\t * Example of roles are\n\t *\n\t * - Administrator\n\t * - Writer\n\t * - Contributor\n\t * - Manager (publisher)\n\t */\n\tasync updateUserRole(\n\t\temail: string,\n\t\trole: string | Record<string, string>,\n\t): Promise<void> {\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst response =\n\t\t\ttypeof role === \"string\"\n\t\t\t\t? await this.wroomClient.updateRole(this.name, email, role)\n\t\t\t\t: await this.wroomClient.updateRolePerLocal(this.name, email, role);\n\n\t\tthis.failIfNot200(\n\t\t\tresponse,\n\t\t\t`Could not update the ${\n\t\t\t\ttypeof role === \"string\" ? \"role\" : \"rolePerLocal\"\n\t\t\t} of the user ${email}`,\n\t\t);\n\t\tprofiler.done({\n\t\t\tmessage: `Updated User's ${\n\t\t\t\ttypeof role === \"string\" ? \"role\" : \"rolePerLocal\"\n\t\t\t} for user ${email}`,\n\t\t});\n\t}\n\n\t/**\n\t * Creates a document using the migration api, see\n\t * https://prismic.io/docs/migration-api-technical-reference\n\t *\n\t * @param {DocumentPayload} document - in the migration api format\n\t * @param {string} status - status of the document, if published, the function\n\t * will wait for a new content api master ref to be created\n\t *\n\t * @returns\n\t */\n\tasync createDocument(\n\t\tdocument: DocumentPayload,\n\t\tstatus: \"draft\" | \"published\",\n\t): Promise<DocumentResponse> {\n\t\tif (!this.migrationApiClient) {\n\t\t\tthrow \"No client found for the migration api. Did you provide a migration api url in your configuration?\";\n\t\t}\n\n\t\tconst profiler = logger.startTimer();\n\n\t\tconst result = await this.migrationApiClient.createDocument(document);\n\t\tlet message = `Document created with id '${result.id}'`;\n\t\tif (status === \"published\") {\n\t\t\tconst contentApi = this.getContentApiClient();\n\t\t\tconst masterRef = await contentApi.getMasterRef();\n\t\t\tawait this.coreApiClient.publishDraft(result.id);\n\t\t\tawait expect\n\t\t\t\t.poll(async () => contentApi.getMasterRef(), {\n\t\t\t\t\ttimeout: 10_000,\n\t\t\t\t\tmessage: \"Waiting for new master ref to be available\",\n\t\t\t\t})\n\t\t\t\t.not.toBe(masterRef);\n\t\t\tmessage += \", status 'published' and new master ref available\";\n\t\t}\n\t\tprofiler.done({\n\t\t\tmessage,\n\t\t});\n\n\t\treturn result;\n\t}\n}\n\nexport type RepositoryConfig = {\n\tcustomLocale?: CustomLocale;\n\tlocales?: string[];\n\tdefaultLocale?: string;\n\tslices?: SharedSlice[];\n\tcustomTypes?: CustomType[];\n\tpreview?: Preview;\n\trolePerLocal?: boolean;\n};\n\nexport type Preview = {\n\tname: string;\n\twebsiteURL: string;\n\tresolverPath: string;\n};\n\nexport type CustomLocale = {\n\tlang: {\n\t\tlabel: string;\n\t\tid: string;\n\t\tuseStandardAnalyzer?: boolean;\n\t};\n\tregion: {\n\t\tlabel: string;\n\t\tid: string;\n\t};\n};\n"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -5,6 +5,8 @@ export type UrlConfig = {
5
5
  customTypesApi: string;
6
6
  /** Auth service api base url */
7
7
  authenticationApi: string;
8
+ /** Prismic migration api base url */
9
+ migrationApi?: string;
8
10
  };
9
11
  export type AuthConfig = {
10
12
  email: string;
@@ -1 +1 @@
1
- {"version":3,"file":"cookies.cjs","sources":["../../../src/utils/cookies.ts"],"sourcesContent":["import { AxiosHeaderValue } from \"axios\";\n\n/**\n * Extract the value of a specific cookie from Axios cookies.\n *\n * @param cookies - Axios cookies, can be a string or an array\n * @param cookieName - The name of the cookie to extract.\n */\nexport const extractCookie = (\n\tcookies: AxiosHeaderValue | undefined,\n\tcookieName: string,\n): string | undefined => {\n\tconst regex = new RegExp(`${cookieName}=([^;]+)`, \"i\"); // 'i' flag for case-insensitivity\n\n\tif (typeof cookies === \"string\") {\n\t\tconst match = cookies.match(regex);\n\n\t\treturn match ? match[1] : undefined;\n\t}\n\tif (Array.isArray(cookies)) {\n\t\tfor (const cookie of cookies) {\n\t\t\tconst match = cookie.match(regex);\n\t\t\tif (match) {\n\t\t\t\treturn match[1];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n};\n"],"names":[],"mappings":";;AAQa,MAAA,gBAAgB,CAC5B,SACA,eACuB;AACvB,QAAM,QAAQ,IAAI,OAAO,GAAG,UAAU,YAAY,GAAG;AAEjD,MAAA,OAAO,YAAY,UAAU;AAC1B,UAAA,QAAQ,QAAQ,MAAM,KAAK;AAE1B,WAAA,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC1B;AACG,MAAA,MAAM,QAAQ,OAAO,GAAG;AAC3B,eAAW,UAAU,SAAS;AACvB,YAAA,QAAQ,OAAO,MAAM,KAAK;AAChC,UAAI,OAAO;AACV,eAAO,MAAM,CAAC;AAAA,MACd;AAAA,IACD;AAAA,EACD;AAEM,SAAA;AACR;;"}
1
+ {"version":3,"file":"cookies.cjs","sources":["../../../src/utils/cookies.ts"],"sourcesContent":["import { AxiosHeaderValue } from \"axios\";\n\n/**\n * Extract the value of a specific cookie from Axios cookies.\n *\n * @param cookies - Axios cookies, can be a string or an array\n * @param cookieName - The name of the cookie to extract.\n */\nexport const extractCookie = (\n\tcookies: AxiosHeaderValue | undefined,\n\tcookieName: string,\n): string | undefined => {\n\tconst regex = new RegExp(`${cookieName}=([^;]+)`, \"i\"); // 'i' flag for case-insensitivity\n\n\tif (typeof cookies === \"string\") {\n\t\tconst match = cookies.match(regex);\n\n\t\treturn match ? match[1] : undefined;\n\t}\n\tif (Array.isArray(cookies)) {\n\t\tfor (const cookie of cookies) {\n\t\t\tconst match = cookie.match(regex);\n\t\t\tif (match) {\n\t\t\t\treturn match[1];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n};\n"],"names":[],"mappings":";;AAQa,MAAA,gBAAgB,CAC5B,SACA,eACuB;AACvB,QAAM,QAAQ,IAAI,OAAO,GAAG,UAAU,YAAY,GAAG;AAEjD,MAAA,OAAO,YAAY,UAAU;AAC1B,UAAA,QAAQ,QAAQ,MAAM,KAAK;AAE1B,WAAA,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC3B;AACI,MAAA,MAAM,QAAQ,OAAO,GAAG;AAC3B,eAAW,UAAU,SAAS;AACvB,YAAA,QAAQ,OAAO,MAAM,KAAK;AAChC,UAAI,OAAO;AACV,eAAO,MAAM,CAAC;AAAA,MACf;AAAA,IACD;AAAA,EACD;AAEO,SAAA;AACR;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"cookies.js","sources":["../../../src/utils/cookies.ts"],"sourcesContent":["import { AxiosHeaderValue } from \"axios\";\n\n/**\n * Extract the value of a specific cookie from Axios cookies.\n *\n * @param cookies - Axios cookies, can be a string or an array\n * @param cookieName - The name of the cookie to extract.\n */\nexport const extractCookie = (\n\tcookies: AxiosHeaderValue | undefined,\n\tcookieName: string,\n): string | undefined => {\n\tconst regex = new RegExp(`${cookieName}=([^;]+)`, \"i\"); // 'i' flag for case-insensitivity\n\n\tif (typeof cookies === \"string\") {\n\t\tconst match = cookies.match(regex);\n\n\t\treturn match ? match[1] : undefined;\n\t}\n\tif (Array.isArray(cookies)) {\n\t\tfor (const cookie of cookies) {\n\t\t\tconst match = cookie.match(regex);\n\t\t\tif (match) {\n\t\t\t\treturn match[1];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n};\n"],"names":[],"mappings":"AAQa,MAAA,gBAAgB,CAC5B,SACA,eACuB;AACvB,QAAM,QAAQ,IAAI,OAAO,GAAG,UAAU,YAAY,GAAG;AAEjD,MAAA,OAAO,YAAY,UAAU;AAC1B,UAAA,QAAQ,QAAQ,MAAM,KAAK;AAE1B,WAAA,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC1B;AACG,MAAA,MAAM,QAAQ,OAAO,GAAG;AAC3B,eAAW,UAAU,SAAS;AACvB,YAAA,QAAQ,OAAO,MAAM,KAAK;AAChC,UAAI,OAAO;AACV,eAAO,MAAM,CAAC;AAAA,MACd;AAAA,IACD;AAAA,EACD;AAEM,SAAA;AACR;"}
1
+ {"version":3,"file":"cookies.js","sources":["../../../src/utils/cookies.ts"],"sourcesContent":["import { AxiosHeaderValue } from \"axios\";\n\n/**\n * Extract the value of a specific cookie from Axios cookies.\n *\n * @param cookies - Axios cookies, can be a string or an array\n * @param cookieName - The name of the cookie to extract.\n */\nexport const extractCookie = (\n\tcookies: AxiosHeaderValue | undefined,\n\tcookieName: string,\n): string | undefined => {\n\tconst regex = new RegExp(`${cookieName}=([^;]+)`, \"i\"); // 'i' flag for case-insensitivity\n\n\tif (typeof cookies === \"string\") {\n\t\tconst match = cookies.match(regex);\n\n\t\treturn match ? match[1] : undefined;\n\t}\n\tif (Array.isArray(cookies)) {\n\t\tfor (const cookie of cookies) {\n\t\t\tconst match = cookie.match(regex);\n\t\t\tif (match) {\n\t\t\t\treturn match[1];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n};\n"],"names":[],"mappings":"AAQa,MAAA,gBAAgB,CAC5B,SACA,eACuB;AACvB,QAAM,QAAQ,IAAI,OAAO,GAAG,UAAU,YAAY,GAAG;AAEjD,MAAA,OAAO,YAAY,UAAU;AAC1B,UAAA,QAAQ,QAAQ,MAAM,KAAK;AAE1B,WAAA,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC3B;AACI,MAAA,MAAM,QAAQ,OAAO,GAAG;AAC3B,eAAW,UAAU,SAAS;AACvB,YAAA,QAAQ,OAAO,MAAM,KAAK;AAChC,UAAI,OAAO;AACV,eAAO,MAAM,CAAC;AAAA,MACf;AAAA,IACD;AAAA,EACD;AAEO,SAAA;AACR;"}
@@ -1 +1 @@
1
- {"version":3,"file":"log.cjs","sources":["../../../src/utils/log.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { createLogger, format, transports } from \"winston\";\n\nexport const logHttpResponse = (response: AxiosResponse): void => {\n\tconst { status, data } = response;\n\tconst { baseURL = \"\", url = \"\" } = response.config;\n\t// make sure the url always shows baseURL + path.\n\t// Depending on how the AxiosInstance was called, the url already contains the baseURL\n\tconst fullUrl = url.startsWith(\"http\") ? url : `${baseURL}/${url}`;\n\n\tlogger.info(\n\t\t`Call to ${fullUrl} failed, received [${status}] ${JSON.stringify(data)}`,\n\t);\n};\n\nconst { combine, printf } = format;\n\nconst customFormat = printf(({ message, durationMs }) => {\n\tconst baseMsg = `[test data] ${message}`;\n\tif (durationMs) {\n\t\treturn `${baseMsg} in ${durationMs}ms`;\n\t}\n\n\treturn baseMsg;\n});\n\nexport const logger = createLogger({\n\tsilent: process.env[\"prismic_e2e_tests_utils_silent\"] === \"true\",\n\tlevel: process.env[\"prismic_e2e_tests_utils_log_level\"] || \"info\",\n\tformat: combine(customFormat),\n\ttransports: [new transports.Console()],\n});\n"],"names":["format","createLogger","transports"],"mappings":";;;AAGa,MAAA,kBAAkB,CAAC,aAAiC;AAC1D,QAAA,EAAE,QAAQ,KAAS,IAAA;AACzB,QAAM,EAAE,UAAU,IAAI,MAAM,OAAO,SAAS;AAGtC,QAAA,UAAU,IAAI,WAAW,MAAM,IAAI,MAAM,GAAG,OAAO,IAAI,GAAG;AAEzD,SAAA,KACN,WAAW,OAAO,sBAAsB,MAAM,KAAK,KAAK,UAAU,IAAI,CAAC,EAAE;AAE3E;AAEA,MAAM,EAAE,SAAS,OAAW,IAAAA;AAE5B,MAAM,eAAe,OAAO,CAAC,EAAE,SAAS,iBAAgB;AACjD,QAAA,UAAU,eAAe,OAAO;AACtC,MAAI,YAAY;AACR,WAAA,GAAG,OAAO,OAAO,UAAU;AAAA,EAClC;AAEM,SAAA;AACR,CAAC;AAEM,MAAM,SAASC,QAAAA,aAAa;AAAA,EAClC,QAAQ,QAAQ,IAAI,gCAAgC,MAAM;AAAA,EAC1D,OAAO,QAAQ,IAAI,mCAAmC,KAAK;AAAA,EAC3D,QAAQ,QAAQ,YAAY;AAAA,EAC5B,YAAY,CAAC,IAAIC,mBAAW,SAAS;AACrC,CAAA;;;"}
1
+ {"version":3,"file":"log.cjs","sources":["../../../src/utils/log.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { createLogger, format, transports } from \"winston\";\n\nexport const logHttpResponse = (response: AxiosResponse): void => {\n\tconst { status, data } = response;\n\tconst { baseURL = \"\", url = \"\" } = response.config;\n\t// make sure the url always shows baseURL + path.\n\t// Depending on how the AxiosInstance was called, the url already contains the baseURL\n\tconst fullUrl = url.startsWith(\"http\") ? url : `${baseURL}/${url}`;\n\n\tlogger.info(\n\t\t`Call to ${fullUrl} failed, received [${status}] ${JSON.stringify(data)}`,\n\t);\n};\n\nconst { combine, printf } = format;\n\nconst customFormat = printf(({ message, durationMs }) => {\n\tconst baseMsg = `[test data] ${message}`;\n\tif (durationMs) {\n\t\treturn `${baseMsg} in ${durationMs}ms`;\n\t}\n\n\treturn baseMsg;\n});\n\nexport const logger = createLogger({\n\tsilent: process.env[\"prismic_e2e_tests_utils_silent\"] === \"true\",\n\tlevel: process.env[\"prismic_e2e_tests_utils_log_level\"] || \"info\",\n\tformat: combine(customFormat),\n\ttransports: [new transports.Console()],\n});\n"],"names":["format","createLogger","transports"],"mappings":";;;AAGa,MAAA,kBAAkB,CAAC,aAAiC;AAC1D,QAAA,EAAE,QAAQ,KAAS,IAAA;AACzB,QAAM,EAAE,UAAU,IAAI,MAAM,OAAO,SAAS;AAGtC,QAAA,UAAU,IAAI,WAAW,MAAM,IAAI,MAAM,GAAG,OAAO,IAAI,GAAG;AAEzD,SAAA,KACN,WAAW,OAAO,sBAAsB,MAAM,KAAK,KAAK,UAAU,IAAI,CAAC,EAAE;AAE3E;AAEA,MAAM,EAAE,SAAS,OAAW,IAAAA;AAE5B,MAAM,eAAe,OAAO,CAAC,EAAE,SAAS,iBAAgB;AACjD,QAAA,UAAU,eAAe,OAAO;AACtC,MAAI,YAAY;AACR,WAAA,GAAG,OAAO,OAAO,UAAU;AAAA,EACnC;AAEO,SAAA;AACR,CAAC;AAEM,MAAM,SAASC,QAAAA,aAAa;AAAA,EAClC,QAAQ,QAAQ,IAAI,gCAAgC,MAAM;AAAA,EAC1D,OAAO,QAAQ,IAAI,mCAAmC,KAAK;AAAA,EAC3D,QAAQ,QAAQ,YAAY;AAAA,EAC5B,YAAY,CAAC,IAAIC,mBAAW,SAAS;AACrC,CAAA;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sources":["../../../src/utils/log.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { createLogger, format, transports } from \"winston\";\n\nexport const logHttpResponse = (response: AxiosResponse): void => {\n\tconst { status, data } = response;\n\tconst { baseURL = \"\", url = \"\" } = response.config;\n\t// make sure the url always shows baseURL + path.\n\t// Depending on how the AxiosInstance was called, the url already contains the baseURL\n\tconst fullUrl = url.startsWith(\"http\") ? url : `${baseURL}/${url}`;\n\n\tlogger.info(\n\t\t`Call to ${fullUrl} failed, received [${status}] ${JSON.stringify(data)}`,\n\t);\n};\n\nconst { combine, printf } = format;\n\nconst customFormat = printf(({ message, durationMs }) => {\n\tconst baseMsg = `[test data] ${message}`;\n\tif (durationMs) {\n\t\treturn `${baseMsg} in ${durationMs}ms`;\n\t}\n\n\treturn baseMsg;\n});\n\nexport const logger = createLogger({\n\tsilent: process.env[\"prismic_e2e_tests_utils_silent\"] === \"true\",\n\tlevel: process.env[\"prismic_e2e_tests_utils_log_level\"] || \"info\",\n\tformat: combine(customFormat),\n\ttransports: [new transports.Console()],\n});\n"],"names":[],"mappings":";AAGa,MAAA,kBAAkB,CAAC,aAAiC;AAC1D,QAAA,EAAE,QAAQ,KAAS,IAAA;AACzB,QAAM,EAAE,UAAU,IAAI,MAAM,OAAO,SAAS;AAGtC,QAAA,UAAU,IAAI,WAAW,MAAM,IAAI,MAAM,GAAG,OAAO,IAAI,GAAG;AAEzD,SAAA,KACN,WAAW,OAAO,sBAAsB,MAAM,KAAK,KAAK,UAAU,IAAI,CAAC,EAAE;AAE3E;AAEA,MAAM,EAAE,SAAS,OAAW,IAAA;AAE5B,MAAM,eAAe,OAAO,CAAC,EAAE,SAAS,iBAAgB;AACjD,QAAA,UAAU,eAAe,OAAO;AACtC,MAAI,YAAY;AACR,WAAA,GAAG,OAAO,OAAO,UAAU;AAAA,EAClC;AAEM,SAAA;AACR,CAAC;AAEM,MAAM,SAAS,aAAa;AAAA,EAClC,QAAQ,QAAQ,IAAI,gCAAgC,MAAM;AAAA,EAC1D,OAAO,QAAQ,IAAI,mCAAmC,KAAK;AAAA,EAC3D,QAAQ,QAAQ,YAAY;AAAA,EAC5B,YAAY,CAAC,IAAI,WAAW,SAAS;AACrC,CAAA;"}
1
+ {"version":3,"file":"log.js","sources":["../../../src/utils/log.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { createLogger, format, transports } from \"winston\";\n\nexport const logHttpResponse = (response: AxiosResponse): void => {\n\tconst { status, data } = response;\n\tconst { baseURL = \"\", url = \"\" } = response.config;\n\t// make sure the url always shows baseURL + path.\n\t// Depending on how the AxiosInstance was called, the url already contains the baseURL\n\tconst fullUrl = url.startsWith(\"http\") ? url : `${baseURL}/${url}`;\n\n\tlogger.info(\n\t\t`Call to ${fullUrl} failed, received [${status}] ${JSON.stringify(data)}`,\n\t);\n};\n\nconst { combine, printf } = format;\n\nconst customFormat = printf(({ message, durationMs }) => {\n\tconst baseMsg = `[test data] ${message}`;\n\tif (durationMs) {\n\t\treturn `${baseMsg} in ${durationMs}ms`;\n\t}\n\n\treturn baseMsg;\n});\n\nexport const logger = createLogger({\n\tsilent: process.env[\"prismic_e2e_tests_utils_silent\"] === \"true\",\n\tlevel: process.env[\"prismic_e2e_tests_utils_log_level\"] || \"info\",\n\tformat: combine(customFormat),\n\ttransports: [new transports.Console()],\n});\n"],"names":[],"mappings":";AAGa,MAAA,kBAAkB,CAAC,aAAiC;AAC1D,QAAA,EAAE,QAAQ,KAAS,IAAA;AACzB,QAAM,EAAE,UAAU,IAAI,MAAM,OAAO,SAAS;AAGtC,QAAA,UAAU,IAAI,WAAW,MAAM,IAAI,MAAM,GAAG,OAAO,IAAI,GAAG;AAEzD,SAAA,KACN,WAAW,OAAO,sBAAsB,MAAM,KAAK,KAAK,UAAU,IAAI,CAAC,EAAE;AAE3E;AAEA,MAAM,EAAE,SAAS,OAAW,IAAA;AAE5B,MAAM,eAAe,OAAO,CAAC,EAAE,SAAS,iBAAgB;AACjD,QAAA,UAAU,eAAe,OAAO;AACtC,MAAI,YAAY;AACR,WAAA,GAAG,OAAO,OAAO,UAAU;AAAA,EACnC;AAEO,SAAA;AACR,CAAC;AAEM,MAAM,SAAS,aAAa;AAAA,EAClC,QAAQ,QAAQ,IAAI,gCAAgC,MAAM;AAAA,EAC1D,OAAO,QAAQ,IAAI,mCAAmC,KAAK;AAAA,EAC3D,QAAQ,QAAQ,YAAY;AAAA,EAC5B,YAAY,CAAC,IAAI,WAAW,SAAS;AACrC,CAAA;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prismicio/e2e-tests-utils",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "A collection of utilities for to manage Prismic test data",
5
5
  "keywords": [
6
6
  "typescript",
@@ -40,6 +40,8 @@
40
40
  "prepare": "npm run build",
41
41
  "release": "npm run test && standard-version && git push --follow-tags && npm run build && npm publish",
42
42
  "release:dry": "standard-version --dry-run",
43
+ "release:patch": "npm run test && standard-version --release-as patch && git push --follow-tags && npm run build && npm publish",
44
+ "release:patch:dry": "standard-version --dry-run --release-as patch",
43
45
  "release:alpha": "npm run test && standard-version --prerelease alpha && git push --follow-tags && npm run build && npm publish --tag alpha",
44
46
  "release:alpha:dry": "standard-version --prerelease alpha --dry-run",
45
47
  "lint": "eslint --ext .js,.ts .",
@@ -58,6 +60,9 @@
58
60
  "lodash.isequal": "^4.5.0",
59
61
  "winston": "^3.11.0"
60
62
  },
63
+ "peerDependencies": {
64
+ "@playwright/test": ">= 1.16"
65
+ },
61
66
  "devDependencies": {
62
67
  "@size-limit/preset-small-lib": "^11.0.1",
63
68
  "@trivago/prettier-plugin-sort-imports": "^4.2.0",
@@ -71,7 +76,7 @@
71
76
  "eslint-config-prettier": "^9.0.0",
72
77
  "eslint-plugin-prettier": "^5.0.1",
73
78
  "eslint-plugin-tsdoc": "^0.2.17",
74
- "msw": "^2.0.11",
79
+ "msw": "^2.2.13",
75
80
  "prettier": "^3.0.3",
76
81
  "prettier-plugin-jsdoc": "^1.1.1",
77
82
  "size-limit": "^11.0.1",