@slicemachine/manager 0.18.1-beta.2 → 0.18.1-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/index.d.ts +2 -1
- package/dist/client.cjs +3 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +5 -2
- package/dist/client.js.map +1 -1
- package/dist/constants/GIT_PROVIDER.cjs +7 -0
- package/dist/constants/GIT_PROVIDER.cjs.map +1 -0
- package/dist/constants/GIT_PROVIDER.d.ts +4 -0
- package/dist/constants/GIT_PROVIDER.js +7 -0
- package/dist/constants/GIT_PROVIDER.js.map +1 -0
- package/dist/constants/GIT_PROVIDER_APP_SLUGS.cjs +26 -0
- package/dist/constants/GIT_PROVIDER_APP_SLUGS.cjs.map +1 -0
- package/dist/constants/GIT_PROVIDER_APP_SLUGS.d.ts +3 -0
- package/dist/constants/GIT_PROVIDER_APP_SLUGS.js +26 -0
- package/dist/constants/GIT_PROVIDER_APP_SLUGS.js.map +1 -0
- package/dist/errors.cjs +11 -0
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +5 -1
- package/dist/errors.js +12 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/dist/managers/git/GitManager.cjs +19 -3
- package/dist/managers/git/GitManager.cjs.map +1 -1
- package/dist/managers/git/GitManager.d.ts +10 -6
- package/dist/managers/git/GitManager.js +20 -4
- package/dist/managers/git/GitManager.js.map +1 -1
- package/dist/managers/git/types.d.ts +4 -3
- package/package.json +2 -2
- package/src/client/index.ts +3 -0
- package/src/constants/GIT_PROVIDER.ts +5 -0
- package/src/constants/GIT_PROVIDER_APP_SLUGS.ts +28 -0
- package/src/errors.ts +11 -1
- package/src/index.ts +1 -0
- package/src/managers/git/GitManager.ts +37 -9
- package/src/managers/git/types.ts +5 -3
package/dist/client/index.d.ts
CHANGED
|
@@ -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
|
package/dist/client.cjs.map
CHANGED
|
@@ -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 {
|
|
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
|
package/dist/client.js.map
CHANGED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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,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
|
package/dist/errors.cjs.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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
|
package/dist/errors.js.map
CHANGED
|
@@ -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;
|
|
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;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -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(
|
|
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(
|
|
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(
|
|
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":"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"}
|
|
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":"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"}
|
|
@@ -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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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 {
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
+
"version": "0.18.1-beta.4",
|
|
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.
|
|
72
|
+
"@slicemachine/plugin-kit": "0.4.36-beta.4",
|
|
73
73
|
"@wooorm/starry-night": "^1.6.0",
|
|
74
74
|
"cookie": "^0.5.0",
|
|
75
75
|
"cors": "^2.8.5",
|
package/src/client/index.ts
CHANGED
|
@@ -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,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
|
@@ -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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
23
|
+
provider: GitProvider;
|
|
22
24
|
owner: string;
|
|
23
25
|
name: string;
|
|
24
26
|
};
|