@slicemachine/manager 0.17.9-alpha.bmo-add-github-settings-page.3 → 0.17.9-alpha.bmo-add-github-settings-page.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/constants/API_ENDPOINTS.cjs +1 -1
- package/dist/constants/API_ENDPOINTS.cjs.map +1 -1
- package/dist/constants/API_ENDPOINTS.js +1 -1
- package/dist/constants/API_ENDPOINTS.js.map +1 -1
- package/dist/managers/git/GitManager.cjs +29 -0
- package/dist/managers/git/GitManager.cjs.map +1 -1
- package/dist/managers/git/GitManager.d.ts +11 -0
- package/dist/managers/git/GitManager.js +29 -0
- package/dist/managers/git/GitManager.js.map +1 -1
- package/dist/managers/git/buildGitRepoSpecifier.cjs +7 -0
- package/dist/managers/git/buildGitRepoSpecifier.cjs.map +1 -0
- package/dist/managers/git/buildGitRepoSpecifier.d.ts +19 -0
- package/dist/managers/git/buildGitRepoSpecifier.js +7 -0
- package/dist/managers/git/buildGitRepoSpecifier.js.map +1 -0
- package/package.json +2 -2
- package/src/constants/API_ENDPOINTS.ts +1 -2
- package/src/managers/git/GitManager.ts +60 -0
- package/src/managers/git/buildGitRepoSpecifier.ts +24 -0
|
@@ -46,7 +46,7 @@ const API_ENDPOINTS = (() => {
|
|
|
46
46
|
AwsAclProvider: "https://0yyeb2g040.execute-api.us-east-1.amazonaws.com/prod/",
|
|
47
47
|
PrismicOembed: "https://oembed.prismic.io",
|
|
48
48
|
PrismicUnsplash: "https://unsplash.prismic.io",
|
|
49
|
-
SliceMachineV1: "https://
|
|
49
|
+
SliceMachineV1: "https://sm-api.prismic.io/v1/"
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"API_ENDPOINTS.cjs","sources":["../../../src/constants/API_ENDPOINTS.ts"],"sourcesContent":["import { addTrailingSlash, removeTrailingSlash } from \"../lib/trailingSlash\";\nimport { APPLICATION_MODE } from \"./APPLICATION_MODE\";\n\nexport type APIEndpoints = {\n\tPrismicWroom: string;\n\tPrismicAuthentication: string;\n\tPrismicModels: string;\n\tPrismicUser: string;\n\tAwsAclProvider: string;\n\tPrismicOembed: string;\n\tPrismicUnsplash: string;\n\tSliceMachineV1: string;\n};\n\nexport const API_ENDPOINTS: APIEndpoints = (() => {\n\tswitch (process.env.SM_ENV) {\n\t\tcase APPLICATION_MODE.Development: {\n\t\t\tconst apiEndpoints = {\n\t\t\t\tPrismicWroom: addTrailingSlash(process.env.wroom_endpoint),\n\t\t\t\tPrismicAuthentication: addTrailingSlash(\n\t\t\t\t\tprocess.env.authentication_server_endpoint,\n\t\t\t\t),\n\t\t\t\tPrismicModels: addTrailingSlash(process.env.customtypesapi_endpoint),\n\t\t\t\tPrismicUser: addTrailingSlash(process.env.user_service_endpoint),\n\t\t\t\tAwsAclProvider: addTrailingSlash(process.env.acl_provider_endpoint),\n\t\t\t\tPrismicOembed: removeTrailingSlash(\n\t\t\t\t\tprocess.env.oembed_endpoint ?? \"https://oembed.wroom.io\",\n\t\t\t\t),\n\t\t\t\tPrismicUnsplash: removeTrailingSlash(\n\t\t\t\t\tprocess.env.unsplash_endpoint ?? \"https://unsplash.wroom.io\",\n\t\t\t\t),\n\t\t\t\tSliceMachineV1: addTrailingSlash(\n\t\t\t\t\tprocess.env.slice_machine_v1_endpoint ??\n\t\t\t\t\t\t\"https://mc5qopc07a.execute-api.us-east-1.amazonaws.com/v1/\",\n\t\t\t\t),\n\t\t\t};\n\n\t\t\tconst missingAPIEndpoints = Object.keys(apiEndpoints).filter((key) => {\n\t\t\t\treturn !apiEndpoints[key as keyof typeof apiEndpoints];\n\t\t\t});\n\n\t\t\tif (missingAPIEndpoints.length > 0) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`You are running Slice Machine in development mode where API endpoints are configured via environment variables. The following endpoints were not configured: ${missingAPIEndpoints.join(\n\t\t\t\t\t\t\", \",\n\t\t\t\t\t)}. Configure them before continuing.`,\n\t\t\t\t);\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\treturn apiEndpoints as APIEndpoints;\n\t\t}\n\n\t\tcase APPLICATION_MODE.Staging: {\n\t\t\treturn {\n\t\t\t\tPrismicWroom: \"https://wroom.io/\",\n\t\t\t\tPrismicAuthentication: \"https://auth.wroom.io/\",\n\t\t\t\tPrismicModels: \"https://customtypes.wroom.io/\",\n\t\t\t\tPrismicUser: \"https://user-service.wroom.io/\",\n\t\t\t\tAwsAclProvider:\n\t\t\t\t\t\"https://2iamcvnxf4.execute-api.us-east-1.amazonaws.com/stage/\",\n\t\t\t\tPrismicOembed: \"https://oembed.wroom.io\",\n\t\t\t\tPrismicUnsplash: \"https://unsplash.wroom.io\",\n\t\t\t\tSliceMachineV1:\n\t\t\t\t\t\"https://mc5qopc07a.execute-api.us-east-1.amazonaws.com/v1/\",\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\tPrismicWroom: \"https://prismic.io/\",\n\t\t\t\tPrismicAuthentication: \"https://auth.prismic.io/\",\n\t\t\t\tPrismicModels: \"https://customtypes.prismic.io/\",\n\t\t\t\tPrismicUser: \"https://user-service.prismic.io/\",\n\t\t\t\tAwsAclProvider:\n\t\t\t\t\t\"https://0yyeb2g040.execute-api.us-east-1.amazonaws.com/prod/\",\n\t\t\t\tPrismicOembed: \"https://oembed.prismic.io\",\n\t\t\t\tPrismicUnsplash: \"https://unsplash.prismic.io\",\n\t\t\t\tSliceMachineV1
|
|
1
|
+
{"version":3,"file":"API_ENDPOINTS.cjs","sources":["../../../src/constants/API_ENDPOINTS.ts"],"sourcesContent":["import { addTrailingSlash, removeTrailingSlash } from \"../lib/trailingSlash\";\nimport { APPLICATION_MODE } from \"./APPLICATION_MODE\";\n\nexport type APIEndpoints = {\n\tPrismicWroom: string;\n\tPrismicAuthentication: string;\n\tPrismicModels: string;\n\tPrismicUser: string;\n\tAwsAclProvider: string;\n\tPrismicOembed: string;\n\tPrismicUnsplash: string;\n\tSliceMachineV1: string;\n};\n\nexport const API_ENDPOINTS: APIEndpoints = (() => {\n\tswitch (process.env.SM_ENV) {\n\t\tcase APPLICATION_MODE.Development: {\n\t\t\tconst apiEndpoints = {\n\t\t\t\tPrismicWroom: addTrailingSlash(process.env.wroom_endpoint),\n\t\t\t\tPrismicAuthentication: addTrailingSlash(\n\t\t\t\t\tprocess.env.authentication_server_endpoint,\n\t\t\t\t),\n\t\t\t\tPrismicModels: addTrailingSlash(process.env.customtypesapi_endpoint),\n\t\t\t\tPrismicUser: addTrailingSlash(process.env.user_service_endpoint),\n\t\t\t\tAwsAclProvider: addTrailingSlash(process.env.acl_provider_endpoint),\n\t\t\t\tPrismicOembed: removeTrailingSlash(\n\t\t\t\t\tprocess.env.oembed_endpoint ?? \"https://oembed.wroom.io\",\n\t\t\t\t),\n\t\t\t\tPrismicUnsplash: removeTrailingSlash(\n\t\t\t\t\tprocess.env.unsplash_endpoint ?? \"https://unsplash.wroom.io\",\n\t\t\t\t),\n\t\t\t\tSliceMachineV1: addTrailingSlash(\n\t\t\t\t\tprocess.env.slice_machine_v1_endpoint ??\n\t\t\t\t\t\t\"https://mc5qopc07a.execute-api.us-east-1.amazonaws.com/v1/\",\n\t\t\t\t),\n\t\t\t};\n\n\t\t\tconst missingAPIEndpoints = Object.keys(apiEndpoints).filter((key) => {\n\t\t\t\treturn !apiEndpoints[key as keyof typeof apiEndpoints];\n\t\t\t});\n\n\t\t\tif (missingAPIEndpoints.length > 0) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`You are running Slice Machine in development mode where API endpoints are configured via environment variables. The following endpoints were not configured: ${missingAPIEndpoints.join(\n\t\t\t\t\t\t\", \",\n\t\t\t\t\t)}. Configure them before continuing.`,\n\t\t\t\t);\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\treturn apiEndpoints as APIEndpoints;\n\t\t}\n\n\t\tcase APPLICATION_MODE.Staging: {\n\t\t\treturn {\n\t\t\t\tPrismicWroom: \"https://wroom.io/\",\n\t\t\t\tPrismicAuthentication: \"https://auth.wroom.io/\",\n\t\t\t\tPrismicModels: \"https://customtypes.wroom.io/\",\n\t\t\t\tPrismicUser: \"https://user-service.wroom.io/\",\n\t\t\t\tAwsAclProvider:\n\t\t\t\t\t\"https://2iamcvnxf4.execute-api.us-east-1.amazonaws.com/stage/\",\n\t\t\t\tPrismicOembed: \"https://oembed.wroom.io\",\n\t\t\t\tPrismicUnsplash: \"https://unsplash.wroom.io\",\n\t\t\t\tSliceMachineV1:\n\t\t\t\t\t\"https://mc5qopc07a.execute-api.us-east-1.amazonaws.com/v1/\",\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\tPrismicWroom: \"https://prismic.io/\",\n\t\t\t\tPrismicAuthentication: \"https://auth.prismic.io/\",\n\t\t\t\tPrismicModels: \"https://customtypes.prismic.io/\",\n\t\t\t\tPrismicUser: \"https://user-service.prismic.io/\",\n\t\t\t\tAwsAclProvider:\n\t\t\t\t\t\"https://0yyeb2g040.execute-api.us-east-1.amazonaws.com/prod/\",\n\t\t\t\tPrismicOembed: \"https://oembed.prismic.io\",\n\t\t\t\tPrismicUnsplash: \"https://unsplash.prismic.io\",\n\t\t\t\tSliceMachineV1: \"https://sm-api.prismic.io/v1/\",\n\t\t\t};\n\t\t}\n\t}\n})();\n"],"names":["APPLICATION_MODE","addTrailingSlash","removeTrailingSlash"],"mappings":";;;;AAcO,MAAM,iBAA+B,MAAK;AACxC,UAAA,QAAQ,IAAI,QAAQ;AAAA,IAC3B,KAAKA,iBAAAA,iBAAiB,aAAa;AAClC,YAAM,eAAe;AAAA,QACpB,cAAcC,cAAA,iBAAiB,QAAQ,IAAI,cAAc;AAAA,QACzD,uBAAuBA,cAAA,iBACtB,QAAQ,IAAI,8BAA8B;AAAA,QAE3C,eAAeA,cAAA,iBAAiB,QAAQ,IAAI,uBAAuB;AAAA,QACnE,aAAaA,cAAA,iBAAiB,QAAQ,IAAI,qBAAqB;AAAA,QAC/D,gBAAgBA,cAAA,iBAAiB,QAAQ,IAAI,qBAAqB;AAAA,QAClE,eAAeC,cAAAA,oBACd,QAAQ,IAAI,mBAAmB,yBAAyB;AAAA,QAEzD,iBAAiBA,cAAAA,oBAChB,QAAQ,IAAI,qBAAqB,2BAA2B;AAAA,QAE7D,gBAAgBD,cAAAA,iBACf,QAAQ,IAAI,6BACX,4DAA4D;AAAA,MAAA;AAI/D,YAAM,sBAAsB,OAAO,KAAK,YAAY,EAAE,OAAO,CAAC,QAAO;AAC7D,eAAA,CAAC,aAAa,GAAgC;AAAA,MAAA,CACrD;AAEG,UAAA,oBAAoB,SAAS,GAAG;AACnC,gBAAQ,MACP,gKAAgK,oBAAoB,KACnL,IAAI,sCACiC;AAGvC,gBAAQ,KAAK,CAAC;AAAA,MACd;AAEM,aAAA;AAAA,IACP;AAAA,IAED,KAAKD,iBAAAA,iBAAiB,SAAS;AACvB,aAAA;AAAA,QACN,cAAc;AAAA,QACd,uBAAuB;AAAA,QACvB,eAAe;AAAA,QACf,aAAa;AAAA,QACb,gBACC;AAAA,QACD,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,gBACC;AAAA,MAAA;AAAA,IAEF;AAAA,IAED,KAAKA,iBAAAA,iBAAiB;AAAA,IACtB,SAAS;AACD,aAAA;AAAA,QACN,cAAc;AAAA,QACd,uBAAuB;AAAA,QACvB,eAAe;AAAA,QACf,aAAa;AAAA,QACb,gBACC;AAAA,QACD,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,MAAA;AAAA,IAEjB;AAAA,EACD;AACF;;"}
|
|
@@ -44,7 +44,7 @@ const API_ENDPOINTS = (() => {
|
|
|
44
44
|
AwsAclProvider: "https://0yyeb2g040.execute-api.us-east-1.amazonaws.com/prod/",
|
|
45
45
|
PrismicOembed: "https://oembed.prismic.io",
|
|
46
46
|
PrismicUnsplash: "https://unsplash.prismic.io",
|
|
47
|
-
SliceMachineV1: "https://
|
|
47
|
+
SliceMachineV1: "https://sm-api.prismic.io/v1/"
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"API_ENDPOINTS.js","sources":["../../../src/constants/API_ENDPOINTS.ts"],"sourcesContent":["import { addTrailingSlash, removeTrailingSlash } from \"../lib/trailingSlash\";\nimport { APPLICATION_MODE } from \"./APPLICATION_MODE\";\n\nexport type APIEndpoints = {\n\tPrismicWroom: string;\n\tPrismicAuthentication: string;\n\tPrismicModels: string;\n\tPrismicUser: string;\n\tAwsAclProvider: string;\n\tPrismicOembed: string;\n\tPrismicUnsplash: string;\n\tSliceMachineV1: string;\n};\n\nexport const API_ENDPOINTS: APIEndpoints = (() => {\n\tswitch (process.env.SM_ENV) {\n\t\tcase APPLICATION_MODE.Development: {\n\t\t\tconst apiEndpoints = {\n\t\t\t\tPrismicWroom: addTrailingSlash(process.env.wroom_endpoint),\n\t\t\t\tPrismicAuthentication: addTrailingSlash(\n\t\t\t\t\tprocess.env.authentication_server_endpoint,\n\t\t\t\t),\n\t\t\t\tPrismicModels: addTrailingSlash(process.env.customtypesapi_endpoint),\n\t\t\t\tPrismicUser: addTrailingSlash(process.env.user_service_endpoint),\n\t\t\t\tAwsAclProvider: addTrailingSlash(process.env.acl_provider_endpoint),\n\t\t\t\tPrismicOembed: removeTrailingSlash(\n\t\t\t\t\tprocess.env.oembed_endpoint ?? \"https://oembed.wroom.io\",\n\t\t\t\t),\n\t\t\t\tPrismicUnsplash: removeTrailingSlash(\n\t\t\t\t\tprocess.env.unsplash_endpoint ?? \"https://unsplash.wroom.io\",\n\t\t\t\t),\n\t\t\t\tSliceMachineV1: addTrailingSlash(\n\t\t\t\t\tprocess.env.slice_machine_v1_endpoint ??\n\t\t\t\t\t\t\"https://mc5qopc07a.execute-api.us-east-1.amazonaws.com/v1/\",\n\t\t\t\t),\n\t\t\t};\n\n\t\t\tconst missingAPIEndpoints = Object.keys(apiEndpoints).filter((key) => {\n\t\t\t\treturn !apiEndpoints[key as keyof typeof apiEndpoints];\n\t\t\t});\n\n\t\t\tif (missingAPIEndpoints.length > 0) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`You are running Slice Machine in development mode where API endpoints are configured via environment variables. The following endpoints were not configured: ${missingAPIEndpoints.join(\n\t\t\t\t\t\t\", \",\n\t\t\t\t\t)}. Configure them before continuing.`,\n\t\t\t\t);\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\treturn apiEndpoints as APIEndpoints;\n\t\t}\n\n\t\tcase APPLICATION_MODE.Staging: {\n\t\t\treturn {\n\t\t\t\tPrismicWroom: \"https://wroom.io/\",\n\t\t\t\tPrismicAuthentication: \"https://auth.wroom.io/\",\n\t\t\t\tPrismicModels: \"https://customtypes.wroom.io/\",\n\t\t\t\tPrismicUser: \"https://user-service.wroom.io/\",\n\t\t\t\tAwsAclProvider:\n\t\t\t\t\t\"https://2iamcvnxf4.execute-api.us-east-1.amazonaws.com/stage/\",\n\t\t\t\tPrismicOembed: \"https://oembed.wroom.io\",\n\t\t\t\tPrismicUnsplash: \"https://unsplash.wroom.io\",\n\t\t\t\tSliceMachineV1:\n\t\t\t\t\t\"https://mc5qopc07a.execute-api.us-east-1.amazonaws.com/v1/\",\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\tPrismicWroom: \"https://prismic.io/\",\n\t\t\t\tPrismicAuthentication: \"https://auth.prismic.io/\",\n\t\t\t\tPrismicModels: \"https://customtypes.prismic.io/\",\n\t\t\t\tPrismicUser: \"https://user-service.prismic.io/\",\n\t\t\t\tAwsAclProvider:\n\t\t\t\t\t\"https://0yyeb2g040.execute-api.us-east-1.amazonaws.com/prod/\",\n\t\t\t\tPrismicOembed: \"https://oembed.prismic.io\",\n\t\t\t\tPrismicUnsplash: \"https://unsplash.prismic.io\",\n\t\t\t\tSliceMachineV1
|
|
1
|
+
{"version":3,"file":"API_ENDPOINTS.js","sources":["../../../src/constants/API_ENDPOINTS.ts"],"sourcesContent":["import { addTrailingSlash, removeTrailingSlash } from \"../lib/trailingSlash\";\nimport { APPLICATION_MODE } from \"./APPLICATION_MODE\";\n\nexport type APIEndpoints = {\n\tPrismicWroom: string;\n\tPrismicAuthentication: string;\n\tPrismicModels: string;\n\tPrismicUser: string;\n\tAwsAclProvider: string;\n\tPrismicOembed: string;\n\tPrismicUnsplash: string;\n\tSliceMachineV1: string;\n};\n\nexport const API_ENDPOINTS: APIEndpoints = (() => {\n\tswitch (process.env.SM_ENV) {\n\t\tcase APPLICATION_MODE.Development: {\n\t\t\tconst apiEndpoints = {\n\t\t\t\tPrismicWroom: addTrailingSlash(process.env.wroom_endpoint),\n\t\t\t\tPrismicAuthentication: addTrailingSlash(\n\t\t\t\t\tprocess.env.authentication_server_endpoint,\n\t\t\t\t),\n\t\t\t\tPrismicModels: addTrailingSlash(process.env.customtypesapi_endpoint),\n\t\t\t\tPrismicUser: addTrailingSlash(process.env.user_service_endpoint),\n\t\t\t\tAwsAclProvider: addTrailingSlash(process.env.acl_provider_endpoint),\n\t\t\t\tPrismicOembed: removeTrailingSlash(\n\t\t\t\t\tprocess.env.oembed_endpoint ?? \"https://oembed.wroom.io\",\n\t\t\t\t),\n\t\t\t\tPrismicUnsplash: removeTrailingSlash(\n\t\t\t\t\tprocess.env.unsplash_endpoint ?? \"https://unsplash.wroom.io\",\n\t\t\t\t),\n\t\t\t\tSliceMachineV1: addTrailingSlash(\n\t\t\t\t\tprocess.env.slice_machine_v1_endpoint ??\n\t\t\t\t\t\t\"https://mc5qopc07a.execute-api.us-east-1.amazonaws.com/v1/\",\n\t\t\t\t),\n\t\t\t};\n\n\t\t\tconst missingAPIEndpoints = Object.keys(apiEndpoints).filter((key) => {\n\t\t\t\treturn !apiEndpoints[key as keyof typeof apiEndpoints];\n\t\t\t});\n\n\t\t\tif (missingAPIEndpoints.length > 0) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`You are running Slice Machine in development mode where API endpoints are configured via environment variables. The following endpoints were not configured: ${missingAPIEndpoints.join(\n\t\t\t\t\t\t\", \",\n\t\t\t\t\t)}. Configure them before continuing.`,\n\t\t\t\t);\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\treturn apiEndpoints as APIEndpoints;\n\t\t}\n\n\t\tcase APPLICATION_MODE.Staging: {\n\t\t\treturn {\n\t\t\t\tPrismicWroom: \"https://wroom.io/\",\n\t\t\t\tPrismicAuthentication: \"https://auth.wroom.io/\",\n\t\t\t\tPrismicModels: \"https://customtypes.wroom.io/\",\n\t\t\t\tPrismicUser: \"https://user-service.wroom.io/\",\n\t\t\t\tAwsAclProvider:\n\t\t\t\t\t\"https://2iamcvnxf4.execute-api.us-east-1.amazonaws.com/stage/\",\n\t\t\t\tPrismicOembed: \"https://oembed.wroom.io\",\n\t\t\t\tPrismicUnsplash: \"https://unsplash.wroom.io\",\n\t\t\t\tSliceMachineV1:\n\t\t\t\t\t\"https://mc5qopc07a.execute-api.us-east-1.amazonaws.com/v1/\",\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\tPrismicWroom: \"https://prismic.io/\",\n\t\t\t\tPrismicAuthentication: \"https://auth.prismic.io/\",\n\t\t\t\tPrismicModels: \"https://customtypes.prismic.io/\",\n\t\t\t\tPrismicUser: \"https://user-service.prismic.io/\",\n\t\t\t\tAwsAclProvider:\n\t\t\t\t\t\"https://0yyeb2g040.execute-api.us-east-1.amazonaws.com/prod/\",\n\t\t\t\tPrismicOembed: \"https://oembed.prismic.io\",\n\t\t\t\tPrismicUnsplash: \"https://unsplash.prismic.io\",\n\t\t\t\tSliceMachineV1: \"https://sm-api.prismic.io/v1/\",\n\t\t\t};\n\t\t}\n\t}\n})();\n"],"names":[],"mappings":";;AAcO,MAAM,iBAA+B,MAAK;AACxC,UAAA,QAAQ,IAAI,QAAQ;AAAA,IAC3B,KAAK,iBAAiB,aAAa;AAClC,YAAM,eAAe;AAAA,QACpB,cAAc,iBAAiB,QAAQ,IAAI,cAAc;AAAA,QACzD,uBAAuB,iBACtB,QAAQ,IAAI,8BAA8B;AAAA,QAE3C,eAAe,iBAAiB,QAAQ,IAAI,uBAAuB;AAAA,QACnE,aAAa,iBAAiB,QAAQ,IAAI,qBAAqB;AAAA,QAC/D,gBAAgB,iBAAiB,QAAQ,IAAI,qBAAqB;AAAA,QAClE,eAAe,oBACd,QAAQ,IAAI,mBAAmB,yBAAyB;AAAA,QAEzD,iBAAiB,oBAChB,QAAQ,IAAI,qBAAqB,2BAA2B;AAAA,QAE7D,gBAAgB,iBACf,QAAQ,IAAI,6BACX,4DAA4D;AAAA,MAAA;AAI/D,YAAM,sBAAsB,OAAO,KAAK,YAAY,EAAE,OAAO,CAAC,QAAO;AAC7D,eAAA,CAAC,aAAa,GAAgC;AAAA,MAAA,CACrD;AAEG,UAAA,oBAAoB,SAAS,GAAG;AACnC,gBAAQ,MACP,gKAAgK,oBAAoB,KACnL,IAAI,sCACiC;AAGvC,gBAAQ,KAAK,CAAC;AAAA,MACd;AAEM,aAAA;AAAA,IACP;AAAA,IAED,KAAK,iBAAiB,SAAS;AACvB,aAAA;AAAA,QACN,cAAc;AAAA,QACd,uBAAuB;AAAA,QACvB,eAAe;AAAA,QACf,aAAa;AAAA,QACb,gBACC;AAAA,QACD,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,gBACC;AAAA,MAAA;AAAA,IAEF;AAAA,IAED,KAAK,iBAAiB;AAAA,IACtB,SAAS;AACD,aAAA;AAAA,QACN,cAAc;AAAA,QACd,uBAAuB;AAAA,QACvB,eAAe;AAAA,QACf,aAAa;AAAA,QACb,gBACC;AAAA,QACD,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,MAAA;AAAA,IAEjB;AAAA,EACD;AACF;"}
|
|
@@ -21,6 +21,7 @@ const decode = require("../../lib/decode.cjs");
|
|
|
21
21
|
const API_ENDPOINTS = require("../../constants/API_ENDPOINTS.cjs");
|
|
22
22
|
const errors = require("../../errors.cjs");
|
|
23
23
|
const BaseManager = require("../BaseManager.cjs");
|
|
24
|
+
const buildGitRepoSpecifier = require("./buildGitRepoSpecifier.cjs");
|
|
24
25
|
function _interopNamespaceDefault(e) {
|
|
25
26
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
26
27
|
if (e) {
|
|
@@ -208,6 +209,34 @@ class GitManager extends BaseManager.BaseManager {
|
|
|
208
209
|
}
|
|
209
210
|
}
|
|
210
211
|
}
|
|
212
|
+
async checkHasWriteAPIToken(args) {
|
|
213
|
+
const url = new URL("./git/linked-repos/write-api-token", API_ENDPOINTS.API_ENDPOINTS.SliceMachineV1);
|
|
214
|
+
url.searchParams.set("repository", args.prismic.domain);
|
|
215
|
+
url.searchParams.set("git", buildGitRepoSpecifier.buildGitRepoSpecifier({
|
|
216
|
+
provider: args.git.provider,
|
|
217
|
+
owner: args.git.owner,
|
|
218
|
+
name: args.git.name
|
|
219
|
+
}));
|
|
220
|
+
const res = await __privateMethod(this, _fetch, fetch_fn).call(this, url);
|
|
221
|
+
if (!res.ok) {
|
|
222
|
+
switch (res.status) {
|
|
223
|
+
case 401:
|
|
224
|
+
throw new errors.UnauthenticatedError();
|
|
225
|
+
case 403:
|
|
226
|
+
throw new errors.UnauthorizedError();
|
|
227
|
+
default:
|
|
228
|
+
throw new Error("Failed to check Prismic Write API token.");
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const json = await res.json();
|
|
232
|
+
const { value, error } = decode.decode(t__namespace.type({
|
|
233
|
+
hasWriteAPIToken: t__namespace.boolean
|
|
234
|
+
}), json);
|
|
235
|
+
if (error) {
|
|
236
|
+
throw new errors.UnexpectedDataError(`Failed to decode: ${error.errors.join(", ")}`, { cause: error });
|
|
237
|
+
}
|
|
238
|
+
return value.hasWriteAPIToken;
|
|
239
|
+
}
|
|
211
240
|
async updateWriteAPIToken(args) {
|
|
212
241
|
const url = new URL("./git/linked-repos/write-api-token", API_ENDPOINTS.API_ENDPOINTS.SliceMachineV1);
|
|
213
242
|
const res = await __privateMethod(this, _fetch, fetch_fn).call(this, url, {
|
|
@@ -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\";\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 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 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","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\";\n\nimport {\n\tUnauthenticatedError,\n\tUnauthorizedError,\n\tUnexpectedDataError,\n} from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { GitOwner, GitRepo, GitRepoSpecifier } from \"./types\";\nimport { buildGitRepoSpecifier } from \"./buildGitRepoSpecifier\";\n\ntype GitManagerCreateGitHubAuthStateReturnType = {\n\tkey: string;\n\texpiresAt: Date;\n};\n\ntype GitManagerFetchOwnersReturnType = GitOwner[];\n\ntype GitManagerFetchReposReturnType = GitRepo[];\n\ntype GitManagerFetchReposArgs = {\n\tprovider: \"gitHub\";\n\towner: string;\n\tquery?: string;\n\tpage?: number;\n};\n\ntype GitManagerFetchLinkedReposArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n};\n\ntype GitManagerFetchLinkedReposReturnType = GitRepoSpecifier[];\n\ntype GitManagerLinkRepoArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype GitManagerUnlinkRepoArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype CheckHasWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\ntype UpdateWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n\ttoken: string;\n};\n\ntype DeleteWriteAPITokenArgs = {\n\tprismic: {\n\t\tdomain: string;\n\t};\n\tgit: {\n\t\tprovider: \"gitHub\";\n\t\towner: string;\n\t\tname: string;\n\t};\n};\n\nexport class GitManager extends BaseManager {\n\tasync createGitHubAuthState(): Promise<GitManagerCreateGitHubAuthStateReturnType> {\n\t\tconst url = new URL(\n\t\t\t\"./git/github/create-auth-state\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, { method: \"POST\" });\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to create GitHub auth state.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\tkey: t.string,\n\t\t\t\texpiresAt: tt.DateFromISOString,\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode GitHub auth state: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tasync fetchOwners(): Promise<GitManagerFetchOwnersReturnType> {\n\t\tconst url = new URL(\"./git/owners\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch owners.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\towners: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(\"gitHub\"),\n\t\t\t\t\t\tid: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t\ttype: t.union([t.literal(\"user\"), t.literal(\"team\"), t.null]),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode owners: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.owners;\n\t}\n\n\tasync fetchRepos(\n\t\targs: GitManagerFetchReposArgs,\n\t): Promise<GitManagerFetchReposReturnType> {\n\t\tconst url = new URL(\"./git/repos\", API_ENDPOINTS.SliceMachineV1);\n\t\turl.searchParams.set(\"provider\", args.provider);\n\t\turl.searchParams.set(\"owner\", args.owner);\n\t\tif (args.query) {\n\t\t\turl.searchParams.set(\"q\", args.query);\n\t\t}\n\t\tif (args.page && args.page > 0) {\n\t\t\turl.searchParams.set(\"page\", args.page.toString());\n\t\t}\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch repos.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\trepos: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(\"gitHub\"),\n\t\t\t\t\t\tid: t.string,\n\t\t\t\t\t\towner: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t\turl: t.string,\n\t\t\t\t\t\tpushedAt: tt.DateFromISOString,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode repos: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.repos;\n\t}\n\n\tasync fetchLinkedRepos(\n\t\targs: GitManagerFetchLinkedReposArgs,\n\t): Promise<GitManagerFetchLinkedReposReturnType> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\turl.searchParams.set(\"repository\", args.prismic.domain);\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to fetch linked repos.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\trepos: t.array(\n\t\t\t\t\tt.type({\n\t\t\t\t\t\tprovider: t.literal(\"gitHub\"),\n\t\t\t\t\t\towner: t.string,\n\t\t\t\t\t\tname: t.string,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode linked repos: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.repos;\n\t}\n\n\tasync linkRepo(args: GitManagerLinkRepoArgs): Promise<void> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to link repos.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync unlinkRepo(args: GitManagerUnlinkRepoArgs): Promise<void> {\n\t\tconst url = new URL(\"./git/linked-repos\", API_ENDPOINTS.SliceMachineV1);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to unlink repos.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync checkHasWriteAPIToken(\n\t\targs: CheckHasWriteAPITokenArgs,\n\t): Promise<boolean> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\turl.searchParams.set(\"repository\", args.prismic.domain);\n\t\turl.searchParams.set(\n\t\t\t\"git\",\n\t\t\tbuildGitRepoSpecifier({\n\t\t\t\tprovider: args.git.provider,\n\t\t\t\towner: args.git.owner,\n\t\t\t\tname: args.git.name,\n\t\t\t}),\n\t\t);\n\n\t\tconst res = await this.#fetch(url);\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to check Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\n\t\tconst json = await res.json();\n\t\tconst { value, error } = decode(\n\t\t\tt.type({\n\t\t\t\thasWriteAPIToken: t.boolean,\n\t\t\t}),\n\t\t\tjson,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t`Failed to decode: ${error.errors.join(\", \")}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\treturn value.hasWriteAPIToken;\n\t}\n\n\tasync updateWriteAPIToken(args: UpdateWriteAPITokenArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t\ttoken: args.token,\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to update Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync deleteWriteAPIToken(args: DeleteWriteAPITokenArgs): Promise<void> {\n\t\tconst url = new URL(\n\t\t\t\"./git/linked-repos/write-api-token\",\n\t\t\tAPI_ENDPOINTS.SliceMachineV1,\n\t\t);\n\t\tconst res = await this.#fetch(url, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tbody: {\n\t\t\t\tprismic: {\n\t\t\t\t\tdomain: args.prismic.domain,\n\t\t\t\t},\n\t\t\t\tgit: {\n\t\t\t\t\tprovider: args.git.provider,\n\t\t\t\t\towner: args.git.owner,\n\t\t\t\t\tname: args.git.name,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tswitch (res.status) {\n\t\t\t\tcase 401:\n\t\t\t\t\tthrow new UnauthenticatedError();\n\t\t\t\tcase 403:\n\t\t\t\t\tthrow new UnauthorizedError();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Failed to delete Prismic Write API token.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync #fetch(\n\t\turl: URL,\n\t\tconfig?: {\n\t\t\tmethod?: \"POST\" | \"PUT\" | \"DELETE\";\n\t\t\tbody?: unknown;\n\t\t},\n\t) {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\n\t\treturn await fetch(url, {\n\t\t\tmethod: config?.method,\n\t\t\tbody: config?.body ? JSON.stringify(config.body) : undefined,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authenticationToken}`,\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":["BaseManager","API_ENDPOINTS","UnauthorizedError","decode","t","tt","UnexpectedDataError","UnauthenticatedError","buildGitRepoSpecifier","fetch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmGM,MAAO,mBAAmBA,YAAAA,YAAW;AAAA,EAArC;AAAA;AAmVL,uBAAM;AAAA;AAAA,EAlVN,MAAM,wBAAqB;AAC1B,UAAM,MAAM,IAAI,IACf,kCACAC,4BAAc,cAAc;AAEvB,UAAA,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK,EAAE,QAAQ;AAEzC,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIC,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,qCAAqC;AAAA,MACtD;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,KAAKA,aAAE;AAAA,MACP,WAAWC,cAAG;AAAA,IAAA,CACd,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIC,OAAAA,oBACT,uCAAuC,MAAM,OAAO,KAAK,IAAI,KAC7D,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAEM,WAAA;AAAA,EACR;AAAA,EAEA,MAAM,cAAW;AAChB,UAAM,MAAM,IAAI,IAAI,gBAAgBL,4BAAc,cAAc;AAChE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,yBAAyB;AAAA,MAC1C;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,QAAQA,aAAE,MACTA,aAAE,KAAK;AAAA,QACN,UAAUA,aAAE,QAAQ,QAAQ;AAAA,QAC5B,IAAIA,aAAE;AAAA,QACN,MAAMA,aAAE;AAAA,QACR,MAAMA,aAAE,MAAM,CAACA,aAAE,QAAQ,MAAM,GAAGA,aAAE,QAAQ,MAAM,GAAGA,aAAE,IAAI,CAAC;AAAA,MAAA,CAC5D,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIE,OAAAA,oBACT,4BAA4B,MAAM,OAAO,KAAK,IAAI,KAClD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,WACL,MAA8B;AAE9B,UAAM,MAAM,IAAI,IAAI,eAAeL,4BAAc,cAAc;AAC/D,QAAI,aAAa,IAAI,YAAY,KAAK,QAAQ;AAC9C,QAAI,aAAa,IAAI,SAAS,KAAK,KAAK;AACxC,QAAI,KAAK,OAAO;AACf,UAAI,aAAa,IAAI,KAAK,KAAK,KAAK;AAAA,IACpC;AACD,QAAI,KAAK,QAAQ,KAAK,OAAO,GAAG;AAC/B,UAAI,aAAa,IAAI,QAAQ,KAAK,KAAK,UAAU;AAAA,IACjD;AAED,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,wBAAwB;AAAA,MACzC;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,OAAOA,aAAE,MACRA,aAAE,KAAK;AAAA,QACN,UAAUA,aAAE,QAAQ,QAAQ;AAAA,QAC5B,IAAIA,aAAE;AAAA,QACN,OAAOA,aAAE;AAAA,QACT,MAAMA,aAAE;AAAA,QACR,KAAKA,aAAE;AAAA,QACP,UAAUC,cAAG;AAAA,MAAA,CACb,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIC,OAAAA,oBACT,2BAA2B,MAAM,OAAO,KAAK,IAAI,KACjD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,iBACL,MAAoC;AAEpC,UAAM,MAAM,IAAI,IAAI,sBAAsBL,4BAAc,cAAc;AACtE,QAAI,aAAa,IAAI,cAAc,KAAK,QAAQ,MAAM;AAEtD,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,+BAA+B;AAAA,MAChD;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,OAAOA,aAAE,MACRA,aAAE,KAAK;AAAA,QACN,UAAUA,aAAE,QAAQ,QAAQ;AAAA,QAC5B,OAAOA,aAAE;AAAA,QACT,MAAMA,aAAE;AAAA,MAAA,CACR,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIE,OAAAA,oBACT,kCAAkC,MAAM,OAAO,KAAK,IAAI,KACxD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,SAAS,MAA4B;AAC1C,UAAM,MAAM,IAAI,IAAI,sBAAsBL,4BAAc,cAAc;AACtE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,uBAAuB;AAAA,MACxC;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,MAA8B;AAC9C,UAAM,MAAM,IAAI,IAAI,sBAAsBD,4BAAc,cAAc;AACtE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,yBAAyB;AAAA,MAC1C;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,sBACL,MAA+B;AAE/B,UAAM,MAAM,IAAI,IACf,sCACAD,4BAAc,cAAc;AAE7B,QAAI,aAAa,IAAI,cAAc,KAAK,QAAQ,MAAM;AAClD,QAAA,aAAa,IAChB,OACAO,sBAAAA,sBAAsB;AAAA,MACrB,UAAU,KAAK,IAAI;AAAA,MACnB,OAAO,KAAK,IAAI;AAAA,MAChB,MAAM,KAAK,IAAI;AAAA,IACf,CAAA,CAAC;AAGH,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAID,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,0CAA0C;AAAA,MAC3D;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAUC,OAAAA,OACxBC,aAAE,KAAK;AAAA,MACN,kBAAkBA,aAAE;AAAA,IAAA,CACpB,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAIE,OAAAA,oBACT,qBAAqB,MAAM,OAAO,KAAK,IAAI,KAC3C,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,oBAAoB,MAA6B;AACtD,UAAM,MAAM,IAAI,IACf,sCACAL,4BAAc,cAAc;AAE7B,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,QACD,OAAO,KAAK;AAAA,MACZ;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,2CAA2C;AAAA,MAC5D;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,MAA6B;AACtD,UAAM,MAAM,IAAI,IACf,sCACAD,4BAAc,cAAc;AAE7B,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAIM,OAAoB,qBAAA;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAIL,OAAiB,kBAAA;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,2CAA2C;AAAA,MAC5D;AAAA,IACD;AAAA,EACF;AAmBA;AAjBM;AAAA,WACL,eAAA,KACA,QAGC;AAED,QAAM,sBAAsB,MAAM,KAAK,KAAK,uBAAsB;AAE3D,SAAA,MAAMO,cAAM,KAAK;AAAA,IACvB,QAAQ,iCAAQ;AAAA,IAChB,OAAM,iCAAQ,QAAO,KAAK,UAAU,OAAO,IAAI,IAAI;AAAA,IACnD,SAAS;AAAA,MACR,eAAe,UAAU;AAAA,IACzB;AAAA,EAAA,CACD;AACF;;"}
|
|
@@ -38,6 +38,16 @@ type GitManagerUnlinkRepoArgs = {
|
|
|
38
38
|
name: string;
|
|
39
39
|
};
|
|
40
40
|
};
|
|
41
|
+
type CheckHasWriteAPITokenArgs = {
|
|
42
|
+
prismic: {
|
|
43
|
+
domain: string;
|
|
44
|
+
};
|
|
45
|
+
git: {
|
|
46
|
+
provider: "gitHub";
|
|
47
|
+
owner: string;
|
|
48
|
+
name: string;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
41
51
|
type UpdateWriteAPITokenArgs = {
|
|
42
52
|
prismic: {
|
|
43
53
|
domain: string;
|
|
@@ -67,6 +77,7 @@ export declare class GitManager extends BaseManager {
|
|
|
67
77
|
fetchLinkedRepos(args: GitManagerFetchLinkedReposArgs): Promise<GitManagerFetchLinkedReposReturnType>;
|
|
68
78
|
linkRepo(args: GitManagerLinkRepoArgs): Promise<void>;
|
|
69
79
|
unlinkRepo(args: GitManagerUnlinkRepoArgs): Promise<void>;
|
|
80
|
+
checkHasWriteAPIToken(args: CheckHasWriteAPITokenArgs): Promise<boolean>;
|
|
70
81
|
updateWriteAPIToken(args: UpdateWriteAPITokenArgs): Promise<void>;
|
|
71
82
|
deleteWriteAPIToken(args: DeleteWriteAPITokenArgs): Promise<void>;
|
|
72
83
|
}
|
|
@@ -19,6 +19,7 @@ import { decode } from "../../lib/decode.js";
|
|
|
19
19
|
import { API_ENDPOINTS } from "../../constants/API_ENDPOINTS.js";
|
|
20
20
|
import { UnauthorizedError, UnexpectedDataError, UnauthenticatedError } from "../../errors.js";
|
|
21
21
|
import { BaseManager } from "../BaseManager.js";
|
|
22
|
+
import { buildGitRepoSpecifier } from "./buildGitRepoSpecifier.js";
|
|
22
23
|
class GitManager extends BaseManager {
|
|
23
24
|
constructor() {
|
|
24
25
|
super(...arguments);
|
|
@@ -188,6 +189,34 @@ class GitManager extends BaseManager {
|
|
|
188
189
|
}
|
|
189
190
|
}
|
|
190
191
|
}
|
|
192
|
+
async checkHasWriteAPIToken(args) {
|
|
193
|
+
const url = new URL("./git/linked-repos/write-api-token", API_ENDPOINTS.SliceMachineV1);
|
|
194
|
+
url.searchParams.set("repository", args.prismic.domain);
|
|
195
|
+
url.searchParams.set("git", buildGitRepoSpecifier({
|
|
196
|
+
provider: args.git.provider,
|
|
197
|
+
owner: args.git.owner,
|
|
198
|
+
name: args.git.name
|
|
199
|
+
}));
|
|
200
|
+
const res = await __privateMethod(this, _fetch, fetch_fn).call(this, url);
|
|
201
|
+
if (!res.ok) {
|
|
202
|
+
switch (res.status) {
|
|
203
|
+
case 401:
|
|
204
|
+
throw new UnauthenticatedError();
|
|
205
|
+
case 403:
|
|
206
|
+
throw new UnauthorizedError();
|
|
207
|
+
default:
|
|
208
|
+
throw new Error("Failed to check Prismic Write API token.");
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const json = await res.json();
|
|
212
|
+
const { value, error } = decode(t.type({
|
|
213
|
+
hasWriteAPIToken: t.boolean
|
|
214
|
+
}), json);
|
|
215
|
+
if (error) {
|
|
216
|
+
throw new UnexpectedDataError(`Failed to decode: ${error.errors.join(", ")}`, { cause: error });
|
|
217
|
+
}
|
|
218
|
+
return value.hasWriteAPIToken;
|
|
219
|
+
}
|
|
191
220
|
async updateWriteAPIToken(args) {
|
|
192
221
|
const url = new URL("./git/linked-repos/write-api-token", API_ENDPOINTS.SliceMachineV1);
|
|
193
222
|
const res = await __privateMethod(this, _fetch, fetch_fn).call(this, url, {
|
|
@@ -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\";\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 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 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\";\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":";;;;;;;;;;;;;;;;;;;;;;AAmGM,MAAO,mBAAmB,YAAW;AAAA,EAArC;AAAA;AAmVL,uBAAM;AAAA;AAAA,EAlVN,MAAM,wBAAqB;AAC1B,UAAM,MAAM,IAAI,IACf,kCACA,cAAc,cAAc;AAEvB,UAAA,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK,EAAE,QAAQ;AAEzC,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAI,kBAAiB;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,qCAAqC;AAAA,MACtD;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAU,OACxB,EAAE,KAAK;AAAA,MACN,KAAK,EAAE;AAAA,MACP,WAAW,GAAG;AAAA,IAAA,CACd,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAI,oBACT,uCAAuC,MAAM,OAAO,KAAK,IAAI,KAC7D,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAEM,WAAA;AAAA,EACR;AAAA,EAEA,MAAM,cAAW;AAChB,UAAM,MAAM,IAAI,IAAI,gBAAgB,cAAc,cAAc;AAChE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAI,qBAAoB;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAI,kBAAiB;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,yBAAyB;AAAA,MAC1C;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAU,OACxB,EAAE,KAAK;AAAA,MACN,QAAQ,EAAE,MACT,EAAE,KAAK;AAAA,QACN,UAAU,EAAE,QAAQ,QAAQ;AAAA,QAC5B,IAAI,EAAE;AAAA,QACN,MAAM,EAAE;AAAA,QACR,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG,EAAE,IAAI,CAAC;AAAA,MAAA,CAC5D,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAI,oBACT,4BAA4B,MAAM,OAAO,KAAK,IAAI,KAClD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,WACL,MAA8B;AAE9B,UAAM,MAAM,IAAI,IAAI,eAAe,cAAc,cAAc;AAC/D,QAAI,aAAa,IAAI,YAAY,KAAK,QAAQ;AAC9C,QAAI,aAAa,IAAI,SAAS,KAAK,KAAK;AACxC,QAAI,KAAK,OAAO;AACf,UAAI,aAAa,IAAI,KAAK,KAAK,KAAK;AAAA,IACpC;AACD,QAAI,KAAK,QAAQ,KAAK,OAAO,GAAG;AAC/B,UAAI,aAAa,IAAI,QAAQ,KAAK,KAAK,UAAU;AAAA,IACjD;AAED,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAI,qBAAoB;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAI,kBAAiB;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,wBAAwB;AAAA,MACzC;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAU,OACxB,EAAE,KAAK;AAAA,MACN,OAAO,EAAE,MACR,EAAE,KAAK;AAAA,QACN,UAAU,EAAE,QAAQ,QAAQ;AAAA,QAC5B,IAAI,EAAE;AAAA,QACN,OAAO,EAAE;AAAA,QACT,MAAM,EAAE;AAAA,QACR,KAAK,EAAE;AAAA,QACP,UAAU,GAAG;AAAA,MAAA,CACb,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAI,oBACT,2BAA2B,MAAM,OAAO,KAAK,IAAI,KACjD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,iBACL,MAAoC;AAEpC,UAAM,MAAM,IAAI,IAAI,sBAAsB,cAAc,cAAc;AACtE,QAAI,aAAa,IAAI,cAAc,KAAK,QAAQ,MAAM;AAEtD,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAI,qBAAoB;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAI,kBAAiB;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,+BAA+B;AAAA,MAChD;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAU,OACxB,EAAE,KAAK;AAAA,MACN,OAAO,EAAE,MACR,EAAE,KAAK;AAAA,QACN,UAAU,EAAE,QAAQ,QAAQ;AAAA,QAC5B,OAAO,EAAE;AAAA,QACT,MAAM,EAAE;AAAA,MAAA,CACR,CAAC;AAAA,IAAA,CAEH,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAI,oBACT,kCAAkC,MAAM,OAAO,KAAK,IAAI,KACxD,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,SAAS,MAA4B;AAC1C,UAAM,MAAM,IAAI,IAAI,sBAAsB,cAAc,cAAc;AACtE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAI,qBAAoB;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAI,kBAAiB;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,uBAAuB;AAAA,MACxC;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,MAA8B;AAC9C,UAAM,MAAM,IAAI,IAAI,sBAAsB,cAAc,cAAc;AACtE,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAI,qBAAoB;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAI,kBAAiB;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,yBAAyB;AAAA,MAC1C;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,sBACL,MAA+B;AAE/B,UAAM,MAAM,IAAI,IACf,sCACA,cAAc,cAAc;AAE7B,QAAI,aAAa,IAAI,cAAc,KAAK,QAAQ,MAAM;AAClD,QAAA,aAAa,IAChB,OACA,sBAAsB;AAAA,MACrB,UAAU,KAAK,IAAI;AAAA,MACnB,OAAO,KAAK,IAAI;AAAA,MAChB,MAAM,KAAK,IAAI;AAAA,IACf,CAAA,CAAC;AAGH,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY;AAE1B,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAI,qBAAoB;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAI,kBAAiB;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,0CAA0C;AAAA,MAC3D;AAAA,IACD;AAEK,UAAA,OAAO,MAAM,IAAI;AACvB,UAAM,EAAE,OAAO,MAAA,IAAU,OACxB,EAAE,KAAK;AAAA,MACN,kBAAkB,EAAE;AAAA,IAAA,CACpB,GACD,IAAI;AAGL,QAAI,OAAO;AACJ,YAAA,IAAI,oBACT,qBAAqB,MAAM,OAAO,KAAK,IAAI,KAC3C,EAAE,OAAO,MAAO,CAAA;AAAA,IAEjB;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,oBAAoB,MAA6B;AACtD,UAAM,MAAM,IAAI,IACf,sCACA,cAAc,cAAc;AAE7B,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,QACD,OAAO,KAAK;AAAA,MACZ;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAI,qBAAoB;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAI,kBAAiB;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,2CAA2C;AAAA,MAC5D;AAAA,IACD;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,MAA6B;AACtD,UAAM,MAAM,IAAI,IACf,sCACA,cAAc,cAAc;AAE7B,UAAM,MAAM,MAAM,sBAAK,kBAAL,WAAY,KAAK;AAAA,MAClC,QAAQ;AAAA,MACR,MAAM;AAAA,QACL,SAAS;AAAA,UACR,QAAQ,KAAK,QAAQ;AAAA,QACrB;AAAA,QACD,KAAK;AAAA,UACJ,UAAU,KAAK,IAAI;AAAA,UACnB,OAAO,KAAK,IAAI;AAAA,UAChB,MAAM,KAAK,IAAI;AAAA,QACf;AAAA,MACD;AAAA,IAAA;AAGE,QAAA,CAAC,IAAI,IAAI;AACZ,cAAQ,IAAI,QAAQ;AAAA,QACnB,KAAK;AACJ,gBAAM,IAAI,qBAAoB;AAAA,QAC/B,KAAK;AACJ,gBAAM,IAAI,kBAAiB;AAAA,QAC5B;AACO,gBAAA,IAAI,MAAM,2CAA2C;AAAA,MAC5D;AAAA,IACD;AAAA,EACF;AAmBA;AAjBM;AAAA,WACL,eAAA,KACA,QAGC;AAED,QAAM,sBAAsB,MAAM,KAAK,KAAK,uBAAsB;AAE3D,SAAA,MAAM,MAAM,KAAK;AAAA,IACvB,QAAQ,iCAAQ;AAAA,IAChB,OAAM,iCAAQ,QAAO,KAAK,UAAU,OAAO,IAAI,IAAI;AAAA,IACnD,SAAS;AAAA,MACR,eAAe,UAAU;AAAA,IACzB;AAAA,EAAA,CACD;AACF;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const buildGitRepoSpecifier = (repoSpecifier) => {
|
|
4
|
+
return `${repoSpecifier.provider}@${repoSpecifier.owner}/${repoSpecifier.name}`;
|
|
5
|
+
};
|
|
6
|
+
exports.buildGitRepoSpecifier = buildGitRepoSpecifier;
|
|
7
|
+
//# sourceMappingURL=buildGitRepoSpecifier.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildGitRepoSpecifier.cjs","sources":["../../../../src/managers/git/buildGitRepoSpecifier.ts"],"sourcesContent":["import { GitRepoSpecifier } from \"./types\";\n\n/**\n * Builds a Git repository specifier from its individual parts.\n *\n * @example\n *\n * ```typescript\n * buildGitRepoSpecifier({\n * \tprovider: \"gitHub\",\n * \towner: \"foo\",\n * \tname: \"bar\",\n * });\n * ```\n *\n * @param repoSpecifier - The Git repository specifier.\n *\n * @returns The specifier in the form of `provider@owner/name`.\n */\nexport const buildGitRepoSpecifier = (\n\trepoSpecifier: GitRepoSpecifier,\n): string => {\n\treturn `${repoSpecifier.provider}@${repoSpecifier.owner}/${repoSpecifier.name}`;\n};\n"],"names":[],"mappings":";;AAmBa,MAAA,wBAAwB,CACpC,kBACW;AACX,SAAO,GAAG,cAAc,YAAY,cAAc,SAAS,cAAc;AAC1E;;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { GitRepoSpecifier } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Builds a Git repository specifier from its individual parts.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
*
|
|
7
|
+
* ```typescript
|
|
8
|
+
* buildGitRepoSpecifier({
|
|
9
|
+
* provider: "gitHub",
|
|
10
|
+
* owner: "foo",
|
|
11
|
+
* name: "bar",
|
|
12
|
+
* });
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @param repoSpecifier - The Git repository specifier.
|
|
16
|
+
*
|
|
17
|
+
* @returns The specifier in the form of `provider@owner/name`.
|
|
18
|
+
*/
|
|
19
|
+
export declare const buildGitRepoSpecifier: (repoSpecifier: GitRepoSpecifier) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildGitRepoSpecifier.js","sources":["../../../../src/managers/git/buildGitRepoSpecifier.ts"],"sourcesContent":["import { GitRepoSpecifier } from \"./types\";\n\n/**\n * Builds a Git repository specifier from its individual parts.\n *\n * @example\n *\n * ```typescript\n * buildGitRepoSpecifier({\n * \tprovider: \"gitHub\",\n * \towner: \"foo\",\n * \tname: \"bar\",\n * });\n * ```\n *\n * @param repoSpecifier - The Git repository specifier.\n *\n * @returns The specifier in the form of `provider@owner/name`.\n */\nexport const buildGitRepoSpecifier = (\n\trepoSpecifier: GitRepoSpecifier,\n): string => {\n\treturn `${repoSpecifier.provider}@${repoSpecifier.owner}/${repoSpecifier.name}`;\n};\n"],"names":[],"mappings":"AAmBa,MAAA,wBAAwB,CACpC,kBACW;AACX,SAAO,GAAG,cAAc,YAAY,cAAc,SAAS,cAAc;AAC1E;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slicemachine/manager",
|
|
3
|
-
"version": "0.17.9-alpha.bmo-add-github-settings-page.
|
|
3
|
+
"version": "0.17.9-alpha.bmo-add-github-settings-page.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.35-alpha.bmo-add-github-settings-page.
|
|
72
|
+
"@slicemachine/plugin-kit": "0.4.35-alpha.bmo-add-github-settings-page.4",
|
|
73
73
|
"@wooorm/starry-night": "^1.6.0",
|
|
74
74
|
"cookie": "^0.5.0",
|
|
75
75
|
"cors": "^2.8.5",
|
|
@@ -78,8 +78,7 @@ export const API_ENDPOINTS: APIEndpoints = (() => {
|
|
|
78
78
|
"https://0yyeb2g040.execute-api.us-east-1.amazonaws.com/prod/",
|
|
79
79
|
PrismicOembed: "https://oembed.prismic.io",
|
|
80
80
|
PrismicUnsplash: "https://unsplash.prismic.io",
|
|
81
|
-
SliceMachineV1:
|
|
82
|
-
"https://rrvzk2wqlh.execute-api.us-east-1.amazonaws.com/v1/",
|
|
81
|
+
SliceMachineV1: "https://sm-api.prismic.io/v1/",
|
|
83
82
|
};
|
|
84
83
|
}
|
|
85
84
|
}
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
import { BaseManager } from "../BaseManager";
|
|
16
16
|
|
|
17
17
|
import { GitOwner, GitRepo, GitRepoSpecifier } from "./types";
|
|
18
|
+
import { buildGitRepoSpecifier } from "./buildGitRepoSpecifier";
|
|
18
19
|
|
|
19
20
|
type GitManagerCreateGitHubAuthStateReturnType = {
|
|
20
21
|
key: string;
|
|
@@ -62,6 +63,17 @@ type GitManagerUnlinkRepoArgs = {
|
|
|
62
63
|
};
|
|
63
64
|
};
|
|
64
65
|
|
|
66
|
+
type CheckHasWriteAPITokenArgs = {
|
|
67
|
+
prismic: {
|
|
68
|
+
domain: string;
|
|
69
|
+
};
|
|
70
|
+
git: {
|
|
71
|
+
provider: "gitHub";
|
|
72
|
+
owner: string;
|
|
73
|
+
name: string;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
|
|
65
77
|
type UpdateWriteAPITokenArgs = {
|
|
66
78
|
prismic: {
|
|
67
79
|
domain: string;
|
|
@@ -313,6 +325,54 @@ export class GitManager extends BaseManager {
|
|
|
313
325
|
}
|
|
314
326
|
}
|
|
315
327
|
|
|
328
|
+
async checkHasWriteAPIToken(
|
|
329
|
+
args: CheckHasWriteAPITokenArgs,
|
|
330
|
+
): Promise<boolean> {
|
|
331
|
+
const url = new URL(
|
|
332
|
+
"./git/linked-repos/write-api-token",
|
|
333
|
+
API_ENDPOINTS.SliceMachineV1,
|
|
334
|
+
);
|
|
335
|
+
url.searchParams.set("repository", args.prismic.domain);
|
|
336
|
+
url.searchParams.set(
|
|
337
|
+
"git",
|
|
338
|
+
buildGitRepoSpecifier({
|
|
339
|
+
provider: args.git.provider,
|
|
340
|
+
owner: args.git.owner,
|
|
341
|
+
name: args.git.name,
|
|
342
|
+
}),
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
const res = await this.#fetch(url);
|
|
346
|
+
|
|
347
|
+
if (!res.ok) {
|
|
348
|
+
switch (res.status) {
|
|
349
|
+
case 401:
|
|
350
|
+
throw new UnauthenticatedError();
|
|
351
|
+
case 403:
|
|
352
|
+
throw new UnauthorizedError();
|
|
353
|
+
default:
|
|
354
|
+
throw new Error("Failed to check Prismic Write API token.");
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
const json = await res.json();
|
|
359
|
+
const { value, error } = decode(
|
|
360
|
+
t.type({
|
|
361
|
+
hasWriteAPIToken: t.boolean,
|
|
362
|
+
}),
|
|
363
|
+
json,
|
|
364
|
+
);
|
|
365
|
+
|
|
366
|
+
if (error) {
|
|
367
|
+
throw new UnexpectedDataError(
|
|
368
|
+
`Failed to decode: ${error.errors.join(", ")}`,
|
|
369
|
+
{ cause: error },
|
|
370
|
+
);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
return value.hasWriteAPIToken;
|
|
374
|
+
}
|
|
375
|
+
|
|
316
376
|
async updateWriteAPIToken(args: UpdateWriteAPITokenArgs): Promise<void> {
|
|
317
377
|
const url = new URL(
|
|
318
378
|
"./git/linked-repos/write-api-token",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { GitRepoSpecifier } from "./types";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Builds a Git repository specifier from its individual parts.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
*
|
|
8
|
+
* ```typescript
|
|
9
|
+
* buildGitRepoSpecifier({
|
|
10
|
+
* provider: "gitHub",
|
|
11
|
+
* owner: "foo",
|
|
12
|
+
* name: "bar",
|
|
13
|
+
* });
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @param repoSpecifier - The Git repository specifier.
|
|
17
|
+
*
|
|
18
|
+
* @returns The specifier in the form of `provider@owner/name`.
|
|
19
|
+
*/
|
|
20
|
+
export const buildGitRepoSpecifier = (
|
|
21
|
+
repoSpecifier: GitRepoSpecifier,
|
|
22
|
+
): string => {
|
|
23
|
+
return `${repoSpecifier.provider}@${repoSpecifier.owner}/${repoSpecifier.name}`;
|
|
24
|
+
};
|