@slicemachine/manager 0.18.1-beta.3 → 0.18.1-beta.5

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 (38) hide show
  1. package/dist/client/index.d.ts +2 -1
  2. package/dist/client.cjs +3 -0
  3. package/dist/client.cjs.map +1 -1
  4. package/dist/client.js +5 -2
  5. package/dist/client.js.map +1 -1
  6. package/dist/constants/GIT_PROVIDER.cjs +7 -0
  7. package/dist/constants/GIT_PROVIDER.cjs.map +1 -0
  8. package/dist/constants/GIT_PROVIDER.d.ts +4 -0
  9. package/dist/constants/GIT_PROVIDER.js +7 -0
  10. package/dist/constants/GIT_PROVIDER.js.map +1 -0
  11. package/dist/constants/GIT_PROVIDER_APP_SLUGS.cjs +26 -0
  12. package/dist/constants/GIT_PROVIDER_APP_SLUGS.cjs.map +1 -0
  13. package/dist/constants/GIT_PROVIDER_APP_SLUGS.d.ts +3 -0
  14. package/dist/constants/GIT_PROVIDER_APP_SLUGS.js +26 -0
  15. package/dist/constants/GIT_PROVIDER_APP_SLUGS.js.map +1 -0
  16. package/dist/errors.cjs +11 -0
  17. package/dist/errors.cjs.map +1 -1
  18. package/dist/errors.d.ts +5 -1
  19. package/dist/errors.js +12 -1
  20. package/dist/errors.js.map +1 -1
  21. package/dist/index.cjs +1 -0
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +2 -1
  25. package/dist/managers/git/GitManager.cjs +19 -3
  26. package/dist/managers/git/GitManager.cjs.map +1 -1
  27. package/dist/managers/git/GitManager.d.ts +10 -6
  28. package/dist/managers/git/GitManager.js +20 -4
  29. package/dist/managers/git/GitManager.js.map +1 -1
  30. package/dist/managers/git/types.d.ts +4 -3
  31. package/package.json +2 -2
  32. package/src/client/index.ts +3 -0
  33. package/src/constants/GIT_PROVIDER.ts +5 -0
  34. package/src/constants/GIT_PROVIDER_APP_SLUGS.ts +28 -0
  35. package/src/errors.ts +11 -1
  36. package/src/index.ts +1 -0
  37. package/src/managers/git/GitManager.ts +37 -9
  38. package/src/managers/git/types.ts +5 -3
@@ -1,7 +1,8 @@
1
1
  export { createSliceMachineManagerClient } from "../managers/createSliceMachineManagerClient";
2
2
  export type { CreateSliceMachineManagerClientArgs, SliceMachineManagerClient, } from "../managers/createSliceMachineManagerClient";
3
3
  export type { SimulatorManagerReadSliceSimulatorSetupStep, SimulatorManagerReadSliceSimulatorSetupStepsReturnType, } from "../managers/simulator/SimulatorManager";
4
+ export { GIT_PROVIDER, type GitProvider } from "../constants/GIT_PROVIDER";
4
5
  export type { Environment } from "../managers/prismicRepository/types";
5
6
  export type { SliceMachineManagerPushSliceReturnType } from "../managers/slices/SlicesManager";
6
- export { InternalError, NotFoundError, SliceMachineError, UnauthenticatedError, UnauthorizedError, UnexpectedDataError, isInternalError, isNotFoundError, isPluginError, isSliceMachineError, isUnauthenticatedError, isUnauthorizedError, isUnexpectedDataError, isInvalidActiveEnvironmentError, } from "../errors";
7
+ export { InternalError, NotFoundError, SliceMachineError, UnauthenticatedError, UnauthorizedError, UnexpectedDataError, isInternalError, isNotFoundError, isPluginError, isSliceMachineError, isUnauthenticatedError, isUnauthorizedError, isUnexpectedDataError, isInvalidActiveEnvironmentError, isUnsupportedError, } from "../errors";
7
8
  export { DecodeError } from "../lib/DecodeError";
package/dist/client.cjs CHANGED
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const createSliceMachineManagerClient = require("./managers/createSliceMachineManagerClient.cjs");
4
+ const GIT_PROVIDER = require("./constants/GIT_PROVIDER.cjs");
4
5
  const errors = require("./errors.cjs");
5
6
  const DecodeError = require("./lib/DecodeError.cjs");
6
7
  exports.createSliceMachineManagerClient = createSliceMachineManagerClient.createSliceMachineManagerClient;
8
+ exports.GIT_PROVIDER = GIT_PROVIDER.GIT_PROVIDER;
7
9
  exports.InternalError = errors.InternalError;
8
10
  exports.NotFoundError = errors.NotFoundError;
9
11
  exports.SliceMachineError = errors.SliceMachineError;
@@ -18,5 +20,6 @@ exports.isSliceMachineError = errors.isSliceMachineError;
18
20
  exports.isUnauthenticatedError = errors.isUnauthenticatedError;
19
21
  exports.isUnauthorizedError = errors.isUnauthorizedError;
20
22
  exports.isUnexpectedDataError = errors.isUnexpectedDataError;
23
+ exports.isUnsupportedError = errors.isUnsupportedError;
21
24
  exports.DecodeError = DecodeError.DecodeError;
22
25
  //# sourceMappingURL=client.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"client.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/client.js CHANGED
@@ -1,8 +1,10 @@
1
1
  import { createSliceMachineManagerClient } from "./managers/createSliceMachineManagerClient.js";
2
- import { InternalError, NotFoundError, SliceMachineError, UnauthenticatedError, UnauthorizedError, UnexpectedDataError, isInternalError, isInvalidActiveEnvironmentError, isNotFoundError, isPluginError, isSliceMachineError, isUnauthenticatedError, isUnauthorizedError, isUnexpectedDataError } from "./errors.js";
2
+ import { GIT_PROVIDER } from "./constants/GIT_PROVIDER.js";
3
+ import { InternalError, NotFoundError, SliceMachineError, UnauthenticatedError, UnauthorizedError, UnexpectedDataError, isInternalError, isInvalidActiveEnvironmentError, isNotFoundError, isPluginError, isSliceMachineError, isUnauthenticatedError, isUnauthorizedError, isUnexpectedDataError, isUnsupportedError } from "./errors.js";
3
4
  import { DecodeError } from "./lib/DecodeError.js";
4
5
  export {
5
6
  DecodeError,
7
+ GIT_PROVIDER,
6
8
  InternalError,
7
9
  NotFoundError,
8
10
  SliceMachineError,
@@ -17,6 +19,7 @@ export {
17
19
  isSliceMachineError,
18
20
  isUnauthenticatedError,
19
21
  isUnauthorizedError,
20
- isUnexpectedDataError
22
+ isUnexpectedDataError,
23
+ isUnsupportedError
21
24
  };
22
25
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
1
+ {"version":3,"file":"client.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const GIT_PROVIDER = {
4
+ GitHub: "gitHub"
5
+ };
6
+ exports.GIT_PROVIDER = GIT_PROVIDER;
7
+ //# sourceMappingURL=GIT_PROVIDER.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GIT_PROVIDER.cjs","sources":["../../../src/constants/GIT_PROVIDER.ts"],"sourcesContent":["export const GIT_PROVIDER = {\n\tGitHub: \"gitHub\",\n} as const;\n\nexport type GitProvider = (typeof GIT_PROVIDER)[keyof typeof GIT_PROVIDER];\n"],"names":[],"mappings":";;AAAO,MAAM,eAAe;AAAA,EAC3B,QAAQ;;;"}
@@ -0,0 +1,4 @@
1
+ export declare const GIT_PROVIDER: {
2
+ readonly GitHub: "gitHub";
3
+ };
4
+ export type GitProvider = (typeof GIT_PROVIDER)[keyof typeof GIT_PROVIDER];
@@ -0,0 +1,7 @@
1
+ const GIT_PROVIDER = {
2
+ GitHub: "gitHub"
3
+ };
4
+ export {
5
+ GIT_PROVIDER
6
+ };
7
+ //# sourceMappingURL=GIT_PROVIDER.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GIT_PROVIDER.js","sources":["../../../src/constants/GIT_PROVIDER.ts"],"sourcesContent":["export const GIT_PROVIDER = {\n\tGitHub: \"gitHub\",\n} as const;\n\nexport type GitProvider = (typeof GIT_PROVIDER)[keyof typeof GIT_PROVIDER];\n"],"names":[],"mappings":"AAAO,MAAM,eAAe;AAAA,EAC3B,QAAQ;;"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const APPLICATION_MODE = require("./APPLICATION_MODE.cjs");
4
+ const GIT_PROVIDER = require("./GIT_PROVIDER.cjs");
5
+ const GIT_PROVIDER_APP_SLUGS = (() => {
6
+ switch (process.env.SM_ENV) {
7
+ case APPLICATION_MODE.APPLICATION_MODE.Development: {
8
+ return {
9
+ [GIT_PROVIDER.GIT_PROVIDER.GitHub]: process.env.GITHUB_APP_SLUG ?? "prismic-io-staging"
10
+ };
11
+ }
12
+ case APPLICATION_MODE.APPLICATION_MODE.Staging: {
13
+ return {
14
+ [GIT_PROVIDER.GIT_PROVIDER.GitHub]: "prismic-io-staging"
15
+ };
16
+ }
17
+ case APPLICATION_MODE.APPLICATION_MODE.Production:
18
+ default: {
19
+ return {
20
+ [GIT_PROVIDER.GIT_PROVIDER.GitHub]: "prismic-io"
21
+ };
22
+ }
23
+ }
24
+ })();
25
+ exports.GIT_PROVIDER_APP_SLUGS = GIT_PROVIDER_APP_SLUGS;
26
+ //# sourceMappingURL=GIT_PROVIDER_APP_SLUGS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GIT_PROVIDER_APP_SLUGS.cjs","sources":["../../../src/constants/GIT_PROVIDER_APP_SLUGS.ts"],"sourcesContent":["import { APPLICATION_MODE } from \"./APPLICATION_MODE\";\nimport { GIT_PROVIDER, GitProvider } from \"./GIT_PROVIDER\";\n\nexport type GitProviderAppSlugs = Record<GitProvider, string>;\n\nexport const GIT_PROVIDER_APP_SLUGS: GitProviderAppSlugs = (() => {\n\tswitch (process.env.SM_ENV) {\n\t\tcase APPLICATION_MODE.Development: {\n\t\t\treturn {\n\t\t\t\t[GIT_PROVIDER.GitHub]:\n\t\t\t\t\tprocess.env.GITHUB_APP_SLUG ?? \"prismic-io-staging\",\n\t\t\t};\n\t\t}\n\n\t\tcase APPLICATION_MODE.Staging: {\n\t\t\treturn {\n\t\t\t\t[GIT_PROVIDER.GitHub]: \"prismic-io-staging\",\n\t\t\t};\n\t\t}\n\n\t\tcase APPLICATION_MODE.Production:\n\t\tdefault: {\n\t\t\treturn {\n\t\t\t\t[GIT_PROVIDER.GitHub]: \"prismic-io\",\n\t\t\t};\n\t\t}\n\t}\n})();\n"],"names":["APPLICATION_MODE","GIT_PROVIDER"],"mappings":";;;;AAKO,MAAM,0BAA+C,MAAK;AACxD,UAAA,QAAQ,IAAI,QAAQ;AAAA,IAC3B,KAAKA,iBAAAA,iBAAiB,aAAa;AAC3B,aAAA;AAAA,QACN,CAACC,aAAa,aAAA,MAAM,GACnB,QAAQ,IAAI,mBAAmB;AAAA,MAAA;AAAA,IAEjC;AAAA,IAED,KAAKD,iBAAAA,iBAAiB,SAAS;AACvB,aAAA;AAAA,QACN,CAACC,aAAAA,aAAa,MAAM,GAAG;AAAA,MAAA;AAAA,IAExB;AAAA,IAED,KAAKD,iBAAAA,iBAAiB;AAAA,IACtB,SAAS;AACD,aAAA;AAAA,QACN,CAACC,aAAAA,aAAa,MAAM,GAAG;AAAA,MAAA;AAAA,IAExB;AAAA,EACD;AACF;;"}
@@ -0,0 +1,3 @@
1
+ import { GitProvider } from "./GIT_PROVIDER";
2
+ export type GitProviderAppSlugs = Record<GitProvider, string>;
3
+ export declare const GIT_PROVIDER_APP_SLUGS: GitProviderAppSlugs;
@@ -0,0 +1,26 @@
1
+ import { APPLICATION_MODE } from "./APPLICATION_MODE.js";
2
+ import { GIT_PROVIDER } from "./GIT_PROVIDER.js";
3
+ const GIT_PROVIDER_APP_SLUGS = (() => {
4
+ switch (process.env.SM_ENV) {
5
+ case APPLICATION_MODE.Development: {
6
+ return {
7
+ [GIT_PROVIDER.GitHub]: process.env.GITHUB_APP_SLUG ?? "prismic-io-staging"
8
+ };
9
+ }
10
+ case APPLICATION_MODE.Staging: {
11
+ return {
12
+ [GIT_PROVIDER.GitHub]: "prismic-io-staging"
13
+ };
14
+ }
15
+ case APPLICATION_MODE.Production:
16
+ default: {
17
+ return {
18
+ [GIT_PROVIDER.GitHub]: "prismic-io"
19
+ };
20
+ }
21
+ }
22
+ })();
23
+ export {
24
+ GIT_PROVIDER_APP_SLUGS
25
+ };
26
+ //# sourceMappingURL=GIT_PROVIDER_APP_SLUGS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GIT_PROVIDER_APP_SLUGS.js","sources":["../../../src/constants/GIT_PROVIDER_APP_SLUGS.ts"],"sourcesContent":["import { APPLICATION_MODE } from \"./APPLICATION_MODE\";\nimport { GIT_PROVIDER, GitProvider } from \"./GIT_PROVIDER\";\n\nexport type GitProviderAppSlugs = Record<GitProvider, string>;\n\nexport const GIT_PROVIDER_APP_SLUGS: GitProviderAppSlugs = (() => {\n\tswitch (process.env.SM_ENV) {\n\t\tcase APPLICATION_MODE.Development: {\n\t\t\treturn {\n\t\t\t\t[GIT_PROVIDER.GitHub]:\n\t\t\t\t\tprocess.env.GITHUB_APP_SLUG ?? \"prismic-io-staging\",\n\t\t\t};\n\t\t}\n\n\t\tcase APPLICATION_MODE.Staging: {\n\t\t\treturn {\n\t\t\t\t[GIT_PROVIDER.GitHub]: \"prismic-io-staging\",\n\t\t\t};\n\t\t}\n\n\t\tcase APPLICATION_MODE.Production:\n\t\tdefault: {\n\t\t\treturn {\n\t\t\t\t[GIT_PROVIDER.GitHub]: \"prismic-io\",\n\t\t\t};\n\t\t}\n\t}\n})();\n"],"names":[],"mappings":";;AAKO,MAAM,0BAA+C,MAAK;AACxD,UAAA,QAAQ,IAAI,QAAQ;AAAA,IAC3B,KAAK,iBAAiB,aAAa;AAC3B,aAAA;AAAA,QACN,CAAC,aAAa,MAAM,GACnB,QAAQ,IAAI,mBAAmB;AAAA,MAAA;AAAA,IAEjC;AAAA,IAED,KAAK,iBAAiB,SAAS;AACvB,aAAA;AAAA,QACN,CAAC,aAAa,MAAM,GAAG;AAAA,MAAA;AAAA,IAExB;AAAA,IAED,KAAK,iBAAiB;AAAA,IACtB,SAAS;AACD,aAAA;AAAA,QACN,CAAC,aAAa,MAAM,GAAG;AAAA,MAAA;AAAA,IAExB;AAAA,EACD;AACF;"}
package/dist/errors.cjs CHANGED
@@ -63,6 +63,12 @@ class InvalidActiveEnvironmentError extends SliceMachineError {
63
63
  __publicField(this, "name", "SMInvalidActiveEnvironmentError");
64
64
  }
65
65
  }
66
+ class UnsupportedError extends SliceMachineError {
67
+ constructor() {
68
+ super(...arguments);
69
+ __publicField(this, "name", "SMUnsupportedError");
70
+ }
71
+ }
66
72
  const isSliceMachineError = (error, name) => {
67
73
  const isErrorInstance = error instanceof Error;
68
74
  return name === void 0 ? isErrorInstance && error.name.startsWith("SM") : isErrorInstance && error.name === name;
@@ -88,6 +94,9 @@ const isPluginError = (error) => {
88
94
  const isInvalidActiveEnvironmentError = (error) => {
89
95
  return isSliceMachineError(error, "SMInvalidActiveEnvironmentError");
90
96
  };
97
+ const isUnsupportedError = (error) => {
98
+ return isSliceMachineError(error, "SMUnsupportedError");
99
+ };
91
100
  exports.InternalError = InternalError;
92
101
  exports.InvalidActiveEnvironmentError = InvalidActiveEnvironmentError;
93
102
  exports.NotFoundError = NotFoundError;
@@ -97,6 +106,7 @@ exports.SliceMachineError = SliceMachineError;
97
106
  exports.UnauthenticatedError = UnauthenticatedError;
98
107
  exports.UnauthorizedError = UnauthorizedError;
99
108
  exports.UnexpectedDataError = UnexpectedDataError;
109
+ exports.UnsupportedError = UnsupportedError;
100
110
  exports.isInternalError = isInternalError;
101
111
  exports.isInvalidActiveEnvironmentError = isInvalidActiveEnvironmentError;
102
112
  exports.isNotFoundError = isNotFoundError;
@@ -105,4 +115,5 @@ exports.isSliceMachineError = isSliceMachineError;
105
115
  exports.isUnauthenticatedError = isUnauthenticatedError;
106
116
  exports.isUnauthorizedError = isUnauthorizedError;
107
117
  exports.isUnexpectedDataError = isUnexpectedDataError;
118
+ exports.isUnsupportedError = isUnsupportedError;
108
119
  //# sourceMappingURL=errors.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.cjs","sources":["../../src/errors.ts"],"sourcesContent":["import { HookError } from \"@slicemachine/plugin-kit\";\n\nexport class SliceMachineError extends Error {\n\tname = \"SMSliceMachineError\";\n}\nexport class UnauthorizedError extends SliceMachineError {\n\tname = \"SMUnauthorizedError\" as const;\n}\nexport class UnauthenticatedError extends SliceMachineError {\n\tname = \"SMUnauthenticatedError\" as const;\n\tmessage = \"Authenticate before trying again.\";\n}\nexport class NotFoundError extends SliceMachineError {\n\tname = \"SMNotFoundError\" as const;\n}\nexport class UnexpectedDataError extends SliceMachineError {\n\tname = \"SMUnexpectedDataError\" as const;\n}\nexport class InternalError extends SliceMachineError {\n\tname = \"SMInternalError\" as const;\n}\nexport class PluginError extends SliceMachineError {\n\tname = \"SMPluginError\" as const;\n}\nexport class PluginHookResultError extends SliceMachineError {\n\tname = \"SMPluginHookResultError\" as const;\n\n\tconstructor(errors: HookError[]) {\n\t\tsuper(\n\t\t\t`${errors.length} error${\n\t\t\t\terrors.length === 1 ? \"\" : \"s\"\n\t\t\t} were returned by one or more plugins.`,\n\t\t\t{\n\t\t\t\tcause: errors,\n\t\t\t},\n\t\t);\n\t}\n}\nexport class InvalidActiveEnvironmentError extends SliceMachineError {\n\tname = \"SMInvalidActiveEnvironmentError\" as const;\n}\n\ntype SliceMachineErrorNames =\n\t| \"SMSliceMachineError\"\n\t| UnauthorizedError[\"name\"]\n\t| UnauthenticatedError[\"name\"]\n\t| NotFoundError[\"name\"]\n\t| UnexpectedDataError[\"name\"]\n\t| InternalError[\"name\"]\n\t| PluginError[\"name\"]\n\t| PluginHookResultError[\"name\"]\n\t| InvalidActiveEnvironmentError[\"name\"];\n\ntype ShallowSliceMachineError<TName extends SliceMachineErrorNames> = Error & {\n\tname: TName;\n};\n\nexport const isSliceMachineError = <TName extends SliceMachineErrorNames>(\n\terror: unknown,\n\tname?: TName,\n): error is TName extends string ? ShallowSliceMachineError<TName> : Error => {\n\tconst isErrorInstance = error instanceof Error;\n\n\treturn name === undefined\n\t\t? isErrorInstance && error.name.startsWith(\"SM\")\n\t\t: isErrorInstance && error.name === name;\n};\n\nexport const isUnauthorizedError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnauthorizedError\"> => {\n\treturn isSliceMachineError(error, \"SMUnauthorizedError\");\n};\n\nexport const isUnauthenticatedError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnauthenticatedError\"> => {\n\treturn isSliceMachineError(error, \"SMUnauthenticatedError\");\n};\n\nexport const isNotFoundError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMNotFoundError\"> => {\n\treturn isSliceMachineError(error, \"SMNotFoundError\");\n};\n\nexport const isUnexpectedDataError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnexpectedDataError\"> => {\n\treturn isSliceMachineError(error, \"SMUnexpectedDataError\");\n};\n\nexport const isInternalError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMInternalError\"> => {\n\treturn isSliceMachineError(error, \"SMInternalError\");\n};\n\nexport const isPluginError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMPluginError\"> => {\n\treturn isSliceMachineError(error, \"SMPluginError\");\n};\n\nexport const isInvalidActiveEnvironmentError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMInvalidActiveEnvironmentError\"> => {\n\treturn isSliceMachineError(error, \"SMInvalidActiveEnvironmentError\");\n};\n"],"names":[],"mappings":";;;;;;;;AAEM,MAAO,0BAA0B,MAAK;AAAA,EAAtC;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,0BAA0B,kBAAiB;AAAA,EAAlD;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,6BAA6B,kBAAiB;AAAA,EAArD;AAAA;AACL,gCAAO;AACP,mCAAU;AAAA;AACV;AACK,MAAO,sBAAsB,kBAAiB;AAAA,EAA9C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,4BAA4B,kBAAiB;AAAA,EAApD;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,sBAAsB,kBAAiB;AAAA,EAA9C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,oBAAoB,kBAAiB;AAAA,EAA5C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,8BAA8B,kBAAiB;AAAA,EAG3D,YAAY,QAAmB;AAC9B,UACC,GAAG,OAAO,eACT,OAAO,WAAW,IAAI,KAAK,6CAE5B;AAAA,MACC,OAAO;AAAA,IAAA,CACP;AATH,gCAAO;AAAA,EAWP;AACA;AACK,MAAO,sCAAsC,kBAAiB;AAAA,EAA9D;AAAA;AACL,gCAAO;AAAA;AACP;AAiBY,MAAA,sBAAsB,CAClC,OACA,SAC4E;AAC5E,QAAM,kBAAkB,iBAAiB;AAElC,SAAA,SAAS,SACb,mBAAmB,MAAM,KAAK,WAAW,IAAI,IAC7C,mBAAmB,MAAM,SAAS;AACtC;AAEa,MAAA,sBAAsB,CAClC,UAC6D;AACtD,SAAA,oBAAoB,OAAO,qBAAqB;AACxD;AAEa,MAAA,yBAAyB,CACrC,UACgE;AACzD,SAAA,oBAAoB,OAAO,wBAAwB;AAC3D;AAEa,MAAA,kBAAkB,CAC9B,UACyD;AAClD,SAAA,oBAAoB,OAAO,iBAAiB;AACpD;AAEa,MAAA,wBAAwB,CACpC,UAC+D;AACxD,SAAA,oBAAoB,OAAO,uBAAuB;AAC1D;AAEa,MAAA,kBAAkB,CAC9B,UACyD;AAClD,SAAA,oBAAoB,OAAO,iBAAiB;AACpD;AAEa,MAAA,gBAAgB,CAC5B,UACuD;AAChD,SAAA,oBAAoB,OAAO,eAAe;AAClD;AAEa,MAAA,kCAAkC,CAC9C,UACyE;AAClE,SAAA,oBAAoB,OAAO,iCAAiC;AACpE;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"errors.cjs","sources":["../../src/errors.ts"],"sourcesContent":["import { HookError } from \"@slicemachine/plugin-kit\";\n\nexport class SliceMachineError extends Error {\n\tname = \"SMSliceMachineError\";\n}\nexport class UnauthorizedError extends SliceMachineError {\n\tname = \"SMUnauthorizedError\" as const;\n}\nexport class UnauthenticatedError extends SliceMachineError {\n\tname = \"SMUnauthenticatedError\" as const;\n\tmessage = \"Authenticate before trying again.\";\n}\nexport class NotFoundError extends SliceMachineError {\n\tname = \"SMNotFoundError\" as const;\n}\nexport class UnexpectedDataError extends SliceMachineError {\n\tname = \"SMUnexpectedDataError\" as const;\n}\nexport class InternalError extends SliceMachineError {\n\tname = \"SMInternalError\" as const;\n}\nexport class PluginError extends SliceMachineError {\n\tname = \"SMPluginError\" as const;\n}\nexport class PluginHookResultError extends SliceMachineError {\n\tname = \"SMPluginHookResultError\" as const;\n\n\tconstructor(errors: HookError[]) {\n\t\tsuper(\n\t\t\t`${errors.length} error${\n\t\t\t\terrors.length === 1 ? \"\" : \"s\"\n\t\t\t} were returned by one or more plugins.`,\n\t\t\t{\n\t\t\t\tcause: errors,\n\t\t\t},\n\t\t);\n\t}\n}\nexport class InvalidActiveEnvironmentError extends SliceMachineError {\n\tname = \"SMInvalidActiveEnvironmentError\" as const;\n}\nexport class UnsupportedError extends SliceMachineError {\n\tname = \"SMUnsupportedError\" as const;\n}\n\ntype SliceMachineErrorNames =\n\t| \"SMSliceMachineError\"\n\t| UnauthorizedError[\"name\"]\n\t| UnauthenticatedError[\"name\"]\n\t| NotFoundError[\"name\"]\n\t| UnexpectedDataError[\"name\"]\n\t| InternalError[\"name\"]\n\t| PluginError[\"name\"]\n\t| PluginHookResultError[\"name\"]\n\t| InvalidActiveEnvironmentError[\"name\"]\n\t| UnsupportedError[\"name\"];\n\ntype ShallowSliceMachineError<TName extends SliceMachineErrorNames> = Error & {\n\tname: TName;\n};\n\nexport const isSliceMachineError = <TName extends SliceMachineErrorNames>(\n\terror: unknown,\n\tname?: TName,\n): error is TName extends string ? ShallowSliceMachineError<TName> : Error => {\n\tconst isErrorInstance = error instanceof Error;\n\n\treturn name === undefined\n\t\t? isErrorInstance && error.name.startsWith(\"SM\")\n\t\t: isErrorInstance && error.name === name;\n};\n\nexport const isUnauthorizedError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnauthorizedError\"> => {\n\treturn isSliceMachineError(error, \"SMUnauthorizedError\");\n};\n\nexport const isUnauthenticatedError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnauthenticatedError\"> => {\n\treturn isSliceMachineError(error, \"SMUnauthenticatedError\");\n};\n\nexport const isNotFoundError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMNotFoundError\"> => {\n\treturn isSliceMachineError(error, \"SMNotFoundError\");\n};\n\nexport const isUnexpectedDataError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnexpectedDataError\"> => {\n\treturn isSliceMachineError(error, \"SMUnexpectedDataError\");\n};\n\nexport const isInternalError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMInternalError\"> => {\n\treturn isSliceMachineError(error, \"SMInternalError\");\n};\n\nexport const isPluginError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMPluginError\"> => {\n\treturn isSliceMachineError(error, \"SMPluginError\");\n};\n\nexport const isInvalidActiveEnvironmentError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMInvalidActiveEnvironmentError\"> => {\n\treturn isSliceMachineError(error, \"SMInvalidActiveEnvironmentError\");\n};\n\nexport const isUnsupportedError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnsupportedError\"> => {\n\treturn isSliceMachineError(error, \"SMUnsupportedError\");\n};\n"],"names":[],"mappings":";;;;;;;;AAEM,MAAO,0BAA0B,MAAK;AAAA,EAAtC;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,0BAA0B,kBAAiB;AAAA,EAAlD;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,6BAA6B,kBAAiB;AAAA,EAArD;AAAA;AACL,gCAAO;AACP,mCAAU;AAAA;AACV;AACK,MAAO,sBAAsB,kBAAiB;AAAA,EAA9C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,4BAA4B,kBAAiB;AAAA,EAApD;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,sBAAsB,kBAAiB;AAAA,EAA9C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,oBAAoB,kBAAiB;AAAA,EAA5C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,8BAA8B,kBAAiB;AAAA,EAG3D,YAAY,QAAmB;AAC9B,UACC,GAAG,OAAO,eACT,OAAO,WAAW,IAAI,KAAK,6CAE5B;AAAA,MACC,OAAO;AAAA,IAAA,CACP;AATH,gCAAO;AAAA,EAWP;AACA;AACK,MAAO,sCAAsC,kBAAiB;AAAA,EAA9D;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,yBAAyB,kBAAiB;AAAA,EAAjD;AAAA;AACL,gCAAO;AAAA;AACP;AAkBY,MAAA,sBAAsB,CAClC,OACA,SAC4E;AAC5E,QAAM,kBAAkB,iBAAiB;AAElC,SAAA,SAAS,SACb,mBAAmB,MAAM,KAAK,WAAW,IAAI,IAC7C,mBAAmB,MAAM,SAAS;AACtC;AAEa,MAAA,sBAAsB,CAClC,UAC6D;AACtD,SAAA,oBAAoB,OAAO,qBAAqB;AACxD;AAEa,MAAA,yBAAyB,CACrC,UACgE;AACzD,SAAA,oBAAoB,OAAO,wBAAwB;AAC3D;AAEa,MAAA,kBAAkB,CAC9B,UACyD;AAClD,SAAA,oBAAoB,OAAO,iBAAiB;AACpD;AAEa,MAAA,wBAAwB,CACpC,UAC+D;AACxD,SAAA,oBAAoB,OAAO,uBAAuB;AAC1D;AAEa,MAAA,kBAAkB,CAC9B,UACyD;AAClD,SAAA,oBAAoB,OAAO,iBAAiB;AACpD;AAEa,MAAA,gBAAgB,CAC5B,UACuD;AAChD,SAAA,oBAAoB,OAAO,eAAe;AAClD;AAEa,MAAA,kCAAkC,CAC9C,UACyE;AAClE,SAAA,oBAAoB,OAAO,iCAAiC;AACpE;AAEa,MAAA,qBAAqB,CACjC,UAC4D;AACrD,SAAA,oBAAoB,OAAO,oBAAoB;AACvD;;;;;;;;;;;;;;;;;;;;"}
package/dist/errors.d.ts CHANGED
@@ -28,7 +28,10 @@ export declare class PluginHookResultError extends SliceMachineError {
28
28
  export declare class InvalidActiveEnvironmentError extends SliceMachineError {
29
29
  name: "SMInvalidActiveEnvironmentError";
30
30
  }
31
- type SliceMachineErrorNames = "SMSliceMachineError" | UnauthorizedError["name"] | UnauthenticatedError["name"] | NotFoundError["name"] | UnexpectedDataError["name"] | InternalError["name"] | PluginError["name"] | PluginHookResultError["name"] | InvalidActiveEnvironmentError["name"];
31
+ export declare class UnsupportedError extends SliceMachineError {
32
+ name: "SMUnsupportedError";
33
+ }
34
+ type SliceMachineErrorNames = "SMSliceMachineError" | UnauthorizedError["name"] | UnauthenticatedError["name"] | NotFoundError["name"] | UnexpectedDataError["name"] | InternalError["name"] | PluginError["name"] | PluginHookResultError["name"] | InvalidActiveEnvironmentError["name"] | UnsupportedError["name"];
32
35
  type ShallowSliceMachineError<TName extends SliceMachineErrorNames> = Error & {
33
36
  name: TName;
34
37
  };
@@ -40,4 +43,5 @@ export declare const isUnexpectedDataError: (error: unknown) => error is Shallow
40
43
  export declare const isInternalError: (error: unknown) => error is ShallowSliceMachineError<"SMInternalError">;
41
44
  export declare const isPluginError: (error: unknown) => error is ShallowSliceMachineError<"SMPluginError">;
42
45
  export declare const isInvalidActiveEnvironmentError: (error: unknown) => error is ShallowSliceMachineError<"SMInvalidActiveEnvironmentError">;
46
+ export declare const isUnsupportedError: (error: unknown) => error is ShallowSliceMachineError<"SMUnsupportedError">;
43
47
  export {};
package/dist/errors.js CHANGED
@@ -61,6 +61,12 @@ class InvalidActiveEnvironmentError extends SliceMachineError {
61
61
  __publicField(this, "name", "SMInvalidActiveEnvironmentError");
62
62
  }
63
63
  }
64
+ class UnsupportedError extends SliceMachineError {
65
+ constructor() {
66
+ super(...arguments);
67
+ __publicField(this, "name", "SMUnsupportedError");
68
+ }
69
+ }
64
70
  const isSliceMachineError = (error, name) => {
65
71
  const isErrorInstance = error instanceof Error;
66
72
  return name === void 0 ? isErrorInstance && error.name.startsWith("SM") : isErrorInstance && error.name === name;
@@ -86,6 +92,9 @@ const isPluginError = (error) => {
86
92
  const isInvalidActiveEnvironmentError = (error) => {
87
93
  return isSliceMachineError(error, "SMInvalidActiveEnvironmentError");
88
94
  };
95
+ const isUnsupportedError = (error) => {
96
+ return isSliceMachineError(error, "SMUnsupportedError");
97
+ };
89
98
  export {
90
99
  InternalError,
91
100
  InvalidActiveEnvironmentError,
@@ -96,6 +105,7 @@ export {
96
105
  UnauthenticatedError,
97
106
  UnauthorizedError,
98
107
  UnexpectedDataError,
108
+ UnsupportedError,
99
109
  isInternalError,
100
110
  isInvalidActiveEnvironmentError,
101
111
  isNotFoundError,
@@ -103,6 +113,7 @@ export {
103
113
  isSliceMachineError,
104
114
  isUnauthenticatedError,
105
115
  isUnauthorizedError,
106
- isUnexpectedDataError
116
+ isUnexpectedDataError,
117
+ isUnsupportedError
107
118
  };
108
119
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sources":["../../src/errors.ts"],"sourcesContent":["import { HookError } from \"@slicemachine/plugin-kit\";\n\nexport class SliceMachineError extends Error {\n\tname = \"SMSliceMachineError\";\n}\nexport class UnauthorizedError extends SliceMachineError {\n\tname = \"SMUnauthorizedError\" as const;\n}\nexport class UnauthenticatedError extends SliceMachineError {\n\tname = \"SMUnauthenticatedError\" as const;\n\tmessage = \"Authenticate before trying again.\";\n}\nexport class NotFoundError extends SliceMachineError {\n\tname = \"SMNotFoundError\" as const;\n}\nexport class UnexpectedDataError extends SliceMachineError {\n\tname = \"SMUnexpectedDataError\" as const;\n}\nexport class InternalError extends SliceMachineError {\n\tname = \"SMInternalError\" as const;\n}\nexport class PluginError extends SliceMachineError {\n\tname = \"SMPluginError\" as const;\n}\nexport class PluginHookResultError extends SliceMachineError {\n\tname = \"SMPluginHookResultError\" as const;\n\n\tconstructor(errors: HookError[]) {\n\t\tsuper(\n\t\t\t`${errors.length} error${\n\t\t\t\terrors.length === 1 ? \"\" : \"s\"\n\t\t\t} were returned by one or more plugins.`,\n\t\t\t{\n\t\t\t\tcause: errors,\n\t\t\t},\n\t\t);\n\t}\n}\nexport class InvalidActiveEnvironmentError extends SliceMachineError {\n\tname = \"SMInvalidActiveEnvironmentError\" as const;\n}\n\ntype SliceMachineErrorNames =\n\t| \"SMSliceMachineError\"\n\t| UnauthorizedError[\"name\"]\n\t| UnauthenticatedError[\"name\"]\n\t| NotFoundError[\"name\"]\n\t| UnexpectedDataError[\"name\"]\n\t| InternalError[\"name\"]\n\t| PluginError[\"name\"]\n\t| PluginHookResultError[\"name\"]\n\t| InvalidActiveEnvironmentError[\"name\"];\n\ntype ShallowSliceMachineError<TName extends SliceMachineErrorNames> = Error & {\n\tname: TName;\n};\n\nexport const isSliceMachineError = <TName extends SliceMachineErrorNames>(\n\terror: unknown,\n\tname?: TName,\n): error is TName extends string ? ShallowSliceMachineError<TName> : Error => {\n\tconst isErrorInstance = error instanceof Error;\n\n\treturn name === undefined\n\t\t? isErrorInstance && error.name.startsWith(\"SM\")\n\t\t: isErrorInstance && error.name === name;\n};\n\nexport const isUnauthorizedError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnauthorizedError\"> => {\n\treturn isSliceMachineError(error, \"SMUnauthorizedError\");\n};\n\nexport const isUnauthenticatedError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnauthenticatedError\"> => {\n\treturn isSliceMachineError(error, \"SMUnauthenticatedError\");\n};\n\nexport const isNotFoundError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMNotFoundError\"> => {\n\treturn isSliceMachineError(error, \"SMNotFoundError\");\n};\n\nexport const isUnexpectedDataError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnexpectedDataError\"> => {\n\treturn isSliceMachineError(error, \"SMUnexpectedDataError\");\n};\n\nexport const isInternalError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMInternalError\"> => {\n\treturn isSliceMachineError(error, \"SMInternalError\");\n};\n\nexport const isPluginError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMPluginError\"> => {\n\treturn isSliceMachineError(error, \"SMPluginError\");\n};\n\nexport const isInvalidActiveEnvironmentError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMInvalidActiveEnvironmentError\"> => {\n\treturn isSliceMachineError(error, \"SMInvalidActiveEnvironmentError\");\n};\n"],"names":[],"mappings":";;;;;;AAEM,MAAO,0BAA0B,MAAK;AAAA,EAAtC;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,0BAA0B,kBAAiB;AAAA,EAAlD;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,6BAA6B,kBAAiB;AAAA,EAArD;AAAA;AACL,gCAAO;AACP,mCAAU;AAAA;AACV;AACK,MAAO,sBAAsB,kBAAiB;AAAA,EAA9C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,4BAA4B,kBAAiB;AAAA,EAApD;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,sBAAsB,kBAAiB;AAAA,EAA9C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,oBAAoB,kBAAiB;AAAA,EAA5C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,8BAA8B,kBAAiB;AAAA,EAG3D,YAAY,QAAmB;AAC9B,UACC,GAAG,OAAO,eACT,OAAO,WAAW,IAAI,KAAK,6CAE5B;AAAA,MACC,OAAO;AAAA,IAAA,CACP;AATH,gCAAO;AAAA,EAWP;AACA;AACK,MAAO,sCAAsC,kBAAiB;AAAA,EAA9D;AAAA;AACL,gCAAO;AAAA;AACP;AAiBY,MAAA,sBAAsB,CAClC,OACA,SAC4E;AAC5E,QAAM,kBAAkB,iBAAiB;AAElC,SAAA,SAAS,SACb,mBAAmB,MAAM,KAAK,WAAW,IAAI,IAC7C,mBAAmB,MAAM,SAAS;AACtC;AAEa,MAAA,sBAAsB,CAClC,UAC6D;AACtD,SAAA,oBAAoB,OAAO,qBAAqB;AACxD;AAEa,MAAA,yBAAyB,CACrC,UACgE;AACzD,SAAA,oBAAoB,OAAO,wBAAwB;AAC3D;AAEa,MAAA,kBAAkB,CAC9B,UACyD;AAClD,SAAA,oBAAoB,OAAO,iBAAiB;AACpD;AAEa,MAAA,wBAAwB,CACpC,UAC+D;AACxD,SAAA,oBAAoB,OAAO,uBAAuB;AAC1D;AAEa,MAAA,kBAAkB,CAC9B,UACyD;AAClD,SAAA,oBAAoB,OAAO,iBAAiB;AACpD;AAEa,MAAA,gBAAgB,CAC5B,UACuD;AAChD,SAAA,oBAAoB,OAAO,eAAe;AAClD;AAEa,MAAA,kCAAkC,CAC9C,UACyE;AAClE,SAAA,oBAAoB,OAAO,iCAAiC;AACpE;"}
1
+ {"version":3,"file":"errors.js","sources":["../../src/errors.ts"],"sourcesContent":["import { HookError } from \"@slicemachine/plugin-kit\";\n\nexport class SliceMachineError extends Error {\n\tname = \"SMSliceMachineError\";\n}\nexport class UnauthorizedError extends SliceMachineError {\n\tname = \"SMUnauthorizedError\" as const;\n}\nexport class UnauthenticatedError extends SliceMachineError {\n\tname = \"SMUnauthenticatedError\" as const;\n\tmessage = \"Authenticate before trying again.\";\n}\nexport class NotFoundError extends SliceMachineError {\n\tname = \"SMNotFoundError\" as const;\n}\nexport class UnexpectedDataError extends SliceMachineError {\n\tname = \"SMUnexpectedDataError\" as const;\n}\nexport class InternalError extends SliceMachineError {\n\tname = \"SMInternalError\" as const;\n}\nexport class PluginError extends SliceMachineError {\n\tname = \"SMPluginError\" as const;\n}\nexport class PluginHookResultError extends SliceMachineError {\n\tname = \"SMPluginHookResultError\" as const;\n\n\tconstructor(errors: HookError[]) {\n\t\tsuper(\n\t\t\t`${errors.length} error${\n\t\t\t\terrors.length === 1 ? \"\" : \"s\"\n\t\t\t} were returned by one or more plugins.`,\n\t\t\t{\n\t\t\t\tcause: errors,\n\t\t\t},\n\t\t);\n\t}\n}\nexport class InvalidActiveEnvironmentError extends SliceMachineError {\n\tname = \"SMInvalidActiveEnvironmentError\" as const;\n}\nexport class UnsupportedError extends SliceMachineError {\n\tname = \"SMUnsupportedError\" as const;\n}\n\ntype SliceMachineErrorNames =\n\t| \"SMSliceMachineError\"\n\t| UnauthorizedError[\"name\"]\n\t| UnauthenticatedError[\"name\"]\n\t| NotFoundError[\"name\"]\n\t| UnexpectedDataError[\"name\"]\n\t| InternalError[\"name\"]\n\t| PluginError[\"name\"]\n\t| PluginHookResultError[\"name\"]\n\t| InvalidActiveEnvironmentError[\"name\"]\n\t| UnsupportedError[\"name\"];\n\ntype ShallowSliceMachineError<TName extends SliceMachineErrorNames> = Error & {\n\tname: TName;\n};\n\nexport const isSliceMachineError = <TName extends SliceMachineErrorNames>(\n\terror: unknown,\n\tname?: TName,\n): error is TName extends string ? ShallowSliceMachineError<TName> : Error => {\n\tconst isErrorInstance = error instanceof Error;\n\n\treturn name === undefined\n\t\t? isErrorInstance && error.name.startsWith(\"SM\")\n\t\t: isErrorInstance && error.name === name;\n};\n\nexport const isUnauthorizedError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnauthorizedError\"> => {\n\treturn isSliceMachineError(error, \"SMUnauthorizedError\");\n};\n\nexport const isUnauthenticatedError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnauthenticatedError\"> => {\n\treturn isSliceMachineError(error, \"SMUnauthenticatedError\");\n};\n\nexport const isNotFoundError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMNotFoundError\"> => {\n\treturn isSliceMachineError(error, \"SMNotFoundError\");\n};\n\nexport const isUnexpectedDataError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnexpectedDataError\"> => {\n\treturn isSliceMachineError(error, \"SMUnexpectedDataError\");\n};\n\nexport const isInternalError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMInternalError\"> => {\n\treturn isSliceMachineError(error, \"SMInternalError\");\n};\n\nexport const isPluginError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMPluginError\"> => {\n\treturn isSliceMachineError(error, \"SMPluginError\");\n};\n\nexport const isInvalidActiveEnvironmentError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMInvalidActiveEnvironmentError\"> => {\n\treturn isSliceMachineError(error, \"SMInvalidActiveEnvironmentError\");\n};\n\nexport const isUnsupportedError = (\n\terror: unknown,\n): error is ShallowSliceMachineError<\"SMUnsupportedError\"> => {\n\treturn isSliceMachineError(error, \"SMUnsupportedError\");\n};\n"],"names":[],"mappings":";;;;;;AAEM,MAAO,0BAA0B,MAAK;AAAA,EAAtC;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,0BAA0B,kBAAiB;AAAA,EAAlD;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,6BAA6B,kBAAiB;AAAA,EAArD;AAAA;AACL,gCAAO;AACP,mCAAU;AAAA;AACV;AACK,MAAO,sBAAsB,kBAAiB;AAAA,EAA9C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,4BAA4B,kBAAiB;AAAA,EAApD;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,sBAAsB,kBAAiB;AAAA,EAA9C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,oBAAoB,kBAAiB;AAAA,EAA5C;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,8BAA8B,kBAAiB;AAAA,EAG3D,YAAY,QAAmB;AAC9B,UACC,GAAG,OAAO,eACT,OAAO,WAAW,IAAI,KAAK,6CAE5B;AAAA,MACC,OAAO;AAAA,IAAA,CACP;AATH,gCAAO;AAAA,EAWP;AACA;AACK,MAAO,sCAAsC,kBAAiB;AAAA,EAA9D;AAAA;AACL,gCAAO;AAAA;AACP;AACK,MAAO,yBAAyB,kBAAiB;AAAA,EAAjD;AAAA;AACL,gCAAO;AAAA;AACP;AAkBY,MAAA,sBAAsB,CAClC,OACA,SAC4E;AAC5E,QAAM,kBAAkB,iBAAiB;AAElC,SAAA,SAAS,SACb,mBAAmB,MAAM,KAAK,WAAW,IAAI,IAC7C,mBAAmB,MAAM,SAAS;AACtC;AAEa,MAAA,sBAAsB,CAClC,UAC6D;AACtD,SAAA,oBAAoB,OAAO,qBAAqB;AACxD;AAEa,MAAA,yBAAyB,CACrC,UACgE;AACzD,SAAA,oBAAoB,OAAO,wBAAwB;AAC3D;AAEa,MAAA,kBAAkB,CAC9B,UACyD;AAClD,SAAA,oBAAoB,OAAO,iBAAiB;AACpD;AAEa,MAAA,wBAAwB,CACpC,UAC+D;AACxD,SAAA,oBAAoB,OAAO,uBAAuB;AAC1D;AAEa,MAAA,kBAAkB,CAC9B,UACyD;AAClD,SAAA,oBAAoB,OAAO,iBAAiB;AACpD;AAEa,MAAA,gBAAgB,CAC5B,UACuD;AAChD,SAAA,oBAAoB,OAAO,eAAe;AAClD;AAEa,MAAA,kCAAkC,CAC9C,UACyE;AAClE,SAAA,oBAAoB,OAAO,iCAAiC;AACpE;AAEa,MAAA,qBAAqB,CACjC,UAC4D;AACrD,SAAA,oBAAoB,OAAO,oBAAoB;AACvD;"}
package/dist/index.cjs CHANGED
@@ -21,6 +21,7 @@ exports.SliceMachineError = errors.SliceMachineError;
21
21
  exports.UnauthenticatedError = errors.UnauthenticatedError;
22
22
  exports.UnauthorizedError = errors.UnauthorizedError;
23
23
  exports.UnexpectedDataError = errors.UnexpectedDataError;
24
+ exports.UnsupportedError = errors.UnsupportedError;
24
25
  exports.getEnvironmentInfo = getEnvironmentInfo.getEnvironmentInfo;
25
26
  exports.DecodeError = DecodeError.DecodeError;
26
27
  exports.REPOSITORY_NAME_VALIDATION = REPOSITORY_NAME_VALIDATION.REPOSITORY_NAME_VALIDATION;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -10,7 +10,7 @@ export type { PrismicAuthManager, PrismicUserProfile, PrismicAuthState, } from "
10
10
  export { createPrismicAuthManager } from "./auth/createPrismicAuthManager";
11
11
  export { createPrismicAuthManagerMiddleware } from "./auth/createPrismicAuthManagerMiddleware";
12
12
  export type { CreatePrismicAuthManagerMiddlewareArgs, PrismicAuthCheckStatusResponse, } from "./auth/createPrismicAuthManagerMiddleware";
13
- export { SliceMachineError, UnauthorizedError, UnauthenticatedError, NotFoundError, UnexpectedDataError, InternalError, PluginError, PluginHookResultError, InvalidActiveEnvironmentError, } from "./errors";
13
+ export { SliceMachineError, UnauthorizedError, UnauthenticatedError, NotFoundError, UnexpectedDataError, InternalError, PluginError, PluginHookResultError, InvalidActiveEnvironmentError, UnsupportedError, } from "./errors";
14
14
  export { getEnvironmentInfo } from "./getEnvironmentInfo";
15
15
  export { DecodeError } from "./lib/DecodeError";
16
16
  export type { SliceMachineConfig, PackageManager } from "./types";
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { createSliceMachineManager } from "./managers/createSliceMachineManager.
2
2
  import { createSliceMachineManagerMiddleware } from "./managers/createSliceMachineManagerMiddleware.js";
3
3
  import { createPrismicAuthManager } from "./auth/createPrismicAuthManager.js";
4
4
  import { createPrismicAuthManagerMiddleware } from "./auth/createPrismicAuthManagerMiddleware.js";
5
- import { InternalError, InvalidActiveEnvironmentError, NotFoundError, PluginError, PluginHookResultError, SliceMachineError, UnauthenticatedError, UnauthorizedError, UnexpectedDataError } from "./errors.js";
5
+ import { InternalError, InvalidActiveEnvironmentError, NotFoundError, PluginError, PluginHookResultError, SliceMachineError, UnauthenticatedError, UnauthorizedError, UnexpectedDataError, UnsupportedError } from "./errors.js";
6
6
  import { getEnvironmentInfo } from "./getEnvironmentInfo.js";
7
7
  import { DecodeError } from "./lib/DecodeError.js";
8
8
  import { REPOSITORY_NAME_VALIDATION } from "./constants/REPOSITORY_NAME_VALIDATION.js";
@@ -18,6 +18,7 @@ export {
18
18
  UnauthenticatedError,
19
19
  UnauthorizedError,
20
20
  UnexpectedDataError,
21
+ UnsupportedError,
21
22
  createPrismicAuthManager,
22
23
  createPrismicAuthManagerMiddleware,
23
24
  createSliceMachineManager,
@@ -19,9 +19,11 @@ const tt = require("io-ts-types");
19
19
  const fetch = require("../../lib/fetch.cjs");
20
20
  const decode = require("../../lib/decode.cjs");
21
21
  const API_ENDPOINTS = require("../../constants/API_ENDPOINTS.cjs");
22
+ const GIT_PROVIDER = require("../../constants/GIT_PROVIDER.cjs");
22
23
  const errors = require("../../errors.cjs");
23
24
  const BaseManager = require("../BaseManager.cjs");
24
25
  const buildGitRepoSpecifier = require("./buildGitRepoSpecifier.cjs");
26
+ const GIT_PROVIDER_APP_SLUGS = require("../../constants/GIT_PROVIDER_APP_SLUGS.cjs");
25
27
  function _interopNamespaceDefault(e) {
26
28
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
27
29
  if (e) {
@@ -82,7 +84,7 @@ class GitManager extends BaseManager.BaseManager {
82
84
  const json = await res.json();
83
85
  const { value, error } = decode.decode(t__namespace.type({
84
86
  owners: t__namespace.array(t__namespace.type({
85
- provider: t__namespace.literal("gitHub"),
87
+ provider: t__namespace.literal(GIT_PROVIDER.GIT_PROVIDER.GitHub),
86
88
  id: t__namespace.string,
87
89
  name: t__namespace.string,
88
90
  type: t__namespace.union([t__namespace.literal("user"), t__namespace.literal("team"), t__namespace.null])
@@ -117,7 +119,7 @@ class GitManager extends BaseManager.BaseManager {
117
119
  const json = await res.json();
118
120
  const { value, error } = decode.decode(t__namespace.type({
119
121
  repos: t__namespace.array(t__namespace.type({
120
- provider: t__namespace.literal("gitHub"),
122
+ provider: t__namespace.literal(GIT_PROVIDER.GIT_PROVIDER.GitHub),
121
123
  id: t__namespace.string,
122
124
  owner: t__namespace.string,
123
125
  name: t__namespace.string,
@@ -147,7 +149,7 @@ class GitManager extends BaseManager.BaseManager {
147
149
  const json = await res.json();
148
150
  const { value, error } = decode.decode(t__namespace.type({
149
151
  repos: t__namespace.array(t__namespace.type({
150
- provider: t__namespace.literal("gitHub"),
152
+ provider: t__namespace.literal(GIT_PROVIDER.GIT_PROVIDER.GitHub),
151
153
  owner: t__namespace.string,
152
154
  name: t__namespace.string
153
155
  }))
@@ -290,6 +292,20 @@ class GitManager extends BaseManager.BaseManager {
290
292
  }
291
293
  }
292
294
  }
295
+ async getProviderAppInstallURL(args) {
296
+ const appSlug = GIT_PROVIDER_APP_SLUGS.GIT_PROVIDER_APP_SLUGS[args.provider];
297
+ switch (args.provider) {
298
+ case GIT_PROVIDER.GIT_PROVIDER.GitHub: {
299
+ const state = await this.createGitHubAuthState();
300
+ const url = new URL(`https://github.com/apps/${appSlug}/installations/new`);
301
+ url.searchParams.set("state", state.key);
302
+ return url.toString();
303
+ }
304
+ default: {
305
+ throw new errors.UnsupportedError(`Git provider not supported: ${args.provider}.`);
306
+ }
307
+ }
308
+ }
293
309
  }
294
310
  _fetch = new WeakSet();
295
311
  fetch_fn = async function(url, config) {
@@ -1 +1 @@
1
- {"version":3,"file":"GitManager.cjs","sources":["../../../../src/managers/git/GitManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as tt from \"io-ts-types\";\n\nimport fetch from \"../../lib/fetch\";\nimport { decode } from \"../../lib/decode\";\n\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\n\nimport {\n\tUnauthenticatedError,\n\tUnauthorizedError,\n\tUnexpectedDataError,\n} from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { GitOwner, GitRepo, GitRepoSpecifier } from \"./types\";\nimport { buildGitRepoSpecifier } from \"./buildGitRepoSpecifier\";\n\ntype GitManagerCreateGitHubAuthStateReturnType = {\n\tkey: string;\n\texpiresAt: Date;\n};\n\ntype GitManagerFetchOwnersReturnType = GitOwner[];\n\ntype GitManagerFetchReposReturnType = GitRepo[];\n\ntype GitManagerFetchReposArgs = {\n\tprovider: \"gitHub\";\n\towner: string;\n\tquery?: string;\n\tpage?: number;\n};\n\ntype GitManagerFetchLinkedReposArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n};\n\ntype GitManagerFetchLinkedReposReturnType = GitRepoSpecifier[];\n\ntype GitManagerLinkRepoArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype GitManagerUnlinkRepoArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype CheckHasWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype UpdateWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n\ttoken: string;\n};\n\ntype DeleteWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\nexport class GitManager extends BaseManager {\n\tasync createGitHubAuthState(): Promise<GitManagerCreateGitHubAuthStateReturnType> {\n\t\tconst url = new URL(\n\t\t\t\"./git/github/create-auth-state\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, { method: \"POST\" });\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to create GitHub auth state.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\tkey: t.string,\n\t\t\t\texpiresAt: tt.DateFromISOString,\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode GitHub auth state: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tasync fetchOwners(): Promise<GitManagerFetchOwnersReturnType> {\n\t\tconst url = new URL(\"./git/owners\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch owners.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\towners: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(\"gitHub\"),\n\t\t\t\t\t\tid: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t\ttype: t.union([t.literal(\"user\"), t.literal(\"team\"), t.null]),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode owners: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.owners;\n\t}\n\n\tasync fetchRepos(\n\t\targs: GitManagerFetchReposArgs,\n\t): Promise<GitManagerFetchReposReturnType> {\n\t\tconst url = new URL(\"./git/repos\", API_ENDPOINTS.SliceMachineV1);\n\t\turl.searchParams.set(\"provider\", args.provider);\n\t\turl.searchParams.set(\"owner\", args.owner);\n\t\tif (args.query) {\n\t\t\turl.searchParams.set(\"q\", args.query);\n\t\t}\n\t\tif (args.page && args.page > 0) {\n\t\t\turl.searchParams.set(\"page\", args.page.toString());\n\t\t}\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch repos.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\trepos: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(\"gitHub\"),\n\t\t\t\t\t\tid: t.string,\n\t\t\t\t\t\towner: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t\turl: t.string,\n\t\t\t\t\t\tpushedAt: tt.DateFromISOString,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode repos: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.repos;\n\t}\n\n\tasync fetchLinkedRepos(\n\t\targs: GitManagerFetchLinkedReposArgs,\n\t): Promise<GitManagerFetchLinkedReposReturnType> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\turl.searchParams.set(\"repository\", args.prismic.domain);\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch linked repos.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\trepos: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(\"gitHub\"),\n\t\t\t\t\t\towner: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode linked repos: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.repos;\n\t}\n\n\tasync linkRepo(args: GitManagerLinkRepoArgs): Promise<void> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to link repos.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync unlinkRepo(args: GitManagerUnlinkRepoArgs): Promise<void> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to unlink repos.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync checkHasWriteAPIToken(\n\t\targs: CheckHasWriteAPITokenArgs,\n\t): Promise<boolean> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\turl.searchParams.set(\"repository\", args.prismic.domain);\n\t\turl.searchParams.set(\n\t\t\t\"git\",\n\t\t\tbuildGitRepoSpecifier({\n\t\t\t\tprovider: args.git.provider,\n\t\t\t\towner: args.git.owner,\n\t\t\t\tname: args.git.name,\n\t\t\t}),\n\t\t);\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to check Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\thasWriteAPIToken: t.boolean,\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.hasWriteAPIToken;\n\t}\n\n\tasync updateWriteAPIToken(args: UpdateWriteAPITokenArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t\ttoken: args.token,\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to update Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync deleteWriteAPIToken(args: DeleteWriteAPITokenArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to delete Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync #fetch(\n\t\turl: URL,\n\t\tconfig?: {\n\t\t\tmethod?: \"POST\" | \"PUT\" | \"DELETE\";\n\t\t\tbody?: unknown;\n\t\t},\n\t) {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\n\t\treturn await fetch(url, {\n\t\t\tmethod: config?.method,\n\t\t\tbody: config?.body ? JSON.stringify(config.body) : undefined,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authenticationToken}`,\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":["BaseManager","API_ENDPOINTS","UnauthorizedError","decode","t","tt","UnexpectedDataError","UnauthenticatedError","buildGitRepoSpecifier","fetch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmGM,MAAO,mBAAmBA,YAAAA,YAAW;AAAA,EAArC;AAAA;AAmVL,uBAAM;AAAA;AAAA,EAlVN,MAAM,wBAAqB;AAC1B,UAAM,MAAM,IAAI,IACf,kCACAC,4BAAc,cAAc;AAEvB,UAAA,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK,EAAE,QAAQ;AAEzC,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIC,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,qCAAqC;AAAA,MACtD;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,KAAKA,aAAE;AAAA,MACP,WAAWC,cAAG;AAAA,IAAA,CACd,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIC,OAAAA,oBACT,uCAAuC,MAAM,OAAO,KAAK,IAAI,KAC7D,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAEM,WAAA;AAAA,EACR;AAAA,EAEA,MAAM,cAAW;AAChB,UAAM,MAAM,IAAI,IAAI,gBAAgBL,4BAAc,cAAc;AAChE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,yBAAyB;AAAA,MAC1C;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,QAAQA,aAAE,MACTA,aAAE,KAAK;AAAA,QACN,UAAUA,aAAE,QAAQ,QAAQ;AAAA,QAC5B,IAAIA,aAAE;AAAA,QACN,MAAMA,aAAE;AAAA,QACR,MAAMA,aAAE,MAAM,CAACA,aAAE,QAAQ,MAAM,GAAGA,aAAE,QAAQ,MAAM,GAAGA,aAAE,IAAI,CAAC;AAAA,MAAA,CAC5D,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIE,OAAAA,oBACT,4BAA4B,MAAM,OAAO,KAAK,IAAI,KAClD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,WACL,MAA8B;AAE9B,UAAM,MAAM,IAAI,IAAI,eAAeL,4BAAc,cAAc;AAC/D,QAAI,aAAa,IAAI,YAAY,KAAK,QAAQ;AAC9C,QAAI,aAAa,IAAI,SAAS,KAAK,KAAK;AACxC,QAAI,KAAK,OAAO;AACf,UAAI,aAAa,IAAI,KAAK,KAAK,KAAK;AAAA,IACpC;AACD,QAAI,KAAK,QAAQ,KAAK,OAAO,GAAG;AAC/B,UAAI,aAAa,IAAI,QAAQ,KAAK,KAAK,UAAU;AAAA,IACjD;AAED,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,wBAAwB;AAAA,MACzC;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,OAAOA,aAAE,MACRA,aAAE,KAAK;AAAA,QACN,UAAUA,aAAE,QAAQ,QAAQ;AAAA,QAC5B,IAAIA,aAAE;AAAA,QACN,OAAOA,aAAE;AAAA,QACT,MAAMA,aAAE;AAAA,QACR,KAAKA,aAAE;AAAA,QACP,UAAUC,cAAG;AAAA,MAAA,CACb,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIC,OAAAA,oBACT,2BAA2B,MAAM,OAAO,KAAK,IAAI,KACjD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,iBACL,MAAoC;AAEpC,UAAM,MAAM,IAAI,IAAI,sBAAsBL,4BAAc,cAAc;AACtE,QAAI,aAAa,IAAI,cAAc,KAAK,QAAQ,MAAM;AAEtD,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,+BAA+B;AAAA,MAChD;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,OAAOA,aAAE,MACRA,aAAE,KAAK;AAAA,QACN,UAAUA,aAAE,QAAQ,QAAQ;AAAA,QAC5B,OAAOA,aAAE;AAAA,QACT,MAAMA,aAAE;AAAA,MAAA,CACR,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIE,OAAAA,oBACT,kCAAkC,MAAM,OAAO,KAAK,IAAI,KACxD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,SAAS,MAA4B;AAC1C,UAAM,MAAM,IAAI,IAAI,sBAAsBL,4BAAc,cAAc;AACtE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,uBAAuB;AAAA,MACxC;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,MAA8B;AAC9C,UAAM,MAAM,IAAI,IAAI,sBAAsBD,4BAAc,cAAc;AACtE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,yBAAyB;AAAA,MAC1C;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,sBACL,MAA+B;AAE/B,UAAM,MAAM,IAAI,IACf,sCACAD,4BAAc,cAAc;AAE7B,QAAI,aAAa,IAAI,cAAc,KAAK,QAAQ,MAAM;AAClD,QAAA,aAAa,IAChB,OACAO,sBAAAA,sBAAsB;AAAA,MACrB,UAAU,KAAK,IAAI;AAAA,MACnB,OAAO,KAAK,IAAI;AAAA,MAChB,MAAM,KAAK,IAAI;AAAA,IACf,CAAA,CAAC;AAGH,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAID,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,0CAA0C;AAAA,MAC3D;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,kBAAkBA,aAAE;AAAA,IAAA,CACpB,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIE,OAAAA,oBACT,qBAAqB,MAAM,OAAO,KAAK,IAAI,KAC3C,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,oBAAoB,MAA6B;AACtD,UAAM,MAAM,IAAI,IACf,sCACAL,4BAAc,cAAc;AAE7B,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,QACD,OAAO,KAAK;AAAA,MACZ;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,2CAA2C;AAAA,MAC5D;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,MAA6B;AACtD,UAAM,MAAM,IAAI,IACf,sCACAD,4BAAc,cAAc;AAE7B,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,2CAA2C;AAAA,MAC5D;AAAA,IACD;AAAA,EACF;AAmBA;AAjBM;AAAA,WACL,eAAA,KACA,QAGC;AAED,QAAM,sBAAsB,MAAM,KAAK,KAAK,uBAAsB;AAE3D,SAAA,MAAMO,cAAM,KAAK;AAAA,IACvB,QAAQ,iCAAQ;AAAA,IAChB,OAAM,iCAAQ,QAAO,KAAK,UAAU,OAAO,IAAI,IAAI;AAAA,IACnD,SAAS;AAAA,MACR,eAAe,UAAU;AAAA,IACzB;AAAA,EAAA,CACD;AACF;;"}
1
+ {"version":3,"file":"GitManager.cjs","sources":["../../../../src/managers/git/GitManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as tt from \"io-ts-types\";\n\nimport fetch from \"../../lib/fetch\";\nimport { decode } from \"../../lib/decode\";\n\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\nimport { GitProvider, GIT_PROVIDER } from \"../../constants/GIT_PROVIDER\";\n\nimport {\n\tUnauthenticatedError,\n\tUnauthorizedError,\n\tUnexpectedDataError,\n\tUnsupportedError,\n} from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { GitOwner, GitRepo, GitRepoSpecifier } from \"./types\";\nimport { buildGitRepoSpecifier } from \"./buildGitRepoSpecifier\";\nimport { GIT_PROVIDER_APP_SLUGS } from \"../../constants/GIT_PROVIDER_APP_SLUGS\";\n\ntype GitManagerCreateGitHubAuthStateReturnType = {\n\tkey: string;\n\texpiresAt: Date;\n};\n\ntype GitManagerFetchOwnersReturnType = GitOwner[];\n\ntype GitManagerFetchReposReturnType = GitRepo[];\n\ntype GitManagerFetchReposArgs = {\n\tprovider: GitProvider;\n\towner: string;\n\tquery?: string;\n\tpage?: number;\n};\n\ntype GitManagerFetchLinkedReposArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n};\n\ntype GitManagerFetchLinkedReposReturnType = GitRepoSpecifier[];\n\ntype GitManagerLinkRepoArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: GitProvider;\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype GitManagerUnlinkRepoArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: GitProvider;\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype CheckHasWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: GitProvider;\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype UpdateWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: GitProvider;\n\t\towner: string;\n\t\tname: string;\n\t};\n\ttoken: string;\n};\n\ntype DeleteWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: GitProvider;\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\nexport class GitManager extends BaseManager {\n\tasync createGitHubAuthState(): Promise<GitManagerCreateGitHubAuthStateReturnType> {\n\t\tconst url = new URL(\n\t\t\t\"./git/github/create-auth-state\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, { method: \"POST\" });\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to create GitHub auth state.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\tkey: t.string,\n\t\t\t\texpiresAt: tt.DateFromISOString,\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode GitHub auth state: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tasync fetchOwners(): Promise<GitManagerFetchOwnersReturnType> {\n\t\tconst url = new URL(\"./git/owners\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch owners.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\towners: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(GIT_PROVIDER.GitHub),\n\t\t\t\t\t\tid: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t\ttype: t.union([t.literal(\"user\"), t.literal(\"team\"), t.null]),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode owners: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.owners;\n\t}\n\n\tasync fetchRepos(\n\t\targs: GitManagerFetchReposArgs,\n\t): Promise<GitManagerFetchReposReturnType> {\n\t\tconst url = new URL(\"./git/repos\", API_ENDPOINTS.SliceMachineV1);\n\t\turl.searchParams.set(\"provider\", args.provider);\n\t\turl.searchParams.set(\"owner\", args.owner);\n\t\tif (args.query) {\n\t\t\turl.searchParams.set(\"q\", args.query);\n\t\t}\n\t\tif (args.page && args.page > 0) {\n\t\t\turl.searchParams.set(\"page\", args.page.toString());\n\t\t}\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch repos.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\trepos: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(GIT_PROVIDER.GitHub),\n\t\t\t\t\t\tid: t.string,\n\t\t\t\t\t\towner: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t\turl: t.string,\n\t\t\t\t\t\tpushedAt: tt.DateFromISOString,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode repos: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.repos;\n\t}\n\n\tasync fetchLinkedRepos(\n\t\targs: GitManagerFetchLinkedReposArgs,\n\t): Promise<GitManagerFetchLinkedReposReturnType> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\turl.searchParams.set(\"repository\", args.prismic.domain);\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch linked repos.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\trepos: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(GIT_PROVIDER.GitHub),\n\t\t\t\t\t\towner: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode linked repos: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.repos;\n\t}\n\n\tasync linkRepo(args: GitManagerLinkRepoArgs): Promise<void> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to link repos.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync unlinkRepo(args: GitManagerUnlinkRepoArgs): Promise<void> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to unlink repos.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync checkHasWriteAPIToken(\n\t\targs: CheckHasWriteAPITokenArgs,\n\t): Promise<boolean> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\turl.searchParams.set(\"repository\", args.prismic.domain);\n\t\turl.searchParams.set(\n\t\t\t\"git\",\n\t\t\tbuildGitRepoSpecifier({\n\t\t\t\tprovider: args.git.provider,\n\t\t\t\towner: args.git.owner,\n\t\t\t\tname: args.git.name,\n\t\t\t}),\n\t\t);\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to check Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\thasWriteAPIToken: t.boolean,\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.hasWriteAPIToken;\n\t}\n\n\tasync updateWriteAPIToken(args: UpdateWriteAPITokenArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t\ttoken: args.token,\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to update Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync deleteWriteAPIToken(args: DeleteWriteAPITokenArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to delete Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync getProviderAppInstallURL(args: {\n\t\tprovider: GitProvider;\n\t}): Promise<string> {\n\t\tconst appSlug = GIT_PROVIDER_APP_SLUGS[args.provider];\n\n\t\tswitch (args.provider) {\n\t\t\tcase GIT_PROVIDER.GitHub: {\n\t\t\t\tconst state = await this.createGitHubAuthState();\n\n\t\t\t\tconst url = new URL(\n\t\t\t\t\t`https://github.com/apps/${appSlug}/installations/new`,\n\t\t\t\t);\n\t\t\t\turl.searchParams.set(\"state\", state.key);\n\n\t\t\t\treturn url.toString();\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tthrow new UnsupportedError(\n\t\t\t\t\t`Git provider not supported: ${args.provider}.`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync #fetch(\n\t\turl: URL,\n\t\tconfig?: {\n\t\t\tmethod?: \"POST\" | \"PUT\" | \"DELETE\";\n\t\t\tbody?: unknown;\n\t\t},\n\t) {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\n\t\treturn await fetch(url, {\n\t\t\tmethod: config?.method,\n\t\t\tbody: config?.body ? JSON.stringify(config.body) : undefined,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authenticationToken}`,\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":["BaseManager","API_ENDPOINTS","UnauthorizedError","decode","t","tt","UnexpectedDataError","UnauthenticatedError","GIT_PROVIDER","buildGitRepoSpecifier","GIT_PROVIDER_APP_SLUGS","UnsupportedError","fetch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGM,MAAO,mBAAmBA,YAAAA,YAAW;AAAA,EAArC;AAAA;AA4WL,uBAAM;AAAA;AAAA,EA3WN,MAAM,wBAAqB;AAC1B,UAAM,MAAM,IAAI,IACf,kCACAC,4BAAc,cAAc;AAEvB,UAAA,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK,EAAE,QAAQ;AAEzC,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIC,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,qCAAqC;AAAA,MACtD;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,KAAKA,aAAE;AAAA,MACP,WAAWC,cAAG;AAAA,IAAA,CACd,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIC,OAAAA,oBACT,uCAAuC,MAAM,OAAO,KAAK,IAAI,KAC7D,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAEM,WAAA;AAAA,EACR;AAAA,EAEA,MAAM,cAAW;AAChB,UAAM,MAAM,IAAI,IAAI,gBAAgBL,4BAAc,cAAc;AAChE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,yBAAyB;AAAA,MAC1C;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,QAAQA,aAAE,MACTA,aAAE,KAAK;AAAA,QACN,UAAUA,aAAE,QAAQI,aAAAA,aAAa,MAAM;AAAA,QACvC,IAAIJ,aAAE;AAAA,QACN,MAAMA,aAAE;AAAA,QACR,MAAMA,aAAE,MAAM,CAACA,aAAE,QAAQ,MAAM,GAAGA,aAAE,QAAQ,MAAM,GAAGA,aAAE,IAAI,CAAC;AAAA,MAAA,CAC5D,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIE,OAAAA,oBACT,4BAA4B,MAAM,OAAO,KAAK,IAAI,KAClD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,WACL,MAA8B;AAE9B,UAAM,MAAM,IAAI,IAAI,eAAeL,4BAAc,cAAc;AAC/D,QAAI,aAAa,IAAI,YAAY,KAAK,QAAQ;AAC9C,QAAI,aAAa,IAAI,SAAS,KAAK,KAAK;AACxC,QAAI,KAAK,OAAO;AACf,UAAI,aAAa,IAAI,KAAK,KAAK,KAAK;AAAA,IACpC;AACD,QAAI,KAAK,QAAQ,KAAK,OAAO,GAAG;AAC/B,UAAI,aAAa,IAAI,QAAQ,KAAK,KAAK,UAAU;AAAA,IACjD;AAED,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,wBAAwB;AAAA,MACzC;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,OAAOA,aAAE,MACRA,aAAE,KAAK;AAAA,QACN,UAAUA,aAAE,QAAQI,aAAAA,aAAa,MAAM;AAAA,QACvC,IAAIJ,aAAE;AAAA,QACN,OAAOA,aAAE;AAAA,QACT,MAAMA,aAAE;AAAA,QACR,KAAKA,aAAE;AAAA,QACP,UAAUC,cAAG;AAAA,MAAA,CACb,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIC,OAAAA,oBACT,2BAA2B,MAAM,OAAO,KAAK,IAAI,KACjD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,iBACL,MAAoC;AAEpC,UAAM,MAAM,IAAI,IAAI,sBAAsBL,4BAAc,cAAc;AACtE,QAAI,aAAa,IAAI,cAAc,KAAK,QAAQ,MAAM;AAEtD,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,+BAA+B;AAAA,MAChD;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,OAAOA,aAAE,MACRA,aAAE,KAAK;AAAA,QACN,UAAUA,aAAE,QAAQI,aAAAA,aAAa,MAAM;AAAA,QACvC,OAAOJ,aAAE;AAAA,QACT,MAAMA,aAAE;AAAA,MAAA,CACR,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIE,OAAAA,oBACT,kCAAkC,MAAM,OAAO,KAAK,IAAI,KACxD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,SAAS,MAA4B;AAC1C,UAAM,MAAM,IAAI,IAAI,sBAAsBL,4BAAc,cAAc;AACtE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,uBAAuB;AAAA,MACxC;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,MAA8B;AAC9C,UAAM,MAAM,IAAI,IAAI,sBAAsBD,4BAAc,cAAc;AACtE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,yBAAyB;AAAA,MAC1C;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,sBACL,MAA+B;AAE/B,UAAM,MAAM,IAAI,IACf,sCACAD,4BAAc,cAAc;AAE7B,QAAI,aAAa,IAAI,cAAc,KAAK,QAAQ,MAAM;AAClD,QAAA,aAAa,IAChB,OACAQ,sBAAAA,sBAAsB;AAAA,MACrB,UAAU,KAAK,IAAI;AAAA,MACnB,OAAO,KAAK,IAAI;AAAA,MAChB,MAAM,KAAK,IAAI;AAAA,IACf,CAAA,CAAC;AAGH,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIF,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,0CAA0C;AAAA,MAC3D;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,kBAAkBA,aAAE;AAAA,IAAA,CACpB,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIE,OAAAA,oBACT,qBAAqB,MAAM,OAAO,KAAK,IAAI,KAC3C,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,oBAAoB,MAA6B;AACtD,UAAM,MAAM,IAAI,IACf,sCACAL,4BAAc,cAAc;AAE7B,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,QACD,OAAO,KAAK;AAAA,MACZ;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,2CAA2C;AAAA,MAC5D;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,MAA6B;AACtD,UAAM,MAAM,IAAI,IACf,sCACAD,4BAAc,cAAc;AAE7B,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,2CAA2C;AAAA,MAC5D;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,yBAAyB,MAE9B;AACM,UAAA,UAAUQ,uBAAAA,uBAAuB,KAAK,QAAQ;AAEpD,YAAQ,KAAK,UAAU;AAAA,MACtB,KAAKF,aAAAA,aAAa,QAAQ;AACnB,cAAA,QAAQ,MAAM,KAAK;AAEzB,cAAM,MAAM,IAAI,IACf,2BAA2B,2BAA2B;AAEvD,YAAI,aAAa,IAAI,SAAS,MAAM,GAAG;AAEvC,eAAO,IAAI;MACX;AAAA,MAED,SAAS;AACR,cAAM,IAAIG,OAAA,iBACT,+BAA+B,KAAK,WAAW;AAAA,MAEhD;AAAA,IACD;AAAA,EACF;AAmBA;AAjBM;AAAA,WACL,eAAA,KACA,QAGC;AAED,QAAM,sBAAsB,MAAM,KAAK,KAAK,uBAAsB;AAE3D,SAAA,MAAMC,cAAM,KAAK;AAAA,IACvB,QAAQ,iCAAQ;AAAA,IAChB,OAAM,iCAAQ,QAAO,KAAK,UAAU,OAAO,IAAI,IAAI;AAAA,IACnD,SAAS;AAAA,MACR,eAAe,UAAU;AAAA,IACzB;AAAA,EAAA,CACD;AACF;;"}
@@ -1,3 +1,4 @@
1
+ import { GitProvider } from "../../constants/GIT_PROVIDER";
1
2
  import { BaseManager } from "../BaseManager";
2
3
  import { GitOwner, GitRepo, GitRepoSpecifier } from "./types";
3
4
  type GitManagerCreateGitHubAuthStateReturnType = {
@@ -7,7 +8,7 @@ type GitManagerCreateGitHubAuthStateReturnType = {
7
8
  type GitManagerFetchOwnersReturnType = GitOwner[];
8
9
  type GitManagerFetchReposReturnType = GitRepo[];
9
10
  type GitManagerFetchReposArgs = {
10
- provider: "gitHub";
11
+ provider: GitProvider;
11
12
  owner: string;
12
13
  query?: string;
13
14
  page?: number;
@@ -23,7 +24,7 @@ type GitManagerLinkRepoArgs = {
23
24
  domain: string;
24
25
  };
25
26
  git: {
26
- provider: "gitHub";
27
+ provider: GitProvider;
27
28
  owner: string;
28
29
  name: string;
29
30
  };
@@ -33,7 +34,7 @@ type GitManagerUnlinkRepoArgs = {
33
34
  domain: string;
34
35
  };
35
36
  git: {
36
- provider: "gitHub";
37
+ provider: GitProvider;
37
38
  owner: string;
38
39
  name: string;
39
40
  };
@@ -43,7 +44,7 @@ type CheckHasWriteAPITokenArgs = {
43
44
  domain: string;
44
45
  };
45
46
  git: {
46
- provider: "gitHub";
47
+ provider: GitProvider;
47
48
  owner: string;
48
49
  name: string;
49
50
  };
@@ -53,7 +54,7 @@ type UpdateWriteAPITokenArgs = {
53
54
  domain: string;
54
55
  };
55
56
  git: {
56
- provider: "gitHub";
57
+ provider: GitProvider;
57
58
  owner: string;
58
59
  name: string;
59
60
  };
@@ -64,7 +65,7 @@ type DeleteWriteAPITokenArgs = {
64
65
  domain: string;
65
66
  };
66
67
  git: {
67
- provider: "gitHub";
68
+ provider: GitProvider;
68
69
  owner: string;
69
70
  name: string;
70
71
  };
@@ -80,5 +81,8 @@ export declare class GitManager extends BaseManager {
80
81
  checkHasWriteAPIToken(args: CheckHasWriteAPITokenArgs): Promise<boolean>;
81
82
  updateWriteAPIToken(args: UpdateWriteAPITokenArgs): Promise<void>;
82
83
  deleteWriteAPIToken(args: DeleteWriteAPITokenArgs): Promise<void>;
84
+ getProviderAppInstallURL(args: {
85
+ provider: GitProvider;
86
+ }): Promise<string>;
83
87
  }
84
88
  export {};
@@ -17,9 +17,11 @@ import * as tt from "io-ts-types";
17
17
  import fetch from "../../lib/fetch.js";
18
18
  import { decode } from "../../lib/decode.js";
19
19
  import { API_ENDPOINTS } from "../../constants/API_ENDPOINTS.js";
20
- import { UnauthorizedError, UnexpectedDataError, UnauthenticatedError } from "../../errors.js";
20
+ import { GIT_PROVIDER } from "../../constants/GIT_PROVIDER.js";
21
+ import { UnauthorizedError, UnexpectedDataError, UnauthenticatedError, UnsupportedError } from "../../errors.js";
21
22
  import { BaseManager } from "../BaseManager.js";
22
23
  import { buildGitRepoSpecifier } from "./buildGitRepoSpecifier.js";
24
+ import { GIT_PROVIDER_APP_SLUGS } from "../../constants/GIT_PROVIDER_APP_SLUGS.js";
23
25
  class GitManager extends BaseManager {
24
26
  constructor() {
25
27
  super(...arguments);
@@ -62,7 +64,7 @@ class GitManager extends BaseManager {
62
64
  const json = await res.json();
63
65
  const { value, error } = decode(t.type({
64
66
  owners: t.array(t.type({
65
- provider: t.literal("gitHub"),
67
+ provider: t.literal(GIT_PROVIDER.GitHub),
66
68
  id: t.string,
67
69
  name: t.string,
68
70
  type: t.union([t.literal("user"), t.literal("team"), t.null])
@@ -97,7 +99,7 @@ class GitManager extends BaseManager {
97
99
  const json = await res.json();
98
100
  const { value, error } = decode(t.type({
99
101
  repos: t.array(t.type({
100
- provider: t.literal("gitHub"),
102
+ provider: t.literal(GIT_PROVIDER.GitHub),
101
103
  id: t.string,
102
104
  owner: t.string,
103
105
  name: t.string,
@@ -127,7 +129,7 @@ class GitManager extends BaseManager {
127
129
  const json = await res.json();
128
130
  const { value, error } = decode(t.type({
129
131
  repos: t.array(t.type({
130
- provider: t.literal("gitHub"),
132
+ provider: t.literal(GIT_PROVIDER.GitHub),
131
133
  owner: t.string,
132
134
  name: t.string
133
135
  }))
@@ -270,6 +272,20 @@ class GitManager extends BaseManager {
270
272
  }
271
273
  }
272
274
  }
275
+ async getProviderAppInstallURL(args) {
276
+ const appSlug = GIT_PROVIDER_APP_SLUGS[args.provider];
277
+ switch (args.provider) {
278
+ case GIT_PROVIDER.GitHub: {
279
+ const state = await this.createGitHubAuthState();
280
+ const url = new URL(`https://github.com/apps/${appSlug}/installations/new`);
281
+ url.searchParams.set("state", state.key);
282
+ return url.toString();
283
+ }
284
+ default: {
285
+ throw new UnsupportedError(`Git provider not supported: ${args.provider}.`);
286
+ }
287
+ }
288
+ }
273
289
  }
274
290
  _fetch = new WeakSet();
275
291
  fetch_fn = async function(url, config) {
@@ -1 +1 @@
1
- {"version":3,"file":"GitManager.js","sources":["../../../../src/managers/git/GitManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as tt from \"io-ts-types\";\n\nimport fetch from \"../../lib/fetch\";\nimport { decode } from \"../../lib/decode\";\n\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\n\nimport {\n\tUnauthenticatedError,\n\tUnauthorizedError,\n\tUnexpectedDataError,\n} from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { GitOwner, GitRepo, GitRepoSpecifier } from \"./types\";\nimport { buildGitRepoSpecifier } from \"./buildGitRepoSpecifier\";\n\ntype GitManagerCreateGitHubAuthStateReturnType = {\n\tkey: string;\n\texpiresAt: Date;\n};\n\ntype GitManagerFetchOwnersReturnType = GitOwner[];\n\ntype GitManagerFetchReposReturnType = GitRepo[];\n\ntype GitManagerFetchReposArgs = {\n\tprovider: \"gitHub\";\n\towner: string;\n\tquery?: string;\n\tpage?: number;\n};\n\ntype GitManagerFetchLinkedReposArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n};\n\ntype GitManagerFetchLinkedReposReturnType = GitRepoSpecifier[];\n\ntype GitManagerLinkRepoArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype GitManagerUnlinkRepoArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype CheckHasWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype UpdateWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n\ttoken: string;\n};\n\ntype DeleteWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\nexport class GitManager extends BaseManager {\n\tasync createGitHubAuthState(): Promise<GitManagerCreateGitHubAuthStateReturnType> {\n\t\tconst url = new URL(\n\t\t\t\"./git/github/create-auth-state\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, { method: \"POST\" });\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to create GitHub auth state.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\tkey: t.string,\n\t\t\t\texpiresAt: tt.DateFromISOString,\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode GitHub auth state: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tasync fetchOwners(): Promise<GitManagerFetchOwnersReturnType> {\n\t\tconst url = new URL(\"./git/owners\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch owners.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\towners: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(\"gitHub\"),\n\t\t\t\t\t\tid: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t\ttype: t.union([t.literal(\"user\"), t.literal(\"team\"), t.null]),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode owners: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.owners;\n\t}\n\n\tasync fetchRepos(\n\t\targs: GitManagerFetchReposArgs,\n\t): Promise<GitManagerFetchReposReturnType> {\n\t\tconst url = new URL(\"./git/repos\", API_ENDPOINTS.SliceMachineV1);\n\t\turl.searchParams.set(\"provider\", args.provider);\n\t\turl.searchParams.set(\"owner\", args.owner);\n\t\tif (args.query) {\n\t\t\turl.searchParams.set(\"q\", args.query);\n\t\t}\n\t\tif (args.page && args.page > 0) {\n\t\t\turl.searchParams.set(\"page\", args.page.toString());\n\t\t}\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch repos.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\trepos: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(\"gitHub\"),\n\t\t\t\t\t\tid: t.string,\n\t\t\t\t\t\towner: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t\turl: t.string,\n\t\t\t\t\t\tpushedAt: tt.DateFromISOString,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode repos: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.repos;\n\t}\n\n\tasync fetchLinkedRepos(\n\t\targs: GitManagerFetchLinkedReposArgs,\n\t): Promise<GitManagerFetchLinkedReposReturnType> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\turl.searchParams.set(\"repository\", args.prismic.domain);\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch linked repos.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\trepos: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(\"gitHub\"),\n\t\t\t\t\t\towner: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode linked repos: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.repos;\n\t}\n\n\tasync linkRepo(args: GitManagerLinkRepoArgs): Promise<void> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to link repos.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync unlinkRepo(args: GitManagerUnlinkRepoArgs): Promise<void> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to unlink repos.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync checkHasWriteAPIToken(\n\t\targs: CheckHasWriteAPITokenArgs,\n\t): Promise<boolean> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\turl.searchParams.set(\"repository\", args.prismic.domain);\n\t\turl.searchParams.set(\n\t\t\t\"git\",\n\t\t\tbuildGitRepoSpecifier({\n\t\t\t\tprovider: args.git.provider,\n\t\t\t\towner: args.git.owner,\n\t\t\t\tname: args.git.name,\n\t\t\t}),\n\t\t);\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to check Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\thasWriteAPIToken: t.boolean,\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.hasWriteAPIToken;\n\t}\n\n\tasync updateWriteAPIToken(args: UpdateWriteAPITokenArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t\ttoken: args.token,\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to update Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync deleteWriteAPIToken(args: DeleteWriteAPITokenArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to delete Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync #fetch(\n\t\turl: URL,\n\t\tconfig?: {\n\t\t\tmethod?: \"POST\" | \"PUT\" | \"DELETE\";\n\t\t\tbody?: unknown;\n\t\t},\n\t) {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\n\t\treturn await fetch(url, {\n\t\t\tmethod: config?.method,\n\t\t\tbody: config?.body ? JSON.stringify(config.body) : undefined,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authenticationToken}`,\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GitManager.js","sources":["../../../../src/managers/git/GitManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as tt from \"io-ts-types\";\n\nimport fetch from \"../../lib/fetch\";\nimport { decode } from \"../../lib/decode\";\n\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\nimport { GitProvider, GIT_PROVIDER } from \"../../constants/GIT_PROVIDER\";\n\nimport {\n\tUnauthenticatedError,\n\tUnauthorizedError,\n\tUnexpectedDataError,\n\tUnsupportedError,\n} from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { GitOwner, GitRepo, GitRepoSpecifier } from \"./types\";\nimport { buildGitRepoSpecifier } from \"./buildGitRepoSpecifier\";\nimport { GIT_PROVIDER_APP_SLUGS } from \"../../constants/GIT_PROVIDER_APP_SLUGS\";\n\ntype GitManagerCreateGitHubAuthStateReturnType = {\n\tkey: string;\n\texpiresAt: Date;\n};\n\ntype GitManagerFetchOwnersReturnType = GitOwner[];\n\ntype GitManagerFetchReposReturnType = GitRepo[];\n\ntype GitManagerFetchReposArgs = {\n\tprovider: GitProvider;\n\towner: string;\n\tquery?: string;\n\tpage?: number;\n};\n\ntype GitManagerFetchLinkedReposArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n};\n\ntype GitManagerFetchLinkedReposReturnType = GitRepoSpecifier[];\n\ntype GitManagerLinkRepoArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: GitProvider;\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype GitManagerUnlinkRepoArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: GitProvider;\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype CheckHasWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: GitProvider;\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype UpdateWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: GitProvider;\n\t\towner: string;\n\t\tname: string;\n\t};\n\ttoken: string;\n};\n\ntype DeleteWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: GitProvider;\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\nexport class GitManager extends BaseManager {\n\tasync createGitHubAuthState(): Promise<GitManagerCreateGitHubAuthStateReturnType> {\n\t\tconst url = new URL(\n\t\t\t\"./git/github/create-auth-state\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, { method: \"POST\" });\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to create GitHub auth state.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\tkey: t.string,\n\t\t\t\texpiresAt: tt.DateFromISOString,\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode GitHub auth state: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tasync fetchOwners(): Promise<GitManagerFetchOwnersReturnType> {\n\t\tconst url = new URL(\"./git/owners\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch owners.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\towners: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(GIT_PROVIDER.GitHub),\n\t\t\t\t\t\tid: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t\ttype: t.union([t.literal(\"user\"), t.literal(\"team\"), t.null]),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode owners: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.owners;\n\t}\n\n\tasync fetchRepos(\n\t\targs: GitManagerFetchReposArgs,\n\t): Promise<GitManagerFetchReposReturnType> {\n\t\tconst url = new URL(\"./git/repos\", API_ENDPOINTS.SliceMachineV1);\n\t\turl.searchParams.set(\"provider\", args.provider);\n\t\turl.searchParams.set(\"owner\", args.owner);\n\t\tif (args.query) {\n\t\t\turl.searchParams.set(\"q\", args.query);\n\t\t}\n\t\tif (args.page && args.page > 0) {\n\t\t\turl.searchParams.set(\"page\", args.page.toString());\n\t\t}\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch repos.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\trepos: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(GIT_PROVIDER.GitHub),\n\t\t\t\t\t\tid: t.string,\n\t\t\t\t\t\towner: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t\turl: t.string,\n\t\t\t\t\t\tpushedAt: tt.DateFromISOString,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode repos: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.repos;\n\t}\n\n\tasync fetchLinkedRepos(\n\t\targs: GitManagerFetchLinkedReposArgs,\n\t): Promise<GitManagerFetchLinkedReposReturnType> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\turl.searchParams.set(\"repository\", args.prismic.domain);\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch linked repos.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\trepos: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(GIT_PROVIDER.GitHub),\n\t\t\t\t\t\towner: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode linked repos: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.repos;\n\t}\n\n\tasync linkRepo(args: GitManagerLinkRepoArgs): Promise<void> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to link repos.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync unlinkRepo(args: GitManagerUnlinkRepoArgs): Promise<void> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to unlink repos.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync checkHasWriteAPIToken(\n\t\targs: CheckHasWriteAPITokenArgs,\n\t): Promise<boolean> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\turl.searchParams.set(\"repository\", args.prismic.domain);\n\t\turl.searchParams.set(\n\t\t\t\"git\",\n\t\t\tbuildGitRepoSpecifier({\n\t\t\t\tprovider: args.git.provider,\n\t\t\t\towner: args.git.owner,\n\t\t\t\tname: args.git.name,\n\t\t\t}),\n\t\t);\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to check Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\thasWriteAPIToken: t.boolean,\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.hasWriteAPIToken;\n\t}\n\n\tasync updateWriteAPIToken(args: UpdateWriteAPITokenArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t\ttoken: args.token,\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to update Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync deleteWriteAPIToken(args: DeleteWriteAPITokenArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\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\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to delete Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync getProviderAppInstallURL(args: {\n\t\tprovider: GitProvider;\n\t}): Promise<string> {\n\t\tconst appSlug = GIT_PROVIDER_APP_SLUGS[args.provider];\n\n\t\tswitch (args.provider) {\n\t\t\tcase GIT_PROVIDER.GitHub: {\n\t\t\t\tconst state = await this.createGitHubAuthState();\n\n\t\t\t\tconst url = new URL(\n\t\t\t\t\t`https://github.com/apps/${appSlug}/installations/new`,\n\t\t\t\t);\n\t\t\t\turl.searchParams.set(\"state\", state.key);\n\n\t\t\t\treturn url.toString();\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tthrow new UnsupportedError(\n\t\t\t\t\t`Git provider not supported: ${args.provider}.`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync #fetch(\n\t\turl: URL,\n\t\tconfig?: {\n\t\t\tmethod?: \"POST\" | \"PUT\" | \"DELETE\";\n\t\t\tbody?: unknown;\n\t\t},\n\t) {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\n\t\treturn await fetch(url, {\n\t\t\tmethod: config?.method,\n\t\t\tbody: config?.body ? JSON.stringify(config.body) : undefined,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authenticationToken}`,\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
+ import { GitProvider } from "../../constants/GIT_PROVIDER";
1
2
  export type GitOwner = {
2
- provider: "gitHub";
3
+ provider: GitProvider;
3
4
  id: string;
4
5
  name: string;
5
6
  type: "user" | "team" | null;
6
7
  };
7
8
  export type GitRepo = {
8
- provider: "gitHub";
9
+ provider: GitProvider;
9
10
  id: string;
10
11
  owner: string;
11
12
  name: string;
@@ -13,7 +14,7 @@ export type GitRepo = {
13
14
  pushedAt: Date;
14
15
  };
15
16
  export type GitRepoSpecifier = {
16
- provider: "gitHub";
17
+ provider: GitProvider;
17
18
  owner: string;
18
19
  name: string;
19
20
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slicemachine/manager",
3
- "version": "0.18.1-beta.3",
3
+ "version": "0.18.1-beta.5",
4
4
  "description": "Manage all aspects of a Slice Machine project.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -69,7 +69,7 @@
69
69
  "@prismicio/mocks": "2.0.0",
70
70
  "@prismicio/types-internal": "^2.2.0",
71
71
  "@segment/analytics-node": "1.1.3",
72
- "@slicemachine/plugin-kit": "0.4.36-beta.3",
72
+ "@slicemachine/plugin-kit": "0.4.36-beta.5",
73
73
  "@wooorm/starry-night": "^1.6.0",
74
74
  "cookie": "^0.5.0",
75
75
  "cors": "^2.8.5",
@@ -12,6 +12,8 @@ export type {
12
12
  SimulatorManagerReadSliceSimulatorSetupStepsReturnType,
13
13
  } from "../managers/simulator/SimulatorManager";
14
14
 
15
+ export { GIT_PROVIDER, type GitProvider } from "../constants/GIT_PROVIDER";
16
+
15
17
  export type { Environment } from "../managers/prismicRepository/types";
16
18
 
17
19
  export type { SliceMachineManagerPushSliceReturnType } from "../managers/slices/SlicesManager";
@@ -31,6 +33,7 @@ export {
31
33
  isUnauthorizedError,
32
34
  isUnexpectedDataError,
33
35
  isInvalidActiveEnvironmentError,
36
+ isUnsupportedError,
34
37
  } from "../errors";
35
38
 
36
39
  export { DecodeError } from "../lib/DecodeError";
@@ -0,0 +1,5 @@
1
+ export const GIT_PROVIDER = {
2
+ GitHub: "gitHub",
3
+ } as const;
4
+
5
+ export type GitProvider = (typeof GIT_PROVIDER)[keyof typeof GIT_PROVIDER];
@@ -0,0 +1,28 @@
1
+ import { APPLICATION_MODE } from "./APPLICATION_MODE";
2
+ import { GIT_PROVIDER, GitProvider } from "./GIT_PROVIDER";
3
+
4
+ export type GitProviderAppSlugs = Record<GitProvider, string>;
5
+
6
+ export const GIT_PROVIDER_APP_SLUGS: GitProviderAppSlugs = (() => {
7
+ switch (process.env.SM_ENV) {
8
+ case APPLICATION_MODE.Development: {
9
+ return {
10
+ [GIT_PROVIDER.GitHub]:
11
+ process.env.GITHUB_APP_SLUG ?? "prismic-io-staging",
12
+ };
13
+ }
14
+
15
+ case APPLICATION_MODE.Staging: {
16
+ return {
17
+ [GIT_PROVIDER.GitHub]: "prismic-io-staging",
18
+ };
19
+ }
20
+
21
+ case APPLICATION_MODE.Production:
22
+ default: {
23
+ return {
24
+ [GIT_PROVIDER.GitHub]: "prismic-io",
25
+ };
26
+ }
27
+ }
28
+ })();
package/src/errors.ts CHANGED
@@ -39,6 +39,9 @@ export class PluginHookResultError extends SliceMachineError {
39
39
  export class InvalidActiveEnvironmentError extends SliceMachineError {
40
40
  name = "SMInvalidActiveEnvironmentError" as const;
41
41
  }
42
+ export class UnsupportedError extends SliceMachineError {
43
+ name = "SMUnsupportedError" as const;
44
+ }
42
45
 
43
46
  type SliceMachineErrorNames =
44
47
  | "SMSliceMachineError"
@@ -49,7 +52,8 @@ type SliceMachineErrorNames =
49
52
  | InternalError["name"]
50
53
  | PluginError["name"]
51
54
  | PluginHookResultError["name"]
52
- | InvalidActiveEnvironmentError["name"];
55
+ | InvalidActiveEnvironmentError["name"]
56
+ | UnsupportedError["name"];
53
57
 
54
58
  type ShallowSliceMachineError<TName extends SliceMachineErrorNames> = Error & {
55
59
  name: TName;
@@ -107,3 +111,9 @@ export const isInvalidActiveEnvironmentError = (
107
111
  ): error is ShallowSliceMachineError<"SMInvalidActiveEnvironmentError"> => {
108
112
  return isSliceMachineError(error, "SMInvalidActiveEnvironmentError");
109
113
  };
114
+
115
+ export const isUnsupportedError = (
116
+ error: unknown,
117
+ ): error is ShallowSliceMachineError<"SMUnsupportedError"> => {
118
+ return isSliceMachineError(error, "SMUnsupportedError");
119
+ };
package/src/index.ts CHANGED
@@ -42,6 +42,7 @@ export {
42
42
  PluginError,
43
43
  PluginHookResultError,
44
44
  InvalidActiveEnvironmentError,
45
+ UnsupportedError,
45
46
  } from "./errors";
46
47
 
47
48
  export { getEnvironmentInfo } from "./getEnvironmentInfo";
@@ -5,17 +5,20 @@ import fetch from "../../lib/fetch";
5
5
  import { decode } from "../../lib/decode";
6
6
 
7
7
  import { API_ENDPOINTS } from "../../constants/API_ENDPOINTS";
8
+ import { GitProvider, GIT_PROVIDER } from "../../constants/GIT_PROVIDER";
8
9
 
9
10
  import {
10
11
  UnauthenticatedError,
11
12
  UnauthorizedError,
12
13
  UnexpectedDataError,
14
+ UnsupportedError,
13
15
  } from "../../errors";
14
16
 
15
17
  import { BaseManager } from "../BaseManager";
16
18
 
17
19
  import { GitOwner, GitRepo, GitRepoSpecifier } from "./types";
18
20
  import { buildGitRepoSpecifier } from "./buildGitRepoSpecifier";
21
+ import { GIT_PROVIDER_APP_SLUGS } from "../../constants/GIT_PROVIDER_APP_SLUGS";
19
22
 
20
23
  type GitManagerCreateGitHubAuthStateReturnType = {
21
24
  key: string;
@@ -27,7 +30,7 @@ type GitManagerFetchOwnersReturnType = GitOwner[];
27
30
  type GitManagerFetchReposReturnType = GitRepo[];
28
31
 
29
32
  type GitManagerFetchReposArgs = {
30
- provider: "gitHub";
33
+ provider: GitProvider;
31
34
  owner: string;
32
35
  query?: string;
33
36
  page?: number;
@@ -46,7 +49,7 @@ type GitManagerLinkRepoArgs = {
46
49
  domain: string;
47
50
  };
48
51
  git: {
49
- provider: "gitHub";
52
+ provider: GitProvider;
50
53
  owner: string;
51
54
  name: string;
52
55
  };
@@ -57,7 +60,7 @@ type GitManagerUnlinkRepoArgs = {
57
60
  domain: string;
58
61
  };
59
62
  git: {
60
- provider: "gitHub";
63
+ provider: GitProvider;
61
64
  owner: string;
62
65
  name: string;
63
66
  };
@@ -68,7 +71,7 @@ type CheckHasWriteAPITokenArgs = {
68
71
  domain: string;
69
72
  };
70
73
  git: {
71
- provider: "gitHub";
74
+ provider: GitProvider;
72
75
  owner: string;
73
76
  name: string;
74
77
  };
@@ -79,7 +82,7 @@ type UpdateWriteAPITokenArgs = {
79
82
  domain: string;
80
83
  };
81
84
  git: {
82
- provider: "gitHub";
85
+ provider: GitProvider;
83
86
  owner: string;
84
87
  name: string;
85
88
  };
@@ -91,7 +94,7 @@ type DeleteWriteAPITokenArgs = {
91
94
  domain: string;
92
95
  };
93
96
  git: {
94
- provider: "gitHub";
97
+ provider: GitProvider;
95
98
  owner: string;
96
99
  name: string;
97
100
  };
@@ -153,7 +156,7 @@ export class GitManager extends BaseManager {
153
156
  t.type({
154
157
  owners: t.array(
155
158
  t.type({
156
- provider: t.literal("gitHub"),
159
+ provider: t.literal(GIT_PROVIDER.GitHub),
157
160
  id: t.string,
158
161
  name: t.string,
159
162
  type: t.union([t.literal("user"), t.literal("team"), t.null]),
@@ -204,7 +207,7 @@ export class GitManager extends BaseManager {
204
207
  t.type({
205
208
  repos: t.array(
206
209
  t.type({
207
- provider: t.literal("gitHub"),
210
+ provider: t.literal(GIT_PROVIDER.GitHub),
208
211
  id: t.string,
209
212
  owner: t.string,
210
213
  name: t.string,
@@ -250,7 +253,7 @@ export class GitManager extends BaseManager {
250
253
  t.type({
251
254
  repos: t.array(
252
255
  t.type({
253
- provider: t.literal("gitHub"),
256
+ provider: t.literal(GIT_PROVIDER.GitHub),
254
257
  owner: t.string,
255
258
  name: t.string,
256
259
  }),
@@ -436,6 +439,31 @@ export class GitManager extends BaseManager {
436
439
  }
437
440
  }
438
441
 
442
+ async getProviderAppInstallURL(args: {
443
+ provider: GitProvider;
444
+ }): Promise<string> {
445
+ const appSlug = GIT_PROVIDER_APP_SLUGS[args.provider];
446
+
447
+ switch (args.provider) {
448
+ case GIT_PROVIDER.GitHub: {
449
+ const state = await this.createGitHubAuthState();
450
+
451
+ const url = new URL(
452
+ `https://github.com/apps/${appSlug}/installations/new`,
453
+ );
454
+ url.searchParams.set("state", state.key);
455
+
456
+ return url.toString();
457
+ }
458
+
459
+ default: {
460
+ throw new UnsupportedError(
461
+ `Git provider not supported: ${args.provider}.`,
462
+ );
463
+ }
464
+ }
465
+ }
466
+
439
467
  async #fetch(
440
468
  url: URL,
441
469
  config?: {
@@ -1,5 +1,7 @@
1
+ import { GitProvider } from "../../constants/GIT_PROVIDER";
2
+
1
3
  export type GitOwner = {
2
- provider: "gitHub";
4
+ provider: GitProvider;
3
5
  id: string;
4
6
  name: string;
5
7
  // If type is null, the owner's type could not be determined. This can
@@ -9,7 +11,7 @@ export type GitOwner = {
9
11
  };
10
12
 
11
13
  export type GitRepo = {
12
- provider: "gitHub";
14
+ provider: GitProvider;
13
15
  id: string;
14
16
  owner: string;
15
17
  name: string;
@@ -18,7 +20,7 @@ export type GitRepo = {
18
20
  };
19
21
 
20
22
  export type GitRepoSpecifier = {
21
- provider: "gitHub";
23
+ provider: GitProvider;
22
24
  owner: string;
23
25
  name: string;
24
26
  };