@dbx-tools/shared-generator 0.9.163 → 0.9.165

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/index.ts CHANGED
@@ -3,12 +3,12 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-generator";
6
- export const PACKAGE_VERSION = "0.9.163";
6
+ export const PACKAGE_VERSION = "0.9.165";
7
7
  export * as brand from "./src/brand.ts";
8
8
  export * as kpi from "./src/kpi.ts";
9
9
  export * as workflow from "./src/workflow.ts";
10
- export { GENERATOR_PLUGIN_NAME, GENERATOR_BASE_PATH, GENERATOR_ROUTES, BrandGenerationRequestSchema, BrandPackageSourceSchema, BrandVisualImageSchema, BrandVisualReferenceSchema, BrandPackageSchema, BrandGenerationStageSchema, BrandGenerationProgressEventSchema, BrandGenerationResultEventSchema, BrandGenerationErrorEventSchema, BrandGenerationEventSchema, GeneratorClientConfigSchema, brandGenerateUrl, GeneratorPluginClient } from "./src/brand.ts";
11
- export type { BrandGenerationRequest, BrandPackageSource, BrandVisualImage, BrandVisualReference, BrandPackage, BrandGenerationStage, BrandGenerationProgressEvent, BrandGenerationResultEvent, BrandGenerationErrorEvent, BrandGenerationEvent, GeneratorClientConfig, BrandGenerationStreamOptions } from "./src/brand.ts";
10
+ export { GENERATOR_PLUGIN_NAME, GENERATOR_BASE_PATH, GENERATOR_ROUTES, BrandGenerationRequestSchema, BrandPackageSourceSchema, BrandVisualImageSchema, BrandVisualReferenceSchema, BrandPackageSchema, BrandHistoryEntrySchema, BrandHistoryResponseSchema, BrandGenerationStageSchema, BrandGenerationProgressEventSchema, BrandGenerationResultEventSchema, BrandGenerationErrorEventSchema, BrandGenerationEventSchema, GeneratorClientConfigSchema, brandGenerateUrl, brandHistoryUrl, GeneratorPluginClient } from "./src/brand.ts";
11
+ export type { BrandGenerationRequest, BrandPackageSource, BrandVisualImage, BrandVisualReference, BrandPackage, BrandHistoryEntry, BrandHistoryResponse, BrandGenerationStage, BrandGenerationProgressEvent, BrandGenerationResultEvent, BrandGenerationErrorEvent, BrandGenerationEvent, GeneratorClientConfig, BrandGenerationStreamOptions } from "./src/brand.ts";
12
12
  export { ResearchedKpiSchema, KpiResearchRequestSchema, KpiResearchResultSchema } from "./src/kpi.ts";
13
13
  export type { ResearchedKpi, KpiResearchRequest, KpiResearchResult } from "./src/kpi.ts";
14
14
  export { PresentationModeSchema, GeneratorRequestSchema, GeneratedColumnSchema, GeneratedMetricSchema, GeneratorPlanSchema, PlanGeneratorDataRequestSchema, GeneratedSchemaSchema, ProvisionGeneratorSchemaRequestSchema, MaterializeGeneratorDataRequestSchema, MaterializedGeneratorDataSchema, CreateGeneratorPresentationRequestSchema, GeneratedDashboardSchema, GeneratedGenieSpaceSchema, GeneratedAssetsSchema } from "./src/workflow.ts";
package/lib/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/shared-generator";
2
- export declare const PACKAGE_VERSION = "0.9.163";
2
+ export declare const PACKAGE_VERSION = "0.9.165";
3
3
  export * as brand from "./src/brand.ts";
4
4
  export * as kpi from "./src/kpi.ts";
5
5
  export * as workflow from "./src/workflow.ts";
6
- export { GENERATOR_PLUGIN_NAME, GENERATOR_BASE_PATH, GENERATOR_ROUTES, BrandGenerationRequestSchema, BrandPackageSourceSchema, BrandVisualImageSchema, BrandVisualReferenceSchema, BrandPackageSchema, BrandGenerationStageSchema, BrandGenerationProgressEventSchema, BrandGenerationResultEventSchema, BrandGenerationErrorEventSchema, BrandGenerationEventSchema, GeneratorClientConfigSchema, brandGenerateUrl, GeneratorPluginClient } from "./src/brand.ts";
7
- export type { BrandGenerationRequest, BrandPackageSource, BrandVisualImage, BrandVisualReference, BrandPackage, BrandGenerationStage, BrandGenerationProgressEvent, BrandGenerationResultEvent, BrandGenerationErrorEvent, BrandGenerationEvent, GeneratorClientConfig, BrandGenerationStreamOptions } from "./src/brand.ts";
6
+ export { GENERATOR_PLUGIN_NAME, GENERATOR_BASE_PATH, GENERATOR_ROUTES, BrandGenerationRequestSchema, BrandPackageSourceSchema, BrandVisualImageSchema, BrandVisualReferenceSchema, BrandPackageSchema, BrandHistoryEntrySchema, BrandHistoryResponseSchema, BrandGenerationStageSchema, BrandGenerationProgressEventSchema, BrandGenerationResultEventSchema, BrandGenerationErrorEventSchema, BrandGenerationEventSchema, GeneratorClientConfigSchema, brandGenerateUrl, brandHistoryUrl, GeneratorPluginClient } from "./src/brand.ts";
7
+ export type { BrandGenerationRequest, BrandPackageSource, BrandVisualImage, BrandVisualReference, BrandPackage, BrandHistoryEntry, BrandHistoryResponse, BrandGenerationStage, BrandGenerationProgressEvent, BrandGenerationResultEvent, BrandGenerationErrorEvent, BrandGenerationEvent, GeneratorClientConfig, BrandGenerationStreamOptions } from "./src/brand.ts";
8
8
  export { ResearchedKpiSchema, KpiResearchRequestSchema, KpiResearchResultSchema } from "./src/kpi.ts";
9
9
  export type { ResearchedKpi, KpiResearchRequest, KpiResearchResult } from "./src/kpi.ts";
10
10
  export { PresentationModeSchema, GeneratorRequestSchema, GeneratedColumnSchema, GeneratedMetricSchema, GeneratorPlanSchema, PlanGeneratorDataRequestSchema, GeneratedSchemaSchema, ProvisionGeneratorSchemaRequestSchema, MaterializeGeneratorDataRequestSchema, MaterializedGeneratorDataSchema, CreateGeneratorPresentationRequestSchema, GeneratedDashboardSchema, GeneratedGenieSpaceSchema, GeneratedAssetsSchema } from "./src/workflow.ts";
package/lib/index.js CHANGED
@@ -2,11 +2,11 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-generator";
5
- export const PACKAGE_VERSION = "0.9.163";
5
+ export const PACKAGE_VERSION = "0.9.165";
6
6
  export * as brand from "./src/brand.js";
7
7
  export * as kpi from "./src/kpi.js";
8
8
  export * as workflow from "./src/workflow.js";
9
- export { GENERATOR_PLUGIN_NAME, GENERATOR_BASE_PATH, GENERATOR_ROUTES, BrandGenerationRequestSchema, BrandPackageSourceSchema, BrandVisualImageSchema, BrandVisualReferenceSchema, BrandPackageSchema, BrandGenerationStageSchema, BrandGenerationProgressEventSchema, BrandGenerationResultEventSchema, BrandGenerationErrorEventSchema, BrandGenerationEventSchema, GeneratorClientConfigSchema, brandGenerateUrl, GeneratorPluginClient } from "./src/brand.js";
9
+ export { GENERATOR_PLUGIN_NAME, GENERATOR_BASE_PATH, GENERATOR_ROUTES, BrandGenerationRequestSchema, BrandPackageSourceSchema, BrandVisualImageSchema, BrandVisualReferenceSchema, BrandPackageSchema, BrandHistoryEntrySchema, BrandHistoryResponseSchema, BrandGenerationStageSchema, BrandGenerationProgressEventSchema, BrandGenerationResultEventSchema, BrandGenerationErrorEventSchema, BrandGenerationEventSchema, GeneratorClientConfigSchema, brandGenerateUrl, brandHistoryUrl, GeneratorPluginClient } from "./src/brand.js";
10
10
  export { ResearchedKpiSchema, KpiResearchRequestSchema, KpiResearchResultSchema } from "./src/kpi.js";
11
11
  export { PresentationModeSchema, GeneratorRequestSchema, GeneratedColumnSchema, GeneratedMetricSchema, GeneratorPlanSchema, PlanGeneratorDataRequestSchema, GeneratedSchemaSchema, ProvisionGeneratorSchemaRequestSchema, MaterializeGeneratorDataRequestSchema, MaterializedGeneratorDataSchema, CreateGeneratorPresentationRequestSchema, GeneratedDashboardSchema, GeneratedGenieSpaceSchema, GeneratedAssetsSchema } from "./src/workflow.js";
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyw2QkFBNkIsQ0FBQztBQUNoRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsNEJBQTRCLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsa0NBQWtDLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuYyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLDhCQUE4QixFQUFFLHFCQUFxQixFQUFFLHFDQUFxQyxFQUFFLHFDQUFxQyxFQUFFLCtCQUErQixFQUFFLHdDQUF3QyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5lcmF0b3JcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xNjNcIjtcbmV4cG9ydCAqIGFzIGJyYW5kIGZyb20gXCIuL3NyYy9icmFuZC50c1wiO1xuZXhwb3J0ICogYXMga3BpIGZyb20gXCIuL3NyYy9rcGkudHNcIjtcbmV4cG9ydCAqIGFzIHdvcmtmbG93IGZyb20gXCIuL3NyYy93b3JrZmxvdy50c1wiO1xuZXhwb3J0IHsgR0VORVJBVE9SX1BMVUdJTl9OQU1FLCBHRU5FUkFUT1JfQkFTRV9QQVRILCBHRU5FUkFUT1JfUk9VVEVTLCBCcmFuZEdlbmVyYXRpb25SZXF1ZXN0U2NoZW1hLCBCcmFuZFBhY2thZ2VTb3VyY2VTY2hlbWEsIEJyYW5kVmlzdWFsSW1hZ2VTY2hlbWEsIEJyYW5kVmlzdWFsUmVmZXJlbmNlU2NoZW1hLCBCcmFuZFBhY2thZ2VTY2hlbWEsIEJyYW5kR2VuZXJhdGlvblN0YWdlU2NoZW1hLCBCcmFuZEdlbmVyYXRpb25Qcm9ncmVzc0V2ZW50U2NoZW1hLCBCcmFuZEdlbmVyYXRpb25SZXN1bHRFdmVudFNjaGVtYSwgQnJhbmRHZW5lcmF0aW9uRXJyb3JFdmVudFNjaGVtYSwgQnJhbmRHZW5lcmF0aW9uRXZlbnRTY2hlbWEsIEdlbmVyYXRvckNsaWVudENvbmZpZ1NjaGVtYSwgYnJhbmRHZW5lcmF0ZVVybCwgR2VuZXJhdG9yUGx1Z2luQ2xpZW50IH0gZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kR2VuZXJhdGlvblJlcXVlc3QsIEJyYW5kUGFja2FnZVNvdXJjZSwgQnJhbmRWaXN1YWxJbWFnZSwgQnJhbmRWaXN1YWxSZWZlcmVuY2UsIEJyYW5kUGFja2FnZSwgQnJhbmRHZW5lcmF0aW9uU3RhZ2UsIEJyYW5kR2VuZXJhdGlvblByb2dyZXNzRXZlbnQsIEJyYW5kR2VuZXJhdGlvblJlc3VsdEV2ZW50LCBCcmFuZEdlbmVyYXRpb25FcnJvckV2ZW50LCBCcmFuZEdlbmVyYXRpb25FdmVudCwgR2VuZXJhdG9yQ2xpZW50Q29uZmlnLCBCcmFuZEdlbmVyYXRpb25TdHJlYW1PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgeyBSZXNlYXJjaGVkS3BpU2NoZW1hLCBLcGlSZXNlYXJjaFJlcXVlc3RTY2hlbWEsIEtwaVJlc2VhcmNoUmVzdWx0U2NoZW1hIH0gZnJvbSBcIi4vc3JjL2twaS50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXNlYXJjaGVkS3BpLCBLcGlSZXNlYXJjaFJlcXVlc3QsIEtwaVJlc2VhcmNoUmVzdWx0IH0gZnJvbSBcIi4vc3JjL2twaS50c1wiO1xuZXhwb3J0IHsgUHJlc2VudGF0aW9uTW9kZVNjaGVtYSwgR2VuZXJhdG9yUmVxdWVzdFNjaGVtYSwgR2VuZXJhdGVkQ29sdW1uU2NoZW1hLCBHZW5lcmF0ZWRNZXRyaWNTY2hlbWEsIEdlbmVyYXRvclBsYW5TY2hlbWEsIFBsYW5HZW5lcmF0b3JEYXRhUmVxdWVzdFNjaGVtYSwgR2VuZXJhdGVkU2NoZW1hU2NoZW1hLCBQcm92aXNpb25HZW5lcmF0b3JTY2hlbWFSZXF1ZXN0U2NoZW1hLCBNYXRlcmlhbGl6ZUdlbmVyYXRvckRhdGFSZXF1ZXN0U2NoZW1hLCBNYXRlcmlhbGl6ZWRHZW5lcmF0b3JEYXRhU2NoZW1hLCBDcmVhdGVHZW5lcmF0b3JQcmVzZW50YXRpb25SZXF1ZXN0U2NoZW1hLCBHZW5lcmF0ZWREYXNoYm9hcmRTY2hlbWEsIEdlbmVyYXRlZEdlbmllU3BhY2VTY2hlbWEsIEdlbmVyYXRlZEFzc2V0c1NjaGVtYSB9IGZyb20gXCIuL3NyYy93b3JrZmxvdy50c1wiO1xuZXhwb3J0IHR5cGUgeyBQcmVzZW50YXRpb25Nb2RlLCBHZW5lcmF0b3JSZXF1ZXN0LCBHZW5lcmF0ZWRDb2x1bW4sIEdlbmVyYXRlZE1ldHJpYywgR2VuZXJhdG9yUGxhbiwgUGxhbkdlbmVyYXRvckRhdGFSZXF1ZXN0LCBHZW5lcmF0ZWRTY2hlbWEsIFByb3Zpc2lvbkdlbmVyYXRvclNjaGVtYVJlcXVlc3QsIE1hdGVyaWFsaXplR2VuZXJhdG9yRGF0YVJlcXVlc3QsIE1hdGVyaWFsaXplZEdlbmVyYXRvckRhdGEsIENyZWF0ZUdlbmVyYXRvclByZXNlbnRhdGlvblJlcXVlc3QsIEdlbmVyYXRlZERhc2hib2FyZCwgR2VuZXJhdGVkR2VuaWVTcGFjZSwgR2VuZXJhdGVkQXNzZXRzIH0gZnJvbSBcIi4vc3JjL3dvcmtmbG93LnRzXCI7XG4iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyw2QkFBNkIsQ0FBQztBQUNoRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsNEJBQTRCLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsa0NBQWtDLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFemdCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsOEJBQThCLEVBQUUscUJBQXFCLEVBQUUscUNBQXFDLEVBQUUscUNBQXFDLEVBQUUsK0JBQStCLEVBQUUsd0NBQXdDLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmVyYXRvclwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE2NVwiO1xuZXhwb3J0ICogYXMgYnJhbmQgZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgKiBhcyBrcGkgZnJvbSBcIi4vc3JjL2twaS50c1wiO1xuZXhwb3J0ICogYXMgd29ya2Zsb3cgZnJvbSBcIi4vc3JjL3dvcmtmbG93LnRzXCI7XG5leHBvcnQgeyBHRU5FUkFUT1JfUExVR0lOX05BTUUsIEdFTkVSQVRPUl9CQVNFX1BBVEgsIEdFTkVSQVRPUl9ST1VURVMsIEJyYW5kR2VuZXJhdGlvblJlcXVlc3RTY2hlbWEsIEJyYW5kUGFja2FnZVNvdXJjZVNjaGVtYSwgQnJhbmRWaXN1YWxJbWFnZVNjaGVtYSwgQnJhbmRWaXN1YWxSZWZlcmVuY2VTY2hlbWEsIEJyYW5kUGFja2FnZVNjaGVtYSwgQnJhbmRIaXN0b3J5RW50cnlTY2hlbWEsIEJyYW5kSGlzdG9yeVJlc3BvbnNlU2NoZW1hLCBCcmFuZEdlbmVyYXRpb25TdGFnZVNjaGVtYSwgQnJhbmRHZW5lcmF0aW9uUHJvZ3Jlc3NFdmVudFNjaGVtYSwgQnJhbmRHZW5lcmF0aW9uUmVzdWx0RXZlbnRTY2hlbWEsIEJyYW5kR2VuZXJhdGlvbkVycm9yRXZlbnRTY2hlbWEsIEJyYW5kR2VuZXJhdGlvbkV2ZW50U2NoZW1hLCBHZW5lcmF0b3JDbGllbnRDb25maWdTY2hlbWEsIGJyYW5kR2VuZXJhdGVVcmwsIGJyYW5kSGlzdG9yeVVybCwgR2VuZXJhdG9yUGx1Z2luQ2xpZW50IH0gZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kR2VuZXJhdGlvblJlcXVlc3QsIEJyYW5kUGFja2FnZVNvdXJjZSwgQnJhbmRWaXN1YWxJbWFnZSwgQnJhbmRWaXN1YWxSZWZlcmVuY2UsIEJyYW5kUGFja2FnZSwgQnJhbmRIaXN0b3J5RW50cnksIEJyYW5kSGlzdG9yeVJlc3BvbnNlLCBCcmFuZEdlbmVyYXRpb25TdGFnZSwgQnJhbmRHZW5lcmF0aW9uUHJvZ3Jlc3NFdmVudCwgQnJhbmRHZW5lcmF0aW9uUmVzdWx0RXZlbnQsIEJyYW5kR2VuZXJhdGlvbkVycm9yRXZlbnQsIEJyYW5kR2VuZXJhdGlvbkV2ZW50LCBHZW5lcmF0b3JDbGllbnRDb25maWcsIEJyYW5kR2VuZXJhdGlvblN0cmVhbU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvYnJhbmQudHNcIjtcbmV4cG9ydCB7IFJlc2VhcmNoZWRLcGlTY2hlbWEsIEtwaVJlc2VhcmNoUmVxdWVzdFNjaGVtYSwgS3BpUmVzZWFyY2hSZXN1bHRTY2hlbWEgfSBmcm9tIFwiLi9zcmMva3BpLnRzXCI7XG5leHBvcnQgdHlwZSB7IFJlc2VhcmNoZWRLcGksIEtwaVJlc2VhcmNoUmVxdWVzdCwgS3BpUmVzZWFyY2hSZXN1bHQgfSBmcm9tIFwiLi9zcmMva3BpLnRzXCI7XG5leHBvcnQgeyBQcmVzZW50YXRpb25Nb2RlU2NoZW1hLCBHZW5lcmF0b3JSZXF1ZXN0U2NoZW1hLCBHZW5lcmF0ZWRDb2x1bW5TY2hlbWEsIEdlbmVyYXRlZE1ldHJpY1NjaGVtYSwgR2VuZXJhdG9yUGxhblNjaGVtYSwgUGxhbkdlbmVyYXRvckRhdGFSZXF1ZXN0U2NoZW1hLCBHZW5lcmF0ZWRTY2hlbWFTY2hlbWEsIFByb3Zpc2lvbkdlbmVyYXRvclNjaGVtYVJlcXVlc3RTY2hlbWEsIE1hdGVyaWFsaXplR2VuZXJhdG9yRGF0YVJlcXVlc3RTY2hlbWEsIE1hdGVyaWFsaXplZEdlbmVyYXRvckRhdGFTY2hlbWEsIENyZWF0ZUdlbmVyYXRvclByZXNlbnRhdGlvblJlcXVlc3RTY2hlbWEsIEdlbmVyYXRlZERhc2hib2FyZFNjaGVtYSwgR2VuZXJhdGVkR2VuaWVTcGFjZVNjaGVtYSwgR2VuZXJhdGVkQXNzZXRzU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3dvcmtmbG93LnRzXCI7XG5leHBvcnQgdHlwZSB7IFByZXNlbnRhdGlvbk1vZGUsIEdlbmVyYXRvclJlcXVlc3QsIEdlbmVyYXRlZENvbHVtbiwgR2VuZXJhdGVkTWV0cmljLCBHZW5lcmF0b3JQbGFuLCBQbGFuR2VuZXJhdG9yRGF0YVJlcXVlc3QsIEdlbmVyYXRlZFNjaGVtYSwgUHJvdmlzaW9uR2VuZXJhdG9yU2NoZW1hUmVxdWVzdCwgTWF0ZXJpYWxpemVHZW5lcmF0b3JEYXRhUmVxdWVzdCwgTWF0ZXJpYWxpemVkR2VuZXJhdG9yRGF0YSwgQ3JlYXRlR2VuZXJhdG9yUHJlc2VudGF0aW9uUmVxdWVzdCwgR2VuZXJhdGVkRGFzaGJvYXJkLCBHZW5lcmF0ZWRHZW5pZVNwYWNlLCBHZW5lcmF0ZWRBc3NldHMgfSBmcm9tIFwiLi9zcmMvd29ya2Zsb3cudHNcIjtcbiJdfQ==
@@ -11,6 +11,7 @@ export declare const GENERATOR_BASE_PATH = "/api/generator";
11
11
  /** Mount-relative route segments owned by the generator plugin. */
12
12
  export declare const GENERATOR_ROUTES: {
13
13
  readonly generateBrand: "/brand/generate";
14
+ readonly brandHistory: "/brand/history";
14
15
  };
15
16
  /** Input accepted by brand generation. */
16
17
  export declare const BrandGenerationRequestSchema: z.ZodObject<{
@@ -121,6 +122,162 @@ export declare const BrandPackageSchema: z.ZodObject<{
121
122
  }, z.core.$strict>;
122
123
  /** Generated branding package. */
123
124
  export type BrandPackage = z.infer<typeof BrandPackageSchema>;
125
+ /** One persisted generated brand available to the browser picker. */
126
+ export declare const BrandHistoryEntrySchema: z.ZodObject<{
127
+ id: z.ZodString;
128
+ request: z.ZodObject<{
129
+ name: z.ZodOptional<z.ZodString>;
130
+ prompt: z.ZodOptional<z.ZodString>;
131
+ website: z.ZodOptional<z.ZodString>;
132
+ }, z.core.$strict>;
133
+ generatedAt: z.ZodISODateTime;
134
+ package: z.ZodObject<{
135
+ brand: z.ZodObject<{
136
+ schemaVersion: z.ZodDefault<z.ZodLiteral<"1">>;
137
+ name: z.ZodDefault<z.ZodString>;
138
+ shortName: z.ZodDefault<z.ZodString>;
139
+ tagline: z.ZodOptional<z.ZodString>;
140
+ description: z.ZodDefault<z.ZodString>;
141
+ assets: z.ZodDefault<z.ZodObject<{
142
+ icon: z.ZodDefault<z.ZodObject<{
143
+ light: z.ZodString;
144
+ dark: z.ZodOptional<z.ZodString>;
145
+ }, z.core.$strict>>;
146
+ logo: z.ZodDefault<z.ZodObject<{
147
+ light: z.ZodString;
148
+ dark: z.ZodOptional<z.ZodString>;
149
+ }, z.core.$strict>>;
150
+ favicon: z.ZodDefault<z.ZodString>;
151
+ }, z.core.$strict>>;
152
+ colors: z.ZodPrefault<z.ZodObject<{
153
+ primary: z.ZodDefault<z.ZodString>;
154
+ primaryHover: z.ZodDefault<z.ZodString>;
155
+ accent: z.ZodDefault<z.ZodString>;
156
+ foreground: z.ZodDefault<z.ZodString>;
157
+ background: z.ZodDefault<z.ZodString>;
158
+ surface: z.ZodDefault<z.ZodString>;
159
+ muted: z.ZodDefault<z.ZodString>;
160
+ border: z.ZodDefault<z.ZodString>;
161
+ }, z.core.$strict>>;
162
+ typography: z.ZodPrefault<z.ZodObject<{
163
+ sans: z.ZodDefault<z.ZodString>;
164
+ mono: z.ZodDefault<z.ZodString>;
165
+ }, z.core.$strict>>;
166
+ voice: z.ZodPrefault<z.ZodObject<{
167
+ audience: z.ZodDefault<z.ZodArray<z.ZodString>>;
168
+ tone: z.ZodDefault<z.ZodArray<z.ZodString>>;
169
+ principles: z.ZodDefault<z.ZodArray<z.ZodString>>;
170
+ avoid: z.ZodDefault<z.ZodArray<z.ZodString>>;
171
+ }, z.core.$strict>>;
172
+ links: z.ZodPrefault<z.ZodObject<{
173
+ website: z.ZodDefault<z.ZodString>;
174
+ repository: z.ZodOptional<z.ZodString>;
175
+ documentation: z.ZodDefault<z.ZodString>;
176
+ }, z.core.$strict>>;
177
+ extensions: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
178
+ }, z.core.$strict>;
179
+ sources: z.ZodArray<z.ZodObject<{
180
+ url: z.ZodString;
181
+ title: z.ZodOptional<z.ZodString>;
182
+ snippet: z.ZodOptional<z.ZodString>;
183
+ fetched: z.ZodBoolean;
184
+ }, z.core.$strict>>;
185
+ visualReferences: z.ZodDefault<z.ZodArray<z.ZodObject<{
186
+ platform: z.ZodEnum<{
187
+ ios: "ios";
188
+ android: "android";
189
+ }>;
190
+ appName: z.ZodString;
191
+ pageUrl: z.ZodString;
192
+ images: z.ZodArray<z.ZodObject<{
193
+ url: z.ZodString;
194
+ contentType: z.ZodOptional<z.ZodString>;
195
+ localPath: z.ZodOptional<z.ZodString>;
196
+ }, z.core.$strict>>;
197
+ }, z.core.$strict>>>;
198
+ }, z.core.$strict>;
199
+ }, z.core.$strict>;
200
+ /** Persisted generated brand available to one user. */
201
+ export type BrandHistoryEntry = z.infer<typeof BrandHistoryEntrySchema>;
202
+ /** Browser response containing the current user's generated brands. */
203
+ export declare const BrandHistoryResponseSchema: z.ZodObject<{
204
+ brands: z.ZodArray<z.ZodObject<{
205
+ id: z.ZodString;
206
+ request: z.ZodObject<{
207
+ name: z.ZodOptional<z.ZodString>;
208
+ prompt: z.ZodOptional<z.ZodString>;
209
+ website: z.ZodOptional<z.ZodString>;
210
+ }, z.core.$strict>;
211
+ generatedAt: z.ZodISODateTime;
212
+ package: z.ZodObject<{
213
+ brand: z.ZodObject<{
214
+ schemaVersion: z.ZodDefault<z.ZodLiteral<"1">>;
215
+ name: z.ZodDefault<z.ZodString>;
216
+ shortName: z.ZodDefault<z.ZodString>;
217
+ tagline: z.ZodOptional<z.ZodString>;
218
+ description: z.ZodDefault<z.ZodString>;
219
+ assets: z.ZodDefault<z.ZodObject<{
220
+ icon: z.ZodDefault<z.ZodObject<{
221
+ light: z.ZodString;
222
+ dark: z.ZodOptional<z.ZodString>;
223
+ }, z.core.$strict>>;
224
+ logo: z.ZodDefault<z.ZodObject<{
225
+ light: z.ZodString;
226
+ dark: z.ZodOptional<z.ZodString>;
227
+ }, z.core.$strict>>;
228
+ favicon: z.ZodDefault<z.ZodString>;
229
+ }, z.core.$strict>>;
230
+ colors: z.ZodPrefault<z.ZodObject<{
231
+ primary: z.ZodDefault<z.ZodString>;
232
+ primaryHover: z.ZodDefault<z.ZodString>;
233
+ accent: z.ZodDefault<z.ZodString>;
234
+ foreground: z.ZodDefault<z.ZodString>;
235
+ background: z.ZodDefault<z.ZodString>;
236
+ surface: z.ZodDefault<z.ZodString>;
237
+ muted: z.ZodDefault<z.ZodString>;
238
+ border: z.ZodDefault<z.ZodString>;
239
+ }, z.core.$strict>>;
240
+ typography: z.ZodPrefault<z.ZodObject<{
241
+ sans: z.ZodDefault<z.ZodString>;
242
+ mono: z.ZodDefault<z.ZodString>;
243
+ }, z.core.$strict>>;
244
+ voice: z.ZodPrefault<z.ZodObject<{
245
+ audience: z.ZodDefault<z.ZodArray<z.ZodString>>;
246
+ tone: z.ZodDefault<z.ZodArray<z.ZodString>>;
247
+ principles: z.ZodDefault<z.ZodArray<z.ZodString>>;
248
+ avoid: z.ZodDefault<z.ZodArray<z.ZodString>>;
249
+ }, z.core.$strict>>;
250
+ links: z.ZodPrefault<z.ZodObject<{
251
+ website: z.ZodDefault<z.ZodString>;
252
+ repository: z.ZodOptional<z.ZodString>;
253
+ documentation: z.ZodDefault<z.ZodString>;
254
+ }, z.core.$strict>>;
255
+ extensions: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
256
+ }, z.core.$strict>;
257
+ sources: z.ZodArray<z.ZodObject<{
258
+ url: z.ZodString;
259
+ title: z.ZodOptional<z.ZodString>;
260
+ snippet: z.ZodOptional<z.ZodString>;
261
+ fetched: z.ZodBoolean;
262
+ }, z.core.$strict>>;
263
+ visualReferences: z.ZodDefault<z.ZodArray<z.ZodObject<{
264
+ platform: z.ZodEnum<{
265
+ ios: "ios";
266
+ android: "android";
267
+ }>;
268
+ appName: z.ZodString;
269
+ pageUrl: z.ZodString;
270
+ images: z.ZodArray<z.ZodObject<{
271
+ url: z.ZodString;
272
+ contentType: z.ZodOptional<z.ZodString>;
273
+ localPath: z.ZodOptional<z.ZodString>;
274
+ }, z.core.$strict>>;
275
+ }, z.core.$strict>>>;
276
+ }, z.core.$strict>;
277
+ }, z.core.$strict>>;
278
+ }, z.core.$strict>;
279
+ /** Current user's persisted generated-brand history. */
280
+ export type BrandHistoryResponse = z.infer<typeof BrandHistoryResponseSchema>;
124
281
  /** Observable stages in one brand-generation workflow. */
125
282
  export declare const BrandGenerationStageSchema: z.ZodEnum<{
126
283
  search: "search";
@@ -326,6 +483,8 @@ export interface BrandGenerationStreamOptions {
326
483
  }
327
484
  /** Build the brand endpoint from the generator plugin's published base path. */
328
485
  export declare function brandGenerateUrl(basePath?: string): string;
486
+ /** Build the generated-brand history endpoint from the published base path. */
487
+ export declare function brandHistoryUrl(basePath?: string): string;
329
488
  /** Browser client for the generator plugin's streamed routes. */
330
489
  export declare class GeneratorPluginClient {
331
490
  private readonly config;
@@ -333,4 +492,6 @@ export declare class GeneratorPluginClient {
333
492
  constructor(config: GeneratorClientConfig);
334
493
  /** Generate a brand while yielding validated progress and terminal events. */
335
494
  generate(input: BrandGenerationRequest, options?: BrandGenerationStreamOptions): AsyncGenerator<BrandGenerationEvent>;
495
+ /** List the current user's persisted generated brands, newest first. */
496
+ brandHistory(options?: BrandGenerationStreamOptions): Promise<BrandHistoryEntry[]>;
336
497
  }
package/lib/src/brand.js CHANGED
@@ -13,6 +13,7 @@ export const GENERATOR_BASE_PATH = `/api/${GENERATOR_PLUGIN_NAME}`;
13
13
  /** Mount-relative route segments owned by the generator plugin. */
14
14
  export const GENERATOR_ROUTES = {
15
15
  generateBrand: "/brand/generate",
16
+ brandHistory: "/brand/history",
16
17
  };
17
18
  /** Input accepted by brand generation. */
18
19
  export const BrandGenerationRequestSchema = z
@@ -85,6 +86,23 @@ export const BrandPackageSchema = z
85
86
  })
86
87
  .strict()
87
88
  .describe("Generated branding package and its web research provenance.");
89
+ /** One persisted generated brand available to the browser picker. */
90
+ export const BrandHistoryEntrySchema = z
91
+ .object({
92
+ id: nonBlankString.describe("Stable request-derived brand history identifier."),
93
+ request: BrandGenerationRequestSchema.describe("Free-form request that generated the brand."),
94
+ generatedAt: z.iso.datetime().describe("Time the generated brand was stored."),
95
+ package: BrandPackageSchema.describe("Cached generated branding package."),
96
+ })
97
+ .strict()
98
+ .describe("Persisted generated brand available to one user.");
99
+ /** Browser response containing the current user's generated brands. */
100
+ export const BrandHistoryResponseSchema = z
101
+ .object({
102
+ brands: z.array(BrandHistoryEntrySchema).describe("Generated brands, newest first."),
103
+ })
104
+ .strict()
105
+ .describe("Current user's persisted generated-brand history.");
88
106
  /** Observable stages in one brand-generation workflow. */
89
107
  export const BrandGenerationStageSchema = z.enum([
90
108
  "search",
@@ -137,6 +155,10 @@ export const GeneratorClientConfigSchema = z
137
155
  export function brandGenerateUrl(basePath = GENERATOR_BASE_PATH) {
138
156
  return `${basePath.replace(/\/+$/, "")}${GENERATOR_ROUTES.generateBrand}`;
139
157
  }
158
+ /** Build the generated-brand history endpoint from the published base path. */
159
+ export function brandHistoryUrl(basePath = GENERATOR_BASE_PATH) {
160
+ return `${basePath.replace(/\/+$/, "")}${GENERATOR_ROUTES.brandHistory}`;
161
+ }
140
162
  /** Parse one complete SSE frame into its validated brand event. */
141
163
  function parseEventFrame(frame) {
142
164
  const data = frame
@@ -208,5 +230,17 @@ export class GeneratorPluginClient {
208
230
  if (event)
209
231
  yield event;
210
232
  }
233
+ /** List the current user's persisted generated brands, newest first. */
234
+ async brandHistory(options = {}) {
235
+ const fetcher = options.fetch ?? globalThis.fetch.bind(globalThis);
236
+ const response = await fetcher(brandHistoryUrl(this.config.basePath), {
237
+ method: "GET",
238
+ headers: { Accept: "application/json" },
239
+ ...(options.signal ? { signal: options.signal } : {}),
240
+ });
241
+ if (!response.ok)
242
+ throw new Error(await responseError(response));
243
+ return BrandHistoryResponseSchema.parse(await response.json()).brands;
244
+ }
211
245
  }
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnJhbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVoRCwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDO0FBRWpELDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLHFCQUFxQixFQUFFLENBQUM7QUFFbkUsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLGFBQWEsRUFBRSxpQkFBaUI7Q0FDeEIsQ0FBQztBQUVYLDBDQUEwQztBQUMxQyxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDO0tBQzFDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxjQUFjO1NBQ2pCLEdBQUcsQ0FBQyxHQUFHLENBQUM7U0FDUixRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMsNkNBQTZDLENBQUM7SUFDMUQsTUFBTSxFQUFFLGNBQWM7U0FDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQztTQUNWLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQywwREFBMEQsQ0FBQztJQUN2RSxPQUFPLEVBQUUsQ0FBQztTQUNQLE1BQU0sRUFBRTtTQUNSLEdBQUcsRUFBRTtTQUNMLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxnQ0FBZ0MsQ0FBQztTQUN6RixRQUFRLEVB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LENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNyQixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDekQsSUFBSSxLQUFLO29CQUFFLE1BQU0sS0FBSyxDQUFDO2dCQUN2QixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxJQUFJLElBQUk7Z0JBQUUsTUFBTTtRQUNsQixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLElBQUksS0FBSztZQUFFLE1BQU0sS0FBSyxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnJvd3Nlci1zYWZlIGNvbnRyYWN0cyBhbmQgY2xpZW50IGZvciBBcHBLaXQgYnJhbmQgZ2VuZXJhdGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQnJhbmRDb250ZXh0U2NoZW1hIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IG5vbkJsYW5rU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkubWluKDEpO1xuXG4vKiogUmVnaXN0ZXJlZCBBcHBLaXQgZ2VuZXJhdG9yIHBsdWdpbiBuYW1lLiAqL1xuZXhwb3J0IGNvbnN0IEdFTkVSQVRPUl9QTFVHSU5fTkFNRSA9IFwiZ2VuZXJhdG9yXCI7XG5cbi8qKiBEZWZhdWx0IHJvdXRlIHByZWZpeCBwdWJsaXNoZWQgYnkgdGhlIGdlbmVyYXRvciBwbHVnaW4uICovXG5leHBvcnQgY29uc3QgR0VORVJBVE9SX0JBU0VfUEFUSCA9IGAvYXBpLyR7R0VORVJBVE9SX1BMVUdJTl9OQU1FfWA7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSBzZWdtZW50cyBvd25lZCBieSB0aGUgZ2VuZXJhdG9yIHBsdWdpbi4gKi9cbmV4cG9ydCBjb25zdCBHRU5FUkFUT1JfUk9VVEVTID0ge1xuICBnZW5lcmF0ZUJyYW5kOiBcIi9icmFuZC9nZW5lcmF0ZVwiLFxufSBhcyBjb25zdDtcblxuLyoqIElucHV0IGFjY2VwdGVkIGJ5IGJyYW5kIGdlbmVyYXRpb24uICovXG5leHBvcnQgY29uc3QgQnJhbmRHZW5lcmF0aW9uUmVxdWVzdFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgbmFtZTogbm9uQmxhbmtTdHJpbmdcbiAgICAgIC5tYXgoMjAwKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIktub3duIGJyYW5kLCBvcmdhbml6YXRpb24sIG9yIHByb2R1Y3QgbmFtZS5cIiksXG4gICAgcHJvbXB0OiBub25CbGFua1N0cmluZ1xuICAgICAgLm1heCgyXzAwMClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJPcGVuLWVuZGVkIGJyYW5kIGJyaWVmIHVzZWQgZm9yIHJlc2VhcmNoIGFuZCBnZW5lcmF0aW9uLlwiKSxcbiAgICB3ZWJzaXRlOiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC51cmwoKVxuICAgICAgLnJlZmluZSgodmFsdWUpID0+IG5ldyBVUkwodmFsdWUpLnByb3RvY29sID09PSBcImh0dHBzOlwiLCBcIkV4cGVjdGVkIGFuIEhUVFBTIHdlYnNpdGUgVVJMLlwiKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIktub3duIG9mZmljaWFsIHdlYnNpdGUgdXNlZCB0byBkaXNhbWJpZ3VhdGUgdGhlIGJyYW5kLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5yZWZpbmUoKHZhbHVlKSA9PiB2YWx1ZS5uYW1lICE9PSB1bmRlZmluZWQgfHwgdmFsdWUucHJvbXB0ICE9PSB1bmRlZmluZWQsIHtcbiAgICBtZXNzYWdlOiBcIkJyYW5kIGdlbmVyYXRpb24gcmVxdWlyZXMgYSBuYW1lIG9yIHByb21wdC5cIixcbiAgfSlcbiAgLmRlc2NyaWJlKFwiUmVxdWVzdCB0byByZXNlYXJjaCBvbmUgYnJhbmQgYW5kIGdlbmVyYXRlIGl0cyBwb3J0YWJsZSBicmFuZGluZyBwYWNrYWdlLlwiKTtcblxuLyoqIFZhbGlkYXRlZCBicmFuZC1nZW5lcmF0aW9uIHJlcXVlc3QuICovXG5leHBvcnQgdHlwZSBCcmFuZEdlbmVyYXRpb25SZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgQnJhbmRHZW5lcmF0aW9uUmVxdWVzdFNjaGVtYT47XG5cbi8qKiBBIGNpdGVkIHNvdXJjZSBhbmQgd2hldGhlciBpdHMgcGFnZSBjb250ZW50IHdhcyBhdmFpbGFibGUgdG8gc3ludGhlc2lzLiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kUGFja2FnZVNvdXJjZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdXJsOiB6LnN0cmluZygpLnVybCgpLmRlc2NyaWJlKFwiU291cmNlIFVSTCB1c2VkIGR1cmluZyBicmFuZCByZXNlYXJjaC5cIiksXG4gICAgdGl0bGU6IG5vbkJsYW5rU3RyaW5nLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJTb3VyY2UgcGFnZSB0aXRsZSwgd2hlbiBhdmFpbGFibGUuXCIpLFxuICAgIHNuaXBwZXQ6IG5vbkJsYW5rU3RyaW5nLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJTZWFyY2gtcmVzdWx0IGV4Y2VycHQsIHdoZW4gYXZhaWxhYmxlLlwiKSxcbiAgICBmZXRjaGVkOiB6XG4gICAgICAuYm9vbGVhbigpXG4gICAgICAuZGVzY3JpYmUoXCJUcnVlIHdoZW4gd2ViX2ZldGNoIHJldHVybmVkIHBhZ2UgY29udGVudCB1c2VkIGR1cmluZyBzeW50aGVzaXMuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiV2ViIHNvdXJjZSB1c2VkIHRvIHJlc2VhcmNoIHRoZSBnZW5lcmF0ZWQgYnJhbmQuXCIpO1xuXG4vKiogU291cmNlIHByb3ZlbmFuY2UgaW5jbHVkZWQgaW4gYSBnZW5lcmF0ZWQgYnJhbmRpbmcgcGFja2FnZS4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kUGFja2FnZVNvdXJjZSA9IHouaW5mZXI8dHlwZW9mIEJyYW5kUGFja2FnZVNvdXJjZVNjaGVtYT47XG5cbi8qKiBPbmUgZmV0Y2hlZCBtb2JpbGUtYXBwIGltYWdlIHVzZWQgYXMgdmlzdWFsIGJyYW5kIHJlc2VhcmNoLiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kVmlzdWFsSW1hZ2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHVybDogei5zdHJpbmcoKS51cmwoKS5kZXNjcmliZShcIk9yaWdpbmFsIG1vYmlsZS1zdG9yZSBpbWFnZSBVUkwuXCIpLFxuICAgIGNvbnRlbnRUeXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJGZXRjaGVkIGltYWdlIG1lZGlhIHR5cGUuXCIpLFxuICAgIGxvY2FsUGF0aDogelxuICAgICAgLnN0cmluZygpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiUGFja2FnZS1yZWxhdGl2ZSBleHBvcnRlZCBpbWFnZSBwYXRoLCB3aGVuIHdyaXR0ZW4gYnkgYSBDTEkuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiTW9iaWxlLXN0b3JlIGltYWdlIHJlZmVyZW5jZSB1c2VkIGZvciBicmFuZCBpbnNwaXJhdGlvbi5cIik7XG5cbi8qKiBNb2JpbGUtc3RvcmUgaW1hZ2UgdXNlZCBhcyB2aXN1YWwgYnJhbmQgcmVzZWFyY2guICovXG5leHBvcnQgdHlwZSBCcmFuZFZpc3VhbEltYWdlID0gei5pbmZlcjx0eXBlb2YgQnJhbmRWaXN1YWxJbWFnZVNjaGVtYT47XG5cbi8qKiBBcHAgU3RvcmUgb3IgUGxheSBTdG9yZSBwYWdlIGFuZCBpdHMgdmlzdWFsIHJlZmVyZW5jZXMuICovXG5leHBvcnQgY29uc3QgQnJhbmRWaXN1YWxSZWZlcmVuY2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHBsYXRmb3JtOiB6LmVudW0oW1wiaW9zXCIsIFwiYW5kcm9pZFwiXSkuZGVzY3JpYmUoXCJNb2JpbGUgYXBwbGljYXRpb24gcGxhdGZvcm0uXCIpLFxuICAgIGFwcE5hbWU6IG5vbkJsYW5rU3RyaW5nLmRlc2NyaWJlKFwiQXBwbGljYXRpb24gbmFtZSByZWFkIGZyb20gdGhlIHN0b3JlIHBhZ2UuXCIpLFxuICAgIHBhZ2VVcmw6IHouc3RyaW5nKCkudXJsKCkuZGVzY3JpYmUoXCJPZmZpY2lhbCBhcHBsaWNhdGlvbi1zdG9yZSBwYWdlLlwiKSxcbiAgICBpbWFnZXM6IHouYXJyYXkoQnJhbmRWaXN1YWxJbWFnZVNjaGVtYSkuZGVzY3JpYmUoXCJGZXRjaGVkIGFwcCBpY29uIG9yIHNjcmVlbnNob3RzLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIk1vYmlsZSBhcHBsaWNhdGlvbiB2aXN1YWxzIGNvbnN1bHRlZCBkdXJpbmcgYnJhbmQgcmVzZWFyY2guXCIpO1xuXG4vKiogTW9iaWxlLXN0b3JlIGJyYW5kIHJlc2VhcmNoIHJlZmVyZW5jZS4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kVmlzdWFsUmVmZXJlbmNlID0gei5pbmZlcjx0eXBlb2YgQnJhbmRWaXN1YWxSZWZlcmVuY2VTY2hlbWE+O1xuXG4vKiogUG9ydGFibGUgZ2VuZXJhdGVkIGJyYW5kIGNvbnRleHQgd2l0aCByZXNlYXJjaCBwcm92ZW5hbmNlLiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kUGFja2FnZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgYnJhbmQ6IEJyYW5kQ29udGV4dFNjaGVtYS5kZXNjcmliZShcbiAgICAgIFwiUG9ydGFibGUgYnJhbmQgY29udGV4dCByZWFkeSBmb3IgQGRieC10b29scyBVSSBhbmQgZW1haWwgY29uc3VtZXJzLlwiLFxuICAgICksXG4gICAgc291cmNlczogelxuICAgICAgLmFycmF5KEJyYW5kUGFja2FnZVNvdXJjZVNjaGVtYSlcbiAgICAgIC5kZXNjcmliZShcIkRlZHVwbGljYXRlZCB3ZWIgc291cmNlcyB1c2VkIHRvIGdlbmVyYXRlIHRoaXMgcGFja2FnZS5cIiksXG4gICAgdmlzdWFsUmVmZXJlbmNlczogelxuICAgICAgLmFycmF5KEJyYW5kVmlzdWFsUmVmZXJlbmNlU2NoZW1hKVxuICAgICAgLmRlZmF1bHQoW10pXG4gICAgICAuZGVzY3JpYmUoXCJpT1MgYW5kIEFuZHJvaWQgYXBwbGljYXRpb24gdmlzdWFscyB1c2VkIGZvciBpbnNwaXJhdGlvbi5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJHZW5lcmF0ZWQgYnJhbmRpbmcgcGFja2FnZSBhbmQgaXRzIHdlYiByZXNlYXJjaCBwcm92ZW5hbmNlLlwiKTtcblxuLyoqIEdlbmVyYXRlZCBicmFuZGluZyBwYWNrYWdlLiAqL1xuZXhwb3J0IHR5cGUgQnJhbmRQYWNrYWdlID0gei5pbmZlcjx0eXBlb2YgQnJhbmRQYWNrYWdlU2NoZW1hPjtcblxuLyoqIE9ic2VydmFibGUgc3RhZ2VzIGluIG9uZSBicmFuZC1nZW5lcmF0aW9uIHdvcmtmbG93LiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kR2VuZXJhdGlvblN0YWdlU2NoZW1hID0gei5lbnVtKFtcbiAgXCJzZWFyY2hcIixcbiAgXCJmZXRjaFwiLFxuICBcInZpc3VhbHNcIixcbiAgXCJhc3NldHNcIixcbiAgXCJzeW50aGVzaXplXCIsXG5dKTtcblxuLyoqIE9ic2VydmFibGUgYnJhbmQtZ2VuZXJhdGlvbiBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kR2VuZXJhdGlvblN0YWdlID0gei5pbmZlcjx0eXBlb2YgQnJhbmRHZW5lcmF0aW9uU3RhZ2VTY2hlbWE+O1xuXG4vKiogUHJvZ3Jlc3MgZW1pdHRlZCB3aGlsZSB0aGUgYmFja2VuZCByZXNlYXJjaGVzIGFuZCBzeW50aGVzaXplcyBhIGJyYW5kLiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kR2VuZXJhdGlvblByb2dyZXNzRXZlbnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInByb2dyZXNzXCIpLFxuICAgIHN0YWdlOiBCcmFuZEdlbmVyYXRpb25TdGFnZVNjaGVtYS5kZXNjcmliZShcIkN1cnJlbnQgd29ya2Zsb3cgc3RhZ2UuXCIpLFxuICAgIG1lc3NhZ2U6IG5vbkJsYW5rU3RyaW5nLmRlc2NyaWJlKFwiU2hvcnQgdXNlci1mYWNpbmcgcHJvZ3Jlc3MgbWVzc2FnZS5cIiksXG4gICAgY3VycmVudDogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJDb21wbGV0ZWQgaXRlbXMgaW4gdGhpcyBzdGFnZS5cIiksXG4gICAgdG90YWw6IHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVG90YWwgaXRlbXMgaW4gdGhpcyBzdGFnZS5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJQcm9ncmVzcyB1cGRhdGUgZnJvbSBhIHJ1bm5pbmcgYnJhbmQgZ2VuZXJhdGlvbi5cIik7XG5cbi8qKiBQcm9ncmVzcyBldmVudCBlbWl0dGVkIGR1cmluZyBicmFuZCBnZW5lcmF0aW9uLiAqL1xuZXhwb3J0IHR5cGUgQnJhbmRHZW5lcmF0aW9uUHJvZ3Jlc3NFdmVudCA9IHouaW5mZXI8dHlwZW9mIEJyYW5kR2VuZXJhdGlvblByb2dyZXNzRXZlbnRTY2hlbWE+O1xuXG4vKiogRmluYWwgc3VjY2Vzc2Z1bCBicmFuZC1nZW5lcmF0aW9uIGV2ZW50LiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kR2VuZXJhdGlvblJlc3VsdEV2ZW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJyZXN1bHRcIiksXG4gICAgcGFja2FnZTogQnJhbmRQYWNrYWdlU2NoZW1hLmRlc2NyaWJlKFwiQ29tcGxldGVkIHBvcnRhYmxlIGJyYW5kaW5nIHBhY2thZ2UuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiU3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGJyYW5kIGdlbmVyYXRpb24uXCIpO1xuXG4vKiogRmluYWwgc3VjY2Vzc2Z1bCBicmFuZC1nZW5lcmF0aW9uIGV2ZW50LiAqL1xuZXhwb3J0IHR5cGUgQnJhbmRHZW5lcmF0aW9uUmVzdWx0RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBCcmFuZEdlbmVyYXRpb25SZXN1bHRFdmVudFNjaGVtYT47XG5cbi8qKiBGaW5hbCBlcnJvciBldmVudCBmcm9tIGEgc3RhcnRlZCBicmFuZC1nZW5lcmF0aW9uIHN0cmVhbS4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZEdlbmVyYXRpb25FcnJvckV2ZW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgICBtZXNzYWdlOiBub25CbGFua1N0cmluZy5kZXNjcmliZShcIkFjdGlvbmFibGUgZ2VuZXJhdGlvbiBmYWlsdXJlIG1lc3NhZ2UuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiRmFpbHVyZSBlbWl0dGVkIGFmdGVyIGEgYnJhbmQtZ2VuZXJhdGlvbiBzdHJlYW0gc3RhcnRlZC5cIik7XG5cbi8qKiBGaW5hbCBlcnJvciBldmVudCBmcm9tIGEgc3RhcnRlZCBicmFuZC1nZW5lcmF0aW9uIHN0cmVhbS4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kR2VuZXJhdGlvbkVycm9yRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBCcmFuZEdlbmVyYXRpb25FcnJvckV2ZW50U2NoZW1hPjtcblxuLyoqIEV2ZXJ5IHNlcnZlci1zZW50IGV2ZW50IGVtaXR0ZWQgYnkgYnJhbmQgZ2VuZXJhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZEdlbmVyYXRpb25FdmVudFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEJyYW5kR2VuZXJhdGlvblByb2dyZXNzRXZlbnRTY2hlbWEsXG4gIEJyYW5kR2VuZXJhdGlvblJlc3VsdEV2ZW50U2NoZW1hLFxuICBCcmFuZEdlbmVyYXRpb25FcnJvckV2ZW50U2NoZW1hLFxuXSk7XG5cbi8qKiBTZXJ2ZXItc2VudCBldmVudCBlbWl0dGVkIGJ5IGJyYW5kIGdlbmVyYXRpb24uICovXG5leHBvcnQgdHlwZSBCcmFuZEdlbmVyYXRpb25FdmVudCA9IHouaW5mZXI8dHlwZW9mIEJyYW5kR2VuZXJhdGlvbkV2ZW50U2NoZW1hPjtcblxuLyoqIEJyb3dzZXItc2FmZSByb3V0ZSBjb25maWd1cmF0aW9uIHB1Ymxpc2hlZCBieSB0aGUgQXBwS2l0IGdlbmVyYXRvciBwbHVnaW4uICovXG5leHBvcnQgY29uc3QgR2VuZXJhdG9yQ2xpZW50Q29uZmlnU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBiYXNlUGF0aDogbm9uQmxhbmtTdHJpbmcuZGVzY3JpYmUoXCJNb3VudGVkIEFQSSByb3V0ZSBwcmVmaXggZm9yIHRoZSBnZW5lcmF0b3IgcGx1Z2luLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIkJyb3dzZXIgY29uZmlndXJhdGlvbiBwdWJsaXNoZWQgYnkgdGhlIEFwcEtpdCBnZW5lcmF0b3IgcGx1Z2luLlwiKTtcblxuLyoqIEJyb3dzZXItc2FmZSBnZW5lcmF0b3IgcGx1Z2luIHJvdXRlIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgdHlwZSBHZW5lcmF0b3JDbGllbnRDb25maWcgPSB6LmluZmVyPHR5cGVvZiBHZW5lcmF0b3JDbGllbnRDb25maWdTY2hlbWE+O1xuXG4vKiogT3B0aW9ucyBmb3Igb25lIGJyb3dzZXIgYnJhbmQtZ2VuZXJhdGlvbiBzdHJlYW0uICovXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5kR2VuZXJhdGlvblN0cmVhbU9wdGlvbnMge1xuICAvKiogQ2FuY2VscyB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugc3RyZWFtLiAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIEZldGNoIGltcGxlbWVudGF0aW9uLiBEZWZhdWx0cyB0byB0aGUgYnJvd3NlciBnbG9iYWwuICovXG4gIGZldGNoPzogdHlwZW9mIGdsb2JhbFRoaXMuZmV0Y2g7XG59XG5cbi8qKiBCdWlsZCB0aGUgYnJhbmQgZW5kcG9pbnQgZnJvbSB0aGUgZ2VuZXJhdG9yIHBsdWdpbidzIHB1Ymxpc2hlZCBiYXNlIHBhdGguICovXG5leHBvcnQgZnVuY3Rpb24gYnJhbmRHZW5lcmF0ZVVybChiYXNlUGF0aDogc3RyaW5nID0gR0VORVJBVE9SX0JBU0VfUEFUSCk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtiYXNlUGF0aC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfSR7R0VORVJBVE9SX1JPVVRFUy5nZW5lcmF0ZUJyYW5kfWA7XG59XG5cbi8qKiBQYXJzZSBvbmUgY29tcGxldGUgU1NFIGZyYW1lIGludG8gaXRzIHZhbGlkYXRlZCBicmFuZCBldmVudC4gKi9cbmZ1bmN0aW9uIHBhcnNlRXZlbnRGcmFtZShmcmFtZTogc3RyaW5nKTogQnJhbmRHZW5lcmF0aW9uRXZlbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBkYXRhID0gZnJhbWVcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSlcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnNsaWNlKDUpLnRyaW1TdGFydCgpKVxuICAgIC5qb2luKFwiXFxuXCIpO1xuICBpZiAoIWRhdGEpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHZhbHVlOiB1bmtub3duID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgcmV0dXJuIEJyYW5kR2VuZXJhdGlvbkV2ZW50U2NoZW1hLnBhcnNlKHZhbHVlKTtcbn1cblxuLyoqIFJlYWQgYSBmYWlsZWQgSFRUUCByZXNwb25zZSB3aXRob3V0IHRydXN0aW5nIGl0cyBwYXlsb2FkIHNoYXBlLiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzcG9uc2VFcnJvcihyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB2YWx1ZTogdW5rbm93biA9IGF3YWl0IHJlc3BvbnNlXG4gICAgLmNsb25lKClcbiAgICAuanNvbigpXG4gICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgXCJlcnJvclwiIGluIHZhbHVlKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHZhbHVlLmVycm9yO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiAmJiBtZXNzYWdlLnRyaW0oKSkgcmV0dXJuIG1lc3NhZ2UudHJpbSgpO1xuICB9XG4gIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gIHJldHVybiB0ZXh0LnRyaW0oKSB8fCBgQnJhbmQgZ2VuZXJhdGlvbiBmYWlsZWQgKCR7cmVzcG9uc2Uuc3RhdHVzfSkuYDtcbn1cblxuLyoqIEJyb3dzZXIgY2xpZW50IGZvciB0aGUgZ2VuZXJhdG9yIHBsdWdpbidzIHN0cmVhbWVkIHJvdXRlcy4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmF0b3JQbHVnaW5DbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogR2VuZXJhdG9yQ2xpZW50Q29uZmlnO1xuXG4gIC8qKiBDcmVhdGUgYSBjbGllbnQgZnJvbSB0aGUgcGx1Z2luJ3MgcHVibGlzaGVkIGBjbGllbnRDb25maWcoKWAgcGF5bG9hZC4gKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBHZW5lcmF0b3JDbGllbnRDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IEdlbmVyYXRvckNsaWVudENvbmZpZ1NjaGVtYS5wYXJzZShjb25maWcpO1xuICB9XG5cbiAgLyoqIEdlbmVyYXRlIGEgYnJhbmQgd2hpbGUgeWllbGRpbmcgdmFsaWRhdGVkIHByb2dyZXNzIGFuZCB0ZXJtaW5hbCBldmVudHMuICovXG4gIGFzeW5jICpnZW5lcmF0ZShcbiAgICBpbnB1dDogQnJhbmRHZW5lcmF0aW9uUmVxdWVzdCxcbiAgICBvcHRpb25zOiBCcmFuZEdlbmVyYXRpb25TdHJlYW1PcHRpb25zID0ge30sXG4gICk6IEFzeW5jR2VuZXJhdG9yPEJyYW5kR2VuZXJhdGlvbkV2ZW50PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IEJyYW5kR2VuZXJhdGlvblJlcXVlc3RTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgIGNvbnN0IGZldGNoZXIgPSBvcHRpb25zLmZldGNoID8/IGdsb2JhbFRoaXMuZmV0Y2guYmluZChnbG9iYWxUaGlzKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoZXIoYnJhbmRHZW5lcmF0ZVVybCh0aGlzLmNvbmZpZy5iYXNlUGF0aCksIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0KSxcbiAgICAgIC4uLihvcHRpb25zLnNpZ25hbCA/IHsgc2lnbmFsOiBvcHRpb25zLnNpZ25hbCB9IDoge30pLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihhd2FpdCByZXNwb25zZUVycm9yKHJlc3BvbnNlKSk7XG4gICAgaWYgKCFyZXNwb25zZS5ib2R5KSB0aHJvdyBuZXcgRXJyb3IoXCJCcmFuZCBnZW5lcmF0aW9uIHJldHVybmVkIG5vIGV2ZW50IHN0cmVhbS5cIik7XG5cbiAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICBsZXQgYnVmZmVyID0gXCJcIjtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogIWRvbmUgfSkucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIlxcblwiKTtcbiAgICAgIGxldCBib3VuZGFyeSA9IGJ1ZmZlci5pbmRleE9mKFwiXFxuXFxuXCIpO1xuICAgICAgd2hpbGUgKGJvdW5kYXJ5ID49IDApIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBwYXJzZUV2ZW50RnJhbWUoYnVmZmVyLnNsaWNlKDAsIGJvdW5kYXJ5KSk7XG4gICAgICAgIGlmIChldmVudCkgeWllbGQgZXZlbnQ7XG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZShib3VuZGFyeSArIDIpO1xuICAgICAgICBib3VuZGFyeSA9IGJ1ZmZlci5pbmRleE9mKFwiXFxuXFxuXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHBhcnNlRXZlbnRGcmFtZShidWZmZXIudHJpbSgpKTtcbiAgICBpZiAoZXZlbnQpIHlpZWxkIGV2ZW50O1xuICB9XG59XG4iXX0=
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnJhbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVoRCwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDO0FBRWpELDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLHFCQUFxQixFQUFFLENBQUM7QUFFbkUsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLGFBQWEsRUFBRSxpQkFBaUI7SUFDaEMsWUFBWSxFQUFFLGdCQUFnQjtDQUN0QixDQUFDO0FBRVgsMENBQTBDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUM7S0FDMUMsTUFBTSxDQUFDO0lBQ04sSUFBSSxFQUFFLGNBQWM7U0FDakIsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUNSLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQyw2Q0FBNkMsQ0FBQztJQUMxRCxNQUFNLEVBQUUsY0FBYztTQUNuQixHQUFHLENBQUMsS0FBSyxDQUFDO1NBQ1YsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLDBEQUEwRCxDQUFDO0lBQ3ZFLE9BQU8sRUFBRSxDQUFDO1NBQ1AsTUFBTSxFQUFFO1NBQ1IsR0FBRyxFQUFFO1NBQ0wsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLGdD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QU0sQ0FBQztJQUN4RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBjb250cmFjdHMgYW5kIGNsaWVudCBmb3IgQXBwS2l0IGJyYW5kIGdlbmVyYXRpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IEJyYW5kQ29udGV4dFNjaGVtYSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5jb25zdCBub25CbGFua1N0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKTtcblxuLyoqIFJlZ2lzdGVyZWQgQXBwS2l0IGdlbmVyYXRvciBwbHVnaW4gbmFtZS4gKi9cbmV4cG9ydCBjb25zdCBHRU5FUkFUT1JfUExVR0lOX05BTUUgPSBcImdlbmVyYXRvclwiO1xuXG4vKiogRGVmYXVsdCByb3V0ZSBwcmVmaXggcHVibGlzaGVkIGJ5IHRoZSBnZW5lcmF0b3IgcGx1Z2luLiAqL1xuZXhwb3J0IGNvbnN0IEdFTkVSQVRPUl9CQVNFX1BBVEggPSBgL2FwaS8ke0dFTkVSQVRPUl9QTFVHSU5fTkFNRX1gO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgc2VnbWVudHMgb3duZWQgYnkgdGhlIGdlbmVyYXRvciBwbHVnaW4uICovXG5leHBvcnQgY29uc3QgR0VORVJBVE9SX1JPVVRFUyA9IHtcbiAgZ2VuZXJhdGVCcmFuZDogXCIvYnJhbmQvZ2VuZXJhdGVcIixcbiAgYnJhbmRIaXN0b3J5OiBcIi9icmFuZC9oaXN0b3J5XCIsXG59IGFzIGNvbnN0O1xuXG4vKiogSW5wdXQgYWNjZXB0ZWQgYnkgYnJhbmQgZ2VuZXJhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZEdlbmVyYXRpb25SZXF1ZXN0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBuYW1lOiBub25CbGFua1N0cmluZ1xuICAgICAgLm1heCgyMDApXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiS25vd24gYnJhbmQsIG9yZ2FuaXphdGlvbiwgb3IgcHJvZHVjdCBuYW1lLlwiKSxcbiAgICBwcm9tcHQ6IG5vbkJsYW5rU3RyaW5nXG4gICAgICAubWF4KDJfMDAwKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIk9wZW4tZW5kZWQgYnJhbmQgYnJpZWYgdXNlZCBmb3IgcmVzZWFyY2ggYW5kIGdlbmVyYXRpb24uXCIpLFxuICAgIHdlYnNpdGU6IHpcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLnVybCgpXG4gICAgICAucmVmaW5lKCh2YWx1ZSkgPT4gbmV3IFVSTCh2YWx1ZSkucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIsIFwiRXhwZWN0ZWQgYW4gSFRUUFMgd2Vic2l0ZSBVUkwuXCIpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiS25vd24gb2ZmaWNpYWwgd2Vic2l0ZSB1c2VkIHRvIGRpc2FtYmlndWF0ZSB0aGUgYnJhbmQuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLnJlZmluZSgodmFsdWUpID0+IHZhbHVlLm5hbWUgIT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5wcm9tcHQgIT09IHVuZGVmaW5lZCwge1xuICAgIG1lc3NhZ2U6IFwiQnJhbmQgZ2VuZXJhdGlvbiByZXF1aXJlcyBhIG5hbWUgb3IgcHJvbXB0LlwiLFxuICB9KVxuICAuZGVzY3JpYmUoXCJSZXF1ZXN0IHRvIHJlc2VhcmNoIG9uZSBicmFuZCBhbmQgZ2VuZXJhdGUgaXRzIHBvcnRhYmxlIGJyYW5kaW5nIHBhY2thZ2UuXCIpO1xuXG4vKiogVmFsaWRhdGVkIGJyYW5kLWdlbmVyYXRpb24gcmVxdWVzdC4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kR2VuZXJhdGlvblJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBCcmFuZEdlbmVyYXRpb25SZXF1ZXN0U2NoZW1hPjtcblxuLyoqIEEgY2l0ZWQgc291cmNlIGFuZCB3aGV0aGVyIGl0cyBwYWdlIGNvbnRlbnQgd2FzIGF2YWlsYWJsZSB0byBzeW50aGVzaXMuICovXG5leHBvcnQgY29uc3QgQnJhbmRQYWNrYWdlU291cmNlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB1cmw6IHouc3RyaW5nKCkudXJsKCkuZGVzY3JpYmUoXCJTb3VyY2UgVVJMIHVzZWQgZHVyaW5nIGJyYW5kIHJlc2VhcmNoLlwiKSxcbiAgICB0aXRsZTogbm9uQmxhbmtTdHJpbmcub3B0aW9uYWwoKS5kZXNjcmliZShcIlNvdXJjZSBwYWdlIHRpdGxlLCB3aGVuIGF2YWlsYWJsZS5cIiksXG4gICAgc25pcHBldDogbm9uQmxhbmtTdHJpbmcub3B0aW9uYWwoKS5kZXNjcmliZShcIlNlYXJjaC1yZXN1bHQgZXhjZXJwdCwgd2hlbiBhdmFpbGFibGUuXCIpLFxuICAgIGZldGNoZWQ6IHpcbiAgICAgIC5ib29sZWFuKClcbiAgICAgIC5kZXNjcmliZShcIlRydWUgd2hlbiB3ZWJfZmV0Y2ggcmV0dXJuZWQgcGFnZSBjb250ZW50IHVzZWQgZHVyaW5nIHN5bnRoZXNpcy5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJXZWIgc291cmNlIHVzZWQgdG8gcmVzZWFyY2ggdGhlIGdlbmVyYXRlZCBicmFuZC5cIik7XG5cbi8qKiBTb3VyY2UgcHJvdmVuYW5jZSBpbmNsdWRlZCBpbiBhIGdlbmVyYXRlZCBicmFuZGluZyBwYWNrYWdlLiAqL1xuZXhwb3J0IHR5cGUgQnJhbmRQYWNrYWdlU291cmNlID0gei5pbmZlcjx0eXBlb2YgQnJhbmRQYWNrYWdlU291cmNlU2NoZW1hPjtcblxuLyoqIE9uZSBmZXRjaGVkIG1vYmlsZS1hcHAgaW1hZ2UgdXNlZCBhcyB2aXN1YWwgYnJhbmQgcmVzZWFyY2guICovXG5leHBvcnQgY29uc3QgQnJhbmRWaXN1YWxJbWFnZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdXJsOiB6LnN0cmluZygpLnVybCgpLmRlc2NyaWJlKFwiT3JpZ2luYWwgbW9iaWxlLXN0b3JlIGltYWdlIFVSTC5cIiksXG4gICAgY29udGVudFR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkZldGNoZWQgaW1hZ2UgbWVkaWEgdHlwZS5cIiksXG4gICAgbG9jYWxQYXRoOiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJQYWNrYWdlLXJlbGF0aXZlIGV4cG9ydGVkIGltYWdlIHBhdGgsIHdoZW4gd3JpdHRlbiBieSBhIENMSS5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJNb2JpbGUtc3RvcmUgaW1hZ2UgcmVmZXJlbmNlIHVzZWQgZm9yIGJyYW5kIGluc3BpcmF0aW9uLlwiKTtcblxuLyoqIE1vYmlsZS1zdG9yZSBpbWFnZSB1c2VkIGFzIHZpc3VhbCBicmFuZCByZXNlYXJjaC4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kVmlzdWFsSW1hZ2UgPSB6LmluZmVyPHR5cGVvZiBCcmFuZFZpc3VhbEltYWdlU2NoZW1hPjtcblxuLyoqIEFwcCBTdG9yZSBvciBQbGF5IFN0b3JlIHBhZ2UgYW5kIGl0cyB2aXN1YWwgcmVmZXJlbmNlcy4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZFZpc3VhbFJlZmVyZW5jZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgcGxhdGZvcm06IHouZW51bShbXCJpb3NcIiwgXCJhbmRyb2lkXCJdKS5kZXNjcmliZShcIk1vYmlsZSBhcHBsaWNhdGlvbiBwbGF0Zm9ybS5cIiksXG4gICAgYXBwTmFtZTogbm9uQmxhbmtTdHJpbmcuZGVzY3JpYmUoXCJBcHBsaWNhdGlvbiBuYW1lIHJlYWQgZnJvbSB0aGUgc3RvcmUgcGFnZS5cIiksXG4gICAgcGFnZVVybDogei5zdHJpbmcoKS51cmwoKS5kZXNjcmliZShcIk9mZmljaWFsIGFwcGxpY2F0aW9uLXN0b3JlIHBhZ2UuXCIpLFxuICAgIGltYWdlczogei5hcnJheShCcmFuZFZpc3VhbEltYWdlU2NoZW1hKS5kZXNjcmliZShcIkZldGNoZWQgYXBwIGljb24gb3Igc2NyZWVuc2hvdHMuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiTW9iaWxlIGFwcGxpY2F0aW9uIHZpc3VhbHMgY29uc3VsdGVkIGR1cmluZyBicmFuZCByZXNlYXJjaC5cIik7XG5cbi8qKiBNb2JpbGUtc3RvcmUgYnJhbmQgcmVzZWFyY2ggcmVmZXJlbmNlLiAqL1xuZXhwb3J0IHR5cGUgQnJhbmRWaXN1YWxSZWZlcmVuY2UgPSB6LmluZmVyPHR5cGVvZiBCcmFuZFZpc3VhbFJlZmVyZW5jZVNjaGVtYT47XG5cbi8qKiBQb3J0YWJsZSBnZW5lcmF0ZWQgYnJhbmQgY29udGV4dCB3aXRoIHJlc2VhcmNoIHByb3ZlbmFuY2UuICovXG5leHBvcnQgY29uc3QgQnJhbmRQYWNrYWdlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBicmFuZDogQnJhbmRDb250ZXh0U2NoZW1hLmRlc2NyaWJlKFxuICAgICAgXCJQb3J0YWJsZSBicmFuZCBjb250ZXh0IHJlYWR5IGZvciBAZGJ4LXRvb2xzIFVJIGFuZCBlbWFpbCBjb25zdW1lcnMuXCIsXG4gICAgKSxcbiAgICBzb3VyY2VzOiB6XG4gICAgICAuYXJyYXkoQnJhbmRQYWNrYWdlU291cmNlU2NoZW1hKVxuICAgICAgLmRlc2NyaWJlKFwiRGVkdXBsaWNhdGVkIHdlYiBzb3VyY2VzIHVzZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWNrYWdlLlwiKSxcbiAgICB2aXN1YWxSZWZlcmVuY2VzOiB6XG4gICAgICAuYXJyYXkoQnJhbmRWaXN1YWxSZWZlcmVuY2VTY2hlbWEpXG4gICAgICAuZGVmYXVsdChbXSlcbiAgICAgIC5kZXNjcmliZShcImlPUyBhbmQgQW5kcm9pZCBhcHBsaWNhdGlvbiB2aXN1YWxzIHVzZWQgZm9yIGluc3BpcmF0aW9uLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIkdlbmVyYXRlZCBicmFuZGluZyBwYWNrYWdlIGFuZCBpdHMgd2ViIHJlc2VhcmNoIHByb3ZlbmFuY2UuXCIpO1xuXG4vKiogR2VuZXJhdGVkIGJyYW5kaW5nIHBhY2thZ2UuICovXG5leHBvcnQgdHlwZSBCcmFuZFBhY2thZ2UgPSB6LmluZmVyPHR5cGVvZiBCcmFuZFBhY2thZ2VTY2hlbWE+O1xuXG4vKiogT25lIHBlcnNpc3RlZCBnZW5lcmF0ZWQgYnJhbmQgYXZhaWxhYmxlIHRvIHRoZSBicm93c2VyIHBpY2tlci4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZEhpc3RvcnlFbnRyeVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgaWQ6IG5vbkJsYW5rU3RyaW5nLmRlc2NyaWJlKFwiU3RhYmxlIHJlcXVlc3QtZGVyaXZlZCBicmFuZCBoaXN0b3J5IGlkZW50aWZpZXIuXCIpLFxuICAgIHJlcXVlc3Q6IEJyYW5kR2VuZXJhdGlvblJlcXVlc3RTY2hlbWEuZGVzY3JpYmUoXCJGcmVlLWZvcm0gcmVxdWVzdCB0aGF0IGdlbmVyYXRlZCB0aGUgYnJhbmQuXCIpLFxuICAgIGdlbmVyYXRlZEF0OiB6Lmlzby5kYXRldGltZSgpLmRlc2NyaWJlKFwiVGltZSB0aGUgZ2VuZXJhdGVkIGJyYW5kIHdhcyBzdG9yZWQuXCIpLFxuICAgIHBhY2thZ2U6IEJyYW5kUGFja2FnZVNjaGVtYS5kZXNjcmliZShcIkNhY2hlZCBnZW5lcmF0ZWQgYnJhbmRpbmcgcGFja2FnZS5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJQZXJzaXN0ZWQgZ2VuZXJhdGVkIGJyYW5kIGF2YWlsYWJsZSB0byBvbmUgdXNlci5cIik7XG5cbi8qKiBQZXJzaXN0ZWQgZ2VuZXJhdGVkIGJyYW5kIGF2YWlsYWJsZSB0byBvbmUgdXNlci4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kSGlzdG9yeUVudHJ5ID0gei5pbmZlcjx0eXBlb2YgQnJhbmRIaXN0b3J5RW50cnlTY2hlbWE+O1xuXG4vKiogQnJvd3NlciByZXNwb25zZSBjb250YWluaW5nIHRoZSBjdXJyZW50IHVzZXIncyBnZW5lcmF0ZWQgYnJhbmRzLiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kSGlzdG9yeVJlc3BvbnNlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBicmFuZHM6IHouYXJyYXkoQnJhbmRIaXN0b3J5RW50cnlTY2hlbWEpLmRlc2NyaWJlKFwiR2VuZXJhdGVkIGJyYW5kcywgbmV3ZXN0IGZpcnN0LlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIkN1cnJlbnQgdXNlcidzIHBlcnNpc3RlZCBnZW5lcmF0ZWQtYnJhbmQgaGlzdG9yeS5cIik7XG5cbi8qKiBDdXJyZW50IHVzZXIncyBwZXJzaXN0ZWQgZ2VuZXJhdGVkLWJyYW5kIGhpc3RvcnkuICovXG5leHBvcnQgdHlwZSBCcmFuZEhpc3RvcnlSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEJyYW5kSGlzdG9yeVJlc3BvbnNlU2NoZW1hPjtcblxuLyoqIE9ic2VydmFibGUgc3RhZ2VzIGluIG9uZSBicmFuZC1nZW5lcmF0aW9uIHdvcmtmbG93LiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kR2VuZXJhdGlvblN0YWdlU2NoZW1hID0gei5lbnVtKFtcbiAgXCJzZWFyY2hcIixcbiAgXCJmZXRjaFwiLFxuICBcInZpc3VhbHNcIixcbiAgXCJhc3NldHNcIixcbiAgXCJzeW50aGVzaXplXCIsXG5dKTtcblxuLyoqIE9ic2VydmFibGUgYnJhbmQtZ2VuZXJhdGlvbiBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kR2VuZXJhdGlvblN0YWdlID0gei5pbmZlcjx0eXBlb2YgQnJhbmRHZW5lcmF0aW9uU3RhZ2VTY2hlbWE+O1xuXG4vKiogUHJvZ3Jlc3MgZW1pdHRlZCB3aGlsZSB0aGUgYmFja2VuZCByZXNlYXJjaGVzIGFuZCBzeW50aGVzaXplcyBhIGJyYW5kLiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kR2VuZXJhdGlvblByb2dyZXNzRXZlbnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInByb2dyZXNzXCIpLFxuICAgIHN0YWdlOiBCcmFuZEdlbmVyYXRpb25TdGFnZVNjaGVtYS5kZXNjcmliZShcIkN1cnJlbnQgd29ya2Zsb3cgc3RhZ2UuXCIpLFxuICAgIG1lc3NhZ2U6IG5vbkJsYW5rU3RyaW5nLmRlc2NyaWJlKFwiU2hvcnQgdXNlci1mYWNpbmcgcHJvZ3Jlc3MgbWVzc2FnZS5cIiksXG4gICAgY3VycmVudDogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJDb21wbGV0ZWQgaXRlbXMgaW4gdGhpcyBzdGFnZS5cIiksXG4gICAgdG90YWw6IHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVG90YWwgaXRlbXMgaW4gdGhpcyBzdGFnZS5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJQcm9ncmVzcyB1cGRhdGUgZnJvbSBhIHJ1bm5pbmcgYnJhbmQgZ2VuZXJhdGlvbi5cIik7XG5cbi8qKiBQcm9ncmVzcyBldmVudCBlbWl0dGVkIGR1cmluZyBicmFuZCBnZW5lcmF0aW9uLiAqL1xuZXhwb3J0IHR5cGUgQnJhbmRHZW5lcmF0aW9uUHJvZ3Jlc3NFdmVudCA9IHouaW5mZXI8dHlwZW9mIEJyYW5kR2VuZXJhdGlvblByb2dyZXNzRXZlbnRTY2hlbWE+O1xuXG4vKiogRmluYWwgc3VjY2Vzc2Z1bCBicmFuZC1nZW5lcmF0aW9uIGV2ZW50LiAqL1xuZXhwb3J0IGNvbnN0IEJyYW5kR2VuZXJhdGlvblJlc3VsdEV2ZW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJyZXN1bHRcIiksXG4gICAgcGFja2FnZTogQnJhbmRQYWNrYWdlU2NoZW1hLmRlc2NyaWJlKFwiQ29tcGxldGVkIHBvcnRhYmxlIGJyYW5kaW5nIHBhY2thZ2UuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiU3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGJyYW5kIGdlbmVyYXRpb24uXCIpO1xuXG4vKiogRmluYWwgc3VjY2Vzc2Z1bCBicmFuZC1nZW5lcmF0aW9uIGV2ZW50LiAqL1xuZXhwb3J0IHR5cGUgQnJhbmRHZW5lcmF0aW9uUmVzdWx0RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBCcmFuZEdlbmVyYXRpb25SZXN1bHRFdmVudFNjaGVtYT47XG5cbi8qKiBGaW5hbCBlcnJvciBldmVudCBmcm9tIGEgc3RhcnRlZCBicmFuZC1nZW5lcmF0aW9uIHN0cmVhbS4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZEdlbmVyYXRpb25FcnJvckV2ZW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgICBtZXNzYWdlOiBub25CbGFua1N0cmluZy5kZXNjcmliZShcIkFjdGlvbmFibGUgZ2VuZXJhdGlvbiBmYWlsdXJlIG1lc3NhZ2UuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiRmFpbHVyZSBlbWl0dGVkIGFmdGVyIGEgYnJhbmQtZ2VuZXJhdGlvbiBzdHJlYW0gc3RhcnRlZC5cIik7XG5cbi8qKiBGaW5hbCBlcnJvciBldmVudCBmcm9tIGEgc3RhcnRlZCBicmFuZC1nZW5lcmF0aW9uIHN0cmVhbS4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kR2VuZXJhdGlvbkVycm9yRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBCcmFuZEdlbmVyYXRpb25FcnJvckV2ZW50U2NoZW1hPjtcblxuLyoqIEV2ZXJ5IHNlcnZlci1zZW50IGV2ZW50IGVtaXR0ZWQgYnkgYnJhbmQgZ2VuZXJhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZEdlbmVyYXRpb25FdmVudFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEJyYW5kR2VuZXJhdGlvblByb2dyZXNzRXZlbnRTY2hlbWEsXG4gIEJyYW5kR2VuZXJhdGlvblJlc3VsdEV2ZW50U2NoZW1hLFxuICBCcmFuZEdlbmVyYXRpb25FcnJvckV2ZW50U2NoZW1hLFxuXSk7XG5cbi8qKiBTZXJ2ZXItc2VudCBldmVudCBlbWl0dGVkIGJ5IGJyYW5kIGdlbmVyYXRpb24uICovXG5leHBvcnQgdHlwZSBCcmFuZEdlbmVyYXRpb25FdmVudCA9IHouaW5mZXI8dHlwZW9mIEJyYW5kR2VuZXJhdGlvbkV2ZW50U2NoZW1hPjtcblxuLyoqIEJyb3dzZXItc2FmZSByb3V0ZSBjb25maWd1cmF0aW9uIHB1Ymxpc2hlZCBieSB0aGUgQXBwS2l0IGdlbmVyYXRvciBwbHVnaW4uICovXG5leHBvcnQgY29uc3QgR2VuZXJhdG9yQ2xpZW50Q29uZmlnU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBiYXNlUGF0aDogbm9uQmxhbmtTdHJpbmcuZGVzY3JpYmUoXCJNb3VudGVkIEFQSSByb3V0ZSBwcmVmaXggZm9yIHRoZSBnZW5lcmF0b3IgcGx1Z2luLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIkJyb3dzZXIgY29uZmlndXJhdGlvbiBwdWJsaXNoZWQgYnkgdGhlIEFwcEtpdCBnZW5lcmF0b3IgcGx1Z2luLlwiKTtcblxuLyoqIEJyb3dzZXItc2FmZSBnZW5lcmF0b3IgcGx1Z2luIHJvdXRlIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgdHlwZSBHZW5lcmF0b3JDbGllbnRDb25maWcgPSB6LmluZmVyPHR5cGVvZiBHZW5lcmF0b3JDbGllbnRDb25maWdTY2hlbWE+O1xuXG4vKiogT3B0aW9ucyBmb3Igb25lIGJyb3dzZXIgYnJhbmQtZ2VuZXJhdGlvbiBzdHJlYW0uICovXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5kR2VuZXJhdGlvblN0cmVhbU9wdGlvbnMge1xuICAvKiogQ2FuY2VscyB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugc3RyZWFtLiAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIEZldGNoIGltcGxlbWVudGF0aW9uLiBEZWZhdWx0cyB0byB0aGUgYnJvd3NlciBnbG9iYWwuICovXG4gIGZldGNoPzogdHlwZW9mIGdsb2JhbFRoaXMuZmV0Y2g7XG59XG5cbi8qKiBCdWlsZCB0aGUgYnJhbmQgZW5kcG9pbnQgZnJvbSB0aGUgZ2VuZXJhdG9yIHBsdWdpbidzIHB1Ymxpc2hlZCBiYXNlIHBhdGguICovXG5leHBvcnQgZnVuY3Rpb24gYnJhbmRHZW5lcmF0ZVVybChiYXNlUGF0aDogc3RyaW5nID0gR0VORVJBVE9SX0JBU0VfUEFUSCk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtiYXNlUGF0aC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfSR7R0VORVJBVE9SX1JPVVRFUy5nZW5lcmF0ZUJyYW5kfWA7XG59XG5cbi8qKiBCdWlsZCB0aGUgZ2VuZXJhdGVkLWJyYW5kIGhpc3RvcnkgZW5kcG9pbnQgZnJvbSB0aGUgcHVibGlzaGVkIGJhc2UgcGF0aC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmFuZEhpc3RvcnlVcmwoYmFzZVBhdGg6IHN0cmluZyA9IEdFTkVSQVRPUl9CQVNFX1BBVEgpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7YmFzZVBhdGgucmVwbGFjZSgvXFwvKyQvLCBcIlwiKX0ke0dFTkVSQVRPUl9ST1VURVMuYnJhbmRIaXN0b3J5fWA7XG59XG5cbi8qKiBQYXJzZSBvbmUgY29tcGxldGUgU1NFIGZyYW1lIGludG8gaXRzIHZhbGlkYXRlZCBicmFuZCBldmVudC4gKi9cbmZ1bmN0aW9uIHBhcnNlRXZlbnRGcmFtZShmcmFtZTogc3RyaW5nKTogQnJhbmRHZW5lcmF0aW9uRXZlbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBkYXRhID0gZnJhbWVcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSlcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnNsaWNlKDUpLnRyaW1TdGFydCgpKVxuICAgIC5qb2luKFwiXFxuXCIpO1xuICBpZiAoIWRhdGEpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHZhbHVlOiB1bmtub3duID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgcmV0dXJuIEJyYW5kR2VuZXJhdGlvbkV2ZW50U2NoZW1hLnBhcnNlKHZhbHVlKTtcbn1cblxuLyoqIFJlYWQgYSBmYWlsZWQgSFRUUCByZXNwb25zZSB3aXRob3V0IHRydXN0aW5nIGl0cyBwYXlsb2FkIHNoYXBlLiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzcG9uc2VFcnJvcihyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB2YWx1ZTogdW5rbm93biA9IGF3YWl0IHJlc3BvbnNlXG4gICAgLmNsb25lKClcbiAgICAuanNvbigpXG4gICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgXCJlcnJvclwiIGluIHZhbHVlKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHZhbHVlLmVycm9yO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiAmJiBtZXNzYWdlLnRyaW0oKSkgcmV0dXJuIG1lc3NhZ2UudHJpbSgpO1xuICB9XG4gIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gIHJldHVybiB0ZXh0LnRyaW0oKSB8fCBgQnJhbmQgZ2VuZXJhdGlvbiBmYWlsZWQgKCR7cmVzcG9uc2Uuc3RhdHVzfSkuYDtcbn1cblxuLyoqIEJyb3dzZXIgY2xpZW50IGZvciB0aGUgZ2VuZXJhdG9yIHBsdWdpbidzIHN0cmVhbWVkIHJvdXRlcy4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmF0b3JQbHVnaW5DbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogR2VuZXJhdG9yQ2xpZW50Q29uZmlnO1xuXG4gIC8qKiBDcmVhdGUgYSBjbGllbnQgZnJvbSB0aGUgcGx1Z2luJ3MgcHVibGlzaGVkIGBjbGllbnRDb25maWcoKWAgcGF5bG9hZC4gKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBHZW5lcmF0b3JDbGllbnRDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IEdlbmVyYXRvckNsaWVudENvbmZpZ1NjaGVtYS5wYXJzZShjb25maWcpO1xuICB9XG5cbiAgLyoqIEdlbmVyYXRlIGEgYnJhbmQgd2hpbGUgeWllbGRpbmcgdmFsaWRhdGVkIHByb2dyZXNzIGFuZCB0ZXJtaW5hbCBldmVudHMuICovXG4gIGFzeW5jICpnZW5lcmF0ZShcbiAgICBpbnB1dDogQnJhbmRHZW5lcmF0aW9uUmVxdWVzdCxcbiAgICBvcHRpb25zOiBCcmFuZEdlbmVyYXRpb25TdHJlYW1PcHRpb25zID0ge30sXG4gICk6IEFzeW5jR2VuZXJhdG9yPEJyYW5kR2VuZXJhdGlvbkV2ZW50PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IEJyYW5kR2VuZXJhdGlvblJlcXVlc3RTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgIGNvbnN0IGZldGNoZXIgPSBvcHRpb25zLmZldGNoID8/IGdsb2JhbFRoaXMuZmV0Y2guYmluZChnbG9iYWxUaGlzKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoZXIoYnJhbmRHZW5lcmF0ZVVybCh0aGlzLmNvbmZpZy5iYXNlUGF0aCksIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0KSxcbiAgICAgIC4uLihvcHRpb25zLnNpZ25hbCA/IHsgc2lnbmFsOiBvcHRpb25zLnNpZ25hbCB9IDoge30pLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihhd2FpdCByZXNwb25zZUVycm9yKHJlc3BvbnNlKSk7XG4gICAgaWYgKCFyZXNwb25zZS5ib2R5KSB0aHJvdyBuZXcgRXJyb3IoXCJCcmFuZCBnZW5lcmF0aW9uIHJldHVybmVkIG5vIGV2ZW50IHN0cmVhbS5cIik7XG5cbiAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICBsZXQgYnVmZmVyID0gXCJcIjtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogIWRvbmUgfSkucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIlxcblwiKTtcbiAgICAgIGxldCBib3VuZGFyeSA9IGJ1ZmZlci5pbmRleE9mKFwiXFxuXFxuXCIpO1xuICAgICAgd2hpbGUgKGJvdW5kYXJ5ID49IDApIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBwYXJzZUV2ZW50RnJhbWUoYnVmZmVyLnNsaWNlKDAsIGJvdW5kYXJ5KSk7XG4gICAgICAgIGlmIChldmVudCkgeWllbGQgZXZlbnQ7XG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZShib3VuZGFyeSArIDIpO1xuICAgICAgICBib3VuZGFyeSA9IGJ1ZmZlci5pbmRleE9mKFwiXFxuXFxuXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHBhcnNlRXZlbnRGcmFtZShidWZmZXIudHJpbSgpKTtcbiAgICBpZiAoZXZlbnQpIHlpZWxkIGV2ZW50O1xuICB9XG5cbiAgLyoqIExpc3QgdGhlIGN1cnJlbnQgdXNlcidzIHBlcnNpc3RlZCBnZW5lcmF0ZWQgYnJhbmRzLCBuZXdlc3QgZmlyc3QuICovXG4gIGFzeW5jIGJyYW5kSGlzdG9yeShvcHRpb25zOiBCcmFuZEdlbmVyYXRpb25TdHJlYW1PcHRpb25zID0ge30pOiBQcm9taXNlPEJyYW5kSGlzdG9yeUVudHJ5W10+IHtcbiAgICBjb25zdCBmZXRjaGVyID0gb3B0aW9ucy5mZXRjaCA/PyBnbG9iYWxUaGlzLmZldGNoLmJpbmQoZ2xvYmFsVGhpcyk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaGVyKGJyYW5kSGlzdG9yeVVybCh0aGlzLmNvbmZpZy5iYXNlUGF0aCksIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgLi4uKG9wdGlvbnMuc2lnbmFsID8geyBzaWduYWw6IG9wdGlvbnMuc2lnbmFsIH0gOiB7fSksXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKGF3YWl0IHJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKTtcbiAgICByZXR1cm4gQnJhbmRIaXN0b3J5UmVzcG9uc2VTY2hlbWEucGFyc2UoYXdhaXQgcmVzcG9uc2UuanNvbigpKS5icmFuZHM7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -22,7 +22,7 @@
22
22
  "typescript": "^5.9.3"
23
23
  },
24
24
  "dependencies": {
25
- "@dbx-tools/shared-core": "^0.9.163",
25
+ "@dbx-tools/shared-core": "^0.9.165",
26
26
  "zod": "4.3.6"
27
27
  },
28
28
  "main": "./lib/index.js",
@@ -39,7 +39,7 @@
39
39
  "./package.json": "./package.json"
40
40
  }
41
41
  },
42
- "version": "0.9.163",
42
+ "version": "0.9.165",
43
43
  "types": "./lib/index.d.ts",
44
44
  "dbxToolsConfig": {
45
45
  "tags": [
package/src/brand.ts CHANGED
@@ -18,6 +18,7 @@ export const GENERATOR_BASE_PATH = `/api/${GENERATOR_PLUGIN_NAME}`;
18
18
  /** Mount-relative route segments owned by the generator plugin. */
19
19
  export const GENERATOR_ROUTES = {
20
20
  generateBrand: "/brand/generate",
21
+ brandHistory: "/brand/history",
21
22
  } as const;
22
23
 
23
24
  /** Input accepted by brand generation. */
@@ -113,6 +114,31 @@ export const BrandPackageSchema = z
113
114
  /** Generated branding package. */
114
115
  export type BrandPackage = z.infer<typeof BrandPackageSchema>;
115
116
 
117
+ /** One persisted generated brand available to the browser picker. */
118
+ export const BrandHistoryEntrySchema = z
119
+ .object({
120
+ id: nonBlankString.describe("Stable request-derived brand history identifier."),
121
+ request: BrandGenerationRequestSchema.describe("Free-form request that generated the brand."),
122
+ generatedAt: z.iso.datetime().describe("Time the generated brand was stored."),
123
+ package: BrandPackageSchema.describe("Cached generated branding package."),
124
+ })
125
+ .strict()
126
+ .describe("Persisted generated brand available to one user.");
127
+
128
+ /** Persisted generated brand available to one user. */
129
+ export type BrandHistoryEntry = z.infer<typeof BrandHistoryEntrySchema>;
130
+
131
+ /** Browser response containing the current user's generated brands. */
132
+ export const BrandHistoryResponseSchema = z
133
+ .object({
134
+ brands: z.array(BrandHistoryEntrySchema).describe("Generated brands, newest first."),
135
+ })
136
+ .strict()
137
+ .describe("Current user's persisted generated-brand history.");
138
+
139
+ /** Current user's persisted generated-brand history. */
140
+ export type BrandHistoryResponse = z.infer<typeof BrandHistoryResponseSchema>;
141
+
116
142
  /** Observable stages in one brand-generation workflow. */
117
143
  export const BrandGenerationStageSchema = z.enum([
118
144
  "search",
@@ -198,6 +224,11 @@ export function brandGenerateUrl(basePath: string = GENERATOR_BASE_PATH): string
198
224
  return `${basePath.replace(/\/+$/, "")}${GENERATOR_ROUTES.generateBrand}`;
199
225
  }
200
226
 
227
+ /** Build the generated-brand history endpoint from the published base path. */
228
+ export function brandHistoryUrl(basePath: string = GENERATOR_BASE_PATH): string {
229
+ return `${basePath.replace(/\/+$/, "")}${GENERATOR_ROUTES.brandHistory}`;
230
+ }
231
+
201
232
  /** Parse one complete SSE frame into its validated brand event. */
202
233
  function parseEventFrame(frame: string): BrandGenerationEvent | undefined {
203
234
  const data = frame
@@ -270,4 +301,16 @@ export class GeneratorPluginClient {
270
301
  const event = parseEventFrame(buffer.trim());
271
302
  if (event) yield event;
272
303
  }
304
+
305
+ /** List the current user's persisted generated brands, newest first. */
306
+ async brandHistory(options: BrandGenerationStreamOptions = {}): Promise<BrandHistoryEntry[]> {
307
+ const fetcher = options.fetch ?? globalThis.fetch.bind(globalThis);
308
+ const response = await fetcher(brandHistoryUrl(this.config.basePath), {
309
+ method: "GET",
310
+ headers: { Accept: "application/json" },
311
+ ...(options.signal ? { signal: options.signal } : {}),
312
+ });
313
+ if (!response.ok) throw new Error(await responseError(response));
314
+ return BrandHistoryResponseSchema.parse(await response.json()).brands;
315
+ }
273
316
  }