@slicemachine/manager 0.2.0 → 0.2.2-dev-page-types.0
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/_node_modules/common-tags/es/stripIndent/stripIndent.cjs +2 -1
- package/dist/_node_modules/common-tags/es/stripIndent/stripIndent.cjs.map +1 -1
- package/dist/_node_modules/common-tags/es/stripIndent/stripIndent.js +2 -1
- package/dist/_node_modules/common-tags/es/stripIndent/stripIndent.js.map +1 -1
- package/dist/auth/PrismicAuthManager.cjs +5 -4
- package/dist/auth/PrismicAuthManager.cjs.map +1 -1
- package/dist/auth/PrismicAuthManager.d.ts +58 -58
- package/dist/auth/PrismicAuthManager.js +5 -4
- package/dist/auth/PrismicAuthManager.js.map +1 -1
- package/dist/auth/createPrismicAuthManager.d.ts +4 -4
- package/dist/auth/createPrismicAuthManagerMiddleware.d.ts +14 -14
- package/dist/client/index.d.ts +6 -6
- package/dist/constants/API_ENDPOINTS.d.ts +8 -8
- package/dist/constants/API_TOKENS.d.ts +5 -5
- package/dist/constants/APPLICATION_MODE.d.ts +5 -5
- package/dist/constants/DEFAULT_SLICE_SCREENSHOT_URL.d.ts +5 -5
- package/dist/constants/SLICE_MACHINE_CONFIG_FILENAME.d.ts +1 -1
- package/dist/constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME.d.ts +1 -1
- package/dist/constants/SLICE_MACHINE_GITHUB_REPOSITORY_NAME.d.ts +1 -1
- package/dist/constants/SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION.d.ts +1 -1
- package/dist/constants/SLICE_MACHINE_NPM_PACKAGE_NAME.d.ts +1 -1
- package/dist/constants/SLICE_MACHINE_USER_AGENT.d.ts +1 -1
- package/dist/constants/TS_CONFIG_FILENAME.d.ts +1 -1
- package/dist/constants/VERSION_KIND.d.ts +6 -6
- package/dist/errors.d.ts +34 -34
- package/dist/index.d.ts +11 -11
- package/dist/lib/DecodeError.d.ts +12 -12
- package/dist/lib/addTrailingSlash.d.ts +1 -1
- package/dist/lib/assertPluginsInitialized.d.ts +2 -2
- package/dist/lib/bufferCodec.d.ts +4 -4
- package/dist/lib/buildPrismicRepositoryAPIEndpoint.d.ts +4 -4
- package/dist/lib/castArray.d.ts +1 -1
- package/dist/lib/checkIsURLAccessible.d.ts +1 -1
- package/dist/lib/createContentDigest.d.ts +9 -9
- package/dist/lib/decode.d.ts +10 -10
- package/dist/lib/decodeHookResult.d.ts +10 -10
- package/dist/lib/decodePackageJSON.d.ts +12 -12
- package/dist/lib/decodeSliceMachineConfig.d.ts +3 -3
- package/dist/lib/fetchGitHubReleaseBodyForRelease.d.ts +21 -21
- package/dist/lib/fetchNPMPackageVersions.d.ts +5 -5
- package/dist/lib/format.d.ts +12 -12
- package/dist/lib/functionCodec.d.ts +2 -2
- package/dist/lib/installDependencies.d.ts +13 -13
- package/dist/lib/locateFileUpward.d.ts +10 -10
- package/dist/lib/markdownToHTML.d.ts +1 -1
- package/dist/lib/mockSlice.d.ts +9 -9
- package/dist/lib/prismicrc.d.ts +10 -10
- package/dist/lib/serializeCookies.d.ts +6 -6
- package/dist/managers/BaseManager.d.ts +33 -33
- package/dist/managers/SliceMachineManager.d.ts +95 -95
- package/dist/managers/createSliceMachineManager.d.ts +5 -5
- package/dist/managers/createSliceMachineManagerClient.d.ts +8 -8
- package/dist/managers/createSliceMachineManagerMiddleware.d.ts +15 -15
- package/dist/managers/customTypes/CustomTypesManager.d.ts +56 -56
- package/dist/managers/plugins/PluginsManager.d.ts +13 -13
- package/dist/managers/prismicRepository/PrismicRepositoryManager.cjs +5 -12
- package/dist/managers/prismicRepository/PrismicRepositoryManager.cjs.map +1 -1
- package/dist/managers/prismicRepository/PrismicRepositoryManager.d.ts +30 -30
- package/dist/managers/prismicRepository/PrismicRepositoryManager.js +5 -12
- package/dist/managers/prismicRepository/PrismicRepositoryManager.js.map +1 -1
- package/dist/managers/prismicRepository/types.d.ts +123 -123
- package/dist/managers/project/ProjectManager.d.ts +49 -49
- package/dist/managers/screenshots/ScreenshotsManager.cjs +6 -5
- package/dist/managers/screenshots/ScreenshotsManager.cjs.map +1 -1
- package/dist/managers/screenshots/ScreenshotsManager.d.ts +34 -34
- package/dist/managers/screenshots/ScreenshotsManager.js +6 -5
- package/dist/managers/screenshots/ScreenshotsManager.js.map +1 -1
- package/dist/managers/simulator/SimulatorManager.d.ts +38 -38
- package/dist/managers/slices/SlicesManager.cjs +1 -5
- package/dist/managers/slices/SlicesManager.cjs.map +1 -1
- package/dist/managers/slices/SlicesManager.d.ts +128 -128
- package/dist/managers/slices/SlicesManager.js +1 -5
- package/dist/managers/slices/SlicesManager.js.map +1 -1
- package/dist/managers/snippets/SnippetsManager.d.ts +11 -11
- package/dist/managers/telemetry/TelemetryManager.d.ts +30 -30
- package/dist/managers/telemetry/types.d.ts +143 -143
- package/dist/managers/user/UserManager.d.ts +40 -40
- package/dist/managers/versions/VersionsManager.d.ts +19 -19
- package/dist/managers/versions/types.d.ts +5 -5
- package/dist/test/createSliceMachineManagerMSWHandler.d.ts +7 -7
- package/dist/test/index.d.ts +2 -2
- package/dist/types.d.ts +45 -45
- package/package.json +3 -3
- package/src/auth/PrismicAuthManager.ts +5 -9
- package/src/managers/prismicRepository/PrismicRepositoryManager.ts +5 -12
- package/src/managers/screenshots/ScreenshotsManager.ts +12 -5
- package/src/managers/slices/SlicesManager.ts +1 -6
|
@@ -3,5 +3,6 @@ const TemplateTag = require("../TemplateTag/TemplateTag.cjs");
|
|
|
3
3
|
const stripIndentTransformer = require("../stripIndentTransformer/stripIndentTransformer.cjs");
|
|
4
4
|
const trimResultTransformer = require("../trimResultTransformer/trimResultTransformer.cjs");
|
|
5
5
|
var stripIndent = new TemplateTag(stripIndentTransformer, trimResultTransformer);
|
|
6
|
-
|
|
6
|
+
const stripIndent$1 = stripIndent;
|
|
7
|
+
module.exports = stripIndent$1;
|
|
7
8
|
//# sourceMappingURL=stripIndent.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripIndent.cjs","sources":["../../../../../../../node_modules/common-tags/es/stripIndent/stripIndent.js"],"sourcesContent":["import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\n\nvar stripIndent = new TemplateTag(stripIndentTransformer, trimResultTransformer);\n\nexport default stripIndent;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJpcEluZGVudC9zdHJpcEluZGVudC5qcyJdLCJuYW1lcyI6WyJUZW1wbGF0ZVRhZyIsInN0cmlwSW5kZW50VHJhbnNmb3JtZXIiLCJ0cmltUmVzdWx0VHJhbnNmb3JtZXIiLCJzdHJpcEluZGVudCJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsV0FBUCxNQUF3QixnQkFBeEI7QUFDQSxPQUFPQyxzQkFBUCxNQUFtQywyQkFBbkM7QUFDQSxPQUFPQyxxQkFBUCxNQUFrQywwQkFBbEM7O0FBRUEsSUFBTUMsY0FBYyxJQUFJSCxXQUFKLENBQ2xCQyxzQkFEa0IsRUFFbEJDLHFCQUZrQixDQUFwQjs7QUFLQSxlQUFlQyxXQUFmIiwiZmlsZSI6InN0cmlwSW5kZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVGFnIGZyb20gJy4uL1RlbXBsYXRlVGFnJztcbmltcG9ydCBzdHJpcEluZGVudFRyYW5zZm9ybWVyIGZyb20gJy4uL3N0cmlwSW5kZW50VHJhbnNmb3JtZXInO1xuaW1wb3J0IHRyaW1SZXN1bHRUcmFuc2Zvcm1lciBmcm9tICcuLi90cmltUmVzdWx0VHJhbnNmb3JtZXInO1xuXG5jb25zdCBzdHJpcEluZGVudCA9IG5ldyBUZW1wbGF0ZVRhZyhcbiAgc3RyaXBJbmRlbnRUcmFuc2Zvcm1lcixcbiAgdHJpbVJlc3VsdFRyYW5zZm9ybWVyLFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgc3RyaXBJbmRlbnQ7XG4iXX0="],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"stripIndent.cjs","sources":["../../../../../../../node_modules/common-tags/es/stripIndent/stripIndent.js"],"sourcesContent":["import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\n\nvar stripIndent = new TemplateTag(stripIndentTransformer, trimResultTransformer);\n\nexport default stripIndent;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJpcEluZGVudC9zdHJpcEluZGVudC5qcyJdLCJuYW1lcyI6WyJUZW1wbGF0ZVRhZyIsInN0cmlwSW5kZW50VHJhbnNmb3JtZXIiLCJ0cmltUmVzdWx0VHJhbnNmb3JtZXIiLCJzdHJpcEluZGVudCJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsV0FBUCxNQUF3QixnQkFBeEI7QUFDQSxPQUFPQyxzQkFBUCxNQUFtQywyQkFBbkM7QUFDQSxPQUFPQyxxQkFBUCxNQUFrQywwQkFBbEM7O0FBRUEsSUFBTUMsY0FBYyxJQUFJSCxXQUFKLENBQ2xCQyxzQkFEa0IsRUFFbEJDLHFCQUZrQixDQUFwQjs7QUFLQSxlQUFlQyxXQUFmIiwiZmlsZSI6InN0cmlwSW5kZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVGFnIGZyb20gJy4uL1RlbXBsYXRlVGFnJztcbmltcG9ydCBzdHJpcEluZGVudFRyYW5zZm9ybWVyIGZyb20gJy4uL3N0cmlwSW5kZW50VHJhbnNmb3JtZXInO1xuaW1wb3J0IHRyaW1SZXN1bHRUcmFuc2Zvcm1lciBmcm9tICcuLi90cmltUmVzdWx0VHJhbnNmb3JtZXInO1xuXG5jb25zdCBzdHJpcEluZGVudCA9IG5ldyBUZW1wbGF0ZVRhZyhcbiAgc3RyaXBJbmRlbnRUcmFuc2Zvcm1lcixcbiAgdHJpbVJlc3VsdFRyYW5zZm9ybWVyLFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgc3RyaXBJbmRlbnQ7XG4iXX0="],"names":[],"mappings":";;;;AAIA,IAAI,cAAc,IAAI,YAAY,wBAAwB,qBAAqB;AAE/E,MAAA,gBAAe;;","x_google_ignoreList":[0]}
|
|
@@ -2,7 +2,8 @@ import TemplateTag from "../TemplateTag/TemplateTag.js";
|
|
|
2
2
|
import stripIndentTransformer from "../stripIndentTransformer/stripIndentTransformer.js";
|
|
3
3
|
import trimResultTransformer from "../trimResultTransformer/trimResultTransformer.js";
|
|
4
4
|
var stripIndent = new TemplateTag(stripIndentTransformer, trimResultTransformer);
|
|
5
|
+
const stripIndent$1 = stripIndent;
|
|
5
6
|
export {
|
|
6
|
-
stripIndent as default
|
|
7
|
+
stripIndent$1 as default
|
|
7
8
|
};
|
|
8
9
|
//# sourceMappingURL=stripIndent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripIndent.js","sources":["../../../../../../../node_modules/common-tags/es/stripIndent/stripIndent.js"],"sourcesContent":["import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\n\nvar stripIndent = new TemplateTag(stripIndentTransformer, trimResultTransformer);\n\nexport default stripIndent;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJpcEluZGVudC9zdHJpcEluZGVudC5qcyJdLCJuYW1lcyI6WyJUZW1wbGF0ZVRhZyIsInN0cmlwSW5kZW50VHJhbnNmb3JtZXIiLCJ0cmltUmVzdWx0VHJhbnNmb3JtZXIiLCJzdHJpcEluZGVudCJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsV0FBUCxNQUF3QixnQkFBeEI7QUFDQSxPQUFPQyxzQkFBUCxNQUFtQywyQkFBbkM7QUFDQSxPQUFPQyxxQkFBUCxNQUFrQywwQkFBbEM7O0FBRUEsSUFBTUMsY0FBYyxJQUFJSCxXQUFKLENBQ2xCQyxzQkFEa0IsRUFFbEJDLHFCQUZrQixDQUFwQjs7QUFLQSxlQUFlQyxXQUFmIiwiZmlsZSI6InN0cmlwSW5kZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVGFnIGZyb20gJy4uL1RlbXBsYXRlVGFnJztcbmltcG9ydCBzdHJpcEluZGVudFRyYW5zZm9ybWVyIGZyb20gJy4uL3N0cmlwSW5kZW50VHJhbnNmb3JtZXInO1xuaW1wb3J0IHRyaW1SZXN1bHRUcmFuc2Zvcm1lciBmcm9tICcuLi90cmltUmVzdWx0VHJhbnNmb3JtZXInO1xuXG5jb25zdCBzdHJpcEluZGVudCA9IG5ldyBUZW1wbGF0ZVRhZyhcbiAgc3RyaXBJbmRlbnRUcmFuc2Zvcm1lcixcbiAgdHJpbVJlc3VsdFRyYW5zZm9ybWVyLFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgc3RyaXBJbmRlbnQ7XG4iXX0="],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"stripIndent.js","sources":["../../../../../../../node_modules/common-tags/es/stripIndent/stripIndent.js"],"sourcesContent":["import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\n\nvar stripIndent = new TemplateTag(stripIndentTransformer, trimResultTransformer);\n\nexport default stripIndent;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJpcEluZGVudC9zdHJpcEluZGVudC5qcyJdLCJuYW1lcyI6WyJUZW1wbGF0ZVRhZyIsInN0cmlwSW5kZW50VHJhbnNmb3JtZXIiLCJ0cmltUmVzdWx0VHJhbnNmb3JtZXIiLCJzdHJpcEluZGVudCJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsV0FBUCxNQUF3QixnQkFBeEI7QUFDQSxPQUFPQyxzQkFBUCxNQUFtQywyQkFBbkM7QUFDQSxPQUFPQyxxQkFBUCxNQUFrQywwQkFBbEM7O0FBRUEsSUFBTUMsY0FBYyxJQUFJSCxXQUFKLENBQ2xCQyxzQkFEa0IsRUFFbEJDLHFCQUZrQixDQUFwQjs7QUFLQSxlQUFlQyxXQUFmIiwiZmlsZSI6InN0cmlwSW5kZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVGFnIGZyb20gJy4uL1RlbXBsYXRlVGFnJztcbmltcG9ydCBzdHJpcEluZGVudFRyYW5zZm9ybWVyIGZyb20gJy4uL3N0cmlwSW5kZW50VHJhbnNmb3JtZXInO1xuaW1wb3J0IHRyaW1SZXN1bHRUcmFuc2Zvcm1lciBmcm9tICcuLi90cmltUmVzdWx0VHJhbnNmb3JtZXInO1xuXG5jb25zdCBzdHJpcEluZGVudCA9IG5ldyBUZW1wbGF0ZVRhZyhcbiAgc3RyaXBJbmRlbnRUcmFuc2Zvcm1lcixcbiAgdHJpbVJlc3VsdFRyYW5zZm9ybWVyLFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgc3RyaXBJbmRlbnQ7XG4iXX0="],"names":[],"mappings":";;;AAIA,IAAI,cAAc,IAAI,YAAY,wBAAwB,qBAAqB;AAE/E,MAAA,gBAAe;","x_google_ignoreList":[0]}
|
|
@@ -242,19 +242,20 @@ class PrismicAuthManager {
|
|
|
242
242
|
async _readPersistedAuthState() {
|
|
243
243
|
const authStateFilePath = this._getPersistedAuthStateFilePath();
|
|
244
244
|
let authStateFileContents = JSON.stringify({});
|
|
245
|
+
let rawAuthState = {};
|
|
245
246
|
try {
|
|
246
247
|
authStateFileContents = await fs__namespace.readFile(authStateFilePath, "utf8");
|
|
248
|
+
rawAuthState = JSON.parse(authStateFileContents);
|
|
247
249
|
} catch {
|
|
248
|
-
|
|
250
|
+
rawAuthState = {
|
|
249
251
|
...DEFAULT_PERSISTED_AUTH_STATE,
|
|
250
252
|
cookies: serializeCookies.serializeCookies(DEFAULT_PERSISTED_AUTH_STATE.cookies)
|
|
251
253
|
};
|
|
252
|
-
authStateFileContents = JSON.stringify(
|
|
254
|
+
authStateFileContents = JSON.stringify(rawAuthState, null, " ");
|
|
253
255
|
await fs__namespace.mkdir(path__namespace.dirname(authStateFilePath), { recursive: true });
|
|
254
256
|
await fs__namespace.writeFile(authStateFilePath, authStateFileContents);
|
|
255
257
|
}
|
|
256
|
-
|
|
257
|
-
if ("cookies" in rawAuthState) {
|
|
258
|
+
if (typeof rawAuthState.cookies === "string") {
|
|
258
259
|
rawAuthState.cookies = parseCookies(rawAuthState.cookies);
|
|
259
260
|
}
|
|
260
261
|
const { value: authState, error } = decode.decode(PrismicAuthState, rawAuthState);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrismicAuthManager.cjs","sources":["../../../src/auth/PrismicAuthManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport * as http from \"node:http\";\n\nimport * as h3 from \"h3\";\nimport fetch from \"node-fetch\";\nimport cookie from \"cookie\";\nimport cors from \"cors\";\nimport getPort from \"get-port\";\n\nimport { decode } from \"../lib/decode\";\nimport { serializeCookies } from \"../lib/serializeCookies\";\n\nimport { API_ENDPOINTS } from \"../constants/API_ENDPOINTS\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../constants/SLICE_MACHINE_USER_AGENT\";\nimport { createPrismicAuthManagerMiddleware } from \"./createPrismicAuthManagerMiddleware\";\nimport {\n\tInternalError,\n\tUnauthenticatedError,\n\tUnexpectedDataError,\n} from \"../errors\";\n\nconst COOKIE_SEPARATOR = \"; \";\nconst AUTH_COOKIE_KEY = \"prismic-auth\";\nconst SESSION_COOKIE_KEY = \"SESSION\";\n\nconst PERSISTED_AUTH_STATE_FILE_NAME = \".prismic\";\nconst DEFAULT_PERSISTED_AUTH_STATE: PrismicAuthState = {\n\tbase: \"https://prismic.io\",\n\tcookies: {},\n};\n\nconst PrismicAuthState = t.intersection([\n\tt.type({\n\t\tbase: t.string,\n\t\tcookies: t.intersection([\n\t\t\tt.partial({\n\t\t\t\t[AUTH_COOKIE_KEY]: t.string,\n\t\t\t\tSESSION: t.string,\n\t\t\t}),\n\t\t\tt.record(t.string, t.string),\n\t\t]),\n\t}),\n\tt.partial({\n\t\tshortId: t.string,\n\t\tintercomHash: t.string,\n\t\toauthAccessToken: t.string,\n\t\tauthUrl: t.string,\n\t}),\n]);\nexport type PrismicAuthState = t.TypeOf<typeof PrismicAuthState>;\n\nconst PrismicUserProfile = t.exact(\n\tt.type({\n\t\tuserId: t.string,\n\t\tshortId: t.string,\n\t\tintercomHash: t.string,\n\t\temail: t.string,\n\t\tfirstName: t.string,\n\t\tlastName: t.string,\n\t}),\n);\nexport type PrismicUserProfile = t.TypeOf<typeof PrismicUserProfile>;\n\ntype PrismicAuthManagerConstructorArgs = {\n\tscopedDirectory?: string;\n};\n\ntype PrismicAuthManagerLoginArgs = {\n\temail: string;\n\tcookies: string[];\n};\n\ntype PrismicAuthManagerGetLoginSessionInfoReturnType = {\n\tport: number;\n\turl: string;\n};\n\ntype PrismicAuthManagerNodeLoginSessionArgs = {\n\tport: number;\n\tonListenCallback?: () => void;\n};\n\ntype GetProfileForAuthenticationTokenArgs = {\n\tauthenticationToken: string;\n};\n\nconst checkHasAuthenticationToken = (\n\tauthState: PrismicAuthState,\n): authState is PrismicAuthState & {\n\tcookies: Required<\n\t\tPick<\n\t\t\tPrismicAuthState[\"cookies\"],\n\t\t\ttypeof AUTH_COOKIE_KEY | typeof SESSION_COOKIE_KEY\n\t\t>\n\t>;\n} => {\n\treturn Boolean(\n\t\tauthState.cookies[AUTH_COOKIE_KEY] && authState.cookies[SESSION_COOKIE_KEY],\n\t);\n};\n\nconst parseCookies = (cookies: string): Record<string, string> => {\n\treturn cookie.parse(cookies, {\n\t\t// Don't escape any values.\n\t\tdecode: (value) => value,\n\t});\n};\n\nexport class PrismicAuthManager {\n\t// TODO: Automatically scope the manager to the current Slice Machine\n\t// project? If not, this internal state can be removed.\n\tscopedDirectory: string;\n\n\tconstructor({\n\t\tscopedDirectory = os.homedir(),\n\t}: PrismicAuthManagerConstructorArgs = {}) {\n\t\tthis.scopedDirectory = scopedDirectory;\n\t}\n\n\t// TODO: Make the `cookies` argument more explicit. What are these\n\t// mysterious cookies?\n\tasync login(args: PrismicAuthManagerLoginArgs): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t// Set the auth's URL base to the current base at runtime.\n\t\tauthState.base = API_ENDPOINTS.PrismicWroom;\n\t\tauthState.cookies = {\n\t\t\t...authState.cookies,\n\t\t\t...parseCookies(args.cookies.join(COOKIE_SEPARATOR)),\n\t\t};\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst authenticationToken = authState.cookies[AUTH_COOKIE_KEY];\n\t\t\tconst profile = await this._getProfileForAuthenticationToken({\n\t\t\t\tauthenticationToken,\n\t\t\t});\n\n\t\t\tauthState.shortId = profile.shortId;\n\t\t\tauthState.intercomHash = profile.intercomHash;\n\t\t}\n\n\t\tawait this._writePersistedAuthState(authState);\n\t}\n\n\tasync getLoginSessionInfo(): Promise<PrismicAuthManagerGetLoginSessionInfoReturnType> {\n\t\t// Pick a random port, with a preference for historic `5555`\n\t\tconst port = await getPort({ port: 5555 });\n\n\t\tconst url = new URL(\n\t\t\t`./dashboard/cli/login?source=slice-machine&port=${port}`,\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t).toString();\n\n\t\treturn {\n\t\t\tport,\n\t\t\turl,\n\t\t};\n\t}\n\n\tasync nodeLoginSession(\n\t\targs: PrismicAuthManagerNodeLoginSessionArgs,\n\t): Promise<void> {\n\t\treturn new Promise<void>(async (resolve) => {\n\t\t\t// Timeout attempt after 3 minutes\n\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\tserver.close();\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Login timeout, server did not receive a response within a 3-minute delay\",\n\t\t\t\t);\n\t\t\t}, 180_000);\n\n\t\t\tconst app = h3.createApp();\n\t\t\tapp.use(h3.fromNodeMiddleware(cors()));\n\t\t\tapp.use(\n\t\t\t\th3.fromNodeMiddleware(\n\t\t\t\t\tcreatePrismicAuthManagerMiddleware({\n\t\t\t\t\t\tprismicAuthManager: this,\n\t\t\t\t\t\tonLoginCallback() {\n\t\t\t\t\t\t\t// Cleanup process and resolve\n\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\tserver.close();\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\t// Start server\n\t\t\tconst server = http.createServer(h3.toNodeListener(app));\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tserver.once(\"listening\", () => {\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t\tserver.listen(args.port);\n\t\t\t});\n\n\t\t\tif (args.onListenCallback) {\n\t\t\t\targs.onListenCallback();\n\t\t\t}\n\t\t});\n\t}\n\n\tasync logout(): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t// Remove all Prismic cookies, short ID, and Intercom hash\n\t\t// associated with the currently logged in user.\n\t\tauthState.cookies = {};\n\t\tauthState.shortId = undefined;\n\t\tauthState.intercomHash = undefined;\n\n\t\tawait this._writePersistedAuthState(authState);\n\t}\n\n\tasync checkIsLoggedIn(): Promise<boolean> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst url = new URL(\"./validate\", API_ENDPOINTS.PrismicAuthentication);\n\t\t\turl.searchParams.set(\"token\", authState.cookies[AUTH_COOKIE_KEY]);\n\n\t\t\tlet res;\n\t\t\ttry {\n\t\t\t\tres = await fetch(url.toString(), {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// Noop, we return if `res` is not defined.\n\t\t\t}\n\n\t\t\tif (!res || !res.ok) {\n\t\t\t\tawait this.logout();\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync getAuthenticationCookies(): Promise<\n\t\tPrismicAuthState[\"cookies\"] &\n\t\t\tRequired<\n\t\t\t\tPick<\n\t\t\t\t\tPrismicAuthState[\"cookies\"],\n\t\t\t\t\ttypeof AUTH_COOKIE_KEY | typeof SESSION_COOKIE_KEY\n\t\t\t\t>\n\t\t\t>\n\t> {\n\t\tconst isLoggedIn = await this.checkIsLoggedIn();\n\n\t\tif (isLoggedIn) {\n\t\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\t\treturn authState.cookies;\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Not logged in.\");\n\t}\n\n\tasync getAuthenticationToken(): Promise<string> {\n\t\tconst cookies = await this.getAuthenticationCookies();\n\n\t\treturn cookies[AUTH_COOKIE_KEY];\n\t}\n\n\tasync refreshAuthenticationToken(): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst url = new URL(\n\t\t\t\t\"./refreshtoken\",\n\t\t\t\tAPI_ENDPOINTS.PrismicAuthentication,\n\t\t\t);\n\t\t\turl.searchParams.set(\"token\", authState.cookies[AUTH_COOKIE_KEY]);\n\n\t\t\tconst res = await fetch(url.toString(), {\n\t\t\t\theaders: {\n\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst text = await res.text();\n\n\t\t\tif (res.ok) {\n\t\t\t\tauthState.cookies[AUTH_COOKIE_KEY] = text;\n\n\t\t\t\tawait this._writePersistedAuthState(authState);\n\t\t\t} else {\n\t\t\t\tthrow new InternalError(\"Failed to refresh authentication token.\");\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new UnauthenticatedError();\n\t\t}\n\t}\n\n\tasync getProfile(): Promise<PrismicUserProfile> {\n\t\tconst authenticationToken = await this.getAuthenticationToken();\n\n\t\treturn await this._getProfileForAuthenticationToken({\n\t\t\tauthenticationToken,\n\t\t});\n\t}\n\n\tprivate async _getProfileForAuthenticationToken(\n\t\targs: GetProfileForAuthenticationTokenArgs,\n\t): Promise<PrismicUserProfile> {\n\t\tconst url = new URL(\"./profile\", API_ENDPOINTS.PrismicUser);\n\t\tconst res = await fetch(url.toString(), {\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${args.authenticationToken}`,\n\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t},\n\t\t});\n\t\tconst json = await res.json();\n\n\t\tif (res.ok) {\n\t\t\tconst { value: profile, error } = decode(PrismicUserProfile, json);\n\n\t\t\tif (error) {\n\t\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t\t\"Received invalid data from the Prismic user service.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn profile;\n\t\t} else {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Failed to retrieve profile from the Prismic user service.\",\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async _readPersistedAuthState(): Promise<PrismicAuthState> {\n\t\tconst authStateFilePath = this._getPersistedAuthStateFilePath();\n\n\t\tlet authStateFileContents: string = JSON.stringify({});\n\n\t\ttry {\n\t\t\tauthStateFileContents = await fs.readFile(authStateFilePath, \"utf8\");\n\t\t} catch {\n\t\t\t// Write a default persisted state if it doesn't already exist.\n\n\t\t\tconst defaultStateFileContents = {\n\t\t\t\t...DEFAULT_PERSISTED_AUTH_STATE,\n\t\t\t\tcookies: serializeCookies(DEFAULT_PERSISTED_AUTH_STATE.cookies),\n\t\t\t};\n\t\t\tauthStateFileContents = JSON.stringify(\n\t\t\t\tdefaultStateFileContents,\n\t\t\t\tnull,\n\t\t\t\t\"\\t\",\n\t\t\t);\n\n\t\t\tawait fs.mkdir(path.dirname(authStateFilePath), { recursive: true });\n\t\t\tawait fs.writeFile(authStateFilePath, authStateFileContents);\n\t\t}\n\n\t\tconst rawAuthState = JSON.parse(authStateFileContents);\n\n\t\t// Decode cookies into a record for convenience.\n\t\tif (\"cookies\" in rawAuthState) {\n\t\t\trawAuthState.cookies = parseCookies(rawAuthState.cookies);\n\t\t}\n\n\t\tconst { value: authState, error } = decode(PrismicAuthState, rawAuthState);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\"Prismic authentication state is invalid.\");\n\t\t}\n\n\t\treturn authState;\n\t}\n\n\tprivate async _writePersistedAuthState(\n\t\tauthState: PrismicAuthState,\n\t): Promise<void> {\n\t\tconst authStateFilePath = this._getPersistedAuthStateFilePath();\n\n\t\tconst preparedAuthState = {\n\t\t\t...authState,\n\t\t\tcookies: serializeCookies(authState.cookies),\n\t\t};\n\n\t\ttry {\n\t\t\tawait fs.writeFile(\n\t\t\t\tauthStateFilePath,\n\t\t\t\tJSON.stringify(preparedAuthState, null, 2),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Failed to write Prismic authentication state to the file system.\",\n\t\t\t\t{\n\t\t\t\t\tcause: error,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate _getPersistedAuthStateFilePath(): string {\n\t\treturn path.resolve(this.scopedDirectory, PERSISTED_AUTH_STATE_FILE_NAME);\n\t}\n}\n"],"names":["t","os","API_ENDPOINTS","getPort","h3","createPrismicAuthManagerMiddleware","http","resolve","fetch","SLICE_MACHINE_USER_AGENT","InternalError","UnauthenticatedError","decode","UnexpectedDataError","fs","serializeCookies","path"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,qBAAqB;AAE3B,MAAM,iCAAiC;AACvC,MAAM,+BAAiD;AAAA,EACtD,MAAM;AAAA,EACN,SAAS,CAAE;;AAGZ,MAAM,mBAAmBA,aAAE,aAAa;AAAA,EACvCA,aAAE,KAAK;AAAA,IACN,MAAMA,aAAE;AAAA,IACR,SAASA,aAAE,aAAa;AAAA,MACvBA,aAAE,QAAQ;AAAA,QACT,CAAC,eAAe,GAAGA,aAAE;AAAA,QACrB,SAASA,aAAE;AAAA,MAAA,CACX;AAAA,MACDA,aAAE,OAAOA,aAAE,QAAQA,aAAE,MAAM;AAAA,IAAA,CAC3B;AAAA,EAAA,CACD;AAAA,EACDA,aAAE,QAAQ;AAAA,IACT,SAASA,aAAE;AAAA,IACX,cAAcA,aAAE;AAAA,IAChB,kBAAkBA,aAAE;AAAA,IACpB,SAASA,aAAE;AAAA,EAAA,CACX;AACD,CAAA;AAGD,MAAM,qBAAqBA,aAAE,MAC5BA,aAAE,KAAK;AAAA,EACN,QAAQA,aAAE;AAAA,EACV,SAASA,aAAE;AAAA,EACX,cAAcA,aAAE;AAAA,EAChB,OAAOA,aAAE;AAAA,EACT,WAAWA,aAAE;AAAA,EACb,UAAUA,aAAE;AACZ,CAAA,CAAC;AA2BH,MAAM,8BAA8B,CACnC,cAQG;AACI,SAAA,QACN,UAAU,QAAQ,eAAe,KAAK,UAAU,QAAQ,kBAAkB,CAAC;AAE7E;AAEA,MAAM,eAAe,CAAC,YAA2C;AACzD,SAAA,OAAO,MAAM,SAAS;AAAA;AAAA,IAE5B,QAAQ,CAAC,UAAU;AAAA,EAAA,CACnB;AACF;MAEa,mBAAkB;AAAA,EAK9B,YAAY,EACX,kBAAkBC,cAAG,cACiB,CAAA,GAAE;AAJzC;AAAA;AAAA;AAKC,SAAK,kBAAkB;AAAA,EACxB;AAAA;AAAA;AAAA,EAIA,MAAM,MAAM,MAAiC;AACtC,UAAA,YAAY,MAAM,KAAK;AAG7B,cAAU,OAAOC,cAAc,cAAA;AAC/B,cAAU,UAAU;AAAA,MACnB,GAAG,UAAU;AAAA,MACb,GAAG,aAAa,KAAK,QAAQ,KAAK,gBAAgB,CAAC;AAAA,IAAA;AAGhD,QAAA,4BAA4B,SAAS,GAAG;AACrC,YAAA,sBAAsB,UAAU,QAAQ,eAAe;AACvD,YAAA,UAAU,MAAM,KAAK,kCAAkC;AAAA,QAC5D;AAAA,MAAA,CACA;AAED,gBAAU,UAAU,QAAQ;AAC5B,gBAAU,eAAe,QAAQ;AAAA,IACjC;AAEK,UAAA,KAAK,yBAAyB,SAAS;AAAA,EAC9C;AAAA,EAEA,MAAM,sBAAmB;AAExB,UAAM,OAAO,MAAMC,MAAQ,EAAE,MAAM,KAAM,CAAA;AAEnC,UAAA,MAAM,IAAI,IACf,mDAAmD,QACnDD,4BAAc,YAAY,EACzB;AAEK,WAAA;AAAA,MACN;AAAA,MACA;AAAA,IAAA;AAAA,EAEF;AAAA,EAEA,MAAM,iBACL,MAA4C;AAErC,WAAA,IAAI,QAAc,OAAO,YAAW;AAEpC,YAAA,UAAU,WAAW,MAAK;AAC/B,eAAO,MAAK;AACN,cAAA,IAAI,MACT,0EAA0E;AAAA,SAEzE,IAAO;AAEJ,YAAA,MAAME,cAAG;AACf,UAAI,IAAIA,cAAG,mBAAmB,KAAA,CAAM,CAAC;AACjC,UAAA,IACHA,cAAG,mBACFC,mCAAAA,mCAAmC;AAAA,QAClC,oBAAoB;AAAA,QACpB,kBAAe;AAEd,uBAAa,OAAO;AACpB,iBAAO,MAAK;;QAEb;AAAA,MACA,CAAA,CAAC,CACF;AAIF,YAAM,SAASC,gBAAK,aAAaF,cAAG,eAAe,GAAG,CAAC;AACjD,YAAA,IAAI,QAAc,CAACG,aAAW;AAC5B,eAAA,KAAK,aAAa,MAAK;AAC7BA;SACA;AACM,eAAA,OAAO,KAAK,IAAI;AAAA,MAAA,CACvB;AAED,UAAI,KAAK,kBAAkB;AAC1B,aAAK,iBAAgB;AAAA,MACrB;AAAA,IAAA,CACD;AAAA,EACF;AAAA,EAEA,MAAM,SAAM;AACL,UAAA,YAAY,MAAM,KAAK;AAI7B,cAAU,UAAU;AACpB,cAAU,UAAU;AACpB,cAAU,eAAe;AAEnB,UAAA,KAAK,yBAAyB,SAAS;AAAA,EAC9C;AAAA,EAEA,MAAM,kBAAe;AACd,UAAA,YAAY,MAAM,KAAK;AAEzB,QAAA,4BAA4B,SAAS,GAAG;AAC3C,YAAM,MAAM,IAAI,IAAI,cAAcL,4BAAc,qBAAqB;AACrE,UAAI,aAAa,IAAI,SAAS,UAAU,QAAQ,eAAe,CAAC;AAE5D,UAAA;AACA,UAAA;AACH,cAAM,MAAMM,QAAAA,QAAM,IAAI,SAAA,GAAY;AAAA,UACjC,SAAS;AAAA,YACR,cAAcC,yBAAA;AAAA,UACd;AAAA,QAAA,CACD;AAAA,eACO;MAER;AAED,UAAI,CAAC,OAAO,CAAC,IAAI,IAAI;AACpB,cAAM,KAAK;AAEJ,eAAA;AAAA,MACP;AAEM,aAAA;AAAA,IAAA,OACD;AACC,aAAA;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MAAM,2BAAwB;AASvB,UAAA,aAAa,MAAM,KAAK;AAE9B,QAAI,YAAY;AACT,YAAA,YAAY,MAAM,KAAK;AAEzB,UAAA,4BAA4B,SAAS,GAAG;AAC3C,eAAO,UAAU;AAAA,MACjB;AAAA,IACD;AAEK,UAAA,IAAI,MAAM,gBAAgB;AAAA,EACjC;AAAA,EAEA,MAAM,yBAAsB;AACrB,UAAA,UAAU,MAAM,KAAK;AAE3B,WAAO,QAAQ,eAAe;AAAA,EAC/B;AAAA,EAEA,MAAM,6BAA0B;AACzB,UAAA,YAAY,MAAM,KAAK;AAEzB,QAAA,4BAA4B,SAAS,GAAG;AAC3C,YAAM,MAAM,IAAI,IACf,kBACAP,4BAAc,qBAAqB;AAEpC,UAAI,aAAa,IAAI,SAAS,UAAU,QAAQ,eAAe,CAAC;AAEhE,YAAM,MAAM,MAAMM,QAAAA,QAAM,IAAI,YAAY;AAAA,QACvC,SAAS;AAAA,UACR,cAAcC,yBAAA;AAAA,QACd;AAAA,MAAA,CACD;AACK,YAAA,OAAO,MAAM,IAAI;AAEvB,UAAI,IAAI,IAAI;AACD,kBAAA,QAAQ,eAAe,IAAI;AAE/B,cAAA,KAAK,yBAAyB,SAAS;AAAA,MAAA,OACvC;AACA,cAAA,IAAIC,OAAAA,cAAc,yCAAyC;AAAA,MACjE;AAAA,IAAA,OACK;AACN,YAAM,IAAIC,OAAoB,qBAAA;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,MAAM,aAAU;AACT,UAAA,sBAAsB,MAAM,KAAK;AAEhC,WAAA,MAAM,KAAK,kCAAkC;AAAA,MACnD;AAAA,IAAA,CACA;AAAA,EACF;AAAA,EAEQ,MAAM,kCACb,MAA0C;AAE1C,UAAM,MAAM,IAAI,IAAI,aAAaT,4BAAc,WAAW;AAC1D,UAAM,MAAM,MAAMM,QAAAA,QAAM,IAAI,YAAY;AAAA,MACvC,SAAS;AAAA,QACR,eAAe,UAAU,KAAK;AAAA,QAC9B,cAAcC,yBAAA;AAAA,MACd;AAAA,IAAA,CACD;AACK,UAAA,OAAO,MAAM,IAAI;AAEvB,QAAI,IAAI,IAAI;AACX,YAAM,EAAE,OAAO,SAAS,MAAU,IAAAG,cAAO,oBAAoB,IAAI;AAEjE,UAAI,OAAO;AACJ,cAAA,IAAIC,OAAAA,oBACT,sDAAsD;AAAA,MAEvD;AAEM,aAAA;AAAA,IAAA,OACD;AACA,YAAA,IAAIH,OAAAA,cACT,2DAA2D;AAAA,IAE5D;AAAA,EACF;AAAA,EAEQ,MAAM,0BAAuB;AAC9B,UAAA,oBAAoB,KAAK;AAE/B,QAAI,wBAAgC,KAAK,UAAU,CAAE,CAAA;AAEjD,QAAA;AACH,8BAAwB,MAAMI,cAAG,SAAS,mBAAmB,MAAM;AAAA,IAAA,QAClE;AAGD,YAAM,2BAA2B;AAAA,QAChC,GAAG;AAAA,QACH,SAASC,iBAAAA,iBAAiB,6BAA6B,OAAO;AAAA,MAAA;AAE/D,8BAAwB,KAAK,UAC5B,0BACA,MACA,GAAI;AAGC,YAAAD,cAAG,MAAME,gBAAK,QAAQ,iBAAiB,GAAG,EAAE,WAAW,KAAA,CAAM;AAC7D,YAAAF,cAAG,UAAU,mBAAmB,qBAAqB;AAAA,IAC3D;AAEK,UAAA,eAAe,KAAK,MAAM,qBAAqB;AAGrD,QAAI,aAAa,cAAc;AACjB,mBAAA,UAAU,aAAa,aAAa,OAAO;AAAA,IACxD;AAED,UAAM,EAAE,OAAO,WAAW,MAAU,IAAAF,cAAO,kBAAkB,YAAY;AAEzE,QAAI,OAAO;AACJ,YAAA,IAAIC,OAAAA,oBAAoB,0CAA0C;AAAA,IACxE;AAEM,WAAA;AAAA,EACR;AAAA,EAEQ,MAAM,yBACb,WAA2B;AAErB,UAAA,oBAAoB,KAAK;AAE/B,UAAM,oBAAoB;AAAA,MACzB,GAAG;AAAA,MACH,SAASE,iBAAAA,iBAAiB,UAAU,OAAO;AAAA,IAAA;AAGxC,QAAA;AACG,YAAAD,cAAG,UACR,mBACA,KAAK,UAAU,mBAAmB,MAAM,CAAC,CAAC;AAAA,aAEnC;AACF,YAAA,IAAIJ,qBACT,oEACA;AAAA,QACC,OAAO;AAAA,MAAA,CACP;AAAA,IAEF;AAAA,EACF;AAAA,EAEQ,iCAA8B;AACrC,WAAOM,gBAAK,QAAQ,KAAK,iBAAiB,8BAA8B;AAAA,EACzE;AACA;;"}
|
|
1
|
+
{"version":3,"file":"PrismicAuthManager.cjs","sources":["../../../src/auth/PrismicAuthManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport * as http from \"node:http\";\n\nimport * as h3 from \"h3\";\nimport fetch from \"node-fetch\";\nimport cookie from \"cookie\";\nimport cors from \"cors\";\nimport getPort from \"get-port\";\n\nimport { decode } from \"../lib/decode\";\nimport { serializeCookies } from \"../lib/serializeCookies\";\n\nimport { API_ENDPOINTS } from \"../constants/API_ENDPOINTS\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../constants/SLICE_MACHINE_USER_AGENT\";\nimport { createPrismicAuthManagerMiddleware } from \"./createPrismicAuthManagerMiddleware\";\nimport {\n\tInternalError,\n\tUnauthenticatedError,\n\tUnexpectedDataError,\n} from \"../errors\";\n\nconst COOKIE_SEPARATOR = \"; \";\nconst AUTH_COOKIE_KEY = \"prismic-auth\";\nconst SESSION_COOKIE_KEY = \"SESSION\";\n\nconst PERSISTED_AUTH_STATE_FILE_NAME = \".prismic\";\nconst DEFAULT_PERSISTED_AUTH_STATE: PrismicAuthState = {\n\tbase: \"https://prismic.io\",\n\tcookies: {},\n};\n\nconst PrismicAuthState = t.intersection([\n\tt.type({\n\t\tbase: t.string,\n\t\tcookies: t.intersection([\n\t\t\tt.partial({\n\t\t\t\t[AUTH_COOKIE_KEY]: t.string,\n\t\t\t\tSESSION: t.string,\n\t\t\t}),\n\t\t\tt.record(t.string, t.string),\n\t\t]),\n\t}),\n\tt.partial({\n\t\tshortId: t.string,\n\t\tintercomHash: t.string,\n\t\toauthAccessToken: t.string,\n\t\tauthUrl: t.string,\n\t}),\n]);\nexport type PrismicAuthState = t.TypeOf<typeof PrismicAuthState>;\n\nconst PrismicUserProfile = t.exact(\n\tt.type({\n\t\tuserId: t.string,\n\t\tshortId: t.string,\n\t\tintercomHash: t.string,\n\t\temail: t.string,\n\t\tfirstName: t.string,\n\t\tlastName: t.string,\n\t}),\n);\nexport type PrismicUserProfile = t.TypeOf<typeof PrismicUserProfile>;\n\ntype PrismicAuthManagerConstructorArgs = {\n\tscopedDirectory?: string;\n};\n\ntype PrismicAuthManagerLoginArgs = {\n\temail: string;\n\tcookies: string[];\n};\n\ntype PrismicAuthManagerGetLoginSessionInfoReturnType = {\n\tport: number;\n\turl: string;\n};\n\ntype PrismicAuthManagerNodeLoginSessionArgs = {\n\tport: number;\n\tonListenCallback?: () => void;\n};\n\ntype GetProfileForAuthenticationTokenArgs = {\n\tauthenticationToken: string;\n};\n\nconst checkHasAuthenticationToken = (\n\tauthState: PrismicAuthState,\n): authState is PrismicAuthState & {\n\tcookies: Required<\n\t\tPick<\n\t\t\tPrismicAuthState[\"cookies\"],\n\t\t\ttypeof AUTH_COOKIE_KEY | typeof SESSION_COOKIE_KEY\n\t\t>\n\t>;\n} => {\n\treturn Boolean(\n\t\tauthState.cookies[AUTH_COOKIE_KEY] && authState.cookies[SESSION_COOKIE_KEY],\n\t);\n};\n\nconst parseCookies = (cookies: string): Record<string, string> => {\n\treturn cookie.parse(cookies, {\n\t\t// Don't escape any values.\n\t\tdecode: (value) => value,\n\t});\n};\n\nexport class PrismicAuthManager {\n\t// TODO: Automatically scope the manager to the current Slice Machine\n\t// project? If not, this internal state can be removed.\n\tscopedDirectory: string;\n\n\tconstructor({\n\t\tscopedDirectory = os.homedir(),\n\t}: PrismicAuthManagerConstructorArgs = {}) {\n\t\tthis.scopedDirectory = scopedDirectory;\n\t}\n\n\t// TODO: Make the `cookies` argument more explicit. What are these\n\t// mysterious cookies?\n\tasync login(args: PrismicAuthManagerLoginArgs): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t// Set the auth's URL base to the current base at runtime.\n\t\tauthState.base = API_ENDPOINTS.PrismicWroom;\n\t\tauthState.cookies = {\n\t\t\t...authState.cookies,\n\t\t\t...parseCookies(args.cookies.join(COOKIE_SEPARATOR)),\n\t\t};\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst authenticationToken = authState.cookies[AUTH_COOKIE_KEY];\n\t\t\tconst profile = await this._getProfileForAuthenticationToken({\n\t\t\t\tauthenticationToken,\n\t\t\t});\n\n\t\t\tauthState.shortId = profile.shortId;\n\t\t\tauthState.intercomHash = profile.intercomHash;\n\t\t}\n\n\t\tawait this._writePersistedAuthState(authState);\n\t}\n\n\tasync getLoginSessionInfo(): Promise<PrismicAuthManagerGetLoginSessionInfoReturnType> {\n\t\t// Pick a random port, with a preference for historic `5555`\n\t\tconst port = await getPort({ port: 5555 });\n\n\t\tconst url = new URL(\n\t\t\t`./dashboard/cli/login?source=slice-machine&port=${port}`,\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t).toString();\n\n\t\treturn {\n\t\t\tport,\n\t\t\turl,\n\t\t};\n\t}\n\n\tasync nodeLoginSession(\n\t\targs: PrismicAuthManagerNodeLoginSessionArgs,\n\t): Promise<void> {\n\t\treturn new Promise<void>(async (resolve) => {\n\t\t\t// Timeout attempt after 3 minutes\n\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\tserver.close();\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Login timeout, server did not receive a response within a 3-minute delay\",\n\t\t\t\t);\n\t\t\t}, 180_000);\n\n\t\t\tconst app = h3.createApp();\n\t\t\tapp.use(h3.fromNodeMiddleware(cors()));\n\t\t\tapp.use(\n\t\t\t\th3.fromNodeMiddleware(\n\t\t\t\t\tcreatePrismicAuthManagerMiddleware({\n\t\t\t\t\t\tprismicAuthManager: this,\n\t\t\t\t\t\tonLoginCallback() {\n\t\t\t\t\t\t\t// Cleanup process and resolve\n\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\tserver.close();\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\t// Start server\n\t\t\tconst server = http.createServer(h3.toNodeListener(app));\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tserver.once(\"listening\", () => {\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t\tserver.listen(args.port);\n\t\t\t});\n\n\t\t\tif (args.onListenCallback) {\n\t\t\t\targs.onListenCallback();\n\t\t\t}\n\t\t});\n\t}\n\n\tasync logout(): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t// Remove all Prismic cookies, short ID, and Intercom hash\n\t\t// associated with the currently logged in user.\n\t\tauthState.cookies = {};\n\t\tauthState.shortId = undefined;\n\t\tauthState.intercomHash = undefined;\n\n\t\tawait this._writePersistedAuthState(authState);\n\t}\n\n\tasync checkIsLoggedIn(): Promise<boolean> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst url = new URL(\"./validate\", API_ENDPOINTS.PrismicAuthentication);\n\t\t\turl.searchParams.set(\"token\", authState.cookies[AUTH_COOKIE_KEY]);\n\n\t\t\tlet res;\n\t\t\ttry {\n\t\t\t\tres = await fetch(url.toString(), {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// Noop, we return if `res` is not defined.\n\t\t\t}\n\n\t\t\tif (!res || !res.ok) {\n\t\t\t\tawait this.logout();\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync getAuthenticationCookies(): Promise<\n\t\tPrismicAuthState[\"cookies\"] &\n\t\t\tRequired<\n\t\t\t\tPick<\n\t\t\t\t\tPrismicAuthState[\"cookies\"],\n\t\t\t\t\ttypeof AUTH_COOKIE_KEY | typeof SESSION_COOKIE_KEY\n\t\t\t\t>\n\t\t\t>\n\t> {\n\t\tconst isLoggedIn = await this.checkIsLoggedIn();\n\n\t\tif (isLoggedIn) {\n\t\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\t\treturn authState.cookies;\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Not logged in.\");\n\t}\n\n\tasync getAuthenticationToken(): Promise<string> {\n\t\tconst cookies = await this.getAuthenticationCookies();\n\n\t\treturn cookies[AUTH_COOKIE_KEY];\n\t}\n\n\tasync refreshAuthenticationToken(): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst url = new URL(\n\t\t\t\t\"./refreshtoken\",\n\t\t\t\tAPI_ENDPOINTS.PrismicAuthentication,\n\t\t\t);\n\t\t\turl.searchParams.set(\"token\", authState.cookies[AUTH_COOKIE_KEY]);\n\n\t\t\tconst res = await fetch(url.toString(), {\n\t\t\t\theaders: {\n\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst text = await res.text();\n\n\t\t\tif (res.ok) {\n\t\t\t\tauthState.cookies[AUTH_COOKIE_KEY] = text;\n\n\t\t\t\tawait this._writePersistedAuthState(authState);\n\t\t\t} else {\n\t\t\t\tthrow new InternalError(\"Failed to refresh authentication token.\");\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new UnauthenticatedError();\n\t\t}\n\t}\n\n\tasync getProfile(): Promise<PrismicUserProfile> {\n\t\tconst authenticationToken = await this.getAuthenticationToken();\n\n\t\treturn await this._getProfileForAuthenticationToken({\n\t\t\tauthenticationToken,\n\t\t});\n\t}\n\n\tprivate async _getProfileForAuthenticationToken(\n\t\targs: GetProfileForAuthenticationTokenArgs,\n\t): Promise<PrismicUserProfile> {\n\t\tconst url = new URL(\"./profile\", API_ENDPOINTS.PrismicUser);\n\t\tconst res = await fetch(url.toString(), {\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${args.authenticationToken}`,\n\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t},\n\t\t});\n\t\tconst json = await res.json();\n\n\t\tif (res.ok) {\n\t\t\tconst { value: profile, error } = decode(PrismicUserProfile, json);\n\n\t\t\tif (error) {\n\t\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t\t\"Received invalid data from the Prismic user service.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn profile;\n\t\t} else {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Failed to retrieve profile from the Prismic user service.\",\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async _readPersistedAuthState(): Promise<PrismicAuthState> {\n\t\tconst authStateFilePath = this._getPersistedAuthStateFilePath();\n\n\t\tlet authStateFileContents: string = JSON.stringify({});\n\t\tlet rawAuthState: Record<string, unknown> = {};\n\n\t\ttry {\n\t\t\tauthStateFileContents = await fs.readFile(authStateFilePath, \"utf8\");\n\t\t\trawAuthState = JSON.parse(authStateFileContents);\n\t\t} catch {\n\t\t\t// Write a default persisted state if it doesn't already exist.\n\n\t\t\trawAuthState = {\n\t\t\t\t...DEFAULT_PERSISTED_AUTH_STATE,\n\t\t\t\tcookies: serializeCookies(DEFAULT_PERSISTED_AUTH_STATE.cookies),\n\t\t\t};\n\t\t\tauthStateFileContents = JSON.stringify(rawAuthState, null, \"\\t\");\n\n\t\t\tawait fs.mkdir(path.dirname(authStateFilePath), { recursive: true });\n\t\t\tawait fs.writeFile(authStateFilePath, authStateFileContents);\n\t\t}\n\n\t\t// Decode cookies into a record for convenience.\n\t\tif (typeof rawAuthState.cookies === \"string\") {\n\t\t\trawAuthState.cookies = parseCookies(rawAuthState.cookies);\n\t\t}\n\n\t\tconst { value: authState, error } = decode(PrismicAuthState, rawAuthState);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\"Prismic authentication state is invalid.\");\n\t\t}\n\n\t\treturn authState;\n\t}\n\n\tprivate async _writePersistedAuthState(\n\t\tauthState: PrismicAuthState,\n\t): Promise<void> {\n\t\tconst authStateFilePath = this._getPersistedAuthStateFilePath();\n\n\t\tconst preparedAuthState = {\n\t\t\t...authState,\n\t\t\tcookies: serializeCookies(authState.cookies),\n\t\t};\n\n\t\ttry {\n\t\t\tawait fs.writeFile(\n\t\t\t\tauthStateFilePath,\n\t\t\t\tJSON.stringify(preparedAuthState, null, 2),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Failed to write Prismic authentication state to the file system.\",\n\t\t\t\t{\n\t\t\t\t\tcause: error,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate _getPersistedAuthStateFilePath(): string {\n\t\treturn path.resolve(this.scopedDirectory, PERSISTED_AUTH_STATE_FILE_NAME);\n\t}\n}\n"],"names":["t","os","API_ENDPOINTS","getPort","h3","createPrismicAuthManagerMiddleware","http","resolve","fetch","SLICE_MACHINE_USER_AGENT","InternalError","UnauthenticatedError","decode","UnexpectedDataError","fs","serializeCookies","path"],"mappings":"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"}
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import * as t from "io-ts";
|
|
2
|
-
declare const AUTH_COOKIE_KEY = "prismic-auth";
|
|
3
|
-
declare const SESSION_COOKIE_KEY = "SESSION";
|
|
4
|
-
declare const PrismicAuthState: t.IntersectionC<[t.TypeC<{
|
|
5
|
-
base: t.StringC;
|
|
6
|
-
cookies: t.IntersectionC<[t.PartialC<{
|
|
7
|
-
"prismic-auth": t.StringC;
|
|
8
|
-
SESSION: t.StringC;
|
|
9
|
-
}>, t.RecordC<t.StringC, t.StringC>]>;
|
|
10
|
-
}>, t.PartialC<{
|
|
11
|
-
shortId: t.StringC;
|
|
12
|
-
intercomHash: t.StringC;
|
|
13
|
-
oauthAccessToken: t.StringC;
|
|
14
|
-
authUrl: t.StringC;
|
|
15
|
-
}>]>;
|
|
16
|
-
export type PrismicAuthState = t.TypeOf<typeof PrismicAuthState>;
|
|
17
|
-
declare const PrismicUserProfile: t.ExactC<t.TypeC<{
|
|
18
|
-
userId: t.StringC;
|
|
19
|
-
shortId: t.StringC;
|
|
20
|
-
intercomHash: t.StringC;
|
|
21
|
-
email: t.StringC;
|
|
22
|
-
firstName: t.StringC;
|
|
23
|
-
lastName: t.StringC;
|
|
24
|
-
}>>;
|
|
25
|
-
export type PrismicUserProfile = t.TypeOf<typeof PrismicUserProfile>;
|
|
26
|
-
type PrismicAuthManagerConstructorArgs = {
|
|
27
|
-
scopedDirectory?: string;
|
|
28
|
-
};
|
|
29
|
-
type PrismicAuthManagerLoginArgs = {
|
|
30
|
-
email: string;
|
|
31
|
-
cookies: string[];
|
|
32
|
-
};
|
|
33
|
-
type PrismicAuthManagerGetLoginSessionInfoReturnType = {
|
|
34
|
-
port: number;
|
|
35
|
-
url: string;
|
|
36
|
-
};
|
|
37
|
-
type PrismicAuthManagerNodeLoginSessionArgs = {
|
|
38
|
-
port: number;
|
|
39
|
-
onListenCallback?: () => void;
|
|
40
|
-
};
|
|
41
|
-
export declare class PrismicAuthManager {
|
|
42
|
-
scopedDirectory: string;
|
|
43
|
-
constructor({ scopedDirectory, }?: PrismicAuthManagerConstructorArgs);
|
|
44
|
-
login(args: PrismicAuthManagerLoginArgs): Promise<void>;
|
|
45
|
-
getLoginSessionInfo(): Promise<PrismicAuthManagerGetLoginSessionInfoReturnType>;
|
|
46
|
-
nodeLoginSession(args: PrismicAuthManagerNodeLoginSessionArgs): Promise<void>;
|
|
47
|
-
logout(): Promise<void>;
|
|
48
|
-
checkIsLoggedIn(): Promise<boolean>;
|
|
49
|
-
getAuthenticationCookies(): Promise<PrismicAuthState["cookies"] & Required<Pick<PrismicAuthState["cookies"], typeof AUTH_COOKIE_KEY | typeof SESSION_COOKIE_KEY>>>;
|
|
50
|
-
getAuthenticationToken(): Promise<string>;
|
|
51
|
-
refreshAuthenticationToken(): Promise<void>;
|
|
52
|
-
getProfile(): Promise<PrismicUserProfile>;
|
|
53
|
-
private _getProfileForAuthenticationToken;
|
|
54
|
-
private _readPersistedAuthState;
|
|
55
|
-
private _writePersistedAuthState;
|
|
56
|
-
private _getPersistedAuthStateFilePath;
|
|
57
|
-
}
|
|
58
|
-
export {};
|
|
1
|
+
import * as t from "io-ts";
|
|
2
|
+
declare const AUTH_COOKIE_KEY = "prismic-auth";
|
|
3
|
+
declare const SESSION_COOKIE_KEY = "SESSION";
|
|
4
|
+
declare const PrismicAuthState: t.IntersectionC<[t.TypeC<{
|
|
5
|
+
base: t.StringC;
|
|
6
|
+
cookies: t.IntersectionC<[t.PartialC<{
|
|
7
|
+
"prismic-auth": t.StringC;
|
|
8
|
+
SESSION: t.StringC;
|
|
9
|
+
}>, t.RecordC<t.StringC, t.StringC>]>;
|
|
10
|
+
}>, t.PartialC<{
|
|
11
|
+
shortId: t.StringC;
|
|
12
|
+
intercomHash: t.StringC;
|
|
13
|
+
oauthAccessToken: t.StringC;
|
|
14
|
+
authUrl: t.StringC;
|
|
15
|
+
}>]>;
|
|
16
|
+
export type PrismicAuthState = t.TypeOf<typeof PrismicAuthState>;
|
|
17
|
+
declare const PrismicUserProfile: t.ExactC<t.TypeC<{
|
|
18
|
+
userId: t.StringC;
|
|
19
|
+
shortId: t.StringC;
|
|
20
|
+
intercomHash: t.StringC;
|
|
21
|
+
email: t.StringC;
|
|
22
|
+
firstName: t.StringC;
|
|
23
|
+
lastName: t.StringC;
|
|
24
|
+
}>>;
|
|
25
|
+
export type PrismicUserProfile = t.TypeOf<typeof PrismicUserProfile>;
|
|
26
|
+
type PrismicAuthManagerConstructorArgs = {
|
|
27
|
+
scopedDirectory?: string;
|
|
28
|
+
};
|
|
29
|
+
type PrismicAuthManagerLoginArgs = {
|
|
30
|
+
email: string;
|
|
31
|
+
cookies: string[];
|
|
32
|
+
};
|
|
33
|
+
type PrismicAuthManagerGetLoginSessionInfoReturnType = {
|
|
34
|
+
port: number;
|
|
35
|
+
url: string;
|
|
36
|
+
};
|
|
37
|
+
type PrismicAuthManagerNodeLoginSessionArgs = {
|
|
38
|
+
port: number;
|
|
39
|
+
onListenCallback?: () => void;
|
|
40
|
+
};
|
|
41
|
+
export declare class PrismicAuthManager {
|
|
42
|
+
scopedDirectory: string;
|
|
43
|
+
constructor({ scopedDirectory, }?: PrismicAuthManagerConstructorArgs);
|
|
44
|
+
login(args: PrismicAuthManagerLoginArgs): Promise<void>;
|
|
45
|
+
getLoginSessionInfo(): Promise<PrismicAuthManagerGetLoginSessionInfoReturnType>;
|
|
46
|
+
nodeLoginSession(args: PrismicAuthManagerNodeLoginSessionArgs): Promise<void>;
|
|
47
|
+
logout(): Promise<void>;
|
|
48
|
+
checkIsLoggedIn(): Promise<boolean>;
|
|
49
|
+
getAuthenticationCookies(): Promise<PrismicAuthState["cookies"] & Required<Pick<PrismicAuthState["cookies"], typeof AUTH_COOKIE_KEY | typeof SESSION_COOKIE_KEY>>>;
|
|
50
|
+
getAuthenticationToken(): Promise<string>;
|
|
51
|
+
refreshAuthenticationToken(): Promise<void>;
|
|
52
|
+
getProfile(): Promise<PrismicUserProfile>;
|
|
53
|
+
private _getProfileForAuthenticationToken;
|
|
54
|
+
private _readPersistedAuthState;
|
|
55
|
+
private _writePersistedAuthState;
|
|
56
|
+
private _getPersistedAuthStateFilePath;
|
|
57
|
+
}
|
|
58
|
+
export {};
|
|
@@ -218,19 +218,20 @@ class PrismicAuthManager {
|
|
|
218
218
|
async _readPersistedAuthState() {
|
|
219
219
|
const authStateFilePath = this._getPersistedAuthStateFilePath();
|
|
220
220
|
let authStateFileContents = JSON.stringify({});
|
|
221
|
+
let rawAuthState = {};
|
|
221
222
|
try {
|
|
222
223
|
authStateFileContents = await fs.readFile(authStateFilePath, "utf8");
|
|
224
|
+
rawAuthState = JSON.parse(authStateFileContents);
|
|
223
225
|
} catch {
|
|
224
|
-
|
|
226
|
+
rawAuthState = {
|
|
225
227
|
...DEFAULT_PERSISTED_AUTH_STATE,
|
|
226
228
|
cookies: serializeCookies(DEFAULT_PERSISTED_AUTH_STATE.cookies)
|
|
227
229
|
};
|
|
228
|
-
authStateFileContents = JSON.stringify(
|
|
230
|
+
authStateFileContents = JSON.stringify(rawAuthState, null, " ");
|
|
229
231
|
await fs.mkdir(path.dirname(authStateFilePath), { recursive: true });
|
|
230
232
|
await fs.writeFile(authStateFilePath, authStateFileContents);
|
|
231
233
|
}
|
|
232
|
-
|
|
233
|
-
if ("cookies" in rawAuthState) {
|
|
234
|
+
if (typeof rawAuthState.cookies === "string") {
|
|
234
235
|
rawAuthState.cookies = parseCookies(rawAuthState.cookies);
|
|
235
236
|
}
|
|
236
237
|
const { value: authState, error } = decode(PrismicAuthState, rawAuthState);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrismicAuthManager.js","sources":["../../../src/auth/PrismicAuthManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport * as http from \"node:http\";\n\nimport * as h3 from \"h3\";\nimport fetch from \"node-fetch\";\nimport cookie from \"cookie\";\nimport cors from \"cors\";\nimport getPort from \"get-port\";\n\nimport { decode } from \"../lib/decode\";\nimport { serializeCookies } from \"../lib/serializeCookies\";\n\nimport { API_ENDPOINTS } from \"../constants/API_ENDPOINTS\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../constants/SLICE_MACHINE_USER_AGENT\";\nimport { createPrismicAuthManagerMiddleware } from \"./createPrismicAuthManagerMiddleware\";\nimport {\n\tInternalError,\n\tUnauthenticatedError,\n\tUnexpectedDataError,\n} from \"../errors\";\n\nconst COOKIE_SEPARATOR = \"; \";\nconst AUTH_COOKIE_KEY = \"prismic-auth\";\nconst SESSION_COOKIE_KEY = \"SESSION\";\n\nconst PERSISTED_AUTH_STATE_FILE_NAME = \".prismic\";\nconst DEFAULT_PERSISTED_AUTH_STATE: PrismicAuthState = {\n\tbase: \"https://prismic.io\",\n\tcookies: {},\n};\n\nconst PrismicAuthState = t.intersection([\n\tt.type({\n\t\tbase: t.string,\n\t\tcookies: t.intersection([\n\t\t\tt.partial({\n\t\t\t\t[AUTH_COOKIE_KEY]: t.string,\n\t\t\t\tSESSION: t.string,\n\t\t\t}),\n\t\t\tt.record(t.string, t.string),\n\t\t]),\n\t}),\n\tt.partial({\n\t\tshortId: t.string,\n\t\tintercomHash: t.string,\n\t\toauthAccessToken: t.string,\n\t\tauthUrl: t.string,\n\t}),\n]);\nexport type PrismicAuthState = t.TypeOf<typeof PrismicAuthState>;\n\nconst PrismicUserProfile = t.exact(\n\tt.type({\n\t\tuserId: t.string,\n\t\tshortId: t.string,\n\t\tintercomHash: t.string,\n\t\temail: t.string,\n\t\tfirstName: t.string,\n\t\tlastName: t.string,\n\t}),\n);\nexport type PrismicUserProfile = t.TypeOf<typeof PrismicUserProfile>;\n\ntype PrismicAuthManagerConstructorArgs = {\n\tscopedDirectory?: string;\n};\n\ntype PrismicAuthManagerLoginArgs = {\n\temail: string;\n\tcookies: string[];\n};\n\ntype PrismicAuthManagerGetLoginSessionInfoReturnType = {\n\tport: number;\n\turl: string;\n};\n\ntype PrismicAuthManagerNodeLoginSessionArgs = {\n\tport: number;\n\tonListenCallback?: () => void;\n};\n\ntype GetProfileForAuthenticationTokenArgs = {\n\tauthenticationToken: string;\n};\n\nconst checkHasAuthenticationToken = (\n\tauthState: PrismicAuthState,\n): authState is PrismicAuthState & {\n\tcookies: Required<\n\t\tPick<\n\t\t\tPrismicAuthState[\"cookies\"],\n\t\t\ttypeof AUTH_COOKIE_KEY | typeof SESSION_COOKIE_KEY\n\t\t>\n\t>;\n} => {\n\treturn Boolean(\n\t\tauthState.cookies[AUTH_COOKIE_KEY] && authState.cookies[SESSION_COOKIE_KEY],\n\t);\n};\n\nconst parseCookies = (cookies: string): Record<string, string> => {\n\treturn cookie.parse(cookies, {\n\t\t// Don't escape any values.\n\t\tdecode: (value) => value,\n\t});\n};\n\nexport class PrismicAuthManager {\n\t// TODO: Automatically scope the manager to the current Slice Machine\n\t// project? If not, this internal state can be removed.\n\tscopedDirectory: string;\n\n\tconstructor({\n\t\tscopedDirectory = os.homedir(),\n\t}: PrismicAuthManagerConstructorArgs = {}) {\n\t\tthis.scopedDirectory = scopedDirectory;\n\t}\n\n\t// TODO: Make the `cookies` argument more explicit. What are these\n\t// mysterious cookies?\n\tasync login(args: PrismicAuthManagerLoginArgs): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t// Set the auth's URL base to the current base at runtime.\n\t\tauthState.base = API_ENDPOINTS.PrismicWroom;\n\t\tauthState.cookies = {\n\t\t\t...authState.cookies,\n\t\t\t...parseCookies(args.cookies.join(COOKIE_SEPARATOR)),\n\t\t};\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst authenticationToken = authState.cookies[AUTH_COOKIE_KEY];\n\t\t\tconst profile = await this._getProfileForAuthenticationToken({\n\t\t\t\tauthenticationToken,\n\t\t\t});\n\n\t\t\tauthState.shortId = profile.shortId;\n\t\t\tauthState.intercomHash = profile.intercomHash;\n\t\t}\n\n\t\tawait this._writePersistedAuthState(authState);\n\t}\n\n\tasync getLoginSessionInfo(): Promise<PrismicAuthManagerGetLoginSessionInfoReturnType> {\n\t\t// Pick a random port, with a preference for historic `5555`\n\t\tconst port = await getPort({ port: 5555 });\n\n\t\tconst url = new URL(\n\t\t\t`./dashboard/cli/login?source=slice-machine&port=${port}`,\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t).toString();\n\n\t\treturn {\n\t\t\tport,\n\t\t\turl,\n\t\t};\n\t}\n\n\tasync nodeLoginSession(\n\t\targs: PrismicAuthManagerNodeLoginSessionArgs,\n\t): Promise<void> {\n\t\treturn new Promise<void>(async (resolve) => {\n\t\t\t// Timeout attempt after 3 minutes\n\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\tserver.close();\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Login timeout, server did not receive a response within a 3-minute delay\",\n\t\t\t\t);\n\t\t\t}, 180_000);\n\n\t\t\tconst app = h3.createApp();\n\t\t\tapp.use(h3.fromNodeMiddleware(cors()));\n\t\t\tapp.use(\n\t\t\t\th3.fromNodeMiddleware(\n\t\t\t\t\tcreatePrismicAuthManagerMiddleware({\n\t\t\t\t\t\tprismicAuthManager: this,\n\t\t\t\t\t\tonLoginCallback() {\n\t\t\t\t\t\t\t// Cleanup process and resolve\n\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\tserver.close();\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\t// Start server\n\t\t\tconst server = http.createServer(h3.toNodeListener(app));\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tserver.once(\"listening\", () => {\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t\tserver.listen(args.port);\n\t\t\t});\n\n\t\t\tif (args.onListenCallback) {\n\t\t\t\targs.onListenCallback();\n\t\t\t}\n\t\t});\n\t}\n\n\tasync logout(): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t// Remove all Prismic cookies, short ID, and Intercom hash\n\t\t// associated with the currently logged in user.\n\t\tauthState.cookies = {};\n\t\tauthState.shortId = undefined;\n\t\tauthState.intercomHash = undefined;\n\n\t\tawait this._writePersistedAuthState(authState);\n\t}\n\n\tasync checkIsLoggedIn(): Promise<boolean> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst url = new URL(\"./validate\", API_ENDPOINTS.PrismicAuthentication);\n\t\t\turl.searchParams.set(\"token\", authState.cookies[AUTH_COOKIE_KEY]);\n\n\t\t\tlet res;\n\t\t\ttry {\n\t\t\t\tres = await fetch(url.toString(), {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// Noop, we return if `res` is not defined.\n\t\t\t}\n\n\t\t\tif (!res || !res.ok) {\n\t\t\t\tawait this.logout();\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync getAuthenticationCookies(): Promise<\n\t\tPrismicAuthState[\"cookies\"] &\n\t\t\tRequired<\n\t\t\t\tPick<\n\t\t\t\t\tPrismicAuthState[\"cookies\"],\n\t\t\t\t\ttypeof AUTH_COOKIE_KEY | typeof SESSION_COOKIE_KEY\n\t\t\t\t>\n\t\t\t>\n\t> {\n\t\tconst isLoggedIn = await this.checkIsLoggedIn();\n\n\t\tif (isLoggedIn) {\n\t\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\t\treturn authState.cookies;\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Not logged in.\");\n\t}\n\n\tasync getAuthenticationToken(): Promise<string> {\n\t\tconst cookies = await this.getAuthenticationCookies();\n\n\t\treturn cookies[AUTH_COOKIE_KEY];\n\t}\n\n\tasync refreshAuthenticationToken(): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst url = new URL(\n\t\t\t\t\"./refreshtoken\",\n\t\t\t\tAPI_ENDPOINTS.PrismicAuthentication,\n\t\t\t);\n\t\t\turl.searchParams.set(\"token\", authState.cookies[AUTH_COOKIE_KEY]);\n\n\t\t\tconst res = await fetch(url.toString(), {\n\t\t\t\theaders: {\n\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst text = await res.text();\n\n\t\t\tif (res.ok) {\n\t\t\t\tauthState.cookies[AUTH_COOKIE_KEY] = text;\n\n\t\t\t\tawait this._writePersistedAuthState(authState);\n\t\t\t} else {\n\t\t\t\tthrow new InternalError(\"Failed to refresh authentication token.\");\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new UnauthenticatedError();\n\t\t}\n\t}\n\n\tasync getProfile(): Promise<PrismicUserProfile> {\n\t\tconst authenticationToken = await this.getAuthenticationToken();\n\n\t\treturn await this._getProfileForAuthenticationToken({\n\t\t\tauthenticationToken,\n\t\t});\n\t}\n\n\tprivate async _getProfileForAuthenticationToken(\n\t\targs: GetProfileForAuthenticationTokenArgs,\n\t): Promise<PrismicUserProfile> {\n\t\tconst url = new URL(\"./profile\", API_ENDPOINTS.PrismicUser);\n\t\tconst res = await fetch(url.toString(), {\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${args.authenticationToken}`,\n\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t},\n\t\t});\n\t\tconst json = await res.json();\n\n\t\tif (res.ok) {\n\t\t\tconst { value: profile, error } = decode(PrismicUserProfile, json);\n\n\t\t\tif (error) {\n\t\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t\t\"Received invalid data from the Prismic user service.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn profile;\n\t\t} else {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Failed to retrieve profile from the Prismic user service.\",\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async _readPersistedAuthState(): Promise<PrismicAuthState> {\n\t\tconst authStateFilePath = this._getPersistedAuthStateFilePath();\n\n\t\tlet authStateFileContents: string = JSON.stringify({});\n\n\t\ttry {\n\t\t\tauthStateFileContents = await fs.readFile(authStateFilePath, \"utf8\");\n\t\t} catch {\n\t\t\t// Write a default persisted state if it doesn't already exist.\n\n\t\t\tconst defaultStateFileContents = {\n\t\t\t\t...DEFAULT_PERSISTED_AUTH_STATE,\n\t\t\t\tcookies: serializeCookies(DEFAULT_PERSISTED_AUTH_STATE.cookies),\n\t\t\t};\n\t\t\tauthStateFileContents = JSON.stringify(\n\t\t\t\tdefaultStateFileContents,\n\t\t\t\tnull,\n\t\t\t\t\"\\t\",\n\t\t\t);\n\n\t\t\tawait fs.mkdir(path.dirname(authStateFilePath), { recursive: true });\n\t\t\tawait fs.writeFile(authStateFilePath, authStateFileContents);\n\t\t}\n\n\t\tconst rawAuthState = JSON.parse(authStateFileContents);\n\n\t\t// Decode cookies into a record for convenience.\n\t\tif (\"cookies\" in rawAuthState) {\n\t\t\trawAuthState.cookies = parseCookies(rawAuthState.cookies);\n\t\t}\n\n\t\tconst { value: authState, error } = decode(PrismicAuthState, rawAuthState);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\"Prismic authentication state is invalid.\");\n\t\t}\n\n\t\treturn authState;\n\t}\n\n\tprivate async _writePersistedAuthState(\n\t\tauthState: PrismicAuthState,\n\t): Promise<void> {\n\t\tconst authStateFilePath = this._getPersistedAuthStateFilePath();\n\n\t\tconst preparedAuthState = {\n\t\t\t...authState,\n\t\t\tcookies: serializeCookies(authState.cookies),\n\t\t};\n\n\t\ttry {\n\t\t\tawait fs.writeFile(\n\t\t\t\tauthStateFilePath,\n\t\t\t\tJSON.stringify(preparedAuthState, null, 2),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Failed to write Prismic authentication state to the file system.\",\n\t\t\t\t{\n\t\t\t\t\tcause: error,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate _getPersistedAuthStateFilePath(): string {\n\t\treturn path.resolve(this.scopedDirectory, PERSISTED_AUTH_STATE_FILE_NAME);\n\t}\n}\n"],"names":["getPort","resolve"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PrismicAuthManager.js","sources":["../../../src/auth/PrismicAuthManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport * as http from \"node:http\";\n\nimport * as h3 from \"h3\";\nimport fetch from \"node-fetch\";\nimport cookie from \"cookie\";\nimport cors from \"cors\";\nimport getPort from \"get-port\";\n\nimport { decode } from \"../lib/decode\";\nimport { serializeCookies } from \"../lib/serializeCookies\";\n\nimport { API_ENDPOINTS } from \"../constants/API_ENDPOINTS\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../constants/SLICE_MACHINE_USER_AGENT\";\nimport { createPrismicAuthManagerMiddleware } from \"./createPrismicAuthManagerMiddleware\";\nimport {\n\tInternalError,\n\tUnauthenticatedError,\n\tUnexpectedDataError,\n} from \"../errors\";\n\nconst COOKIE_SEPARATOR = \"; \";\nconst AUTH_COOKIE_KEY = \"prismic-auth\";\nconst SESSION_COOKIE_KEY = \"SESSION\";\n\nconst PERSISTED_AUTH_STATE_FILE_NAME = \".prismic\";\nconst DEFAULT_PERSISTED_AUTH_STATE: PrismicAuthState = {\n\tbase: \"https://prismic.io\",\n\tcookies: {},\n};\n\nconst PrismicAuthState = t.intersection([\n\tt.type({\n\t\tbase: t.string,\n\t\tcookies: t.intersection([\n\t\t\tt.partial({\n\t\t\t\t[AUTH_COOKIE_KEY]: t.string,\n\t\t\t\tSESSION: t.string,\n\t\t\t}),\n\t\t\tt.record(t.string, t.string),\n\t\t]),\n\t}),\n\tt.partial({\n\t\tshortId: t.string,\n\t\tintercomHash: t.string,\n\t\toauthAccessToken: t.string,\n\t\tauthUrl: t.string,\n\t}),\n]);\nexport type PrismicAuthState = t.TypeOf<typeof PrismicAuthState>;\n\nconst PrismicUserProfile = t.exact(\n\tt.type({\n\t\tuserId: t.string,\n\t\tshortId: t.string,\n\t\tintercomHash: t.string,\n\t\temail: t.string,\n\t\tfirstName: t.string,\n\t\tlastName: t.string,\n\t}),\n);\nexport type PrismicUserProfile = t.TypeOf<typeof PrismicUserProfile>;\n\ntype PrismicAuthManagerConstructorArgs = {\n\tscopedDirectory?: string;\n};\n\ntype PrismicAuthManagerLoginArgs = {\n\temail: string;\n\tcookies: string[];\n};\n\ntype PrismicAuthManagerGetLoginSessionInfoReturnType = {\n\tport: number;\n\turl: string;\n};\n\ntype PrismicAuthManagerNodeLoginSessionArgs = {\n\tport: number;\n\tonListenCallback?: () => void;\n};\n\ntype GetProfileForAuthenticationTokenArgs = {\n\tauthenticationToken: string;\n};\n\nconst checkHasAuthenticationToken = (\n\tauthState: PrismicAuthState,\n): authState is PrismicAuthState & {\n\tcookies: Required<\n\t\tPick<\n\t\t\tPrismicAuthState[\"cookies\"],\n\t\t\ttypeof AUTH_COOKIE_KEY | typeof SESSION_COOKIE_KEY\n\t\t>\n\t>;\n} => {\n\treturn Boolean(\n\t\tauthState.cookies[AUTH_COOKIE_KEY] && authState.cookies[SESSION_COOKIE_KEY],\n\t);\n};\n\nconst parseCookies = (cookies: string): Record<string, string> => {\n\treturn cookie.parse(cookies, {\n\t\t// Don't escape any values.\n\t\tdecode: (value) => value,\n\t});\n};\n\nexport class PrismicAuthManager {\n\t// TODO: Automatically scope the manager to the current Slice Machine\n\t// project? If not, this internal state can be removed.\n\tscopedDirectory: string;\n\n\tconstructor({\n\t\tscopedDirectory = os.homedir(),\n\t}: PrismicAuthManagerConstructorArgs = {}) {\n\t\tthis.scopedDirectory = scopedDirectory;\n\t}\n\n\t// TODO: Make the `cookies` argument more explicit. What are these\n\t// mysterious cookies?\n\tasync login(args: PrismicAuthManagerLoginArgs): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t// Set the auth's URL base to the current base at runtime.\n\t\tauthState.base = API_ENDPOINTS.PrismicWroom;\n\t\tauthState.cookies = {\n\t\t\t...authState.cookies,\n\t\t\t...parseCookies(args.cookies.join(COOKIE_SEPARATOR)),\n\t\t};\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst authenticationToken = authState.cookies[AUTH_COOKIE_KEY];\n\t\t\tconst profile = await this._getProfileForAuthenticationToken({\n\t\t\t\tauthenticationToken,\n\t\t\t});\n\n\t\t\tauthState.shortId = profile.shortId;\n\t\t\tauthState.intercomHash = profile.intercomHash;\n\t\t}\n\n\t\tawait this._writePersistedAuthState(authState);\n\t}\n\n\tasync getLoginSessionInfo(): Promise<PrismicAuthManagerGetLoginSessionInfoReturnType> {\n\t\t// Pick a random port, with a preference for historic `5555`\n\t\tconst port = await getPort({ port: 5555 });\n\n\t\tconst url = new URL(\n\t\t\t`./dashboard/cli/login?source=slice-machine&port=${port}`,\n\t\t\tAPI_ENDPOINTS.PrismicWroom,\n\t\t).toString();\n\n\t\treturn {\n\t\t\tport,\n\t\t\turl,\n\t\t};\n\t}\n\n\tasync nodeLoginSession(\n\t\targs: PrismicAuthManagerNodeLoginSessionArgs,\n\t): Promise<void> {\n\t\treturn new Promise<void>(async (resolve) => {\n\t\t\t// Timeout attempt after 3 minutes\n\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\tserver.close();\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Login timeout, server did not receive a response within a 3-minute delay\",\n\t\t\t\t);\n\t\t\t}, 180_000);\n\n\t\t\tconst app = h3.createApp();\n\t\t\tapp.use(h3.fromNodeMiddleware(cors()));\n\t\t\tapp.use(\n\t\t\t\th3.fromNodeMiddleware(\n\t\t\t\t\tcreatePrismicAuthManagerMiddleware({\n\t\t\t\t\t\tprismicAuthManager: this,\n\t\t\t\t\t\tonLoginCallback() {\n\t\t\t\t\t\t\t// Cleanup process and resolve\n\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\tserver.close();\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\t// Start server\n\t\t\tconst server = http.createServer(h3.toNodeListener(app));\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tserver.once(\"listening\", () => {\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t\tserver.listen(args.port);\n\t\t\t});\n\n\t\t\tif (args.onListenCallback) {\n\t\t\t\targs.onListenCallback();\n\t\t\t}\n\t\t});\n\t}\n\n\tasync logout(): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t// Remove all Prismic cookies, short ID, and Intercom hash\n\t\t// associated with the currently logged in user.\n\t\tauthState.cookies = {};\n\t\tauthState.shortId = undefined;\n\t\tauthState.intercomHash = undefined;\n\n\t\tawait this._writePersistedAuthState(authState);\n\t}\n\n\tasync checkIsLoggedIn(): Promise<boolean> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst url = new URL(\"./validate\", API_ENDPOINTS.PrismicAuthentication);\n\t\t\turl.searchParams.set(\"token\", authState.cookies[AUTH_COOKIE_KEY]);\n\n\t\t\tlet res;\n\t\t\ttry {\n\t\t\t\tres = await fetch(url.toString(), {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// Noop, we return if `res` is not defined.\n\t\t\t}\n\n\t\t\tif (!res || !res.ok) {\n\t\t\t\tawait this.logout();\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync getAuthenticationCookies(): Promise<\n\t\tPrismicAuthState[\"cookies\"] &\n\t\t\tRequired<\n\t\t\t\tPick<\n\t\t\t\t\tPrismicAuthState[\"cookies\"],\n\t\t\t\t\ttypeof AUTH_COOKIE_KEY | typeof SESSION_COOKIE_KEY\n\t\t\t\t>\n\t\t\t>\n\t> {\n\t\tconst isLoggedIn = await this.checkIsLoggedIn();\n\n\t\tif (isLoggedIn) {\n\t\t\tconst authState = await this._readPersistedAuthState();\n\n\t\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\t\treturn authState.cookies;\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Not logged in.\");\n\t}\n\n\tasync getAuthenticationToken(): Promise<string> {\n\t\tconst cookies = await this.getAuthenticationCookies();\n\n\t\treturn cookies[AUTH_COOKIE_KEY];\n\t}\n\n\tasync refreshAuthenticationToken(): Promise<void> {\n\t\tconst authState = await this._readPersistedAuthState();\n\n\t\tif (checkHasAuthenticationToken(authState)) {\n\t\t\tconst url = new URL(\n\t\t\t\t\"./refreshtoken\",\n\t\t\t\tAPI_ENDPOINTS.PrismicAuthentication,\n\t\t\t);\n\t\t\turl.searchParams.set(\"token\", authState.cookies[AUTH_COOKIE_KEY]);\n\n\t\t\tconst res = await fetch(url.toString(), {\n\t\t\t\theaders: {\n\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst text = await res.text();\n\n\t\t\tif (res.ok) {\n\t\t\t\tauthState.cookies[AUTH_COOKIE_KEY] = text;\n\n\t\t\t\tawait this._writePersistedAuthState(authState);\n\t\t\t} else {\n\t\t\t\tthrow new InternalError(\"Failed to refresh authentication token.\");\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new UnauthenticatedError();\n\t\t}\n\t}\n\n\tasync getProfile(): Promise<PrismicUserProfile> {\n\t\tconst authenticationToken = await this.getAuthenticationToken();\n\n\t\treturn await this._getProfileForAuthenticationToken({\n\t\t\tauthenticationToken,\n\t\t});\n\t}\n\n\tprivate async _getProfileForAuthenticationToken(\n\t\targs: GetProfileForAuthenticationTokenArgs,\n\t): Promise<PrismicUserProfile> {\n\t\tconst url = new URL(\"./profile\", API_ENDPOINTS.PrismicUser);\n\t\tconst res = await fetch(url.toString(), {\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${args.authenticationToken}`,\n\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t},\n\t\t});\n\t\tconst json = await res.json();\n\n\t\tif (res.ok) {\n\t\t\tconst { value: profile, error } = decode(PrismicUserProfile, json);\n\n\t\t\tif (error) {\n\t\t\t\tthrow new UnexpectedDataError(\n\t\t\t\t\t\"Received invalid data from the Prismic user service.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn profile;\n\t\t} else {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Failed to retrieve profile from the Prismic user service.\",\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async _readPersistedAuthState(): Promise<PrismicAuthState> {\n\t\tconst authStateFilePath = this._getPersistedAuthStateFilePath();\n\n\t\tlet authStateFileContents: string = JSON.stringify({});\n\t\tlet rawAuthState: Record<string, unknown> = {};\n\n\t\ttry {\n\t\t\tauthStateFileContents = await fs.readFile(authStateFilePath, \"utf8\");\n\t\t\trawAuthState = JSON.parse(authStateFileContents);\n\t\t} catch {\n\t\t\t// Write a default persisted state if it doesn't already exist.\n\n\t\t\trawAuthState = {\n\t\t\t\t...DEFAULT_PERSISTED_AUTH_STATE,\n\t\t\t\tcookies: serializeCookies(DEFAULT_PERSISTED_AUTH_STATE.cookies),\n\t\t\t};\n\t\t\tauthStateFileContents = JSON.stringify(rawAuthState, null, \"\\t\");\n\n\t\t\tawait fs.mkdir(path.dirname(authStateFilePath), { recursive: true });\n\t\t\tawait fs.writeFile(authStateFilePath, authStateFileContents);\n\t\t}\n\n\t\t// Decode cookies into a record for convenience.\n\t\tif (typeof rawAuthState.cookies === \"string\") {\n\t\t\trawAuthState.cookies = parseCookies(rawAuthState.cookies);\n\t\t}\n\n\t\tconst { value: authState, error } = decode(PrismicAuthState, rawAuthState);\n\n\t\tif (error) {\n\t\t\tthrow new UnexpectedDataError(\"Prismic authentication state is invalid.\");\n\t\t}\n\n\t\treturn authState;\n\t}\n\n\tprivate async _writePersistedAuthState(\n\t\tauthState: PrismicAuthState,\n\t): Promise<void> {\n\t\tconst authStateFilePath = this._getPersistedAuthStateFilePath();\n\n\t\tconst preparedAuthState = {\n\t\t\t...authState,\n\t\t\tcookies: serializeCookies(authState.cookies),\n\t\t};\n\n\t\ttry {\n\t\t\tawait fs.writeFile(\n\t\t\t\tauthStateFilePath,\n\t\t\t\tJSON.stringify(preparedAuthState, null, 2),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Failed to write Prismic authentication state to the file system.\",\n\t\t\t\t{\n\t\t\t\t\tcause: error,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate _getPersistedAuthStateFilePath(): string {\n\t\treturn path.resolve(this.scopedDirectory, PERSISTED_AUTH_STATE_FILE_NAME);\n\t}\n}\n"],"names":["getPort","resolve"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PrismicAuthManager } from "./PrismicAuthManager";
|
|
2
|
-
type CreatePrismicAuthManager = ConstructorParameters<typeof PrismicAuthManager>[0];
|
|
3
|
-
export declare const createPrismicAuthManager: (args?: CreatePrismicAuthManager) => PrismicAuthManager;
|
|
4
|
-
export {};
|
|
1
|
+
import { PrismicAuthManager } from "./PrismicAuthManager";
|
|
2
|
+
type CreatePrismicAuthManager = ConstructorParameters<typeof PrismicAuthManager>[0];
|
|
3
|
+
export declare const createPrismicAuthManager: (args?: CreatePrismicAuthManager) => PrismicAuthManager;
|
|
4
|
+
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { NodeMiddleware } from "h3";
|
|
2
|
-
import { PrismicAuthManager } from "./PrismicAuthManager";
|
|
3
|
-
export type PrismicAuthCheckStatusResponse = {
|
|
4
|
-
status: "ok";
|
|
5
|
-
shortId: string;
|
|
6
|
-
intercomHash: string;
|
|
7
|
-
} | {
|
|
8
|
-
status: "pending";
|
|
9
|
-
};
|
|
10
|
-
export type CreatePrismicAuthManagerMiddlewareArgs = {
|
|
11
|
-
prismicAuthManager: PrismicAuthManager;
|
|
12
|
-
onLoginCallback?: () => void | Promise<void>;
|
|
13
|
-
};
|
|
14
|
-
export declare const createPrismicAuthManagerMiddleware: (args: CreatePrismicAuthManagerMiddlewareArgs) => NodeMiddleware;
|
|
1
|
+
import { NodeMiddleware } from "h3";
|
|
2
|
+
import { PrismicAuthManager } from "./PrismicAuthManager";
|
|
3
|
+
export type PrismicAuthCheckStatusResponse = {
|
|
4
|
+
status: "ok";
|
|
5
|
+
shortId: string;
|
|
6
|
+
intercomHash: string;
|
|
7
|
+
} | {
|
|
8
|
+
status: "pending";
|
|
9
|
+
};
|
|
10
|
+
export type CreatePrismicAuthManagerMiddlewareArgs = {
|
|
11
|
+
prismicAuthManager: PrismicAuthManager;
|
|
12
|
+
onLoginCallback?: () => void | Promise<void>;
|
|
13
|
+
};
|
|
14
|
+
export declare const createPrismicAuthManagerMiddleware: (args: CreatePrismicAuthManagerMiddlewareArgs) => NodeMiddleware;
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { createSliceMachineManagerClient } from "../managers/createSliceMachineManagerClient";
|
|
2
|
-
export type { CreateSliceMachineManagerClientArgs, SliceMachineManagerClient, } from "../managers/createSliceMachineManagerClient";
|
|
3
|
-
export type { SimulatorManagerReadSliceSimulatorSetupStep, SimulatorManagerReadSliceSimulatorSetupStepsReturnType, } from "../managers/simulator/SimulatorManager";
|
|
4
|
-
export type { SliceMachineManagerPushSliceReturnType } from "../managers/slices/SlicesManager";
|
|
5
|
-
export { InternalError, NotFoundError, SliceMachineError, UnauthenticatedError, UnauthorizedError, UnexpectedDataError, isInternalError, isNotFoundError, isSliceMachineError, isUnauthenticatedError, isUnauthorizedError, isUnexpectedDataError, } from "../errors";
|
|
6
|
-
export { DecodeError } from "../lib/DecodeError";
|
|
1
|
+
export { createSliceMachineManagerClient } from "../managers/createSliceMachineManagerClient";
|
|
2
|
+
export type { CreateSliceMachineManagerClientArgs, SliceMachineManagerClient, } from "../managers/createSliceMachineManagerClient";
|
|
3
|
+
export type { SimulatorManagerReadSliceSimulatorSetupStep, SimulatorManagerReadSliceSimulatorSetupStepsReturnType, } from "../managers/simulator/SimulatorManager";
|
|
4
|
+
export type { SliceMachineManagerPushSliceReturnType } from "../managers/slices/SlicesManager";
|
|
5
|
+
export { InternalError, NotFoundError, SliceMachineError, UnauthenticatedError, UnauthorizedError, UnexpectedDataError, isInternalError, isNotFoundError, isSliceMachineError, isUnauthenticatedError, isUnauthorizedError, isUnexpectedDataError, } from "../errors";
|
|
6
|
+
export { DecodeError } from "../lib/DecodeError";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export type APIEndpoints = {
|
|
2
|
-
PrismicWroom: string;
|
|
3
|
-
PrismicAuthentication: string;
|
|
4
|
-
PrismicModels: string;
|
|
5
|
-
PrismicUser: string;
|
|
6
|
-
AwsAclProvider: string;
|
|
7
|
-
};
|
|
8
|
-
export declare const API_ENDPOINTS: APIEndpoints;
|
|
1
|
+
export type APIEndpoints = {
|
|
2
|
+
PrismicWroom: string;
|
|
3
|
+
PrismicAuthentication: string;
|
|
4
|
+
PrismicModels: string;
|
|
5
|
+
PrismicUser: string;
|
|
6
|
+
AwsAclProvider: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const API_ENDPOINTS: APIEndpoints;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
type APITokens = {
|
|
2
|
-
SegmentKey: string;
|
|
3
|
-
};
|
|
4
|
-
export declare const API_TOKENS: APITokens;
|
|
5
|
-
export {};
|
|
1
|
+
type APITokens = {
|
|
2
|
+
SegmentKey: string;
|
|
3
|
+
};
|
|
4
|
+
export declare const API_TOKENS: APITokens;
|
|
5
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const APPLICATION_MODE: {
|
|
2
|
-
readonly Development: "development";
|
|
3
|
-
readonly Staging: "staging";
|
|
4
|
-
readonly Production: "production";
|
|
5
|
-
};
|
|
1
|
+
export declare const APPLICATION_MODE: {
|
|
2
|
+
readonly Development: "development";
|
|
3
|
+
readonly Staging: "staging";
|
|
4
|
+
readonly Production: "production";
|
|
5
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The default Slice screenshot URL used when a Slice does not have a local
|
|
3
|
-
* screenshot.
|
|
4
|
-
*/
|
|
5
|
-
export declare const DEFAULT_SLICE_SCREENSHOT_URL = "https://images.prismic.io/slice-machine/621a5ec4-0387-4bc5-9860-2dd46cbc07cd_default_ss.png?auto=compress,format";
|
|
1
|
+
/**
|
|
2
|
+
* The default Slice screenshot URL used when a Slice does not have a local
|
|
3
|
+
* screenshot.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEFAULT_SLICE_SCREENSHOT_URL = "https://images.prismic.io/slice-machine/621a5ec4-0387-4bc5-9860-2dd46cbc07cd_default_ss.png?auto=compress,format";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SLICE_MACHINE_CONFIG_FILENAME = "slicemachine.config.json";
|
|
1
|
+
export declare const SLICE_MACHINE_CONFIG_FILENAME = "slicemachine.config.json";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SLICE_MACHINE_GITHUB_PACKAGE_NAME = "slice-machine-ui";
|
|
1
|
+
export declare const SLICE_MACHINE_GITHUB_PACKAGE_NAME = "slice-machine-ui";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SLICE_MACHINE_GITHUB_REPOSITORY_NAME = "slice-machine";
|
|
1
|
+
export declare const SLICE_MACHINE_GITHUB_REPOSITORY_NAME = "slice-machine";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION = "prismicio";
|
|
1
|
+
export declare const SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION = "prismicio";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SLICE_MACHINE_NPM_PACKAGE_NAME = "slice-machine-ui";
|
|
1
|
+
export declare const SLICE_MACHINE_NPM_PACKAGE_NAME = "slice-machine-ui";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SLICE_MACHINE_USER_AGENT = "slice-machine";
|
|
1
|
+
export declare const SLICE_MACHINE_USER_AGENT = "slice-machine";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const TS_CONFIG_FILENAME = "tsconfig.json";
|
|
1
|
+
export declare const TS_CONFIG_FILENAME = "tsconfig.json";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export declare const VERSION_KIND: {
|
|
2
|
-
readonly MAJOR: "MAJOR";
|
|
3
|
-
readonly MINOR: "MINOR";
|
|
4
|
-
readonly PATCH: "PATCH";
|
|
5
|
-
readonly FIRST: "FIRST";
|
|
6
|
-
};
|
|
1
|
+
export declare const VERSION_KIND: {
|
|
2
|
+
readonly MAJOR: "MAJOR";
|
|
3
|
+
readonly MINOR: "MINOR";
|
|
4
|
+
readonly PATCH: "PATCH";
|
|
5
|
+
readonly FIRST: "FIRST";
|
|
6
|
+
};
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { HookError } from "@slicemachine/plugin-kit";
|
|
2
|
-
export declare class SliceMachineError extends Error {
|
|
3
|
-
_sliceMachineError: boolean;
|
|
4
|
-
name: string;
|
|
5
|
-
}
|
|
6
|
-
export declare class UnauthorizedError extends SliceMachineError {
|
|
7
|
-
name: string;
|
|
8
|
-
}
|
|
9
|
-
export declare class UnauthenticatedError extends SliceMachineError {
|
|
10
|
-
name: string;
|
|
11
|
-
message: string;
|
|
12
|
-
}
|
|
13
|
-
export declare class NotFoundError extends SliceMachineError {
|
|
14
|
-
name: string;
|
|
15
|
-
}
|
|
16
|
-
export declare class UnexpectedDataError extends SliceMachineError {
|
|
17
|
-
name: string;
|
|
18
|
-
}
|
|
19
|
-
export declare class InternalError extends SliceMachineError {
|
|
20
|
-
name: string;
|
|
21
|
-
}
|
|
22
|
-
export declare class PluginError extends SliceMachineError {
|
|
23
|
-
name: string;
|
|
24
|
-
}
|
|
25
|
-
export declare class PluginHookResultError extends SliceMachineError {
|
|
26
|
-
name: string;
|
|
27
|
-
constructor(errors: HookError[]);
|
|
28
|
-
}
|
|
29
|
-
export declare const isSliceMachineError: (error: unknown) => error is SliceMachineError;
|
|
30
|
-
export declare const isUnauthorizedError: (error: unknown) => error is UnauthorizedError;
|
|
31
|
-
export declare const isUnauthenticatedError: (error: unknown) => error is UnauthenticatedError;
|
|
32
|
-
export declare const isNotFoundError: (error: unknown) => error is NotFoundError;
|
|
33
|
-
export declare const isUnexpectedDataError: (error: unknown) => error is UnexpectedDataError;
|
|
34
|
-
export declare const isInternalError: (error: unknown) => error is InternalError;
|
|
1
|
+
import { HookError } from "@slicemachine/plugin-kit";
|
|
2
|
+
export declare class SliceMachineError extends Error {
|
|
3
|
+
_sliceMachineError: boolean;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class UnauthorizedError extends SliceMachineError {
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class UnauthenticatedError extends SliceMachineError {
|
|
10
|
+
name: string;
|
|
11
|
+
message: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class NotFoundError extends SliceMachineError {
|
|
14
|
+
name: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class UnexpectedDataError extends SliceMachineError {
|
|
17
|
+
name: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class InternalError extends SliceMachineError {
|
|
20
|
+
name: string;
|
|
21
|
+
}
|
|
22
|
+
export declare class PluginError extends SliceMachineError {
|
|
23
|
+
name: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class PluginHookResultError extends SliceMachineError {
|
|
26
|
+
name: string;
|
|
27
|
+
constructor(errors: HookError[]);
|
|
28
|
+
}
|
|
29
|
+
export declare const isSliceMachineError: (error: unknown) => error is SliceMachineError;
|
|
30
|
+
export declare const isUnauthorizedError: (error: unknown) => error is UnauthorizedError;
|
|
31
|
+
export declare const isUnauthenticatedError: (error: unknown) => error is UnauthenticatedError;
|
|
32
|
+
export declare const isNotFoundError: (error: unknown) => error is NotFoundError;
|
|
33
|
+
export declare const isUnexpectedDataError: (error: unknown) => error is UnexpectedDataError;
|
|
34
|
+
export declare const isInternalError: (error: unknown) => error is InternalError;
|