@slicemachine/manager 0.1.1-dev-plugins-m3.8 → 0.2.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.
Files changed (72) hide show
  1. package/dist/_node_modules/common-tags/es/stripIndent/stripIndent.cjs +1 -2
  2. package/dist/_node_modules/common-tags/es/stripIndent/stripIndent.cjs.map +1 -1
  3. package/dist/_node_modules/common-tags/es/stripIndent/stripIndent.js +1 -2
  4. package/dist/_node_modules/common-tags/es/stripIndent/stripIndent.js.map +1 -1
  5. package/dist/auth/PrismicAuthManager.d.ts +58 -58
  6. package/dist/auth/createPrismicAuthManager.d.ts +4 -4
  7. package/dist/auth/createPrismicAuthManagerMiddleware.d.ts +14 -14
  8. package/dist/client/index.d.ts +6 -6
  9. package/dist/constants/API_ENDPOINTS.d.ts +8 -8
  10. package/dist/constants/API_TOKENS.d.ts +5 -5
  11. package/dist/constants/APPLICATION_MODE.d.ts +5 -5
  12. package/dist/constants/DEFAULT_SLICE_SCREENSHOT_URL.d.ts +5 -5
  13. package/dist/constants/SLICE_MACHINE_CONFIG_FILENAME.d.ts +1 -1
  14. package/dist/constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME.d.ts +1 -1
  15. package/dist/constants/SLICE_MACHINE_GITHUB_REPOSITORY_NAME.d.ts +1 -1
  16. package/dist/constants/SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION.d.ts +1 -1
  17. package/dist/constants/SLICE_MACHINE_NPM_PACKAGE_NAME.d.ts +1 -1
  18. package/dist/constants/SLICE_MACHINE_USER_AGENT.d.ts +1 -1
  19. package/dist/constants/TS_CONFIG_FILENAME.d.ts +1 -1
  20. package/dist/constants/VERSION_KIND.d.ts +6 -6
  21. package/dist/errors.d.ts +34 -34
  22. package/dist/index.d.ts +11 -11
  23. package/dist/lib/DecodeError.d.ts +12 -12
  24. package/dist/lib/addTrailingSlash.d.ts +1 -1
  25. package/dist/lib/assertPluginsInitialized.d.ts +2 -2
  26. package/dist/lib/bufferCodec.d.ts +4 -4
  27. package/dist/lib/buildPrismicRepositoryAPIEndpoint.d.ts +4 -4
  28. package/dist/lib/castArray.d.ts +1 -1
  29. package/dist/lib/checkIsURLAccessible.d.ts +1 -1
  30. package/dist/lib/createContentDigest.d.ts +9 -9
  31. package/dist/lib/decode.d.ts +10 -10
  32. package/dist/lib/decodeHookResult.d.ts +10 -10
  33. package/dist/lib/decodePackageJSON.d.ts +12 -12
  34. package/dist/lib/decodeSliceMachineConfig.d.ts +3 -3
  35. package/dist/lib/fetchGitHubReleaseBodyForRelease.d.ts +21 -21
  36. package/dist/lib/fetchNPMPackageVersions.d.ts +5 -5
  37. package/dist/lib/format.d.ts +12 -12
  38. package/dist/lib/functionCodec.d.ts +2 -2
  39. package/dist/lib/installDependencies.d.ts +13 -13
  40. package/dist/lib/locateFileUpward.d.ts +10 -10
  41. package/dist/lib/markdownToHTML.d.ts +1 -1
  42. package/dist/lib/mockSlice.d.ts +9 -9
  43. package/dist/lib/prismicrc.d.ts +10 -10
  44. package/dist/lib/serializeCookies.d.ts +6 -6
  45. package/dist/managers/BaseManager.d.ts +33 -33
  46. package/dist/managers/SliceMachineManager.d.ts +95 -95
  47. package/dist/managers/createSliceMachineManager.d.ts +5 -5
  48. package/dist/managers/createSliceMachineManagerClient.d.ts +8 -8
  49. package/dist/managers/createSliceMachineManagerMiddleware.d.ts +15 -15
  50. package/dist/managers/customTypes/CustomTypesManager.d.ts +56 -56
  51. package/dist/managers/plugins/PluginsManager.d.ts +13 -13
  52. package/dist/managers/prismicRepository/PrismicRepositoryManager.d.ts +30 -30
  53. package/dist/managers/prismicRepository/types.d.ts +123 -123
  54. package/dist/managers/project/ProjectManager.d.ts +49 -49
  55. package/dist/managers/screenshots/ScreenshotsManager.cjs +1 -1
  56. package/dist/managers/screenshots/ScreenshotsManager.cjs.map +1 -1
  57. package/dist/managers/screenshots/ScreenshotsManager.d.ts +34 -34
  58. package/dist/managers/screenshots/ScreenshotsManager.js +1 -1
  59. package/dist/managers/screenshots/ScreenshotsManager.js.map +1 -1
  60. package/dist/managers/simulator/SimulatorManager.d.ts +38 -38
  61. package/dist/managers/slices/SlicesManager.d.ts +128 -128
  62. package/dist/managers/snippets/SnippetsManager.d.ts +11 -11
  63. package/dist/managers/telemetry/TelemetryManager.d.ts +30 -30
  64. package/dist/managers/telemetry/types.d.ts +143 -143
  65. package/dist/managers/user/UserManager.d.ts +40 -40
  66. package/dist/managers/versions/VersionsManager.d.ts +19 -19
  67. package/dist/managers/versions/types.d.ts +5 -5
  68. package/dist/test/createSliceMachineManagerMSWHandler.d.ts +7 -7
  69. package/dist/test/index.d.ts +2 -2
  70. package/dist/types.d.ts +45 -45
  71. package/package.json +4 -4
  72. package/src/managers/screenshots/ScreenshotsManager.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenshotsManager.js","sources":["../../../../src/managers/screenshots/ScreenshotsManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport { fileTypeFromBuffer } from \"file-type\";\nimport fetch, { FormData, Blob, Response } from \"node-fetch\";\n// puppeteer is lazy-loaded in captureSliceSimulatorScreenshot\nimport type { BrowserContext, Viewport } from \"puppeteer\";\n\nimport { checkIsURLAccessible } from \"../../lib/checkIsURLAccessible\";\nimport { createContentDigest } from \"../../lib/createContentDigest\";\nimport { decode } from \"../../lib/decode\";\n\nimport { S3ACL } from \"../../types\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\nimport { InternalError } from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nconst SLICE_SIMULATOR_WAIT_FOR_SELECTOR = \"#__iframe-ready\";\nconst SLICE_SIMULATOR_WAIT_FOR_SELECTOR_TIMEOUT = 10_000; // ms\nconst SLICE_SIMULATOR_SCREENSHOT_SELECTOR = \"#__iframe-renderer\";\n\nconst DEFAULT_SCREENSHOT_VIEWPORT: Viewport = {\n\twidth: 1200,\n\theight: 800,\n};\n\nfunction assertS3ACLInitialized(\n\ts3ACL: S3ACL | undefined,\n): asserts s3ACL is NonNullable<typeof s3ACL> {\n\tif (s3ACL == undefined) {\n\t\tthrow new Error(\n\t\t\t\"An S3 ACL has not been initialized. Run `SliceMachineManager.screenshots.prototype.initS3ACL()` before re-calling this method.\",\n\t\t);\n\t}\n}\n\nfunction assertBrowserContextInitialized(\n\tbrowserContext: BrowserContext | undefined,\n): asserts browserContext is NonNullable<typeof browserContext> {\n\tif (browserContext == undefined) {\n\t\tthrow new Error(\n\t\t\t\"A browser context has not been initialized. Run `SliceMachineManager.screenshots.prototype.initBrowserContext()` before re-calling this method.\",\n\t\t);\n\t}\n}\n\n/**\n * Encodes a part of a Slice Simulator URL to ensure it can be added to a URL\n * safely.\n *\n * The encoding logic must match Slice Machine UI's URL encoding practices.\n * Today, that requires the following:\n *\n * - Replace \"/\" with \"--\" (e.g. a Slice Library ID of \"./slices\" should turn into\n * \".--slices\")\n *\n * @param urlPart - A part of the URL.\n *\n * @returns `urlPart` encoded for use in a URL.\n */\nconst encodeSliceSimulatorURLPart = (urlPart: string): string => {\n\treturn urlPart.replace(/\\//g, \"--\");\n};\n\ntype ScreenshotsManagerCaptureSliceSimulatorScreenshotArgs = {\n\tsliceMachineUIOrigin: string;\n\tlibraryID: string;\n\tsliceID: string;\n\tvariationID: string;\n\tviewport?: Viewport;\n};\n\ntype ScreenshotsManagerCaptureSliceSimulatorScreenshotReturnType = {\n\tdata: Buffer;\n};\n\ntype ScreenshotsManagerUploadScreenshotArgs = {\n\tdata: Buffer;\n\tkeyPrefix?: string;\n};\n\ntype ScreenshotsManagerUploadScreenshotReturnType = {\n\turl: string;\n};\n\ntype ScreenshotsManagerDeleteScreenshotFolderArgs = {\n\tsliceID: string;\n};\n\nexport class ScreenshotsManager extends BaseManager {\n\tprivate _browserContext: BrowserContext | undefined;\n\tprivate _s3ACL: S3ACL | undefined;\n\n\tasync initBrowserContext(): Promise<void> {\n\t\tif (this._browserContext) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet puppeteer: typeof import(\"puppeteer\");\n\t\ttry {\n\t\t\t// Lazy-load Puppeteer only once it is needed.\n\t\t\tpuppeteer = await import(\"puppeteer\");\n\t\t} catch {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Screenshots require Puppeteer but Puppeteer was not found. Check that the `puppeteer` package is installed before trying again.\",\n\t\t\t);\n\t\t}\n\n\t\tconst browser = await puppeteer.launch();\n\n\t\tthis._browserContext = await browser.createIncognitoBrowserContext();\n\t}\n\n\tasync initS3ACL(): Promise<void> {\n\t\tif (this._s3ACL) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst awsACLURL = new URL(\"create\", API_ENDPOINTS.AwsAclProvider);\n\t\tconst awsACLRes = await this._fetch({ url: awsACLURL });\n\n\t\tconst awsACLText = await awsACLRes.text();\n\t\tlet awsACLJSON: unknown;\n\t\ttry {\n\t\t\tawsACLJSON = JSON.parse(awsACLText);\n\t\t} catch (error) {\n\t\t\t// Response is not JSON\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid AWS ACL response from ${awsACLURL}: ${awsACLText}`,\n\t\t\t);\n\t\t}\n\n\t\tconst { value: awsACL, error } = decode(\n\t\t\tt.intersection([\n\t\t\t\tt.type({\n\t\t\t\t\tvalues: t.type({\n\t\t\t\t\t\turl: t.string,\n\t\t\t\t\t\tfields: t.record(t.string, t.string),\n\t\t\t\t\t}),\n\t\t\t\t\timgixEndpoint: t.string,\n\t\t\t\t}),\n\t\t\t\tt.partial({\n\t\t\t\t\tmessage: t.string,\n\t\t\t\t\tMessage: t.string,\n\t\t\t\t\terror: t.string,\n\t\t\t\t}),\n\t\t\t]),\n\t\t\tawsACLJSON,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new Error(`Invalid AWS ACL response from ${awsACLURL}`);\n\t\t}\n\n\t\tconst errorMessage = awsACL.error || awsACL.message || awsACL.Message;\n\t\tif (errorMessage) {\n\t\t\tthrow new Error(`Failed to create an AWS ACL: ${errorMessage}`);\n\t\t}\n\n\t\tthis._s3ACL = {\n\t\t\tuploadEndpoint: awsACL.values.url,\n\t\t\trequiredFormDataFields: awsACL.values.fields,\n\t\t\timgixEndpoint: awsACL.imgixEndpoint,\n\t\t};\n\t}\n\n\t// TODO: Abstract to a generic `captureScreenshot()` method that is\n\t// used within a Slice-specific method in SliceManager.\n\tasync captureSliceSimulatorScreenshot(\n\t\targs: ScreenshotsManagerCaptureSliceSimulatorScreenshotArgs,\n\t): Promise<ScreenshotsManagerCaptureSliceSimulatorScreenshotReturnType> {\n\t\tassertBrowserContextInitialized(this._browserContext);\n\n\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\n\t\tif (!sliceMachineConfig.localSliceSimulatorURL) {\n\t\t\t// TODO: Provide a more helpful error message.\n\t\t\tthrow new Error(\n\t\t\t\t\"A local Slice Simulator URL must be configured in your Slice Machine configuration file.\",\n\t\t\t);\n\t\t}\n\n\t\tconst { model } = await this.slices.readSlice({\n\t\t\tlibraryID: args.libraryID,\n\t\t\tsliceID: args.sliceID,\n\t\t});\n\t\tif (!model) {\n\t\t\tthrow new Error(\n\t\t\t\t`Did not find a Slice in library \"${args.libraryID}\" with ID \"${args.sliceID}\".`,\n\t\t\t);\n\t\t}\n\n\t\tconst viewport = args.viewport || DEFAULT_SCREENSHOT_VIEWPORT;\n\n\t\t// TODO: Change `model.name` to `args.sliceID`?\n\t\t// Making that change would require changing the screenshot\n\t\t// page path in Slice Machine UI.\n\t\tconst url = new URL(\n\t\t\t`./${encodeSliceSimulatorURLPart(args.libraryID)}/${model.name}/${\n\t\t\t\targs.variationID\n\t\t\t}/screenshot`,\n\t\t\targs.sliceMachineUIOrigin,\n\t\t);\n\t\turl.searchParams.set(\"screenWidth\", viewport.width.toString());\n\t\turl.searchParams.set(\"screenHeight\", viewport.height.toString());\n\n\t\tconst isURLAccessible = await checkIsURLAccessible(url.toString());\n\n\t\tif (!isURLAccessible) {\n\t\t\tthrow new Error(\n\t\t\t\t`Slice Simulator screenshot URL is not accessible: ${url}`,\n\t\t\t);\n\t\t}\n\n\t\tconst page = await this._browserContext.newPage();\n\t\tpage.setViewport(viewport);\n\n\t\tawait page.goto(url.toString(), { waitUntil: [\"load\", \"networkidle0\"] });\n\t\tawait page.waitForSelector(SLICE_SIMULATOR_WAIT_FOR_SELECTOR, {\n\t\t\ttimeout: SLICE_SIMULATOR_WAIT_FOR_SELECTOR_TIMEOUT,\n\t\t});\n\n\t\tconst element = await page.$(SLICE_SIMULATOR_SCREENSHOT_SELECTOR);\n\t\tif (!element) {\n\t\t\tconst baseURL = new URL(url.pathname, url.origin);\n\n\t\t\tthrow new Error(\n\t\t\t\t`Slice Simulator did not find ${SLICE_SIMULATOR_WAIT_FOR_SELECTOR} on the page. Verify the URL is correct: ${baseURL}`,\n\t\t\t);\n\t\t}\n\n\t\tconst data = (await element.screenshot({\n\t\t\tencoding: \"binary\",\n\t\t\tclip: {\n\t\t\t\twidth: viewport.width,\n\t\t\t\theight: viewport.height,\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t},\n\t\t})) as Buffer;\n\n\t\treturn {\n\t\t\tdata,\n\t\t};\n\t}\n\n\tasync uploadScreenshot(\n\t\targs: ScreenshotsManagerUploadScreenshotArgs,\n\t): Promise<ScreenshotsManagerUploadScreenshotReturnType> {\n\t\tassertS3ACLInitialized(this._s3ACL);\n\n\t\tconst formData = new FormData();\n\n\t\tfor (const requiredFormDataFieldKey in this._s3ACL.requiredFormDataFields) {\n\t\t\tformData.append(\n\t\t\t\trequiredFormDataFieldKey,\n\t\t\t\tthis._s3ACL.requiredFormDataFields[requiredFormDataFieldKey],\n\t\t\t);\n\t\t}\n\n\t\tconst contentDigest = createContentDigest(args.data);\n\t\tconst fileType = await fileTypeFromBuffer(args.data);\n\t\tconst fileName = fileType\n\t\t\t? `${contentDigest}.${fileType.ext}`\n\t\t\t: contentDigest;\n\t\tconst key = args.keyPrefix ? `${args.keyPrefix}/${fileName}` : fileName;\n\n\t\tformData.set(\"key\", key);\n\n\t\tif (fileType) {\n\t\t\tformData.set(\"Content-Type\", fileType.mime);\n\t\t}\n\n\t\tformData.set(\"file\", new Blob([args.data], { type: fileType?.mime }));\n\n\t\tconst res = await fetch(this._s3ACL.uploadEndpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\n\t\tif (res.ok) {\n\t\t\tconst url = new URL(key, this._s3ACL.imgixEndpoint);\n\t\t\turl.searchParams.set(\"auto\", \"compress,format\");\n\n\t\t\treturn {\n\t\t\t\turl: url.toString(),\n\t\t\t};\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Unable to upload screenshot with status code: ${res.status}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync deleteScreenshotFolder(\n\t\targs: ScreenshotsManagerDeleteScreenshotFolderArgs,\n\t): Promise<void> {\n\t\tconst res = await this._fetch({\n\t\t\t// We're sending `args.sliceID` as `sliceName` because it's inconsistently\n\t\t\t// named in the ACL Provider API.\n\t\t\tbody: { sliceName: args.sliceID },\n\t\t\tmethod: \"POST\",\n\t\t\turl: new URL(\"delete-folder\", API_ENDPOINTS.AwsAclProvider),\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unable to delete screenshot folder with status code: ${res.status}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async _fetch(args: {\n\t\turl: URL;\n\t\tmethod?: \"GET\" | \"POST\";\n\t\tbody?: unknown;\n\t}): Promise<Response> {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\n\t\treturn await fetch(args.url, {\n\t\t\tbody: args.body ? JSON.stringify(args.body) : undefined,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authenticationToken}`,\n\t\t\t\tRepository: sliceMachineConfig.repositoryName,\n\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t...(args.body ? { \"Content-Type\": \"application/json\" } : {}),\n\t\t\t},\n\t\t\tmethod: args.method,\n\t\t});\n\t}\n}\n"],"names":["error"],"mappings":"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"}
1
+ {"version":3,"file":"ScreenshotsManager.js","sources":["../../../../src/managers/screenshots/ScreenshotsManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport { fileTypeFromBuffer } from \"file-type\";\nimport fetch, { FormData, Blob, Response } from \"node-fetch\";\n// puppeteer is lazy-loaded in captureSliceSimulatorScreenshot\nimport type { BrowserContext, Viewport } from \"puppeteer\";\n\nimport { checkIsURLAccessible } from \"../../lib/checkIsURLAccessible\";\nimport { createContentDigest } from \"../../lib/createContentDigest\";\nimport { decode } from \"../../lib/decode\";\n\nimport { S3ACL } from \"../../types\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\nimport { InternalError } from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nconst SLICE_SIMULATOR_WAIT_FOR_SELECTOR = \"#__iframe-ready\";\nconst SLICE_SIMULATOR_WAIT_FOR_SELECTOR_TIMEOUT = 10_000; // ms\nconst SLICE_SIMULATOR_SCREENSHOT_SELECTOR = \"#__iframe-renderer\";\n\nconst DEFAULT_SCREENSHOT_VIEWPORT: Viewport = {\n\twidth: 1200,\n\theight: 800,\n};\n\nfunction assertS3ACLInitialized(\n\ts3ACL: S3ACL | undefined,\n): asserts s3ACL is NonNullable<typeof s3ACL> {\n\tif (s3ACL == undefined) {\n\t\tthrow new Error(\n\t\t\t\"An S3 ACL has not been initialized. Run `SliceMachineManager.screenshots.prototype.initS3ACL()` before re-calling this method.\",\n\t\t);\n\t}\n}\n\nfunction assertBrowserContextInitialized(\n\tbrowserContext: BrowserContext | undefined,\n): asserts browserContext is NonNullable<typeof browserContext> {\n\tif (browserContext == undefined) {\n\t\tthrow new Error(\n\t\t\t\"A browser context has not been initialized. Run `SliceMachineManager.screenshots.prototype.initBrowserContext()` before re-calling this method.\",\n\t\t);\n\t}\n}\n\n/**\n * Encodes a part of a Slice Simulator URL to ensure it can be added to a URL\n * safely.\n *\n * The encoding logic must match Slice Machine UI's URL encoding practices.\n * Today, that requires the following:\n *\n * - Replace \"/\" with \"--\" (e.g. a Slice Library ID of \"./slices\" should turn into\n * \".--slices\")\n *\n * @param urlPart - A part of the URL.\n *\n * @returns `urlPart` encoded for use in a URL.\n */\nconst encodeSliceSimulatorURLPart = (urlPart: string): string => {\n\treturn urlPart.replace(/\\//g, \"--\");\n};\n\ntype ScreenshotsManagerCaptureSliceSimulatorScreenshotArgs = {\n\tsliceMachineUIOrigin: string;\n\tlibraryID: string;\n\tsliceID: string;\n\tvariationID: string;\n\tviewport?: Viewport;\n};\n\ntype ScreenshotsManagerCaptureSliceSimulatorScreenshotReturnType = {\n\tdata: Buffer;\n};\n\ntype ScreenshotsManagerUploadScreenshotArgs = {\n\tdata: Buffer;\n\tkeyPrefix?: string;\n};\n\ntype ScreenshotsManagerUploadScreenshotReturnType = {\n\turl: string;\n};\n\ntype ScreenshotsManagerDeleteScreenshotFolderArgs = {\n\tsliceID: string;\n};\n\nexport class ScreenshotsManager extends BaseManager {\n\tprivate _browserContext: BrowserContext | undefined;\n\tprivate _s3ACL: S3ACL | undefined;\n\n\tasync initBrowserContext(): Promise<void> {\n\t\tif (this._browserContext) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet puppeteer: typeof import(\"puppeteer\");\n\t\ttry {\n\t\t\t// Lazy-load Puppeteer only once it is needed.\n\t\t\tpuppeteer = await import(\"puppeteer\");\n\t\t} catch {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Screenshots require Puppeteer but Puppeteer was not found. Check that the `puppeteer` package is installed before trying again.\",\n\t\t\t);\n\t\t}\n\n\t\tconst browser = await puppeteer.launch({ headless: \"new\" });\n\n\t\tthis._browserContext = await browser.createIncognitoBrowserContext();\n\t}\n\n\tasync initS3ACL(): Promise<void> {\n\t\tif (this._s3ACL) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst awsACLURL = new URL(\"create\", API_ENDPOINTS.AwsAclProvider);\n\t\tconst awsACLRes = await this._fetch({ url: awsACLURL });\n\n\t\tconst awsACLText = await awsACLRes.text();\n\t\tlet awsACLJSON: unknown;\n\t\ttry {\n\t\t\tawsACLJSON = JSON.parse(awsACLText);\n\t\t} catch (error) {\n\t\t\t// Response is not JSON\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid AWS ACL response from ${awsACLURL}: ${awsACLText}`,\n\t\t\t);\n\t\t}\n\n\t\tconst { value: awsACL, error } = decode(\n\t\t\tt.intersection([\n\t\t\t\tt.type({\n\t\t\t\t\tvalues: t.type({\n\t\t\t\t\t\turl: t.string,\n\t\t\t\t\t\tfields: t.record(t.string, t.string),\n\t\t\t\t\t}),\n\t\t\t\t\timgixEndpoint: t.string,\n\t\t\t\t}),\n\t\t\t\tt.partial({\n\t\t\t\t\tmessage: t.string,\n\t\t\t\t\tMessage: t.string,\n\t\t\t\t\terror: t.string,\n\t\t\t\t}),\n\t\t\t]),\n\t\t\tawsACLJSON,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new Error(`Invalid AWS ACL response from ${awsACLURL}`);\n\t\t}\n\n\t\tconst errorMessage = awsACL.error || awsACL.message || awsACL.Message;\n\t\tif (errorMessage) {\n\t\t\tthrow new Error(`Failed to create an AWS ACL: ${errorMessage}`);\n\t\t}\n\n\t\tthis._s3ACL = {\n\t\t\tuploadEndpoint: awsACL.values.url,\n\t\t\trequiredFormDataFields: awsACL.values.fields,\n\t\t\timgixEndpoint: awsACL.imgixEndpoint,\n\t\t};\n\t}\n\n\t// TODO: Abstract to a generic `captureScreenshot()` method that is\n\t// used within a Slice-specific method in SliceManager.\n\tasync captureSliceSimulatorScreenshot(\n\t\targs: ScreenshotsManagerCaptureSliceSimulatorScreenshotArgs,\n\t): Promise<ScreenshotsManagerCaptureSliceSimulatorScreenshotReturnType> {\n\t\tassertBrowserContextInitialized(this._browserContext);\n\n\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\n\t\tif (!sliceMachineConfig.localSliceSimulatorURL) {\n\t\t\t// TODO: Provide a more helpful error message.\n\t\t\tthrow new Error(\n\t\t\t\t\"A local Slice Simulator URL must be configured in your Slice Machine configuration file.\",\n\t\t\t);\n\t\t}\n\n\t\tconst { model } = await this.slices.readSlice({\n\t\t\tlibraryID: args.libraryID,\n\t\t\tsliceID: args.sliceID,\n\t\t});\n\t\tif (!model) {\n\t\t\tthrow new Error(\n\t\t\t\t`Did not find a Slice in library \"${args.libraryID}\" with ID \"${args.sliceID}\".`,\n\t\t\t);\n\t\t}\n\n\t\tconst viewport = args.viewport || DEFAULT_SCREENSHOT_VIEWPORT;\n\n\t\t// TODO: Change `model.name` to `args.sliceID`?\n\t\t// Making that change would require changing the screenshot\n\t\t// page path in Slice Machine UI.\n\t\tconst url = new URL(\n\t\t\t`./${encodeSliceSimulatorURLPart(args.libraryID)}/${model.name}/${\n\t\t\t\targs.variationID\n\t\t\t}/screenshot`,\n\t\t\targs.sliceMachineUIOrigin,\n\t\t);\n\t\turl.searchParams.set(\"screenWidth\", viewport.width.toString());\n\t\turl.searchParams.set(\"screenHeight\", viewport.height.toString());\n\n\t\tconst isURLAccessible = await checkIsURLAccessible(url.toString());\n\n\t\tif (!isURLAccessible) {\n\t\t\tthrow new Error(\n\t\t\t\t`Slice Simulator screenshot URL is not accessible: ${url}`,\n\t\t\t);\n\t\t}\n\n\t\tconst page = await this._browserContext.newPage();\n\t\tpage.setViewport(viewport);\n\n\t\tawait page.goto(url.toString(), { waitUntil: [\"load\", \"networkidle0\"] });\n\t\tawait page.waitForSelector(SLICE_SIMULATOR_WAIT_FOR_SELECTOR, {\n\t\t\ttimeout: SLICE_SIMULATOR_WAIT_FOR_SELECTOR_TIMEOUT,\n\t\t});\n\n\t\tconst element = await page.$(SLICE_SIMULATOR_SCREENSHOT_SELECTOR);\n\t\tif (!element) {\n\t\t\tconst baseURL = new URL(url.pathname, url.origin);\n\n\t\t\tthrow new Error(\n\t\t\t\t`Slice Simulator did not find ${SLICE_SIMULATOR_WAIT_FOR_SELECTOR} on the page. Verify the URL is correct: ${baseURL}`,\n\t\t\t);\n\t\t}\n\n\t\tconst data = (await element.screenshot({\n\t\t\tencoding: \"binary\",\n\t\t\tclip: {\n\t\t\t\twidth: viewport.width,\n\t\t\t\theight: viewport.height,\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t},\n\t\t})) as Buffer;\n\n\t\treturn {\n\t\t\tdata,\n\t\t};\n\t}\n\n\tasync uploadScreenshot(\n\t\targs: ScreenshotsManagerUploadScreenshotArgs,\n\t): Promise<ScreenshotsManagerUploadScreenshotReturnType> {\n\t\tassertS3ACLInitialized(this._s3ACL);\n\n\t\tconst formData = new FormData();\n\n\t\tfor (const requiredFormDataFieldKey in this._s3ACL.requiredFormDataFields) {\n\t\t\tformData.append(\n\t\t\t\trequiredFormDataFieldKey,\n\t\t\t\tthis._s3ACL.requiredFormDataFields[requiredFormDataFieldKey],\n\t\t\t);\n\t\t}\n\n\t\tconst contentDigest = createContentDigest(args.data);\n\t\tconst fileType = await fileTypeFromBuffer(args.data);\n\t\tconst fileName = fileType\n\t\t\t? `${contentDigest}.${fileType.ext}`\n\t\t\t: contentDigest;\n\t\tconst key = args.keyPrefix ? `${args.keyPrefix}/${fileName}` : fileName;\n\n\t\tformData.set(\"key\", key);\n\n\t\tif (fileType) {\n\t\t\tformData.set(\"Content-Type\", fileType.mime);\n\t\t}\n\n\t\tformData.set(\"file\", new Blob([args.data], { type: fileType?.mime }));\n\n\t\tconst res = await fetch(this._s3ACL.uploadEndpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\n\t\tif (res.ok) {\n\t\t\tconst url = new URL(key, this._s3ACL.imgixEndpoint);\n\t\t\turl.searchParams.set(\"auto\", \"compress,format\");\n\n\t\t\treturn {\n\t\t\t\turl: url.toString(),\n\t\t\t};\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Unable to upload screenshot with status code: ${res.status}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync deleteScreenshotFolder(\n\t\targs: ScreenshotsManagerDeleteScreenshotFolderArgs,\n\t): Promise<void> {\n\t\tconst res = await this._fetch({\n\t\t\t// We're sending `args.sliceID` as `sliceName` because it's inconsistently\n\t\t\t// named in the ACL Provider API.\n\t\t\tbody: { sliceName: args.sliceID },\n\t\t\tmethod: \"POST\",\n\t\t\turl: new URL(\"delete-folder\", API_ENDPOINTS.AwsAclProvider),\n\t\t});\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unable to delete screenshot folder with status code: ${res.status}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async _fetch(args: {\n\t\turl: URL;\n\t\tmethod?: \"GET\" | \"POST\";\n\t\tbody?: unknown;\n\t}): Promise<Response> {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\n\t\treturn await fetch(args.url, {\n\t\t\tbody: args.body ? JSON.stringify(args.body) : undefined,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authenticationToken}`,\n\t\t\t\tRepository: sliceMachineConfig.repositoryName,\n\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t...(args.body ? { \"Content-Type\": \"application/json\" } : {}),\n\t\t\t},\n\t\t\tmethod: args.method,\n\t\t});\n\t}\n}\n"],"names":["error"],"mappings":"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"}
@@ -1,38 +1,38 @@
1
- import * as t from "io-ts";
2
- import { HookError } from "@slicemachine/plugin-kit";
3
- import { DecodeError } from "../../lib/DecodeError";
4
- import { BaseManager } from "../BaseManager";
5
- declare const SliceSimulatorSetupStepValidationMessageCodec: t.TypeC<{
6
- title: t.StringC;
7
- message: t.StringC;
8
- }>;
9
- type SliceSimulatorSetupStepValidationMessageCodec = t.TypeOf<typeof SliceSimulatorSetupStepValidationMessageCodec>;
10
- export type SimulatorManagerReadSliceSimulatorSetupStep = {
11
- title: string;
12
- description?: string;
13
- body: string;
14
- /**
15
- * Determines if the step is completed.
16
- *
17
- * This proeprty is `undefined` if the project's adapter does not provide a
18
- * validation function for the step; we cannot know if the step is complete
19
- * without a validator.
20
- */
21
- isComplete: boolean | undefined;
22
- validationMessages: SliceSimulatorSetupStepValidationMessageCodec[];
23
- };
24
- export type SimulatorManagerReadSliceSimulatorSetupStepsReturnType = {
25
- steps: SimulatorManagerReadSliceSimulatorSetupStep[];
26
- errors: (DecodeError | HookError)[];
27
- };
28
- export declare class SimulatorManager extends BaseManager {
29
- getLocalSliceSimulatorURL(): Promise<string | undefined>;
30
- /**
31
- * @throws {@link UnexpectedDataError} Thrown if the project is not configured
32
- * with a Slice Simulator URL.
33
- */
34
- checkIsLocalSliceSimulatorURLAccessible(): Promise<boolean>;
35
- readSliceSimulatorSetupSteps(): Promise<SimulatorManagerReadSliceSimulatorSetupStepsReturnType>;
36
- supportsSliceSimulator(): boolean;
37
- }
38
- export {};
1
+ import * as t from "io-ts";
2
+ import { HookError } from "@slicemachine/plugin-kit";
3
+ import { DecodeError } from "../../lib/DecodeError";
4
+ import { BaseManager } from "../BaseManager";
5
+ declare const SliceSimulatorSetupStepValidationMessageCodec: t.TypeC<{
6
+ title: t.StringC;
7
+ message: t.StringC;
8
+ }>;
9
+ type SliceSimulatorSetupStepValidationMessageCodec = t.TypeOf<typeof SliceSimulatorSetupStepValidationMessageCodec>;
10
+ export type SimulatorManagerReadSliceSimulatorSetupStep = {
11
+ title: string;
12
+ description?: string;
13
+ body: string;
14
+ /**
15
+ * Determines if the step is completed.
16
+ *
17
+ * This proeprty is `undefined` if the project's adapter does not provide a
18
+ * validation function for the step; we cannot know if the step is complete
19
+ * without a validator.
20
+ */
21
+ isComplete: boolean | undefined;
22
+ validationMessages: SliceSimulatorSetupStepValidationMessageCodec[];
23
+ };
24
+ export type SimulatorManagerReadSliceSimulatorSetupStepsReturnType = {
25
+ steps: SimulatorManagerReadSliceSimulatorSetupStep[];
26
+ errors: (DecodeError | HookError)[];
27
+ };
28
+ export declare class SimulatorManager extends BaseManager {
29
+ getLocalSliceSimulatorURL(): Promise<string | undefined>;
30
+ /**
31
+ * @throws {@link UnexpectedDataError} Thrown if the project is not configured
32
+ * with a Slice Simulator URL.
33
+ */
34
+ checkIsLocalSliceSimulatorURLAccessible(): Promise<boolean>;
35
+ readSliceSimulatorSetupSteps(): Promise<SimulatorManagerReadSliceSimulatorSetupStepsReturnType>;
36
+ supportsSliceSimulator(): boolean;
37
+ }
38
+ export {};
@@ -1,128 +1,128 @@
1
- /// <reference types="node" />
2
- import { SharedSliceContent } from "@prismicio/types-internal/lib/content";
3
- import { CallHookReturnType, HookError, SliceAssetUpdateHook, SliceCreateHook, SliceCreateHookData, SliceLibraryReadHookData, SliceReadHookData, SliceRenameHook, SliceRenameHookData, SliceUpdateHook } from "@slicemachine/plugin-kit";
4
- import { DecodeError } from "../../lib/DecodeError";
5
- import { OnlyHookErrors } from "../../types";
6
- import { BaseManager } from "../BaseManager";
7
- import { SharedSlice } from "@prismicio/types-internal/lib/customtypes";
8
- type SlicesManagerReadSliceLibraryReturnType = {
9
- sliceIDs: string[];
10
- errors: (DecodeError | HookError)[];
11
- };
12
- type SlicesManagerReadAllSliceLibrariesReturnType = {
13
- libraries: {
14
- libraryID: string;
15
- sliceIDs: string[] | undefined;
16
- }[];
17
- errors: (DecodeError | HookError)[];
18
- };
19
- type SliceMachineManagerReadAllSlicesForLibraryArgs = {
20
- libraryID: string;
21
- };
22
- type SliceMachineManagerUpdateSliceArgs = {
23
- libraryID: string;
24
- model: SharedSlice;
25
- mocks?: SharedSliceContent[];
26
- };
27
- type SliceMachineManagerReadAllSlicesForLibraryReturnType = {
28
- models: {
29
- model: SharedSlice;
30
- }[];
31
- errors: (DecodeError | HookError)[];
32
- };
33
- type SliceMachineManagerReadAllSlicesReturnType = {
34
- models: {
35
- libraryID: string;
36
- model: SharedSlice;
37
- }[];
38
- errors: (DecodeError | HookError)[];
39
- };
40
- type SliceMachineManagerReadSliceReturnType = {
41
- model: SharedSlice | undefined;
42
- errors: (DecodeError | HookError)[];
43
- };
44
- type SliceMachineManagerPushSliceArgs = {
45
- libraryID: string;
46
- sliceID: string;
47
- };
48
- export type SliceMachineManagerPushSliceReturnType = {
49
- /**
50
- * A record of Slice variation IDs mapped to uploaded screenshot URLs.
51
- */
52
- screenshotURLs: Record<string, string> | undefined;
53
- errors: (DecodeError | HookError)[];
54
- };
55
- type SliceMachineManagerReadSliceScreenshotArgs = {
56
- libraryID: string;
57
- sliceID: string;
58
- variationID: string;
59
- };
60
- type SliceMachineManagerReadSliceScreenshotReturnType = {
61
- data: Buffer | undefined;
62
- errors: (DecodeError | HookError)[];
63
- };
64
- type SliceMachineManagerUpdateSliceScreenshotArgs = {
65
- libraryID: string;
66
- sliceID: string;
67
- variationID: string;
68
- data: Buffer;
69
- };
70
- type SliceMachineManagerReadSliceMocksArgs = {
71
- libraryID: string;
72
- sliceID: string;
73
- };
74
- type SliceMachineManagerReadSliceMocksReturnType = {
75
- mocks?: SharedSliceContent[];
76
- errors: (DecodeError | HookError)[];
77
- };
78
- type SliceMachineManagerReadSliceMocksConfigArgs = {
79
- libraryID: string;
80
- sliceID: string;
81
- };
82
- type SliceMachineManagerReadSliceMocksConfigArgsReturnType = {
83
- mocksConfig?: Record<string, unknown>;
84
- errors: HookError[];
85
- };
86
- type SliceMachineManagerUpdateSliceMocksArgs = {
87
- libraryID: string;
88
- sliceID: string;
89
- mocks: SharedSliceContent[];
90
- };
91
- type SliceMachineManagerUpdateSliceMocksArgsReturnType = {
92
- errors: HookError[];
93
- };
94
- type SlicesManagerUpsertHostedSliceScrenshotsArgs = {
95
- libraryID: string;
96
- model: SharedSlice;
97
- };
98
- type SliceMachineManagerDeleteSliceArgs = {
99
- libraryID: string;
100
- sliceID: string;
101
- };
102
- type SliceMachineManagerDeleteSliceReturnType = {
103
- errors: (DecodeError | HookError)[];
104
- };
105
- export declare class SlicesManager extends BaseManager {
106
- readSliceLibrary(args: SliceLibraryReadHookData): Promise<SlicesManagerReadSliceLibraryReturnType>;
107
- readAllSliceLibraries(): Promise<SlicesManagerReadAllSliceLibrariesReturnType>;
108
- readAllSlicesForLibrary(args: SliceMachineManagerReadAllSlicesForLibraryArgs): Promise<SliceMachineManagerReadAllSlicesForLibraryReturnType>;
109
- readAllSlices(): Promise<SliceMachineManagerReadAllSlicesReturnType>;
110
- createSlice(args: SliceCreateHookData): Promise<OnlyHookErrors<CallHookReturnType<SliceCreateHook>>>;
111
- readSlice(args: SliceReadHookData): Promise<SliceMachineManagerReadSliceReturnType>;
112
- updateSlice(args: SliceMachineManagerUpdateSliceArgs): Promise<OnlyHookErrors<CallHookReturnType<SliceUpdateHook>>>;
113
- renameSlice(args: SliceRenameHookData): Promise<OnlyHookErrors<CallHookReturnType<SliceRenameHook>>>;
114
- deleteSlice(args: SliceMachineManagerDeleteSliceArgs): Promise<SliceMachineManagerDeleteSliceReturnType>;
115
- /**
116
- * @returns Record of variation IDs mapped to uploaded screenshot URLs.
117
- */
118
- pushSlice(args: SliceMachineManagerPushSliceArgs): Promise<SliceMachineManagerPushSliceReturnType>;
119
- readSliceScreenshot(args: SliceMachineManagerReadSliceScreenshotArgs): Promise<SliceMachineManagerReadSliceScreenshotReturnType>;
120
- updateSliceScreenshot(args: SliceMachineManagerUpdateSliceScreenshotArgs): Promise<OnlyHookErrors<CallHookReturnType<SliceAssetUpdateHook>>>;
121
- readSliceMocks(args: SliceMachineManagerReadSliceMocksArgs): Promise<SliceMachineManagerReadSliceMocksReturnType>;
122
- updateSliceMocks(args: SliceMachineManagerUpdateSliceMocksArgs): Promise<SliceMachineManagerUpdateSliceMocksArgsReturnType>;
123
- readSliceMocksConfig(args: SliceMachineManagerReadSliceMocksConfigArgs): Promise<SliceMachineManagerReadSliceMocksConfigArgsReturnType>;
124
- fetchRemoteSlices(): Promise<SharedSlice[]>;
125
- updateSliceModelScreenshotsInPlace(args: SlicesManagerUpsertHostedSliceScrenshotsArgs): Promise<SharedSlice>;
126
- private _removeSliceFromCustomTypes;
127
- }
128
- export {};
1
+ /// <reference types="node" />
2
+ import { SharedSliceContent } from "@prismicio/types-internal/lib/content";
3
+ import { CallHookReturnType, HookError, SliceAssetUpdateHook, SliceCreateHook, SliceCreateHookData, SliceLibraryReadHookData, SliceReadHookData, SliceRenameHook, SliceRenameHookData, SliceUpdateHook } from "@slicemachine/plugin-kit";
4
+ import { DecodeError } from "../../lib/DecodeError";
5
+ import { OnlyHookErrors } from "../../types";
6
+ import { BaseManager } from "../BaseManager";
7
+ import { SharedSlice } from "@prismicio/types-internal/lib/customtypes";
8
+ type SlicesManagerReadSliceLibraryReturnType = {
9
+ sliceIDs: string[];
10
+ errors: (DecodeError | HookError)[];
11
+ };
12
+ type SlicesManagerReadAllSliceLibrariesReturnType = {
13
+ libraries: {
14
+ libraryID: string;
15
+ sliceIDs: string[] | undefined;
16
+ }[];
17
+ errors: (DecodeError | HookError)[];
18
+ };
19
+ type SliceMachineManagerReadAllSlicesForLibraryArgs = {
20
+ libraryID: string;
21
+ };
22
+ type SliceMachineManagerUpdateSliceArgs = {
23
+ libraryID: string;
24
+ model: SharedSlice;
25
+ mocks?: SharedSliceContent[];
26
+ };
27
+ type SliceMachineManagerReadAllSlicesForLibraryReturnType = {
28
+ models: {
29
+ model: SharedSlice;
30
+ }[];
31
+ errors: (DecodeError | HookError)[];
32
+ };
33
+ type SliceMachineManagerReadAllSlicesReturnType = {
34
+ models: {
35
+ libraryID: string;
36
+ model: SharedSlice;
37
+ }[];
38
+ errors: (DecodeError | HookError)[];
39
+ };
40
+ type SliceMachineManagerReadSliceReturnType = {
41
+ model: SharedSlice | undefined;
42
+ errors: (DecodeError | HookError)[];
43
+ };
44
+ type SliceMachineManagerPushSliceArgs = {
45
+ libraryID: string;
46
+ sliceID: string;
47
+ };
48
+ export type SliceMachineManagerPushSliceReturnType = {
49
+ /**
50
+ * A record of Slice variation IDs mapped to uploaded screenshot URLs.
51
+ */
52
+ screenshotURLs: Record<string, string> | undefined;
53
+ errors: (DecodeError | HookError)[];
54
+ };
55
+ type SliceMachineManagerReadSliceScreenshotArgs = {
56
+ libraryID: string;
57
+ sliceID: string;
58
+ variationID: string;
59
+ };
60
+ type SliceMachineManagerReadSliceScreenshotReturnType = {
61
+ data: Buffer | undefined;
62
+ errors: (DecodeError | HookError)[];
63
+ };
64
+ type SliceMachineManagerUpdateSliceScreenshotArgs = {
65
+ libraryID: string;
66
+ sliceID: string;
67
+ variationID: string;
68
+ data: Buffer;
69
+ };
70
+ type SliceMachineManagerReadSliceMocksArgs = {
71
+ libraryID: string;
72
+ sliceID: string;
73
+ };
74
+ type SliceMachineManagerReadSliceMocksReturnType = {
75
+ mocks?: SharedSliceContent[];
76
+ errors: (DecodeError | HookError)[];
77
+ };
78
+ type SliceMachineManagerReadSliceMocksConfigArgs = {
79
+ libraryID: string;
80
+ sliceID: string;
81
+ };
82
+ type SliceMachineManagerReadSliceMocksConfigArgsReturnType = {
83
+ mocksConfig?: Record<string, unknown>;
84
+ errors: HookError[];
85
+ };
86
+ type SliceMachineManagerUpdateSliceMocksArgs = {
87
+ libraryID: string;
88
+ sliceID: string;
89
+ mocks: SharedSliceContent[];
90
+ };
91
+ type SliceMachineManagerUpdateSliceMocksArgsReturnType = {
92
+ errors: HookError[];
93
+ };
94
+ type SlicesManagerUpsertHostedSliceScrenshotsArgs = {
95
+ libraryID: string;
96
+ model: SharedSlice;
97
+ };
98
+ type SliceMachineManagerDeleteSliceArgs = {
99
+ libraryID: string;
100
+ sliceID: string;
101
+ };
102
+ type SliceMachineManagerDeleteSliceReturnType = {
103
+ errors: (DecodeError | HookError)[];
104
+ };
105
+ export declare class SlicesManager extends BaseManager {
106
+ readSliceLibrary(args: SliceLibraryReadHookData): Promise<SlicesManagerReadSliceLibraryReturnType>;
107
+ readAllSliceLibraries(): Promise<SlicesManagerReadAllSliceLibrariesReturnType>;
108
+ readAllSlicesForLibrary(args: SliceMachineManagerReadAllSlicesForLibraryArgs): Promise<SliceMachineManagerReadAllSlicesForLibraryReturnType>;
109
+ readAllSlices(): Promise<SliceMachineManagerReadAllSlicesReturnType>;
110
+ createSlice(args: SliceCreateHookData): Promise<OnlyHookErrors<CallHookReturnType<SliceCreateHook>>>;
111
+ readSlice(args: SliceReadHookData): Promise<SliceMachineManagerReadSliceReturnType>;
112
+ updateSlice(args: SliceMachineManagerUpdateSliceArgs): Promise<OnlyHookErrors<CallHookReturnType<SliceUpdateHook>>>;
113
+ renameSlice(args: SliceRenameHookData): Promise<OnlyHookErrors<CallHookReturnType<SliceRenameHook>>>;
114
+ deleteSlice(args: SliceMachineManagerDeleteSliceArgs): Promise<SliceMachineManagerDeleteSliceReturnType>;
115
+ /**
116
+ * @returns Record of variation IDs mapped to uploaded screenshot URLs.
117
+ */
118
+ pushSlice(args: SliceMachineManagerPushSliceArgs): Promise<SliceMachineManagerPushSliceReturnType>;
119
+ readSliceScreenshot(args: SliceMachineManagerReadSliceScreenshotArgs): Promise<SliceMachineManagerReadSliceScreenshotReturnType>;
120
+ updateSliceScreenshot(args: SliceMachineManagerUpdateSliceScreenshotArgs): Promise<OnlyHookErrors<CallHookReturnType<SliceAssetUpdateHook>>>;
121
+ readSliceMocks(args: SliceMachineManagerReadSliceMocksArgs): Promise<SliceMachineManagerReadSliceMocksReturnType>;
122
+ updateSliceMocks(args: SliceMachineManagerUpdateSliceMocksArgs): Promise<SliceMachineManagerUpdateSliceMocksArgsReturnType>;
123
+ readSliceMocksConfig(args: SliceMachineManagerReadSliceMocksConfigArgs): Promise<SliceMachineManagerReadSliceMocksConfigArgsReturnType>;
124
+ fetchRemoteSlices(): Promise<SharedSlice[]>;
125
+ updateSliceModelScreenshotsInPlace(args: SlicesManagerUpsertHostedSliceScrenshotsArgs): Promise<SharedSlice>;
126
+ private _removeSliceFromCustomTypes;
127
+ }
128
+ export {};
@@ -1,11 +1,11 @@
1
- import { HookError, Snippet, SnippetReadHookData } from "@slicemachine/plugin-kit";
2
- import { DecodeError } from "../../lib/DecodeError";
3
- import { BaseManager } from "../BaseManager";
4
- type SnippetsMangerUpdateSliceReturnType = {
5
- snippets: Snippet[];
6
- errors: (DecodeError | HookError)[];
7
- };
8
- export declare class SnippetsManager extends BaseManager {
9
- readSnippets(args: SnippetReadHookData): Promise<SnippetsMangerUpdateSliceReturnType>;
10
- }
11
- export {};
1
+ import { HookError, Snippet, SnippetReadHookData } from "@slicemachine/plugin-kit";
2
+ import { DecodeError } from "../../lib/DecodeError";
3
+ import { BaseManager } from "../BaseManager";
4
+ type SnippetsMangerUpdateSliceReturnType = {
5
+ snippets: Snippet[];
6
+ errors: (DecodeError | HookError)[];
7
+ };
8
+ export declare class SnippetsManager extends BaseManager {
9
+ readSnippets(args: SnippetReadHookData): Promise<SnippetsMangerUpdateSliceReturnType>;
10
+ }
11
+ export {};
@@ -1,30 +1,30 @@
1
- import { BaseManager } from "../BaseManager";
2
- import { SegmentEvents } from "./types";
3
- type TelemetryManagerInitTelemetryArgs = {
4
- appName: string;
5
- appVersion: string;
6
- };
7
- type TelemetryManagerTrackArgs = SegmentEvents;
8
- type TelemetryManagerIdentifyArgs = {
9
- userID: string;
10
- intercomHash: string;
11
- };
12
- type TelemetryManagerGroupArgs = {
13
- repositoryName: string;
14
- manualLibsCount: number;
15
- downloadedLibsCount: number;
16
- npmLibsCount: number;
17
- downloadedLibs: string[];
18
- };
19
- export declare class TelemetryManager extends BaseManager {
20
- private _segmentClient;
21
- private _anonymousID;
22
- private _userID;
23
- private _context;
24
- initTelemetry(args: TelemetryManagerInitTelemetryArgs): Promise<void>;
25
- track(args: TelemetryManagerTrackArgs): Promise<void>;
26
- identify(args: TelemetryManagerIdentifyArgs): Promise<void>;
27
- group(args: TelemetryManagerGroupArgs): Promise<void>;
28
- checkIsTelemetryEnabled(): Promise<boolean>;
29
- }
30
- export {};
1
+ import { BaseManager } from "../BaseManager";
2
+ import { SegmentEvents } from "./types";
3
+ type TelemetryManagerInitTelemetryArgs = {
4
+ appName: string;
5
+ appVersion: string;
6
+ };
7
+ type TelemetryManagerTrackArgs = SegmentEvents;
8
+ type TelemetryManagerIdentifyArgs = {
9
+ userID: string;
10
+ intercomHash: string;
11
+ };
12
+ type TelemetryManagerGroupArgs = {
13
+ repositoryName: string;
14
+ manualLibsCount: number;
15
+ downloadedLibsCount: number;
16
+ npmLibsCount: number;
17
+ downloadedLibs: string[];
18
+ };
19
+ export declare class TelemetryManager extends BaseManager {
20
+ private _segmentClient;
21
+ private _anonymousID;
22
+ private _userID;
23
+ private _context;
24
+ initTelemetry(args: TelemetryManagerInitTelemetryArgs): Promise<void>;
25
+ track(args: TelemetryManagerTrackArgs): Promise<void>;
26
+ identify(args: TelemetryManagerIdentifyArgs): Promise<void>;
27
+ group(args: TelemetryManagerGroupArgs): Promise<void>;
28
+ checkIsTelemetryEnabled(): Promise<boolean>;
29
+ }
30
+ export {};