@slicemachine/manager 0.3.2-dev-next-release.0 → 0.3.2-dev-next-release.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export type { CustomTypeFormat } from "./managers/customTypes/types";
2
- export type { PrismicRepository, FrameworkWroomTelemetryID, StarterID, } from "./managers/prismicRepository/types";
2
+ export type { PrismicRepository, FrameworkWroomTelemetryID, StarterId, } from "./managers/prismicRepository/types";
3
3
  export type { SliceMachineManager } from "./managers/SliceMachineManager";
4
4
  export { createSliceMachineManager } from "./managers/createSliceMachineManager";
5
5
  export { createSliceMachineManagerMiddleware } from "./managers/createSliceMachineManagerMiddleware";
@@ -107,9 +107,8 @@ class PrismicRepositoryManager extends BaseManager.BaseManager {
107
107
  ...DEFAULT_REPOSITORY_SETTINGS,
108
108
  domain: args.domain,
109
109
  // These properties are optional in the API but needed for tracking
110
- framework: args.framework
111
- // TODO(DT-1386): Handle starter detection for Segment
112
- // starterID: args.starterID,
110
+ framework: args.framework,
111
+ starterId: args.starterId
113
112
  };
114
113
  const res = await this._fetch({
115
114
  url,
@@ -1 +1 @@
1
- {"version":3,"file":"PrismicRepositoryManager.cjs","sources":["../../../../src/managers/prismicRepository/PrismicRepositoryManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport fetch, { Response } from \"../../lib/fetch\";\nimport { fold } from \"fp-ts/Either\";\n\nimport { decode } from \"../../lib/decode\";\nimport { serializeCookies } from \"../../lib/serializeCookies\";\n\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport {\n\tAllChangeTypes,\n\tBulkBody,\n\tChangeTypes,\n\tClientError,\n\tLimit,\n\tLimitType,\n\tPrismicRepository,\n\tPrismicRepositoryRole,\n\tPrismicRepositoryUserAgent,\n\tPrismicRepositoryUserAgents,\n\tRawLimit,\n\tTransactionalMergeArgs,\n\tTransactionalMergeReturnType,\n\tFrameworkWroomTelemetryID,\n} from \"./types\";\nimport { assertPluginsInitialized } from \"../../lib/assertPluginsInitialized\";\nimport { UnauthenticatedError } from \"../../errors\";\n\nconst DEFAULT_REPOSITORY_SETTINGS = {\n\tplan: \"personal\",\n\tisAnnual: \"false\",\n\trole: \"developer\",\n};\n\ntype PrismicRepositoryManagerCheckExistsArgs = {\n\tdomain: string;\n};\n\ntype PrismicRepositoryManagerCreateArgs = {\n\tdomain: string;\n\tframework: FrameworkWroomTelemetryID;\n\t// TODO(DT-1386): Handle starter detection for Segment\n\t// starterID?: StarterID;\n};\n\ntype PrismicRepositoryManagerDeleteArgs = {\n\tdomain: string;\n\tpassword: string;\n};\n\ntype PrismicRepositoryManagerPushDocumentsArgs = {\n\tdomain: string;\n\tsignature: string;\n\tdocuments: Record<string, unknown>; // TODO: Type unknown if possible(?)\n};\n\nexport class PrismicRepositoryManager extends BaseManager {\n\t// TODO: Add methods for repository-specific actions. E.g. creating a\n\t// new repository.\n\n\tasync readAll(): Promise<PrismicRepository[]> {\n\t\tconst url = new URL(\"./repositories\", API_ENDPOINTS.PrismicUser);\n\t\tconst res = await this._fetch({ url });\n\t\tconst json = await res.json();\n\n\t\tif (res.ok) {\n\t\t\tconst { value: repositories, error } = decode(\n\t\t\t\tt.array(PrismicRepository),\n\t\t\t\tjson,\n\t\t\t);\n\n\t\t\tif (error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to decode repositories: ${error.errors.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn repositories;\n\t\t} else {\n\t\t\tthrow new Error(`Failed to read repositories`, { cause: json });\n\t\t}\n\t}\n\n\t// Should this be in manager? It's one of the few sync method\n\t//\n\t// Reply from Angelo 2022-12-22: I think it should be in manager\n\t// because we shouldn't be exporting root-level utilities from this\n\t// package. If we want to make it more inline with the other methods,\n\t// we could simplify the API by changing its signature to the\n\t// following:\n\t//\n\t// ```ts\n\t// (repositoryName: string) => Promise<boolean>\n\t// ```\n\t//\n\t// This method would:\n\t//\n\t// 1. Fetch the list of repositories for the user using `readAll()`.\n\t// The list would be cached.\n\t// 2. Determine if the user has write access to the given repository.\n\t//\n\t// This version has the following benefits:\n\t//\n\t// - Does not expect the consumer to supply a repository object; it\n\t// only requires a repository name, which could be sourced from\n\t// anything (incl. the project's `sm.json`).\n\t//\n\t// - Similarly, it does not expect the consumer to call `readAll()`\n\t// before calling this method.\n\t//\n\t// - Works for repositories that the user does not have access to. For\n\t// example, I could use it to check if I have access to \"qwerty\",\n\t// even if I am not added as a user. The purpose of the method is\n\t// still valid: do I have write access to a given repository?\n\thasWriteAccess(repository: PrismicRepository): boolean {\n\t\tswitch (repository.role) {\n\t\t\tcase PrismicRepositoryRole.SuperUser:\n\t\t\tcase PrismicRepositoryRole.Owner:\n\t\t\tcase PrismicRepositoryRole.Administrator:\n\t\t\t\treturn true;\n\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync checkExists(\n\t\targs: PrismicRepositoryManagerCheckExistsArgs,\n\t): Promise<boolean> {\n\t\tconst url = new URL(\n\t\t\t`./app/dashboard/repositories/${args.domain}/exists`,\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\t\tconst res = await this._fetch({ url });\n\t\tconst text = await res.text();\n\n\t\tif (res.ok) {\n\t\t\treturn text === \"false\"; // Endpoint returns `false` when repository exists\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to check repository existence for domain \\`${args.domain}\\``,\n\t\t\t\t{ cause: text },\n\t\t\t);\n\t\t}\n\t}\n\n\tasync create(args: PrismicRepositoryManagerCreateArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./authentication/newrepository?app=slicemachine\",\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\n\t\tconst body = {\n\t\t\t...DEFAULT_REPOSITORY_SETTINGS,\n\t\t\tdomain: args.domain,\n\t\t\t// These properties are optional in the API but needed for tracking\n\t\t\tframework: args.framework,\n\t\t\t// TODO(DT-1386): Handle starter detection for Segment\n\t\t\t// starterID: args.starterID,\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.SliceMachine, // Custom User Agent is required\n\t\t});\n\t\tconst text = await res.text();\n\n\t\t// Endpoint returns repository name on success, which must be more than 4 characters and less than 30\n\t\t// if (!res.ok) {\n\t\tif (!res.ok || text.length < 4 || text.length > 30) {\n\t\t\tthrow new Error(`Failed to create repository \\`${args.domain}\\``, {\n\t\t\t\tcause: res,\n\t\t\t});\n\t\t}\n\t}\n\n\t// TODO: Delete this endpoint? It doesn't seem to be used (I might be wrong). - Angelo\n\tasync delete(args: PrismicRepositoryManagerDeleteArgs): Promise<void> {\n\t\tconst cookies = await this.user.getAuthenticationCookies();\n\n\t\tconst url = new URL(\n\t\t\t`./app/settings/delete?_=${cookies[\"X_XSRF\"]}`, // TODO: Maybe we want to throw early if the token is no available, or get the token another way\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\t\t// Update hostname to include repository domain\n\t\turl.hostname = `${args.domain}.${url.hostname}`;\n\n\t\tconst body = {\n\t\t\tconfirm: args.domain,\n\t\t\tpassword: args.password,\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.LegacyZero, // Custom User Agent is required\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(`Failed to delete repository \\`${args.domain}\\``, {\n\t\t\t\tcause: res,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync pushDocuments(\n\t\targs: PrismicRepositoryManagerPushDocumentsArgs,\n\t): Promise<void> {\n\t\tconst url = new URL(\"./starter/documents\", API_ENDPOINTS.PrismicWroom);\n\t\t// Update hostname to include repository domain\n\t\turl.hostname = `${args.domain}.${url.hostname}`;\n\n\t\tconst body = {\n\t\t\tsignature: args.signature,\n\t\t\tdocuments: JSON.stringify(args.documents),\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.LegacyZero, // Custom User Agent is required\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tlet reason: string | null = null;\n\t\t\ttry {\n\t\t\t\treason = await res.text();\n\t\t\t} catch {\n\t\t\t\t// Noop\n\t\t\t}\n\n\t\t\t// Ideally the API should throw a 409 or something like that...\n\t\t\tif (reason === \"Repository should not contain documents\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to push documents to repository \\`${args.domain}\\`, repository is not empty`,\n\t\t\t\t\t{\n\t\t\t\t\t\tcause: res,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to push documents to repository \\`${args.domain}\\`, ${res.status} ${res.statusText}`,\n\t\t\t\t{\n\t\t\t\t\tcause: res,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tasync pushChanges(\n\t\targs: TransactionalMergeArgs,\n\t): Promise<TransactionalMergeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tif (!(await this.user.checkIsLoggedIn())) {\n\t\t\tthrow new UnauthenticatedError();\n\t\t}\n\n\t\ttry {\n\t\t\t// Update the AWS ACL before uploading screenshots as it might have expired\n\t\t\tawait this.screenshots.initS3ACL();\n\n\t\t\tconst allChanges: AllChangeTypes[] = await Promise.all(\n\t\t\t\targs.changes.map(async (change) => {\n\t\t\t\t\tif (change.type === \"Slice\") {\n\t\t\t\t\t\tswitch (change.status) {\n\t\t\t\t\t\t\tcase \"NEW\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.slices.readSlice({\n\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modelWithScreenshots =\n\t\t\t\t\t\t\t\t\tawait this.slices.updateSliceModelScreenshotsInPlace({\n\t\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: modelWithScreenshots,\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_INSERT,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"MODIFIED\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.slices.readSlice({\n\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modelWithScreenshots =\n\t\t\t\t\t\t\t\t\tawait this.slices.updateSliceModelScreenshotsInPlace({\n\t\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: modelWithScreenshots,\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_UPDATE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"DELETED\":\n\t\t\t\t\t\t\t\tawait this.screenshots.deleteScreenshotFolder({\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: { id: change.id },\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_DELETE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tswitch (change.status) {\n\t\t\t\t\t\t\tcase \"NEW\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.customTypes.readCustomType({\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_INSERT,\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: model,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"MODIFIED\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.customTypes.readCustomType({\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_UPDATE,\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: model,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"DELETED\":\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: { id: change.id },\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_DELETE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\t// Compute the POST body\n\t\t\tconst requestBody: BulkBody = {\n\t\t\t\tconfirmDeleteDocuments: args.confirmDeleteDocuments,\n\t\t\t\tchanges: allChanges,\n\t\t\t};\n\n\t\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\n\t\t\t// TODO: move to customtypes client\n\t\t\tconst response = await this._fetch({\n\t\t\t\turl: new URL(\"./bulk\", API_ENDPOINTS.PrismicModels),\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: requestBody,\n\t\t\t\trepository: sliceMachineConfig.repositoryName,\n\t\t\t});\n\n\t\t\tswitch (response.status) {\n\t\t\t\tcase 202:\n\t\t\t\t\treturn this._decodeLimitOrThrow(\n\t\t\t\t\t\tawait response.json(),\n\t\t\t\t\t\tresponse.status,\n\t\t\t\t\t\tLimitType.SOFT,\n\t\t\t\t\t);\n\t\t\t\tcase 204:\n\t\t\t\t\treturn null;\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\treturn this._decodeLimitOrThrow(\n\t\t\t\t\t\tawait response.json(),\n\t\t\t\t\t\tresponse.status,\n\t\t\t\t\t\tLimitType.HARD,\n\t\t\t\t\t);\n\t\t\t\tcase 400:\n\t\t\t\t\tconst text = await response.text();\n\t\t\t\t\tthrow new Error(text);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unexpected status code ${response.status}`);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"An error happened while pushing your changes\");\n\t\t\tconsole.error(err);\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate _decodeLimitOrThrow(\n\t\tpotentialLimit: unknown,\n\t\tstatusCode: number,\n\t\tlimitType: LimitType,\n\t): Limit | null {\n\t\treturn fold<t.Errors, RawLimit, Limit | null>(\n\t\t\t() => {\n\t\t\t\tconst error: ClientError = {\n\t\t\t\t\tstatus: statusCode,\n\t\t\t\t\tmessage: `Unable to parse raw limit from ${JSON.stringify(\n\t\t\t\t\t\tpotentialLimit,\n\t\t\t\t\t)}`,\n\t\t\t\t};\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t\t(rawLimit: RawLimit) => {\n\t\t\t\tconst limit = { ...rawLimit, type: limitType };\n\n\t\t\t\treturn limit;\n\t\t\t},\n\t\t)(RawLimit.decode(potentialLimit));\n\t}\n\n\tprivate async _fetch(args: {\n\t\turl: URL;\n\t\tmethod?: \"GET\" | \"POST\";\n\t\tbody?: unknown;\n\t\tuserAgent?: PrismicRepositoryUserAgents;\n\t\trepository?: string;\n\t}): Promise<Response> {\n\t\tconst cookies = await this.user.getAuthenticationCookies();\n\n\t\tconst extraHeaders: Record<string, string> = {};\n\n\t\tif (args.body) {\n\t\t\textraHeaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tif (args.repository) {\n\t\t\textraHeaders.repository = args.repository;\n\t\t}\n\n\t\treturn await fetch(args.url.toString(), {\n\t\t\tmethod: args.method,\n\t\t\tbody: args.body ? JSON.stringify(args.body) : undefined,\n\t\t\theaders: {\n\t\t\t\t// Some endpoints rely on the authorization header...\n\t\t\t\tAuthorization: `Bearer ${cookies[\"prismic-auth\"]}`,\n\t\t\t\tCookie: serializeCookies(cookies),\n\t\t\t\t\"User-Agent\": args.userAgent || SLICE_MACHINE_USER_AGENT,\n\t\t\t\t...extraHeaders,\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":["BaseManager","API_ENDPOINTS","decode","t","PrismicRepository","PrismicRepositoryRole","PrismicRepositoryUserAgent","assertPluginsInitialized","UnauthenticatedError","ChangeTypes","LimitType","fold","RawLimit","fetch","serializeCookies","SLICE_MACHINE_USER_AGENT"],"mappings":"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"}
1
+ {"version":3,"file":"PrismicRepositoryManager.cjs","sources":["../../../../src/managers/prismicRepository/PrismicRepositoryManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport fetch, { Response } from \"../../lib/fetch\";\nimport { fold } from \"fp-ts/Either\";\n\nimport { decode } from \"../../lib/decode\";\nimport { serializeCookies } from \"../../lib/serializeCookies\";\n\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport {\n\tAllChangeTypes,\n\tBulkBody,\n\tChangeTypes,\n\tClientError,\n\tLimit,\n\tLimitType,\n\tPrismicRepository,\n\tPrismicRepositoryRole,\n\tPrismicRepositoryUserAgent,\n\tPrismicRepositoryUserAgents,\n\tRawLimit,\n\tTransactionalMergeArgs,\n\tTransactionalMergeReturnType,\n\tFrameworkWroomTelemetryID,\n\tStarterId,\n} from \"./types\";\nimport { assertPluginsInitialized } from \"../../lib/assertPluginsInitialized\";\nimport { UnauthenticatedError } from \"../../errors\";\n\nconst DEFAULT_REPOSITORY_SETTINGS = {\n\tplan: \"personal\",\n\tisAnnual: \"false\",\n\trole: \"developer\",\n};\n\ntype PrismicRepositoryManagerCheckExistsArgs = {\n\tdomain: string;\n};\n\ntype PrismicRepositoryManagerCreateArgs = {\n\tdomain: string;\n\tframework: FrameworkWroomTelemetryID;\n\tstarterId?: StarterId;\n};\n\ntype PrismicRepositoryManagerDeleteArgs = {\n\tdomain: string;\n\tpassword: string;\n};\n\ntype PrismicRepositoryManagerPushDocumentsArgs = {\n\tdomain: string;\n\tsignature: string;\n\tdocuments: Record<string, unknown>; // TODO: Type unknown if possible(?)\n};\n\nexport class PrismicRepositoryManager extends BaseManager {\n\t// TODO: Add methods for repository-specific actions. E.g. creating a\n\t// new repository.\n\n\tasync readAll(): Promise<PrismicRepository[]> {\n\t\tconst url = new URL(\"./repositories\", API_ENDPOINTS.PrismicUser);\n\t\tconst res = await this._fetch({ url });\n\t\tconst json = await res.json();\n\n\t\tif (res.ok) {\n\t\t\tconst { value: repositories, error } = decode(\n\t\t\t\tt.array(PrismicRepository),\n\t\t\t\tjson,\n\t\t\t);\n\n\t\t\tif (error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to decode repositories: ${error.errors.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn repositories;\n\t\t} else {\n\t\t\tthrow new Error(`Failed to read repositories`, { cause: json });\n\t\t}\n\t}\n\n\t// Should this be in manager? It's one of the few sync method\n\t//\n\t// Reply from Angelo 2022-12-22: I think it should be in manager\n\t// because we shouldn't be exporting root-level utilities from this\n\t// package. If we want to make it more inline with the other methods,\n\t// we could simplify the API by changing its signature to the\n\t// following:\n\t//\n\t// ```ts\n\t// (repositoryName: string) => Promise<boolean>\n\t// ```\n\t//\n\t// This method would:\n\t//\n\t// 1. Fetch the list of repositories for the user using `readAll()`.\n\t// The list would be cached.\n\t// 2. Determine if the user has write access to the given repository.\n\t//\n\t// This version has the following benefits:\n\t//\n\t// - Does not expect the consumer to supply a repository object; it\n\t// only requires a repository name, which could be sourced from\n\t// anything (incl. the project's `sm.json`).\n\t//\n\t// - Similarly, it does not expect the consumer to call `readAll()`\n\t// before calling this method.\n\t//\n\t// - Works for repositories that the user does not have access to. For\n\t// example, I could use it to check if I have access to \"qwerty\",\n\t// even if I am not added as a user. The purpose of the method is\n\t// still valid: do I have write access to a given repository?\n\thasWriteAccess(repository: PrismicRepository): boolean {\n\t\tswitch (repository.role) {\n\t\t\tcase PrismicRepositoryRole.SuperUser:\n\t\t\tcase PrismicRepositoryRole.Owner:\n\t\t\tcase PrismicRepositoryRole.Administrator:\n\t\t\t\treturn true;\n\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync checkExists(\n\t\targs: PrismicRepositoryManagerCheckExistsArgs,\n\t): Promise<boolean> {\n\t\tconst url = new URL(\n\t\t\t`./app/dashboard/repositories/${args.domain}/exists`,\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\t\tconst res = await this._fetch({ url });\n\t\tconst text = await res.text();\n\n\t\tif (res.ok) {\n\t\t\treturn text === \"false\"; // Endpoint returns `false` when repository exists\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to check repository existence for domain \\`${args.domain}\\``,\n\t\t\t\t{ cause: text },\n\t\t\t);\n\t\t}\n\t}\n\n\tasync create(args: PrismicRepositoryManagerCreateArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./authentication/newrepository?app=slicemachine\",\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\n\t\tconst body = {\n\t\t\t...DEFAULT_REPOSITORY_SETTINGS,\n\t\t\tdomain: args.domain,\n\t\t\t// These properties are optional in the API but needed for tracking\n\t\t\tframework: args.framework,\n\t\t\tstarterId: args.starterId,\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.SliceMachine, // Custom User Agent is required\n\t\t});\n\t\tconst text = await res.text();\n\n\t\t// Endpoint returns repository name on success, which must be more than 4 characters and less than 30\n\t\t// if (!res.ok) {\n\t\tif (!res.ok || text.length < 4 || text.length > 30) {\n\t\t\tthrow new Error(`Failed to create repository \\`${args.domain}\\``, {\n\t\t\t\tcause: res,\n\t\t\t});\n\t\t}\n\t}\n\n\t// TODO: Delete this endpoint? It doesn't seem to be used (I might be wrong). - Angelo\n\tasync delete(args: PrismicRepositoryManagerDeleteArgs): Promise<void> {\n\t\tconst cookies = await this.user.getAuthenticationCookies();\n\n\t\tconst url = new URL(\n\t\t\t`./app/settings/delete?_=${cookies[\"X_XSRF\"]}`, // TODO: Maybe we want to throw early if the token is no available, or get the token another way\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\t\t// Update hostname to include repository domain\n\t\turl.hostname = `${args.domain}.${url.hostname}`;\n\n\t\tconst body = {\n\t\t\tconfirm: args.domain,\n\t\t\tpassword: args.password,\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.LegacyZero, // Custom User Agent is required\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(`Failed to delete repository \\`${args.domain}\\``, {\n\t\t\t\tcause: res,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync pushDocuments(\n\t\targs: PrismicRepositoryManagerPushDocumentsArgs,\n\t): Promise<void> {\n\t\tconst url = new URL(\"./starter/documents\", API_ENDPOINTS.PrismicWroom);\n\t\t// Update hostname to include repository domain\n\t\turl.hostname = `${args.domain}.${url.hostname}`;\n\n\t\tconst body = {\n\t\t\tsignature: args.signature,\n\t\t\tdocuments: JSON.stringify(args.documents),\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.LegacyZero, // Custom User Agent is required\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tlet reason: string | null = null;\n\t\t\ttry {\n\t\t\t\treason = await res.text();\n\t\t\t} catch {\n\t\t\t\t// Noop\n\t\t\t}\n\n\t\t\t// Ideally the API should throw a 409 or something like that...\n\t\t\tif (reason === \"Repository should not contain documents\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to push documents to repository \\`${args.domain}\\`, repository is not empty`,\n\t\t\t\t\t{\n\t\t\t\t\t\tcause: res,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to push documents to repository \\`${args.domain}\\`, ${res.status} ${res.statusText}`,\n\t\t\t\t{\n\t\t\t\t\tcause: res,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tasync pushChanges(\n\t\targs: TransactionalMergeArgs,\n\t): Promise<TransactionalMergeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tif (!(await this.user.checkIsLoggedIn())) {\n\t\t\tthrow new UnauthenticatedError();\n\t\t}\n\n\t\ttry {\n\t\t\t// Update the AWS ACL before uploading screenshots as it might have expired\n\t\t\tawait this.screenshots.initS3ACL();\n\n\t\t\tconst allChanges: AllChangeTypes[] = await Promise.all(\n\t\t\t\targs.changes.map(async (change) => {\n\t\t\t\t\tif (change.type === \"Slice\") {\n\t\t\t\t\t\tswitch (change.status) {\n\t\t\t\t\t\t\tcase \"NEW\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.slices.readSlice({\n\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modelWithScreenshots =\n\t\t\t\t\t\t\t\t\tawait this.slices.updateSliceModelScreenshotsInPlace({\n\t\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: modelWithScreenshots,\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_INSERT,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"MODIFIED\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.slices.readSlice({\n\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modelWithScreenshots =\n\t\t\t\t\t\t\t\t\tawait this.slices.updateSliceModelScreenshotsInPlace({\n\t\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: modelWithScreenshots,\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_UPDATE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"DELETED\":\n\t\t\t\t\t\t\t\tawait this.screenshots.deleteScreenshotFolder({\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: { id: change.id },\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_DELETE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tswitch (change.status) {\n\t\t\t\t\t\t\tcase \"NEW\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.customTypes.readCustomType({\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_INSERT,\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: model,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"MODIFIED\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.customTypes.readCustomType({\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_UPDATE,\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: model,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"DELETED\":\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: { id: change.id },\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_DELETE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\t// Compute the POST body\n\t\t\tconst requestBody: BulkBody = {\n\t\t\t\tconfirmDeleteDocuments: args.confirmDeleteDocuments,\n\t\t\t\tchanges: allChanges,\n\t\t\t};\n\n\t\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\n\t\t\t// TODO: move to customtypes client\n\t\t\tconst response = await this._fetch({\n\t\t\t\turl: new URL(\"./bulk\", API_ENDPOINTS.PrismicModels),\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: requestBody,\n\t\t\t\trepository: sliceMachineConfig.repositoryName,\n\t\t\t});\n\n\t\t\tswitch (response.status) {\n\t\t\t\tcase 202:\n\t\t\t\t\treturn this._decodeLimitOrThrow(\n\t\t\t\t\t\tawait response.json(),\n\t\t\t\t\t\tresponse.status,\n\t\t\t\t\t\tLimitType.SOFT,\n\t\t\t\t\t);\n\t\t\t\tcase 204:\n\t\t\t\t\treturn null;\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\treturn this._decodeLimitOrThrow(\n\t\t\t\t\t\tawait response.json(),\n\t\t\t\t\t\tresponse.status,\n\t\t\t\t\t\tLimitType.HARD,\n\t\t\t\t\t);\n\t\t\t\tcase 400:\n\t\t\t\t\tconst text = await response.text();\n\t\t\t\t\tthrow new Error(text);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unexpected status code ${response.status}`);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"An error happened while pushing your changes\");\n\t\t\tconsole.error(err);\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate _decodeLimitOrThrow(\n\t\tpotentialLimit: unknown,\n\t\tstatusCode: number,\n\t\tlimitType: LimitType,\n\t): Limit | null {\n\t\treturn fold<t.Errors, RawLimit, Limit | null>(\n\t\t\t() => {\n\t\t\t\tconst error: ClientError = {\n\t\t\t\t\tstatus: statusCode,\n\t\t\t\t\tmessage: `Unable to parse raw limit from ${JSON.stringify(\n\t\t\t\t\t\tpotentialLimit,\n\t\t\t\t\t)}`,\n\t\t\t\t};\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t\t(rawLimit: RawLimit) => {\n\t\t\t\tconst limit = { ...rawLimit, type: limitType };\n\n\t\t\t\treturn limit;\n\t\t\t},\n\t\t)(RawLimit.decode(potentialLimit));\n\t}\n\n\tprivate async _fetch(args: {\n\t\turl: URL;\n\t\tmethod?: \"GET\" | \"POST\";\n\t\tbody?: unknown;\n\t\tuserAgent?: PrismicRepositoryUserAgents;\n\t\trepository?: string;\n\t}): Promise<Response> {\n\t\tconst cookies = await this.user.getAuthenticationCookies();\n\n\t\tconst extraHeaders: Record<string, string> = {};\n\n\t\tif (args.body) {\n\t\t\textraHeaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tif (args.repository) {\n\t\t\textraHeaders.repository = args.repository;\n\t\t}\n\n\t\treturn await fetch(args.url.toString(), {\n\t\t\tmethod: args.method,\n\t\t\tbody: args.body ? JSON.stringify(args.body) : undefined,\n\t\t\theaders: {\n\t\t\t\t// Some endpoints rely on the authorization header...\n\t\t\t\tAuthorization: `Bearer ${cookies[\"prismic-auth\"]}`,\n\t\t\t\tCookie: serializeCookies(cookies),\n\t\t\t\t\"User-Agent\": args.userAgent || SLICE_MACHINE_USER_AGENT,\n\t\t\t\t...extraHeaders,\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":["BaseManager","API_ENDPOINTS","decode","t","PrismicRepository","PrismicRepositoryRole","PrismicRepositoryUserAgent","assertPluginsInitialized","UnauthenticatedError","ChangeTypes","LimitType","fold","RawLimit","fetch","serializeCookies","SLICE_MACHINE_USER_AGENT"],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import { BaseManager } from "../BaseManager";
2
- import { PrismicRepository, TransactionalMergeArgs, TransactionalMergeReturnType, FrameworkWroomTelemetryID } from "./types";
2
+ import { PrismicRepository, TransactionalMergeArgs, TransactionalMergeReturnType, FrameworkWroomTelemetryID, StarterId } from "./types";
3
3
  type PrismicRepositoryManagerCheckExistsArgs = {
4
4
  domain: string;
5
5
  };
6
6
  type PrismicRepositoryManagerCreateArgs = {
7
7
  domain: string;
8
8
  framework: FrameworkWroomTelemetryID;
9
+ starterId?: StarterId;
9
10
  };
10
11
  type PrismicRepositoryManagerDeleteArgs = {
11
12
  domain: string;
@@ -88,9 +88,8 @@ class PrismicRepositoryManager extends BaseManager {
88
88
  ...DEFAULT_REPOSITORY_SETTINGS,
89
89
  domain: args.domain,
90
90
  // These properties are optional in the API but needed for tracking
91
- framework: args.framework
92
- // TODO(DT-1386): Handle starter detection for Segment
93
- // starterID: args.starterID,
91
+ framework: args.framework,
92
+ starterId: args.starterId
94
93
  };
95
94
  const res = await this._fetch({
96
95
  url,
@@ -1 +1 @@
1
- {"version":3,"file":"PrismicRepositoryManager.js","sources":["../../../../src/managers/prismicRepository/PrismicRepositoryManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport fetch, { Response } from \"../../lib/fetch\";\nimport { fold } from \"fp-ts/Either\";\n\nimport { decode } from \"../../lib/decode\";\nimport { serializeCookies } from \"../../lib/serializeCookies\";\n\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport {\n\tAllChangeTypes,\n\tBulkBody,\n\tChangeTypes,\n\tClientError,\n\tLimit,\n\tLimitType,\n\tPrismicRepository,\n\tPrismicRepositoryRole,\n\tPrismicRepositoryUserAgent,\n\tPrismicRepositoryUserAgents,\n\tRawLimit,\n\tTransactionalMergeArgs,\n\tTransactionalMergeReturnType,\n\tFrameworkWroomTelemetryID,\n} from \"./types\";\nimport { assertPluginsInitialized } from \"../../lib/assertPluginsInitialized\";\nimport { UnauthenticatedError } from \"../../errors\";\n\nconst DEFAULT_REPOSITORY_SETTINGS = {\n\tplan: \"personal\",\n\tisAnnual: \"false\",\n\trole: \"developer\",\n};\n\ntype PrismicRepositoryManagerCheckExistsArgs = {\n\tdomain: string;\n};\n\ntype PrismicRepositoryManagerCreateArgs = {\n\tdomain: string;\n\tframework: FrameworkWroomTelemetryID;\n\t// TODO(DT-1386): Handle starter detection for Segment\n\t// starterID?: StarterID;\n};\n\ntype PrismicRepositoryManagerDeleteArgs = {\n\tdomain: string;\n\tpassword: string;\n};\n\ntype PrismicRepositoryManagerPushDocumentsArgs = {\n\tdomain: string;\n\tsignature: string;\n\tdocuments: Record<string, unknown>; // TODO: Type unknown if possible(?)\n};\n\nexport class PrismicRepositoryManager extends BaseManager {\n\t// TODO: Add methods for repository-specific actions. E.g. creating a\n\t// new repository.\n\n\tasync readAll(): Promise<PrismicRepository[]> {\n\t\tconst url = new URL(\"./repositories\", API_ENDPOINTS.PrismicUser);\n\t\tconst res = await this._fetch({ url });\n\t\tconst json = await res.json();\n\n\t\tif (res.ok) {\n\t\t\tconst { value: repositories, error } = decode(\n\t\t\t\tt.array(PrismicRepository),\n\t\t\t\tjson,\n\t\t\t);\n\n\t\t\tif (error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to decode repositories: ${error.errors.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn repositories;\n\t\t} else {\n\t\t\tthrow new Error(`Failed to read repositories`, { cause: json });\n\t\t}\n\t}\n\n\t// Should this be in manager? It's one of the few sync method\n\t//\n\t// Reply from Angelo 2022-12-22: I think it should be in manager\n\t// because we shouldn't be exporting root-level utilities from this\n\t// package. If we want to make it more inline with the other methods,\n\t// we could simplify the API by changing its signature to the\n\t// following:\n\t//\n\t// ```ts\n\t// (repositoryName: string) => Promise<boolean>\n\t// ```\n\t//\n\t// This method would:\n\t//\n\t// 1. Fetch the list of repositories for the user using `readAll()`.\n\t// The list would be cached.\n\t// 2. Determine if the user has write access to the given repository.\n\t//\n\t// This version has the following benefits:\n\t//\n\t// - Does not expect the consumer to supply a repository object; it\n\t// only requires a repository name, which could be sourced from\n\t// anything (incl. the project's `sm.json`).\n\t//\n\t// - Similarly, it does not expect the consumer to call `readAll()`\n\t// before calling this method.\n\t//\n\t// - Works for repositories that the user does not have access to. For\n\t// example, I could use it to check if I have access to \"qwerty\",\n\t// even if I am not added as a user. The purpose of the method is\n\t// still valid: do I have write access to a given repository?\n\thasWriteAccess(repository: PrismicRepository): boolean {\n\t\tswitch (repository.role) {\n\t\t\tcase PrismicRepositoryRole.SuperUser:\n\t\t\tcase PrismicRepositoryRole.Owner:\n\t\t\tcase PrismicRepositoryRole.Administrator:\n\t\t\t\treturn true;\n\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync checkExists(\n\t\targs: PrismicRepositoryManagerCheckExistsArgs,\n\t): Promise<boolean> {\n\t\tconst url = new URL(\n\t\t\t`./app/dashboard/repositories/${args.domain}/exists`,\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\t\tconst res = await this._fetch({ url });\n\t\tconst text = await res.text();\n\n\t\tif (res.ok) {\n\t\t\treturn text === \"false\"; // Endpoint returns `false` when repository exists\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to check repository existence for domain \\`${args.domain}\\``,\n\t\t\t\t{ cause: text },\n\t\t\t);\n\t\t}\n\t}\n\n\tasync create(args: PrismicRepositoryManagerCreateArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./authentication/newrepository?app=slicemachine\",\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\n\t\tconst body = {\n\t\t\t...DEFAULT_REPOSITORY_SETTINGS,\n\t\t\tdomain: args.domain,\n\t\t\t// These properties are optional in the API but needed for tracking\n\t\t\tframework: args.framework,\n\t\t\t// TODO(DT-1386): Handle starter detection for Segment\n\t\t\t// starterID: args.starterID,\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.SliceMachine, // Custom User Agent is required\n\t\t});\n\t\tconst text = await res.text();\n\n\t\t// Endpoint returns repository name on success, which must be more than 4 characters and less than 30\n\t\t// if (!res.ok) {\n\t\tif (!res.ok || text.length < 4 || text.length > 30) {\n\t\t\tthrow new Error(`Failed to create repository \\`${args.domain}\\``, {\n\t\t\t\tcause: res,\n\t\t\t});\n\t\t}\n\t}\n\n\t// TODO: Delete this endpoint? It doesn't seem to be used (I might be wrong). - Angelo\n\tasync delete(args: PrismicRepositoryManagerDeleteArgs): Promise<void> {\n\t\tconst cookies = await this.user.getAuthenticationCookies();\n\n\t\tconst url = new URL(\n\t\t\t`./app/settings/delete?_=${cookies[\"X_XSRF\"]}`, // TODO: Maybe we want to throw early if the token is no available, or get the token another way\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\t\t// Update hostname to include repository domain\n\t\turl.hostname = `${args.domain}.${url.hostname}`;\n\n\t\tconst body = {\n\t\t\tconfirm: args.domain,\n\t\t\tpassword: args.password,\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.LegacyZero, // Custom User Agent is required\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(`Failed to delete repository \\`${args.domain}\\``, {\n\t\t\t\tcause: res,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync pushDocuments(\n\t\targs: PrismicRepositoryManagerPushDocumentsArgs,\n\t): Promise<void> {\n\t\tconst url = new URL(\"./starter/documents\", API_ENDPOINTS.PrismicWroom);\n\t\t// Update hostname to include repository domain\n\t\turl.hostname = `${args.domain}.${url.hostname}`;\n\n\t\tconst body = {\n\t\t\tsignature: args.signature,\n\t\t\tdocuments: JSON.stringify(args.documents),\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.LegacyZero, // Custom User Agent is required\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tlet reason: string | null = null;\n\t\t\ttry {\n\t\t\t\treason = await res.text();\n\t\t\t} catch {\n\t\t\t\t// Noop\n\t\t\t}\n\n\t\t\t// Ideally the API should throw a 409 or something like that...\n\t\t\tif (reason === \"Repository should not contain documents\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to push documents to repository \\`${args.domain}\\`, repository is not empty`,\n\t\t\t\t\t{\n\t\t\t\t\t\tcause: res,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to push documents to repository \\`${args.domain}\\`, ${res.status} ${res.statusText}`,\n\t\t\t\t{\n\t\t\t\t\tcause: res,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tasync pushChanges(\n\t\targs: TransactionalMergeArgs,\n\t): Promise<TransactionalMergeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tif (!(await this.user.checkIsLoggedIn())) {\n\t\t\tthrow new UnauthenticatedError();\n\t\t}\n\n\t\ttry {\n\t\t\t// Update the AWS ACL before uploading screenshots as it might have expired\n\t\t\tawait this.screenshots.initS3ACL();\n\n\t\t\tconst allChanges: AllChangeTypes[] = await Promise.all(\n\t\t\t\targs.changes.map(async (change) => {\n\t\t\t\t\tif (change.type === \"Slice\") {\n\t\t\t\t\t\tswitch (change.status) {\n\t\t\t\t\t\t\tcase \"NEW\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.slices.readSlice({\n\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modelWithScreenshots =\n\t\t\t\t\t\t\t\t\tawait this.slices.updateSliceModelScreenshotsInPlace({\n\t\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: modelWithScreenshots,\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_INSERT,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"MODIFIED\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.slices.readSlice({\n\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modelWithScreenshots =\n\t\t\t\t\t\t\t\t\tawait this.slices.updateSliceModelScreenshotsInPlace({\n\t\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: modelWithScreenshots,\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_UPDATE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"DELETED\":\n\t\t\t\t\t\t\t\tawait this.screenshots.deleteScreenshotFolder({\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: { id: change.id },\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_DELETE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tswitch (change.status) {\n\t\t\t\t\t\t\tcase \"NEW\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.customTypes.readCustomType({\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_INSERT,\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: model,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"MODIFIED\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.customTypes.readCustomType({\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_UPDATE,\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: model,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"DELETED\":\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: { id: change.id },\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_DELETE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\t// Compute the POST body\n\t\t\tconst requestBody: BulkBody = {\n\t\t\t\tconfirmDeleteDocuments: args.confirmDeleteDocuments,\n\t\t\t\tchanges: allChanges,\n\t\t\t};\n\n\t\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\n\t\t\t// TODO: move to customtypes client\n\t\t\tconst response = await this._fetch({\n\t\t\t\turl: new URL(\"./bulk\", API_ENDPOINTS.PrismicModels),\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: requestBody,\n\t\t\t\trepository: sliceMachineConfig.repositoryName,\n\t\t\t});\n\n\t\t\tswitch (response.status) {\n\t\t\t\tcase 202:\n\t\t\t\t\treturn this._decodeLimitOrThrow(\n\t\t\t\t\t\tawait response.json(),\n\t\t\t\t\t\tresponse.status,\n\t\t\t\t\t\tLimitType.SOFT,\n\t\t\t\t\t);\n\t\t\t\tcase 204:\n\t\t\t\t\treturn null;\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\treturn this._decodeLimitOrThrow(\n\t\t\t\t\t\tawait response.json(),\n\t\t\t\t\t\tresponse.status,\n\t\t\t\t\t\tLimitType.HARD,\n\t\t\t\t\t);\n\t\t\t\tcase 400:\n\t\t\t\t\tconst text = await response.text();\n\t\t\t\t\tthrow new Error(text);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unexpected status code ${response.status}`);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"An error happened while pushing your changes\");\n\t\t\tconsole.error(err);\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate _decodeLimitOrThrow(\n\t\tpotentialLimit: unknown,\n\t\tstatusCode: number,\n\t\tlimitType: LimitType,\n\t): Limit | null {\n\t\treturn fold<t.Errors, RawLimit, Limit | null>(\n\t\t\t() => {\n\t\t\t\tconst error: ClientError = {\n\t\t\t\t\tstatus: statusCode,\n\t\t\t\t\tmessage: `Unable to parse raw limit from ${JSON.stringify(\n\t\t\t\t\t\tpotentialLimit,\n\t\t\t\t\t)}`,\n\t\t\t\t};\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t\t(rawLimit: RawLimit) => {\n\t\t\t\tconst limit = { ...rawLimit, type: limitType };\n\n\t\t\t\treturn limit;\n\t\t\t},\n\t\t)(RawLimit.decode(potentialLimit));\n\t}\n\n\tprivate async _fetch(args: {\n\t\turl: URL;\n\t\tmethod?: \"GET\" | \"POST\";\n\t\tbody?: unknown;\n\t\tuserAgent?: PrismicRepositoryUserAgents;\n\t\trepository?: string;\n\t}): Promise<Response> {\n\t\tconst cookies = await this.user.getAuthenticationCookies();\n\n\t\tconst extraHeaders: Record<string, string> = {};\n\n\t\tif (args.body) {\n\t\t\textraHeaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tif (args.repository) {\n\t\t\textraHeaders.repository = args.repository;\n\t\t}\n\n\t\treturn await fetch(args.url.toString(), {\n\t\t\tmethod: args.method,\n\t\t\tbody: args.body ? JSON.stringify(args.body) : undefined,\n\t\t\theaders: {\n\t\t\t\t// Some endpoints rely on the authorization header...\n\t\t\t\tAuthorization: `Bearer ${cookies[\"prismic-auth\"]}`,\n\t\t\t\tCookie: serializeCookies(cookies),\n\t\t\t\t\"User-Agent\": args.userAgent || SLICE_MACHINE_USER_AGENT,\n\t\t\t\t...extraHeaders,\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PrismicRepositoryManager.js","sources":["../../../../src/managers/prismicRepository/PrismicRepositoryManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport fetch, { Response } from \"../../lib/fetch\";\nimport { fold } from \"fp-ts/Either\";\n\nimport { decode } from \"../../lib/decode\";\nimport { serializeCookies } from \"../../lib/serializeCookies\";\n\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport {\n\tAllChangeTypes,\n\tBulkBody,\n\tChangeTypes,\n\tClientError,\n\tLimit,\n\tLimitType,\n\tPrismicRepository,\n\tPrismicRepositoryRole,\n\tPrismicRepositoryUserAgent,\n\tPrismicRepositoryUserAgents,\n\tRawLimit,\n\tTransactionalMergeArgs,\n\tTransactionalMergeReturnType,\n\tFrameworkWroomTelemetryID,\n\tStarterId,\n} from \"./types\";\nimport { assertPluginsInitialized } from \"../../lib/assertPluginsInitialized\";\nimport { UnauthenticatedError } from \"../../errors\";\n\nconst DEFAULT_REPOSITORY_SETTINGS = {\n\tplan: \"personal\",\n\tisAnnual: \"false\",\n\trole: \"developer\",\n};\n\ntype PrismicRepositoryManagerCheckExistsArgs = {\n\tdomain: string;\n};\n\ntype PrismicRepositoryManagerCreateArgs = {\n\tdomain: string;\n\tframework: FrameworkWroomTelemetryID;\n\tstarterId?: StarterId;\n};\n\ntype PrismicRepositoryManagerDeleteArgs = {\n\tdomain: string;\n\tpassword: string;\n};\n\ntype PrismicRepositoryManagerPushDocumentsArgs = {\n\tdomain: string;\n\tsignature: string;\n\tdocuments: Record<string, unknown>; // TODO: Type unknown if possible(?)\n};\n\nexport class PrismicRepositoryManager extends BaseManager {\n\t// TODO: Add methods for repository-specific actions. E.g. creating a\n\t// new repository.\n\n\tasync readAll(): Promise<PrismicRepository[]> {\n\t\tconst url = new URL(\"./repositories\", API_ENDPOINTS.PrismicUser);\n\t\tconst res = await this._fetch({ url });\n\t\tconst json = await res.json();\n\n\t\tif (res.ok) {\n\t\t\tconst { value: repositories, error } = decode(\n\t\t\t\tt.array(PrismicRepository),\n\t\t\t\tjson,\n\t\t\t);\n\n\t\t\tif (error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to decode repositories: ${error.errors.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn repositories;\n\t\t} else {\n\t\t\tthrow new Error(`Failed to read repositories`, { cause: json });\n\t\t}\n\t}\n\n\t// Should this be in manager? It's one of the few sync method\n\t//\n\t// Reply from Angelo 2022-12-22: I think it should be in manager\n\t// because we shouldn't be exporting root-level utilities from this\n\t// package. If we want to make it more inline with the other methods,\n\t// we could simplify the API by changing its signature to the\n\t// following:\n\t//\n\t// ```ts\n\t// (repositoryName: string) => Promise<boolean>\n\t// ```\n\t//\n\t// This method would:\n\t//\n\t// 1. Fetch the list of repositories for the user using `readAll()`.\n\t// The list would be cached.\n\t// 2. Determine if the user has write access to the given repository.\n\t//\n\t// This version has the following benefits:\n\t//\n\t// - Does not expect the consumer to supply a repository object; it\n\t// only requires a repository name, which could be sourced from\n\t// anything (incl. the project's `sm.json`).\n\t//\n\t// - Similarly, it does not expect the consumer to call `readAll()`\n\t// before calling this method.\n\t//\n\t// - Works for repositories that the user does not have access to. For\n\t// example, I could use it to check if I have access to \"qwerty\",\n\t// even if I am not added as a user. The purpose of the method is\n\t// still valid: do I have write access to a given repository?\n\thasWriteAccess(repository: PrismicRepository): boolean {\n\t\tswitch (repository.role) {\n\t\t\tcase PrismicRepositoryRole.SuperUser:\n\t\t\tcase PrismicRepositoryRole.Owner:\n\t\t\tcase PrismicRepositoryRole.Administrator:\n\t\t\t\treturn true;\n\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync checkExists(\n\t\targs: PrismicRepositoryManagerCheckExistsArgs,\n\t): Promise<boolean> {\n\t\tconst url = new URL(\n\t\t\t`./app/dashboard/repositories/${args.domain}/exists`,\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\t\tconst res = await this._fetch({ url });\n\t\tconst text = await res.text();\n\n\t\tif (res.ok) {\n\t\t\treturn text === \"false\"; // Endpoint returns `false` when repository exists\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to check repository existence for domain \\`${args.domain}\\``,\n\t\t\t\t{ cause: text },\n\t\t\t);\n\t\t}\n\t}\n\n\tasync create(args: PrismicRepositoryManagerCreateArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./authentication/newrepository?app=slicemachine\",\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\n\t\tconst body = {\n\t\t\t...DEFAULT_REPOSITORY_SETTINGS,\n\t\t\tdomain: args.domain,\n\t\t\t// These properties are optional in the API but needed for tracking\n\t\t\tframework: args.framework,\n\t\t\tstarterId: args.starterId,\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.SliceMachine, // Custom User Agent is required\n\t\t});\n\t\tconst text = await res.text();\n\n\t\t// Endpoint returns repository name on success, which must be more than 4 characters and less than 30\n\t\t// if (!res.ok) {\n\t\tif (!res.ok || text.length < 4 || text.length > 30) {\n\t\t\tthrow new Error(`Failed to create repository \\`${args.domain}\\``, {\n\t\t\t\tcause: res,\n\t\t\t});\n\t\t}\n\t}\n\n\t// TODO: Delete this endpoint? It doesn't seem to be used (I might be wrong). - Angelo\n\tasync delete(args: PrismicRepositoryManagerDeleteArgs): Promise<void> {\n\t\tconst cookies = await this.user.getAuthenticationCookies();\n\n\t\tconst url = new URL(\n\t\t\t`./app/settings/delete?_=${cookies[\"X_XSRF\"]}`, // TODO: Maybe we want to throw early if the token is no available, or get the token another way\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t);\n\t\t// Update hostname to include repository domain\n\t\turl.hostname = `${args.domain}.${url.hostname}`;\n\n\t\tconst body = {\n\t\t\tconfirm: args.domain,\n\t\t\tpassword: args.password,\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.LegacyZero, // Custom User Agent is required\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(`Failed to delete repository \\`${args.domain}\\``, {\n\t\t\t\tcause: res,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync pushDocuments(\n\t\targs: PrismicRepositoryManagerPushDocumentsArgs,\n\t): Promise<void> {\n\t\tconst url = new URL(\"./starter/documents\", API_ENDPOINTS.PrismicWroom);\n\t\t// Update hostname to include repository domain\n\t\turl.hostname = `${args.domain}.${url.hostname}`;\n\n\t\tconst body = {\n\t\t\tsignature: args.signature,\n\t\t\tdocuments: JSON.stringify(args.documents),\n\t\t};\n\n\t\tconst res = await this._fetch({\n\t\t\turl,\n\t\t\tmethod: \"POST\",\n\t\t\tbody,\n\t\t\tuserAgent: PrismicRepositoryUserAgent.LegacyZero, // Custom User Agent is required\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tlet reason: string | null = null;\n\t\t\ttry {\n\t\t\t\treason = await res.text();\n\t\t\t} catch {\n\t\t\t\t// Noop\n\t\t\t}\n\n\t\t\t// Ideally the API should throw a 409 or something like that...\n\t\t\tif (reason === \"Repository should not contain documents\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to push documents to repository \\`${args.domain}\\`, repository is not empty`,\n\t\t\t\t\t{\n\t\t\t\t\t\tcause: res,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to push documents to repository \\`${args.domain}\\`, ${res.status} ${res.statusText}`,\n\t\t\t\t{\n\t\t\t\t\tcause: res,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tasync pushChanges(\n\t\targs: TransactionalMergeArgs,\n\t): Promise<TransactionalMergeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tif (!(await this.user.checkIsLoggedIn())) {\n\t\t\tthrow new UnauthenticatedError();\n\t\t}\n\n\t\ttry {\n\t\t\t// Update the AWS ACL before uploading screenshots as it might have expired\n\t\t\tawait this.screenshots.initS3ACL();\n\n\t\t\tconst allChanges: AllChangeTypes[] = await Promise.all(\n\t\t\t\targs.changes.map(async (change) => {\n\t\t\t\t\tif (change.type === \"Slice\") {\n\t\t\t\t\t\tswitch (change.status) {\n\t\t\t\t\t\t\tcase \"NEW\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.slices.readSlice({\n\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modelWithScreenshots =\n\t\t\t\t\t\t\t\t\tawait this.slices.updateSliceModelScreenshotsInPlace({\n\t\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: modelWithScreenshots,\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_INSERT,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"MODIFIED\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.slices.readSlice({\n\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modelWithScreenshots =\n\t\t\t\t\t\t\t\t\tawait this.slices.updateSliceModelScreenshotsInPlace({\n\t\t\t\t\t\t\t\t\t\tlibraryID: change.libraryID,\n\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: modelWithScreenshots,\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_UPDATE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"DELETED\":\n\t\t\t\t\t\t\t\tawait this.screenshots.deleteScreenshotFolder({\n\t\t\t\t\t\t\t\t\tsliceID: change.id,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: { id: change.id },\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.SLICE_DELETE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tswitch (change.status) {\n\t\t\t\t\t\t\tcase \"NEW\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.customTypes.readCustomType({\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_INSERT,\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: model,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"MODIFIED\": {\n\t\t\t\t\t\t\t\tconst { model } = await this.customTypes.readCustomType({\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (!model) {\n\t\t\t\t\t\t\t\t\tthrow Error(`Could not find model ${change.id}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_UPDATE,\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: model,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"DELETED\":\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: change.id,\n\t\t\t\t\t\t\t\t\tpayload: { id: change.id },\n\t\t\t\t\t\t\t\t\ttype: ChangeTypes.CUSTOM_TYPE_DELETE,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\t// Compute the POST body\n\t\t\tconst requestBody: BulkBody = {\n\t\t\t\tconfirmDeleteDocuments: args.confirmDeleteDocuments,\n\t\t\t\tchanges: allChanges,\n\t\t\t};\n\n\t\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\n\t\t\t// TODO: move to customtypes client\n\t\t\tconst response = await this._fetch({\n\t\t\t\turl: new URL(\"./bulk\", API_ENDPOINTS.PrismicModels),\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: requestBody,\n\t\t\t\trepository: sliceMachineConfig.repositoryName,\n\t\t\t});\n\n\t\t\tswitch (response.status) {\n\t\t\t\tcase 202:\n\t\t\t\t\treturn this._decodeLimitOrThrow(\n\t\t\t\t\t\tawait response.json(),\n\t\t\t\t\t\tresponse.status,\n\t\t\t\t\t\tLimitType.SOFT,\n\t\t\t\t\t);\n\t\t\t\tcase 204:\n\t\t\t\t\treturn null;\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\treturn this._decodeLimitOrThrow(\n\t\t\t\t\t\tawait response.json(),\n\t\t\t\t\t\tresponse.status,\n\t\t\t\t\t\tLimitType.HARD,\n\t\t\t\t\t);\n\t\t\t\tcase 400:\n\t\t\t\t\tconst text = await response.text();\n\t\t\t\t\tthrow new Error(text);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unexpected status code ${response.status}`);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"An error happened while pushing your changes\");\n\t\t\tconsole.error(err);\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate _decodeLimitOrThrow(\n\t\tpotentialLimit: unknown,\n\t\tstatusCode: number,\n\t\tlimitType: LimitType,\n\t): Limit | null {\n\t\treturn fold<t.Errors, RawLimit, Limit | null>(\n\t\t\t() => {\n\t\t\t\tconst error: ClientError = {\n\t\t\t\t\tstatus: statusCode,\n\t\t\t\t\tmessage: `Unable to parse raw limit from ${JSON.stringify(\n\t\t\t\t\t\tpotentialLimit,\n\t\t\t\t\t)}`,\n\t\t\t\t};\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t\t(rawLimit: RawLimit) => {\n\t\t\t\tconst limit = { ...rawLimit, type: limitType };\n\n\t\t\t\treturn limit;\n\t\t\t},\n\t\t)(RawLimit.decode(potentialLimit));\n\t}\n\n\tprivate async _fetch(args: {\n\t\turl: URL;\n\t\tmethod?: \"GET\" | \"POST\";\n\t\tbody?: unknown;\n\t\tuserAgent?: PrismicRepositoryUserAgents;\n\t\trepository?: string;\n\t}): Promise<Response> {\n\t\tconst cookies = await this.user.getAuthenticationCookies();\n\n\t\tconst extraHeaders: Record<string, string> = {};\n\n\t\tif (args.body) {\n\t\t\textraHeaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tif (args.repository) {\n\t\t\textraHeaders.repository = args.repository;\n\t\t}\n\n\t\treturn await fetch(args.url.toString(), {\n\t\t\tmethod: args.method,\n\t\t\tbody: args.body ? JSON.stringify(args.body) : undefined,\n\t\t\theaders: {\n\t\t\t\t// Some endpoints rely on the authorization header...\n\t\t\t\tAuthorization: `Bearer ${cookies[\"prismic-auth\"]}`,\n\t\t\t\tCookie: serializeCookies(cookies),\n\t\t\t\t\"User-Agent\": args.userAgent || SLICE_MACHINE_USER_AGENT,\n\t\t\t\t...extraHeaders,\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","sources":["../../../../src/managers/prismicRepository/types.ts"],"sourcesContent":["import {\n\tCustomType,\n\tSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\nimport * as t from \"io-ts\";\n\nexport const PrismicRepositoryUserAgent = {\n\tSliceMachine: \"prismic-cli/sm\",\n\tLegacyZero: \"prismic-cli/0\",\n} as const;\nexport type PrismicRepositoryUserAgents =\n\t(typeof PrismicRepositoryUserAgent)[keyof typeof PrismicRepositoryUserAgent];\n\nexport const PrismicRepositoryRole = {\n\tSuperUser: \"SuperUser\",\n\tAdministrator: \"Administrator\",\n\tOwner: \"Owner\",\n\tManager: \"Manager\",\n\tPublisher: \"Publisher\",\n\tWriter: \"Writer\",\n\tReadonly: \"Readonly\",\n} as const;\nexport type PrismicRepositoryRoles =\n\t(typeof PrismicRepositoryRole)[keyof typeof PrismicRepositoryRole];\n\nexport const PrismicRepository = t.type({\n\tdomain: t.string,\n\tname: t.string,\n\trole: t.union([\n\t\tt.keyof(PrismicRepositoryRole),\n\t\tt.record(t.string, t.keyof(PrismicRepositoryRole)),\n\t]),\n});\nexport type PrismicRepository = t.TypeOf<typeof PrismicRepository>;\n\nexport enum ChangeTypes {\n\tSLICE_INSERT = \"SLICE_INSERT\",\n\tSLICE_UPDATE = \"SLICE_UPDATE\",\n\tSLICE_DELETE = \"SLICE_DELETE\",\n\tCUSTOM_TYPE_INSERT = \"CUSTOM_TYPE_INSERT\",\n\tCUSTOM_TYPE_UPDATE = \"CUSTOM_TYPE_UPDATE\",\n\tCUSTOM_TYPE_DELETE = \"CUSTOM_TYPE_DELETE\",\n}\ninterface Change {\n\ttype: ChangeTypes;\n\tid: string;\n\tpayload: Record<string, unknown>;\n}\ninterface DeleteChange extends Change {\n\tpayload: {\n\t\tid: Change[\"id\"];\n\t};\n}\nexport interface SliceInsertChange extends Change {\n\ttype: ChangeTypes.SLICE_INSERT;\n\tpayload: SharedSlice;\n}\nexport interface SliceUpdateChange extends Change {\n\ttype: ChangeTypes.SLICE_UPDATE;\n\tpayload: SharedSlice;\n}\nexport interface SliceDeleteChange extends DeleteChange {\n\ttype: ChangeTypes.SLICE_DELETE;\n}\nexport interface CustomTypeInsertChange extends Change {\n\ttype: ChangeTypes.CUSTOM_TYPE_INSERT;\n\tpayload: CustomType;\n}\nexport interface CustomTypeUpdateChange extends Change {\n\ttype: ChangeTypes.CUSTOM_TYPE_UPDATE;\n\tpayload: CustomType;\n}\nexport interface CustomTypeDeleteChange extends DeleteChange {\n\ttype: ChangeTypes.CUSTOM_TYPE_DELETE;\n}\nexport type AllChangeTypes =\n\t| SliceInsertChange\n\t| SliceUpdateChange\n\t| SliceDeleteChange\n\t| CustomTypeInsertChange\n\t| CustomTypeUpdateChange\n\t| CustomTypeDeleteChange;\nexport interface BulkBody extends Record<string, unknown> {\n\tconfirmDeleteDocuments: boolean;\n\tchanges: AllChangeTypes[];\n}\n\nexport const RawLimit = t.type({\n\tdetails: t.type({\n\t\tcustomTypes: t.array(\n\t\t\tt.type({\n\t\t\t\tid: t.string,\n\t\t\t\tnumberOfDocuments: t.number,\n\t\t\t\turl: t.string,\n\t\t\t}),\n\t\t),\n\t}),\n});\nexport type RawLimit = t.TypeOf<typeof RawLimit>;\nexport enum LimitType {\n\tSOFT = \"SOFT\",\n\tHARD = \"HARD\",\n}\nexport type Limit = RawLimit & {\n\ttype: LimitType;\n};\n\nexport interface ClientError {\n\tstatus: number;\n\tmessage: string;\n}\n\ntype ChangeStatus = \"NEW\" | \"MODIFIED\" | \"DELETED\";\n\ntype CustomTypeChange = {\n\tid: string;\n\ttype: \"CustomType\";\n\tstatus: ChangeStatus;\n};\n\ntype SliceChange = {\n\tid: string;\n\ttype: \"Slice\";\n\tstatus: ChangeStatus;\n\tlibraryID: string;\n};\n\nexport type TransactionalMergeArgs = {\n\tconfirmDeleteDocuments: boolean;\n\tchanges: (CustomTypeChange | SliceChange)[];\n};\n\nexport type TransactionalMergeReturnType = Limit | null;\n\n/**\n * Framework id sent to Segment from wroom. Property used for the \"framework\"\n * and \"hasSlicemachine\" properties.\n *\n * Values from:\n * https://github.com/prismicio/wroom/blob/65d4f53fd46df7d366d80e7ba9c965339ac7369d/subprojects/common/app/models/Framework.scala#LL20C6-L20C6\n */\nexport type FrameworkWroomTelemetryID = \"next\" | \"nuxt\" | \"other\";\n\n/**\n * Starter id sent to Segment from wroom.Property used for the \"starter\"\n * properties.\n *\n * Values from:\n * https://github.com/prismicio/wroom/blob/65d4f53fd46df7d366d80e7ba9c965339ac7369d/conf/application.conf#L938\n */\nexport type StarterID =\n\t| \"next_multi_page\"\n\t| \"next_blog\"\n\t| \"next_multi_lang\"\n\t| \"nuxt_multi_page\"\n\t| \"nuxt_blog\"\n\t| \"nuxt_multi_lang\";\n"],"names":["t","ChangeTypes","LimitType"],"mappings":";;;;;;;;;;;;;;;;;;;;AAMO,MAAM,6BAA6B;AAAA,EACzC,cAAc;AAAA,EACd,YAAY;;AAKN,MAAM,wBAAwB;AAAA,EACpC,WAAW;AAAA,EACX,eAAe;AAAA,EACf,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;;AAKE,MAAA,oBAAoBA,aAAE,KAAK;AAAA,EACvC,QAAQA,aAAE;AAAA,EACV,MAAMA,aAAE;AAAA,EACR,MAAMA,aAAE,MAAM;AAAA,IACbA,aAAE,MAAM,qBAAqB;AAAA,IAC7BA,aAAE,OAAOA,aAAE,QAAQA,aAAE,MAAM,qBAAqB,CAAC;AAAA,EAAA,CACjD;AACD,CAAA;AAGWC,QAAA,cAAA;AAAA,CAAZ,SAAYA,cAAW;AACtBA,eAAA,cAAA,IAAA;AACAA,eAAA,cAAA,IAAA;AACAA,eAAA,cAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACD,GAPYA,wBAAAA,QAAAA,cAOX,CAAA,EAAA;AA6CY,MAAA,WAAWD,aAAE,KAAK;AAAA,EAC9B,SAASA,aAAE,KAAK;AAAA,IACf,aAAaA,aAAE,MACdA,aAAE,KAAK;AAAA,MACN,IAAIA,aAAE;AAAA,MACN,mBAAmBA,aAAE;AAAA,MACrB,KAAKA,aAAE;AAAA,IAAA,CACP,CAAC;AAAA,EAAA,CAEH;AACD,CAAA;AAEWE,QAAA,YAAA;AAAA,CAAZ,SAAYA,YAAS;AACpBA,aAAA,MAAA,IAAA;AACAA,aAAA,MAAA,IAAA;AACD,GAHYA,QAAA,cAAAA,oBAGX,CAAA,EAAA;;;;;"}
1
+ {"version":3,"file":"types.cjs","sources":["../../../../src/managers/prismicRepository/types.ts"],"sourcesContent":["import {\n\tCustomType,\n\tSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\nimport * as t from \"io-ts\";\n\nexport const PrismicRepositoryUserAgent = {\n\tSliceMachine: \"prismic-cli/sm\",\n\tLegacyZero: \"prismic-cli/0\",\n} as const;\nexport type PrismicRepositoryUserAgents =\n\t(typeof PrismicRepositoryUserAgent)[keyof typeof PrismicRepositoryUserAgent];\n\nexport const PrismicRepositoryRole = {\n\tSuperUser: \"SuperUser\",\n\tAdministrator: \"Administrator\",\n\tOwner: \"Owner\",\n\tManager: \"Manager\",\n\tPublisher: \"Publisher\",\n\tWriter: \"Writer\",\n\tReadonly: \"Readonly\",\n} as const;\nexport type PrismicRepositoryRoles =\n\t(typeof PrismicRepositoryRole)[keyof typeof PrismicRepositoryRole];\n\nexport const PrismicRepository = t.type({\n\tdomain: t.string,\n\tname: t.string,\n\trole: t.union([\n\t\tt.keyof(PrismicRepositoryRole),\n\t\tt.record(t.string, t.keyof(PrismicRepositoryRole)),\n\t]),\n});\nexport type PrismicRepository = t.TypeOf<typeof PrismicRepository>;\n\nexport enum ChangeTypes {\n\tSLICE_INSERT = \"SLICE_INSERT\",\n\tSLICE_UPDATE = \"SLICE_UPDATE\",\n\tSLICE_DELETE = \"SLICE_DELETE\",\n\tCUSTOM_TYPE_INSERT = \"CUSTOM_TYPE_INSERT\",\n\tCUSTOM_TYPE_UPDATE = \"CUSTOM_TYPE_UPDATE\",\n\tCUSTOM_TYPE_DELETE = \"CUSTOM_TYPE_DELETE\",\n}\ninterface Change {\n\ttype: ChangeTypes;\n\tid: string;\n\tpayload: Record<string, unknown>;\n}\ninterface DeleteChange extends Change {\n\tpayload: {\n\t\tid: Change[\"id\"];\n\t};\n}\nexport interface SliceInsertChange extends Change {\n\ttype: ChangeTypes.SLICE_INSERT;\n\tpayload: SharedSlice;\n}\nexport interface SliceUpdateChange extends Change {\n\ttype: ChangeTypes.SLICE_UPDATE;\n\tpayload: SharedSlice;\n}\nexport interface SliceDeleteChange extends DeleteChange {\n\ttype: ChangeTypes.SLICE_DELETE;\n}\nexport interface CustomTypeInsertChange extends Change {\n\ttype: ChangeTypes.CUSTOM_TYPE_INSERT;\n\tpayload: CustomType;\n}\nexport interface CustomTypeUpdateChange extends Change {\n\ttype: ChangeTypes.CUSTOM_TYPE_UPDATE;\n\tpayload: CustomType;\n}\nexport interface CustomTypeDeleteChange extends DeleteChange {\n\ttype: ChangeTypes.CUSTOM_TYPE_DELETE;\n}\nexport type AllChangeTypes =\n\t| SliceInsertChange\n\t| SliceUpdateChange\n\t| SliceDeleteChange\n\t| CustomTypeInsertChange\n\t| CustomTypeUpdateChange\n\t| CustomTypeDeleteChange;\nexport interface BulkBody extends Record<string, unknown> {\n\tconfirmDeleteDocuments: boolean;\n\tchanges: AllChangeTypes[];\n}\n\nexport const RawLimit = t.type({\n\tdetails: t.type({\n\t\tcustomTypes: t.array(\n\t\t\tt.type({\n\t\t\t\tid: t.string,\n\t\t\t\tnumberOfDocuments: t.number,\n\t\t\t\turl: t.string,\n\t\t\t}),\n\t\t),\n\t}),\n});\nexport type RawLimit = t.TypeOf<typeof RawLimit>;\nexport enum LimitType {\n\tSOFT = \"SOFT\",\n\tHARD = \"HARD\",\n}\nexport type Limit = RawLimit & {\n\ttype: LimitType;\n};\n\nexport interface ClientError {\n\tstatus: number;\n\tmessage: string;\n}\n\ntype ChangeStatus = \"NEW\" | \"MODIFIED\" | \"DELETED\";\n\ntype CustomTypeChange = {\n\tid: string;\n\ttype: \"CustomType\";\n\tstatus: ChangeStatus;\n};\n\ntype SliceChange = {\n\tid: string;\n\ttype: \"Slice\";\n\tstatus: ChangeStatus;\n\tlibraryID: string;\n};\n\nexport type TransactionalMergeArgs = {\n\tconfirmDeleteDocuments: boolean;\n\tchanges: (CustomTypeChange | SliceChange)[];\n};\n\nexport type TransactionalMergeReturnType = Limit | null;\n\n/**\n * Framework id sent to Segment from wroom. Property used for the \"framework\"\n * and \"hasSlicemachine\" properties.\n *\n * Values from:\n * https://github.com/prismicio/wroom/blob/65d4f53fd46df7d366d80e7ba9c965339ac7369d/subprojects/common/app/models/Framework.scala#LL20C6-L20C6\n */\nexport type FrameworkWroomTelemetryID = \"next\" | \"nuxt\" | \"other\";\n\n/**\n * Starter id sent to Segment from wroom.Property used for the \"starter\"\n * properties.\n *\n * Values from:\n * https://github.com/prismicio/wroom/blob/65d4f53fd46df7d366d80e7ba9c965339ac7369d/conf/application.conf#L938\n */\nexport type StarterId =\n\t| \"next_multi_page\"\n\t| \"next_blog\"\n\t| \"next_multi_lang\"\n\t| \"nuxt_multi_page\"\n\t| \"nuxt_blog\"\n\t| \"nuxt_multi_lang\";\n"],"names":["t","ChangeTypes","LimitType"],"mappings":";;;;;;;;;;;;;;;;;;;;AAMO,MAAM,6BAA6B;AAAA,EACzC,cAAc;AAAA,EACd,YAAY;;AAKN,MAAM,wBAAwB;AAAA,EACpC,WAAW;AAAA,EACX,eAAe;AAAA,EACf,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;;AAKE,MAAA,oBAAoBA,aAAE,KAAK;AAAA,EACvC,QAAQA,aAAE;AAAA,EACV,MAAMA,aAAE;AAAA,EACR,MAAMA,aAAE,MAAM;AAAA,IACbA,aAAE,MAAM,qBAAqB;AAAA,IAC7BA,aAAE,OAAOA,aAAE,QAAQA,aAAE,MAAM,qBAAqB,CAAC;AAAA,EAAA,CACjD;AACD,CAAA;AAGWC,QAAA,cAAA;AAAA,CAAZ,SAAYA,cAAW;AACtBA,eAAA,cAAA,IAAA;AACAA,eAAA,cAAA,IAAA;AACAA,eAAA,cAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACD,GAPYA,wBAAAA,QAAAA,cAOX,CAAA,EAAA;AA6CY,MAAA,WAAWD,aAAE,KAAK;AAAA,EAC9B,SAASA,aAAE,KAAK;AAAA,IACf,aAAaA,aAAE,MACdA,aAAE,KAAK;AAAA,MACN,IAAIA,aAAE;AAAA,MACN,mBAAmBA,aAAE;AAAA,MACrB,KAAKA,aAAE;AAAA,IAAA,CACP,CAAC;AAAA,EAAA,CAEH;AACD,CAAA;AAEWE,QAAA,YAAA;AAAA,CAAZ,SAAYA,YAAS;AACpBA,aAAA,MAAA,IAAA;AACAA,aAAA,MAAA,IAAA;AACD,GAHYA,QAAA,cAAAA,oBAGX,CAAA,EAAA;;;;;"}
@@ -135,5 +135,5 @@ export type FrameworkWroomTelemetryID = "next" | "nuxt" | "other";
135
135
  * Values from:
136
136
  * https://github.com/prismicio/wroom/blob/65d4f53fd46df7d366d80e7ba9c965339ac7369d/conf/application.conf#L938
137
137
  */
138
- export type StarterID = "next_multi_page" | "next_blog" | "next_multi_lang" | "nuxt_multi_page" | "nuxt_blog" | "nuxt_multi_lang";
138
+ export type StarterId = "next_multi_page" | "next_blog" | "next_multi_lang" | "nuxt_multi_page" | "nuxt_blog" | "nuxt_multi_lang";
139
139
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../src/managers/prismicRepository/types.ts"],"sourcesContent":["import {\n\tCustomType,\n\tSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\nimport * as t from \"io-ts\";\n\nexport const PrismicRepositoryUserAgent = {\n\tSliceMachine: \"prismic-cli/sm\",\n\tLegacyZero: \"prismic-cli/0\",\n} as const;\nexport type PrismicRepositoryUserAgents =\n\t(typeof PrismicRepositoryUserAgent)[keyof typeof PrismicRepositoryUserAgent];\n\nexport const PrismicRepositoryRole = {\n\tSuperUser: \"SuperUser\",\n\tAdministrator: \"Administrator\",\n\tOwner: \"Owner\",\n\tManager: \"Manager\",\n\tPublisher: \"Publisher\",\n\tWriter: \"Writer\",\n\tReadonly: \"Readonly\",\n} as const;\nexport type PrismicRepositoryRoles =\n\t(typeof PrismicRepositoryRole)[keyof typeof PrismicRepositoryRole];\n\nexport const PrismicRepository = t.type({\n\tdomain: t.string,\n\tname: t.string,\n\trole: t.union([\n\t\tt.keyof(PrismicRepositoryRole),\n\t\tt.record(t.string, t.keyof(PrismicRepositoryRole)),\n\t]),\n});\nexport type PrismicRepository = t.TypeOf<typeof PrismicRepository>;\n\nexport enum ChangeTypes {\n\tSLICE_INSERT = \"SLICE_INSERT\",\n\tSLICE_UPDATE = \"SLICE_UPDATE\",\n\tSLICE_DELETE = \"SLICE_DELETE\",\n\tCUSTOM_TYPE_INSERT = \"CUSTOM_TYPE_INSERT\",\n\tCUSTOM_TYPE_UPDATE = \"CUSTOM_TYPE_UPDATE\",\n\tCUSTOM_TYPE_DELETE = \"CUSTOM_TYPE_DELETE\",\n}\ninterface Change {\n\ttype: ChangeTypes;\n\tid: string;\n\tpayload: Record<string, unknown>;\n}\ninterface DeleteChange extends Change {\n\tpayload: {\n\t\tid: Change[\"id\"];\n\t};\n}\nexport interface SliceInsertChange extends Change {\n\ttype: ChangeTypes.SLICE_INSERT;\n\tpayload: SharedSlice;\n}\nexport interface SliceUpdateChange extends Change {\n\ttype: ChangeTypes.SLICE_UPDATE;\n\tpayload: SharedSlice;\n}\nexport interface SliceDeleteChange extends DeleteChange {\n\ttype: ChangeTypes.SLICE_DELETE;\n}\nexport interface CustomTypeInsertChange extends Change {\n\ttype: ChangeTypes.CUSTOM_TYPE_INSERT;\n\tpayload: CustomType;\n}\nexport interface CustomTypeUpdateChange extends Change {\n\ttype: ChangeTypes.CUSTOM_TYPE_UPDATE;\n\tpayload: CustomType;\n}\nexport interface CustomTypeDeleteChange extends DeleteChange {\n\ttype: ChangeTypes.CUSTOM_TYPE_DELETE;\n}\nexport type AllChangeTypes =\n\t| SliceInsertChange\n\t| SliceUpdateChange\n\t| SliceDeleteChange\n\t| CustomTypeInsertChange\n\t| CustomTypeUpdateChange\n\t| CustomTypeDeleteChange;\nexport interface BulkBody extends Record<string, unknown> {\n\tconfirmDeleteDocuments: boolean;\n\tchanges: AllChangeTypes[];\n}\n\nexport const RawLimit = t.type({\n\tdetails: t.type({\n\t\tcustomTypes: t.array(\n\t\t\tt.type({\n\t\t\t\tid: t.string,\n\t\t\t\tnumberOfDocuments: t.number,\n\t\t\t\turl: t.string,\n\t\t\t}),\n\t\t),\n\t}),\n});\nexport type RawLimit = t.TypeOf<typeof RawLimit>;\nexport enum LimitType {\n\tSOFT = \"SOFT\",\n\tHARD = \"HARD\",\n}\nexport type Limit = RawLimit & {\n\ttype: LimitType;\n};\n\nexport interface ClientError {\n\tstatus: number;\n\tmessage: string;\n}\n\ntype ChangeStatus = \"NEW\" | \"MODIFIED\" | \"DELETED\";\n\ntype CustomTypeChange = {\n\tid: string;\n\ttype: \"CustomType\";\n\tstatus: ChangeStatus;\n};\n\ntype SliceChange = {\n\tid: string;\n\ttype: \"Slice\";\n\tstatus: ChangeStatus;\n\tlibraryID: string;\n};\n\nexport type TransactionalMergeArgs = {\n\tconfirmDeleteDocuments: boolean;\n\tchanges: (CustomTypeChange | SliceChange)[];\n};\n\nexport type TransactionalMergeReturnType = Limit | null;\n\n/**\n * Framework id sent to Segment from wroom. Property used for the \"framework\"\n * and \"hasSlicemachine\" properties.\n *\n * Values from:\n * https://github.com/prismicio/wroom/blob/65d4f53fd46df7d366d80e7ba9c965339ac7369d/subprojects/common/app/models/Framework.scala#LL20C6-L20C6\n */\nexport type FrameworkWroomTelemetryID = \"next\" | \"nuxt\" | \"other\";\n\n/**\n * Starter id sent to Segment from wroom.Property used for the \"starter\"\n * properties.\n *\n * Values from:\n * https://github.com/prismicio/wroom/blob/65d4f53fd46df7d366d80e7ba9c965339ac7369d/conf/application.conf#L938\n */\nexport type StarterID =\n\t| \"next_multi_page\"\n\t| \"next_blog\"\n\t| \"next_multi_lang\"\n\t| \"nuxt_multi_page\"\n\t| \"nuxt_blog\"\n\t| \"nuxt_multi_lang\";\n"],"names":["ChangeTypes","LimitType"],"mappings":";AAMO,MAAM,6BAA6B;AAAA,EACzC,cAAc;AAAA,EACd,YAAY;;AAKN,MAAM,wBAAwB;AAAA,EACpC,WAAW;AAAA,EACX,eAAe;AAAA,EACf,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;;AAKE,MAAA,oBAAoB,EAAE,KAAK;AAAA,EACvC,QAAQ,EAAE;AAAA,EACV,MAAM,EAAE;AAAA,EACR,MAAM,EAAE,MAAM;AAAA,IACb,EAAE,MAAM,qBAAqB;AAAA,IAC7B,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAAA,EAAA,CACjD;AACD,CAAA;AAGW,IAAA;AAAA,CAAZ,SAAYA,cAAW;AACtBA,eAAA,cAAA,IAAA;AACAA,eAAA,cAAA,IAAA;AACAA,eAAA,cAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACD,GAPY,gBAAA,cAOX,CAAA,EAAA;AA6CY,MAAA,WAAW,EAAE,KAAK;AAAA,EAC9B,SAAS,EAAE,KAAK;AAAA,IACf,aAAa,EAAE,MACd,EAAE,KAAK;AAAA,MACN,IAAI,EAAE;AAAA,MACN,mBAAmB,EAAE;AAAA,MACrB,KAAK,EAAE;AAAA,IAAA,CACP,CAAC;AAAA,EAAA,CAEH;AACD,CAAA;AAEW,IAAA;AAAA,CAAZ,SAAYC,YAAS;AACpBA,aAAA,MAAA,IAAA;AACAA,aAAA,MAAA,IAAA;AACD,GAHY,cAAA,YAGX,CAAA,EAAA;"}
1
+ {"version":3,"file":"types.js","sources":["../../../../src/managers/prismicRepository/types.ts"],"sourcesContent":["import {\n\tCustomType,\n\tSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\nimport * as t from \"io-ts\";\n\nexport const PrismicRepositoryUserAgent = {\n\tSliceMachine: \"prismic-cli/sm\",\n\tLegacyZero: \"prismic-cli/0\",\n} as const;\nexport type PrismicRepositoryUserAgents =\n\t(typeof PrismicRepositoryUserAgent)[keyof typeof PrismicRepositoryUserAgent];\n\nexport const PrismicRepositoryRole = {\n\tSuperUser: \"SuperUser\",\n\tAdministrator: \"Administrator\",\n\tOwner: \"Owner\",\n\tManager: \"Manager\",\n\tPublisher: \"Publisher\",\n\tWriter: \"Writer\",\n\tReadonly: \"Readonly\",\n} as const;\nexport type PrismicRepositoryRoles =\n\t(typeof PrismicRepositoryRole)[keyof typeof PrismicRepositoryRole];\n\nexport const PrismicRepository = t.type({\n\tdomain: t.string,\n\tname: t.string,\n\trole: t.union([\n\t\tt.keyof(PrismicRepositoryRole),\n\t\tt.record(t.string, t.keyof(PrismicRepositoryRole)),\n\t]),\n});\nexport type PrismicRepository = t.TypeOf<typeof PrismicRepository>;\n\nexport enum ChangeTypes {\n\tSLICE_INSERT = \"SLICE_INSERT\",\n\tSLICE_UPDATE = \"SLICE_UPDATE\",\n\tSLICE_DELETE = \"SLICE_DELETE\",\n\tCUSTOM_TYPE_INSERT = \"CUSTOM_TYPE_INSERT\",\n\tCUSTOM_TYPE_UPDATE = \"CUSTOM_TYPE_UPDATE\",\n\tCUSTOM_TYPE_DELETE = \"CUSTOM_TYPE_DELETE\",\n}\ninterface Change {\n\ttype: ChangeTypes;\n\tid: string;\n\tpayload: Record<string, unknown>;\n}\ninterface DeleteChange extends Change {\n\tpayload: {\n\t\tid: Change[\"id\"];\n\t};\n}\nexport interface SliceInsertChange extends Change {\n\ttype: ChangeTypes.SLICE_INSERT;\n\tpayload: SharedSlice;\n}\nexport interface SliceUpdateChange extends Change {\n\ttype: ChangeTypes.SLICE_UPDATE;\n\tpayload: SharedSlice;\n}\nexport interface SliceDeleteChange extends DeleteChange {\n\ttype: ChangeTypes.SLICE_DELETE;\n}\nexport interface CustomTypeInsertChange extends Change {\n\ttype: ChangeTypes.CUSTOM_TYPE_INSERT;\n\tpayload: CustomType;\n}\nexport interface CustomTypeUpdateChange extends Change {\n\ttype: ChangeTypes.CUSTOM_TYPE_UPDATE;\n\tpayload: CustomType;\n}\nexport interface CustomTypeDeleteChange extends DeleteChange {\n\ttype: ChangeTypes.CUSTOM_TYPE_DELETE;\n}\nexport type AllChangeTypes =\n\t| SliceInsertChange\n\t| SliceUpdateChange\n\t| SliceDeleteChange\n\t| CustomTypeInsertChange\n\t| CustomTypeUpdateChange\n\t| CustomTypeDeleteChange;\nexport interface BulkBody extends Record<string, unknown> {\n\tconfirmDeleteDocuments: boolean;\n\tchanges: AllChangeTypes[];\n}\n\nexport const RawLimit = t.type({\n\tdetails: t.type({\n\t\tcustomTypes: t.array(\n\t\t\tt.type({\n\t\t\t\tid: t.string,\n\t\t\t\tnumberOfDocuments: t.number,\n\t\t\t\turl: t.string,\n\t\t\t}),\n\t\t),\n\t}),\n});\nexport type RawLimit = t.TypeOf<typeof RawLimit>;\nexport enum LimitType {\n\tSOFT = \"SOFT\",\n\tHARD = \"HARD\",\n}\nexport type Limit = RawLimit & {\n\ttype: LimitType;\n};\n\nexport interface ClientError {\n\tstatus: number;\n\tmessage: string;\n}\n\ntype ChangeStatus = \"NEW\" | \"MODIFIED\" | \"DELETED\";\n\ntype CustomTypeChange = {\n\tid: string;\n\ttype: \"CustomType\";\n\tstatus: ChangeStatus;\n};\n\ntype SliceChange = {\n\tid: string;\n\ttype: \"Slice\";\n\tstatus: ChangeStatus;\n\tlibraryID: string;\n};\n\nexport type TransactionalMergeArgs = {\n\tconfirmDeleteDocuments: boolean;\n\tchanges: (CustomTypeChange | SliceChange)[];\n};\n\nexport type TransactionalMergeReturnType = Limit | null;\n\n/**\n * Framework id sent to Segment from wroom. Property used for the \"framework\"\n * and \"hasSlicemachine\" properties.\n *\n * Values from:\n * https://github.com/prismicio/wroom/blob/65d4f53fd46df7d366d80e7ba9c965339ac7369d/subprojects/common/app/models/Framework.scala#LL20C6-L20C6\n */\nexport type FrameworkWroomTelemetryID = \"next\" | \"nuxt\" | \"other\";\n\n/**\n * Starter id sent to Segment from wroom.Property used for the \"starter\"\n * properties.\n *\n * Values from:\n * https://github.com/prismicio/wroom/blob/65d4f53fd46df7d366d80e7ba9c965339ac7369d/conf/application.conf#L938\n */\nexport type StarterId =\n\t| \"next_multi_page\"\n\t| \"next_blog\"\n\t| \"next_multi_lang\"\n\t| \"nuxt_multi_page\"\n\t| \"nuxt_blog\"\n\t| \"nuxt_multi_lang\";\n"],"names":["ChangeTypes","LimitType"],"mappings":";AAMO,MAAM,6BAA6B;AAAA,EACzC,cAAc;AAAA,EACd,YAAY;;AAKN,MAAM,wBAAwB;AAAA,EACpC,WAAW;AAAA,EACX,eAAe;AAAA,EACf,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;;AAKE,MAAA,oBAAoB,EAAE,KAAK;AAAA,EACvC,QAAQ,EAAE;AAAA,EACV,MAAM,EAAE;AAAA,EACR,MAAM,EAAE,MAAM;AAAA,IACb,EAAE,MAAM,qBAAqB;AAAA,IAC7B,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAAA,EAAA,CACjD;AACD,CAAA;AAGW,IAAA;AAAA,CAAZ,SAAYA,cAAW;AACtBA,eAAA,cAAA,IAAA;AACAA,eAAA,cAAA,IAAA;AACAA,eAAA,cAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACAA,eAAA,oBAAA,IAAA;AACD,GAPY,gBAAA,cAOX,CAAA,EAAA;AA6CY,MAAA,WAAW,EAAE,KAAK;AAAA,EAC9B,SAAS,EAAE,KAAK;AAAA,IACf,aAAa,EAAE,MACd,EAAE,KAAK;AAAA,MACN,IAAI,EAAE;AAAA,MACN,mBAAmB,EAAE;AAAA,MACrB,KAAK,EAAE;AAAA,IAAA,CACP,CAAC;AAAA,EAAA,CAEH;AACD,CAAA;AAEW,IAAA;AAAA,CAAZ,SAAYC,YAAS;AACpBA,aAAA,MAAA,IAAA;AACAA,aAAA,MAAA,IAAA;AACD,GAHY,cAAA,YAGX,CAAA,EAAA;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slicemachine/manager",
3
- "version": "0.3.2-dev-next-release.0",
3
+ "version": "0.3.2-dev-next-release.1",
4
4
  "description": "Manage all aspects of a Slice Machine project.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -65,7 +65,7 @@
65
65
  "@prismicio/custom-types-client": "1.2.0-alpha.0",
66
66
  "@prismicio/mocks": "2.0.0-alpha.2",
67
67
  "@prismicio/types-internal": "2.0.0-beta.1",
68
- "@slicemachine/plugin-kit": "0.3.2-dev-next-release.0",
68
+ "@slicemachine/plugin-kit": "0.3.2-dev-next-release.1",
69
69
  "@wooorm/starry-night": "^1.6.0",
70
70
  "analytics-node": "^6.2.0",
71
71
  "cookie": "^0.5.0",
@@ -138,5 +138,5 @@
138
138
  "publishConfig": {
139
139
  "access": "public"
140
140
  },
141
- "gitHead": "477bb724989a0bdf173cce9cbb37ead7d2159d2e"
141
+ "gitHead": "90e065840d9d99b69115d9702049cdd142e69188"
142
142
  }
package/src/index.ts CHANGED
@@ -5,7 +5,7 @@ export type { CustomTypeFormat } from "./managers/customTypes/types";
5
5
  export type {
6
6
  PrismicRepository,
7
7
  FrameworkWroomTelemetryID,
8
- StarterID,
8
+ StarterId,
9
9
  } from "./managers/prismicRepository/types";
10
10
 
11
11
  export type { SliceMachineManager } from "./managers/SliceMachineManager";
@@ -25,6 +25,7 @@ import {
25
25
  TransactionalMergeArgs,
26
26
  TransactionalMergeReturnType,
27
27
  FrameworkWroomTelemetryID,
28
+ StarterId,
28
29
  } from "./types";
29
30
  import { assertPluginsInitialized } from "../../lib/assertPluginsInitialized";
30
31
  import { UnauthenticatedError } from "../../errors";
@@ -42,8 +43,7 @@ type PrismicRepositoryManagerCheckExistsArgs = {
42
43
  type PrismicRepositoryManagerCreateArgs = {
43
44
  domain: string;
44
45
  framework: FrameworkWroomTelemetryID;
45
- // TODO(DT-1386): Handle starter detection for Segment
46
- // starterID?: StarterID;
46
+ starterId?: StarterId;
47
47
  };
48
48
 
49
49
  type PrismicRepositoryManagerDeleteArgs = {
@@ -158,8 +158,7 @@ export class PrismicRepositoryManager extends BaseManager {
158
158
  domain: args.domain,
159
159
  // These properties are optional in the API but needed for tracking
160
160
  framework: args.framework,
161
- // TODO(DT-1386): Handle starter detection for Segment
162
- // starterID: args.starterID,
161
+ starterId: args.starterId,
163
162
  };
164
163
 
165
164
  const res = await this._fetch({
@@ -148,7 +148,7 @@ export type FrameworkWroomTelemetryID = "next" | "nuxt" | "other";
148
148
  * Values from:
149
149
  * https://github.com/prismicio/wroom/blob/65d4f53fd46df7d366d80e7ba9c965339ac7369d/conf/application.conf#L938
150
150
  */
151
- export type StarterID =
151
+ export type StarterId =
152
152
  | "next_multi_page"
153
153
  | "next_blog"
154
154
  | "next_multi_lang"