@signstack/cli 0.1.1
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/README.md +458 -0
- package/bin/run.js +12 -0
- package/dist/apps/signstack-cli/schemas/asset.schema.json +220 -0
- package/dist/apps/signstack-cli/schemas/blueprint.schema.json +485 -0
- package/dist/apps/signstack-cli/schemas/jsonata-function.schema.json +185 -0
- package/dist/apps/signstack-cli/schemas/schema.schema.json +97 -0
- package/dist/apps/signstack-cli/schemas/template.schema.json +295 -0
- package/dist/apps/signstack-cli/src/commands/auth/login.d.ts +25 -0
- package/dist/apps/signstack-cli/src/commands/auth/login.js +229 -0
- package/dist/apps/signstack-cli/src/commands/auth/login.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/auth/logout.d.ts +10 -0
- package/dist/apps/signstack-cli/src/commands/auth/logout.js +59 -0
- package/dist/apps/signstack-cli/src/commands/auth/logout.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/auth/whoami.d.ts +9 -0
- package/dist/apps/signstack-cli/src/commands/auth/whoami.js +85 -0
- package/dist/apps/signstack-cli/src/commands/auth/whoami.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/generate.d.ts +51 -0
- package/dist/apps/signstack-cli/src/commands/generate.js +479 -0
- package/dist/apps/signstack-cli/src/commands/generate.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/preview.d.ts +24 -0
- package/dist/apps/signstack-cli/src/commands/preview.js +162 -0
- package/dist/apps/signstack-cli/src/commands/preview.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/pull.d.ts +28 -0
- package/dist/apps/signstack-cli/src/commands/pull.js +244 -0
- package/dist/apps/signstack-cli/src/commands/pull.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/push.d.ts +46 -0
- package/dist/apps/signstack-cli/src/commands/push.js +460 -0
- package/dist/apps/signstack-cli/src/commands/push.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/run.d.ts +22 -0
- package/dist/apps/signstack-cli/src/commands/run.js +126 -0
- package/dist/apps/signstack-cli/src/commands/run.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/test.d.ts +6 -0
- package/dist/apps/signstack-cli/src/commands/test.js +25 -0
- package/dist/apps/signstack-cli/src/commands/test.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/validate.d.ts +59 -0
- package/dist/apps/signstack-cli/src/commands/validate.js +558 -0
- package/dist/apps/signstack-cli/src/commands/validate.js.map +1 -0
- package/dist/apps/signstack-cli/src/index.d.ts +1 -0
- package/dist/apps/signstack-cli/src/index.js +2 -0
- package/dist/apps/signstack-cli/src/index.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/api-client.d.ts +77 -0
- package/dist/apps/signstack-cli/src/lib/api-client.js +269 -0
- package/dist/apps/signstack-cli/src/lib/api-client.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/base-command.d.ts +38 -0
- package/dist/apps/signstack-cli/src/lib/base-command.js +135 -0
- package/dist/apps/signstack-cli/src/lib/base-command.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/config.d.ts +47 -0
- package/dist/apps/signstack-cli/src/lib/config.js +106 -0
- package/dist/apps/signstack-cli/src/lib/config.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/entity-data-resolver.d.ts +31 -0
- package/dist/apps/signstack-cli/src/lib/entity-data-resolver.js +107 -0
- package/dist/apps/signstack-cli/src/lib/entity-data-resolver.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/local-resource-loader.d.ts +72 -0
- package/dist/apps/signstack-cli/src/lib/local-resource-loader.js +238 -0
- package/dist/apps/signstack-cli/src/lib/local-resource-loader.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/path-utils.d.ts +4 -0
- package/dist/apps/signstack-cli/src/lib/path-utils.js +7 -0
- package/dist/apps/signstack-cli/src/lib/path-utils.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/payload-builder.d.ts +127 -0
- package/dist/apps/signstack-cli/src/lib/payload-builder.js +545 -0
- package/dist/apps/signstack-cli/src/lib/payload-builder.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/preview-handler.d.ts +95 -0
- package/dist/apps/signstack-cli/src/lib/preview-handler.js +611 -0
- package/dist/apps/signstack-cli/src/lib/preview-handler.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/preview-output-formatter.d.ts +63 -0
- package/dist/apps/signstack-cli/src/lib/preview-output-formatter.js +198 -0
- package/dist/apps/signstack-cli/src/lib/preview-output-formatter.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/public-api-client.d.ts +13 -0
- package/dist/apps/signstack-cli/src/lib/public-api-client.js +39 -0
- package/dist/apps/signstack-cli/src/lib/public-api-client.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-puller.d.ts +131 -0
- package/dist/apps/signstack-cli/src/lib/resource-puller.js +800 -0
- package/dist/apps/signstack-cli/src/lib/resource-puller.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-pusher.d.ts +87 -0
- package/dist/apps/signstack-cli/src/lib/resource-pusher.js +361 -0
- package/dist/apps/signstack-cli/src/lib/resource-pusher.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-scanner.d.ts +29 -0
- package/dist/apps/signstack-cli/src/lib/resource-scanner.js +101 -0
- package/dist/apps/signstack-cli/src/lib/resource-scanner.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-validator.d.ts +44 -0
- package/dist/apps/signstack-cli/src/lib/resource-validator.js +158 -0
- package/dist/apps/signstack-cli/src/lib/resource-validator.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/run-handler.d.ts +47 -0
- package/dist/apps/signstack-cli/src/lib/run-handler.js +266 -0
- package/dist/apps/signstack-cli/src/lib/run-handler.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/safe-path.d.ts +28 -0
- package/dist/apps/signstack-cli/src/lib/safe-path.js +44 -0
- package/dist/apps/signstack-cli/src/lib/safe-path.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/scenario-file.d.ts +35 -0
- package/dist/apps/signstack-cli/src/lib/scenario-file.js +80 -0
- package/dist/apps/signstack-cli/src/lib/scenario-file.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/schema-validator.d.ts +8 -0
- package/dist/apps/signstack-cli/src/lib/schema-validator.js +39 -0
- package/dist/apps/signstack-cli/src/lib/schema-validator.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/url-validator.d.ts +17 -0
- package/dist/apps/signstack-cli/src/lib/url-validator.js +61 -0
- package/dist/apps/signstack-cli/src/lib/url-validator.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/yaml-document-parser.d.ts +25 -0
- package/dist/apps/signstack-cli/src/lib/yaml-document-parser.js +133 -0
- package/dist/apps/signstack-cli/src/lib/yaml-document-parser.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/yaml-transforms.d.ts +3 -0
- package/dist/apps/signstack-cli/src/lib/yaml-transforms.js +32 -0
- package/dist/apps/signstack-cli/src/lib/yaml-transforms.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/yaml-writer.d.ts +47 -0
- package/dist/apps/signstack-cli/src/lib/yaml-writer.js +160 -0
- package/dist/apps/signstack-cli/src/lib/yaml-writer.js.map +1 -0
- package/dist/apps/signstack-cli/src/types/auth.types.d.ts +48 -0
- package/dist/apps/signstack-cli/src/types/auth.types.js +31 -0
- package/dist/apps/signstack-cli/src/types/auth.types.js.map +1 -0
- package/dist/apps/signstack-cli/src/types/schema.types.d.ts +14 -0
- package/dist/apps/signstack-cli/src/types/schema.types.js +16 -0
- package/dist/apps/signstack-cli/src/types/schema.types.js.map +1 -0
- package/dist/apps/signstack-cli/src/types/yaml.types.d.ts +144 -0
- package/dist/apps/signstack-cli/src/types/yaml.types.js +2 -0
- package/dist/apps/signstack-cli/src/types/yaml.types.js.map +1 -0
- package/dist/libs/common/base/src/index.d.ts +14 -0
- package/dist/libs/common/base/src/index.js +44 -0
- package/dist/libs/common/base/src/index.js.map +1 -0
- package/dist/libs/common/base/src/lib/address.util.d.ts +12 -0
- package/dist/libs/common/base/src/lib/address.util.js +55 -0
- package/dist/libs/common/base/src/lib/address.util.js.map +1 -0
- package/dist/libs/common/base/src/lib/country-code-data.d.ts +5 -0
- package/dist/libs/common/base/src/lib/country-code-data.js +1256 -0
- package/dist/libs/common/base/src/lib/country-code-data.js.map +1 -0
- package/dist/libs/common/base/src/lib/date.util.d.ts +13 -0
- package/dist/libs/common/base/src/lib/date.util.js +135 -0
- package/dist/libs/common/base/src/lib/date.util.js.map +1 -0
- package/dist/libs/common/base/src/lib/headers.d.ts +1 -0
- package/dist/libs/common/base/src/lib/headers.js +5 -0
- package/dist/libs/common/base/src/lib/headers.js.map +1 -0
- package/dist/libs/common/base/src/lib/jsonata.service.d.ts +32 -0
- package/dist/libs/common/base/src/lib/jsonata.service.js +207 -0
- package/dist/libs/common/base/src/lib/jsonata.service.js.map +1 -0
- package/dist/libs/common/base/src/lib/key-validation.constants.d.ts +37 -0
- package/dist/libs/common/base/src/lib/key-validation.constants.js +144 -0
- package/dist/libs/common/base/src/lib/key-validation.constants.js.map +1 -0
- package/dist/libs/common/base/src/lib/phone-util.d.ts +16 -0
- package/dist/libs/common/base/src/lib/phone-util.js +61 -0
- package/dist/libs/common/base/src/lib/phone-util.js.map +1 -0
- package/dist/libs/common/base/src/lib/schema-validation.util.d.ts +24 -0
- package/dist/libs/common/base/src/lib/schema-validation.util.js +155 -0
- package/dist/libs/common/base/src/lib/schema-validation.util.js.map +1 -0
- package/dist/libs/common/base/src/lib/string-builder.d.ts +48 -0
- package/dist/libs/common/base/src/lib/string-builder.js +90 -0
- package/dist/libs/common/base/src/lib/string-builder.js.map +1 -0
- package/dist/libs/common/base/src/lib/util.d.ts +20 -0
- package/dist/libs/common/base/src/lib/util.js +110 -0
- package/dist/libs/common/base/src/lib/util.js.map +1 -0
- package/dist/libs/signstack/base/schemas/asset.schema.json +220 -0
- package/dist/libs/signstack/base/schemas/blueprint.schema.json +485 -0
- package/dist/libs/signstack/base/schemas/jsonata-function.schema.json +185 -0
- package/dist/libs/signstack/base/schemas/schema.schema.json +97 -0
- package/dist/libs/signstack/base/schemas/template.schema.json +295 -0
- package/dist/libs/signstack/base/src/index.d.ts +28 -0
- package/dist/libs/signstack/base/src/index.js +32 -0
- package/dist/libs/signstack/base/src/index.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/constants.d.ts +123 -0
- package/dist/libs/signstack/base/src/lib/constants.js +131 -0
- package/dist/libs/signstack/base/src/lib/constants.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/hash.util.d.ts +58 -0
- package/dist/libs/signstack/base/src/lib/hash.util.js +90 -0
- package/dist/libs/signstack/base/src/lib/hash.util.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.d.ts +29 -0
- package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.js +93 -0
- package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/ai-chat.d.ts +41 -0
- package/dist/libs/signstack/base/src/lib/models/ai-chat.js +3 -0
- package/dist/libs/signstack/base/src/lib/models/ai-chat.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/api-key.d.ts +54 -0
- package/dist/libs/signstack/base/src/lib/models/api-key.js +18 -0
- package/dist/libs/signstack/base/src/lib/models/api-key.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/asset.d.ts +101 -0
- package/dist/libs/signstack/base/src/lib/models/asset.js +11 -0
- package/dist/libs/signstack/base/src/lib/models/asset.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/auth.d.ts +142 -0
- package/dist/libs/signstack/base/src/lib/models/auth.js +35 -0
- package/dist/libs/signstack/base/src/lib/models/auth.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/base.d.ts +134 -0
- package/dist/libs/signstack/base/src/lib/models/base.js +71 -0
- package/dist/libs/signstack/base/src/lib/models/base.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/blueprint.d.ts +311 -0
- package/dist/libs/signstack/base/src/lib/models/blueprint.js +9 -0
- package/dist/libs/signstack/base/src/lib/models/blueprint.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/file.d.ts +75 -0
- package/dist/libs/signstack/base/src/lib/models/file.js +9 -0
- package/dist/libs/signstack/base/src/lib/models/file.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/jsonata-function.d.ts +111 -0
- package/dist/libs/signstack/base/src/lib/models/jsonata-function.js +19 -0
- package/dist/libs/signstack/base/src/lib/models/jsonata-function.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/marketplace-listing.d.ts +132 -0
- package/dist/libs/signstack/base/src/lib/models/marketplace-listing.js +22 -0
- package/dist/libs/signstack/base/src/lib/models/marketplace-listing.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/membership.d.ts +127 -0
- package/dist/libs/signstack/base/src/lib/models/membership.js +22 -0
- package/dist/libs/signstack/base/src/lib/models/membership.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/namespace.d.ts +87 -0
- package/dist/libs/signstack/base/src/lib/models/namespace.js +57 -0
- package/dist/libs/signstack/base/src/lib/models/namespace.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/organization.d.ts +79 -0
- package/dist/libs/signstack/base/src/lib/models/organization.js +41 -0
- package/dist/libs/signstack/base/src/lib/models/organization.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/render-job.d.ts +88 -0
- package/dist/libs/signstack/base/src/lib/models/render-job.js +3 -0
- package/dist/libs/signstack/base/src/lib/models/render-job.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/resource-edge.d.ts +60 -0
- package/dist/libs/signstack/base/src/lib/models/resource-edge.js +202 -0
- package/dist/libs/signstack/base/src/lib/models/resource-edge.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/scenario.d.ts +138 -0
- package/dist/libs/signstack/base/src/lib/models/scenario.js +14 -0
- package/dist/libs/signstack/base/src/lib/models/scenario.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/schema.d.ts +131 -0
- package/dist/libs/signstack/base/src/lib/models/schema.js +44 -0
- package/dist/libs/signstack/base/src/lib/models/schema.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/shareable-link.d.ts +215 -0
- package/dist/libs/signstack/base/src/lib/models/shareable-link.js +27 -0
- package/dist/libs/signstack/base/src/lib/models/shareable-link.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/subscription.d.ts +279 -0
- package/dist/libs/signstack/base/src/lib/models/subscription.js +105 -0
- package/dist/libs/signstack/base/src/lib/models/subscription.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/template.d.ts +248 -0
- package/dist/libs/signstack/base/src/lib/models/template.js +32 -0
- package/dist/libs/signstack/base/src/lib/models/template.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/user.d.ts +30 -0
- package/dist/libs/signstack/base/src/lib/models/user.js +3 -0
- package/dist/libs/signstack/base/src/lib/models/user.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/webhook.d.ts +223 -0
- package/dist/libs/signstack/base/src/lib/models/webhook.js +62 -0
- package/dist/libs/signstack/base/src/lib/models/webhook.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/workflow.d.ts +917 -0
- package/dist/libs/signstack/base/src/lib/models/workflow.js +152 -0
- package/dist/libs/signstack/base/src/lib/models/workflow.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/util.d.ts +92 -0
- package/dist/libs/signstack/base/src/lib/util.js +406 -0
- package/dist/libs/signstack/base/src/lib/util.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/dependency-graph.d.ts +94 -0
- package/dist/libs/signstack/base/src/lib/validation/dependency-graph.js +446 -0
- package/dist/libs/signstack/base/src/lib/validation/dependency-graph.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/graph.types.d.ts +57 -0
- package/dist/libs/signstack/base/src/lib/validation/graph.types.js +8 -0
- package/dist/libs/signstack/base/src/lib/validation/graph.types.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/index.d.ts +9 -0
- package/dist/libs/signstack/base/src/lib/validation/index.js +23 -0
- package/dist/libs/signstack/base/src/lib/validation/index.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/resource-schemas.d.ts +3 -0
- package/dist/libs/signstack/base/src/lib/validation/resource-schemas.js +27 -0
- package/dist/libs/signstack/base/src/lib/validation/resource-schemas.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.d.ts +57 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.js +57 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validator.d.ts +38 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validator.js +146 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validator.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.d.ts +22 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.js +69 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.d.ts +37 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.js +250 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.d.ts +24 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.js +98 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.d.ts +12 -0
- package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.js +50 -0
- package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/yaml-spec-converter.d.ts +101 -0
- package/dist/libs/signstack/base/src/lib/yaml-spec-converter.js +998 -0
- package/dist/libs/signstack/base/src/lib/yaml-spec-converter.js.map +1 -0
- package/oclif.manifest.json +822 -0
- package/package.json +101 -0
|
@@ -0,0 +1,611 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import pc from 'picocolors';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { resolveEntityData, } from './entity-data-resolver.js';
|
|
5
|
+
import { LocalResourceLoader, } from './local-resource-loader.js';
|
|
6
|
+
import { PayloadBuilder } from './payload-builder.js';
|
|
7
|
+
import { PreviewOutputFormatter } from './preview-output-formatter.js';
|
|
8
|
+
import { isScenarioFilePath, loadDefaultScenario, loadScenario, loadScenarioFromPath, saveScenarios, } from './scenario-file.js';
|
|
9
|
+
import { SchemaKind } from '../types/schema.types.js';
|
|
10
|
+
import { normalizePath } from './path-utils.js';
|
|
11
|
+
/**
|
|
12
|
+
* Unified preview handler for all modes:
|
|
13
|
+
* - Remote (--remote): API resolves everything from blueprintKey/version
|
|
14
|
+
* - Local (--local): All resources from local YAML files
|
|
15
|
+
* - Hybrid (default): Local files + fetch missing deps from API
|
|
16
|
+
*/
|
|
17
|
+
export class PreviewHandler {
|
|
18
|
+
apiClient;
|
|
19
|
+
config;
|
|
20
|
+
log;
|
|
21
|
+
error;
|
|
22
|
+
payloadBuilder;
|
|
23
|
+
localLoader;
|
|
24
|
+
formatter;
|
|
25
|
+
constructor(apiClient, config, log, error) {
|
|
26
|
+
this.apiClient = apiClient;
|
|
27
|
+
this.config = config;
|
|
28
|
+
this.log = log;
|
|
29
|
+
this.error = error;
|
|
30
|
+
this.payloadBuilder = new PayloadBuilder();
|
|
31
|
+
this.localLoader = new LocalResourceLoader(apiClient, config.orgId, this.payloadBuilder, log, error);
|
|
32
|
+
this.formatter = new PreviewOutputFormatter(log);
|
|
33
|
+
}
|
|
34
|
+
// ── Remote mode ──────────────────────────────────────────────────
|
|
35
|
+
/**
|
|
36
|
+
* Run remote preview. API resolves all dependencies from blueprintKey/version.
|
|
37
|
+
*/
|
|
38
|
+
async runRemote(blueprintKey, version, scenarioKey, jsonOutput, skipSignatureFields, combinePdfs) {
|
|
39
|
+
// Step 1: Load blueprint from API (need entitySlots for entity data generation)
|
|
40
|
+
const blueprintData = await this.loadBlueprintFromApi(blueprintKey, version, jsonOutput);
|
|
41
|
+
// Step 2: Get entity data (from scenario or generate dynamically via API)
|
|
42
|
+
const entityData = await resolveEntityData({
|
|
43
|
+
entitySlots: blueprintData.inputs,
|
|
44
|
+
scenarioKey,
|
|
45
|
+
jsonOutput,
|
|
46
|
+
fetchScenario: (key) => this.apiClient.get(`/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/scenarios/${encodeURIComponent(key)}`),
|
|
47
|
+
generateFromApi: (schemaKeys) => this.apiClient.post(`/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/schemas/examples`, { schemaKeys }),
|
|
48
|
+
log: this.log,
|
|
49
|
+
});
|
|
50
|
+
// Step 3: Render with remote mode (API resolves all dependencies)
|
|
51
|
+
const result = await this.performRender(() => this.renderBlueprintViaJobs({
|
|
52
|
+
blueprintKey: blueprintData.key,
|
|
53
|
+
blueprintVersion: blueprintData.version,
|
|
54
|
+
entities: entityData.entities.map((e) => ({
|
|
55
|
+
inputKey: e.key,
|
|
56
|
+
data: e.data,
|
|
57
|
+
})),
|
|
58
|
+
options: {
|
|
59
|
+
skipSignatureFields,
|
|
60
|
+
combinePdfs,
|
|
61
|
+
},
|
|
62
|
+
}), {
|
|
63
|
+
start: 'Rendering preview...',
|
|
64
|
+
success: (res) => `Rendered ${res.envelopes.flatMap((e) => e.documents).length} document(s)`,
|
|
65
|
+
fail: 'Failed to render preview',
|
|
66
|
+
}, jsonOutput);
|
|
67
|
+
// Step 4: Output results
|
|
68
|
+
this.formatter.printPreviewResults(result, jsonOutput, entityData, {
|
|
69
|
+
key: blueprintData.key,
|
|
70
|
+
version: blueprintData.version,
|
|
71
|
+
name: blueprintData.name,
|
|
72
|
+
source: 'signstack',
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// ── Local / Hybrid mode ──────────────────────────────────────────
|
|
76
|
+
/**
|
|
77
|
+
* Run local or hybrid preview.
|
|
78
|
+
* @param inlineOnly - When true (--local), fail on missing deps. When false (hybrid), prompt to fetch.
|
|
79
|
+
*/
|
|
80
|
+
async runLocal(pathArg, blueprintRef, scenarioKey, jsonOutput, inlineOnly = false, skipSignatureFields, combinePdfs) {
|
|
81
|
+
// Step 1-4: Validate, find blueprint, collect deps, upload assets
|
|
82
|
+
pathArg = normalizePath(pathArg);
|
|
83
|
+
const { missingDeps, targetDoc: blueprintDoc, relevantDocs, fileIdMap, } = await this.prepareLocalPreview({
|
|
84
|
+
pathArg,
|
|
85
|
+
resourceRef: blueprintRef,
|
|
86
|
+
resourceKind: SchemaKind.Blueprint,
|
|
87
|
+
resourceType: 'blueprint',
|
|
88
|
+
jsonOutput,
|
|
89
|
+
inlineOnly,
|
|
90
|
+
});
|
|
91
|
+
// Step 5: Build blueprint resource (for entity slots + inline request)
|
|
92
|
+
const blueprint = this.payloadBuilder.buildBlueprintPayload(blueprintDoc);
|
|
93
|
+
// Step 6: Collect local resource docs
|
|
94
|
+
const templateDocs = relevantDocs.filter((d) => d.kind === SchemaKind.Template);
|
|
95
|
+
const assetDocs = relevantDocs.filter((d) => d.kind === SchemaKind.Asset);
|
|
96
|
+
const functionDocs = relevantDocs.filter((d) => d.kind === SchemaKind.JsonataFunction);
|
|
97
|
+
// Step 7: Log missing deps info (backend resolves them in hybrid mode)
|
|
98
|
+
if (missingDeps.size > 0 && !jsonOutput) {
|
|
99
|
+
const allMissing = new Set();
|
|
100
|
+
for (const deps of missingDeps.values()) {
|
|
101
|
+
for (const dep of deps)
|
|
102
|
+
allMissing.add(dep);
|
|
103
|
+
}
|
|
104
|
+
this.log(`\n${pc.dim(`${allMissing.size} missing local dependency(ies) will be resolved from deployed resources.`)}`);
|
|
105
|
+
}
|
|
106
|
+
// Step 8: Resolve entity data — local scenario files first, then AI generation
|
|
107
|
+
const schemaDocs = relevantDocs
|
|
108
|
+
.filter((d) => d.kind === SchemaKind.Schema)
|
|
109
|
+
.map((d) => this.payloadBuilder.buildSchemaPayload(d));
|
|
110
|
+
const entityData = await this.resolveLocalScenarioEntities({
|
|
111
|
+
contractDir: pathArg,
|
|
112
|
+
scenarioKey,
|
|
113
|
+
entitySlots: blueprint.spec.inputs ?? [],
|
|
114
|
+
schemaDocs,
|
|
115
|
+
jsonOutput,
|
|
116
|
+
inlineOnly,
|
|
117
|
+
blueprintName: blueprint.metadata.name,
|
|
118
|
+
});
|
|
119
|
+
// Step 9: Build unified render request from local docs
|
|
120
|
+
const renderReq = this.payloadBuilder.buildRenderBlueprintReq({
|
|
121
|
+
blueprintDoc,
|
|
122
|
+
templateDocs,
|
|
123
|
+
assetDocs,
|
|
124
|
+
functionDocs,
|
|
125
|
+
schemaDocs,
|
|
126
|
+
fileIdMap,
|
|
127
|
+
entities: entityData.entities.length > 0 ? entityData.entities : undefined,
|
|
128
|
+
inlineOnly,
|
|
129
|
+
skipSignatureFields,
|
|
130
|
+
combinePdfs,
|
|
131
|
+
});
|
|
132
|
+
// Step 10: Call unified render API
|
|
133
|
+
const result = await this.callRenderBlueprint(renderReq, jsonOutput);
|
|
134
|
+
// Step 11: Print results
|
|
135
|
+
this.formatter.printPreviewResults(result, jsonOutput, entityData, {
|
|
136
|
+
ref: blueprintRef,
|
|
137
|
+
source: 'local',
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// ── Template Remote mode ────────────────────────────────────────
|
|
141
|
+
/**
|
|
142
|
+
* Run remote template preview. Backend resolves template + assets from key/version.
|
|
143
|
+
*/
|
|
144
|
+
async runTemplateRemote(templateKey, version, scenarioKey, jsonOutput, skipSignatureFields, _combinePdfs) {
|
|
145
|
+
// Step 1: Load template metadata (for display + entity data generation)
|
|
146
|
+
const template = await this.loadTemplateFromApi(templateKey, version, jsonOutput);
|
|
147
|
+
// Step 2: Get entity data (from scenario or generate dynamically via API)
|
|
148
|
+
const entityData = await resolveEntityData({
|
|
149
|
+
entitySlots: (template.spec.inputs || []).map((i) => ({
|
|
150
|
+
key: i.key,
|
|
151
|
+
schemaKey: i.schemaKey,
|
|
152
|
+
schemaVersion: i.schemaVersion,
|
|
153
|
+
})),
|
|
154
|
+
scenarioKey,
|
|
155
|
+
jsonOutput,
|
|
156
|
+
fetchScenario: (key) => this.apiClient.get(`/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/scenarios/${encodeURIComponent(key)}`),
|
|
157
|
+
generateFromApi: (template.spec.inputs?.length ?? 0) > 0
|
|
158
|
+
? (schemaKeys) => this.apiClient.post(`/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/schemas/examples`, { schemaKeys })
|
|
159
|
+
: undefined,
|
|
160
|
+
log: this.log,
|
|
161
|
+
});
|
|
162
|
+
// Step 3: Call render — backend resolves template + assets from DB
|
|
163
|
+
const renderReq = {
|
|
164
|
+
entities: entityData.entities.length > 0
|
|
165
|
+
? entityData.entities.map((e) => ({
|
|
166
|
+
inputKey: e.key,
|
|
167
|
+
data: e.data,
|
|
168
|
+
}))
|
|
169
|
+
: undefined,
|
|
170
|
+
options: {
|
|
171
|
+
skipSignatureFields,
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
const renderResult = await this.callRenderTemplate(renderReq, jsonOutput, template.metadata.key, template.metadata.version);
|
|
175
|
+
// Step 4: Output results (signedUrl comes from the API directly)
|
|
176
|
+
this.formatter.printTemplatePreviewResults({
|
|
177
|
+
signedUrl: renderResult.signedUrl,
|
|
178
|
+
detectedFields: renderResult.detectedFields,
|
|
179
|
+
}, jsonOutput, entityData, {
|
|
180
|
+
key: template.metadata.key,
|
|
181
|
+
version: template.metadata.version,
|
|
182
|
+
name: template.metadata.name,
|
|
183
|
+
type: template.spec.type,
|
|
184
|
+
source: 'signstack',
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// ── Template Local / Hybrid mode ───────────────────────────────
|
|
188
|
+
/**
|
|
189
|
+
* Run local or hybrid template preview.
|
|
190
|
+
* @param inlineOnly - When true (--local), fail on missing deps. When false (hybrid), prompt to fetch.
|
|
191
|
+
*/
|
|
192
|
+
async runTemplateLocal(pathArg, templateRef, scenarioKey, jsonOutput, inlineOnly = false, skipSignatureFields, _combinePdfs) {
|
|
193
|
+
// Step 1-4: Validate, find template, collect deps, upload assets
|
|
194
|
+
const { missingDeps, targetDoc: templateDoc, relevantDocs, fileIdMap, assetDocs, } = await this.prepareLocalPreview({
|
|
195
|
+
pathArg,
|
|
196
|
+
resourceRef: templateRef,
|
|
197
|
+
resourceKind: SchemaKind.Template,
|
|
198
|
+
resourceType: 'template',
|
|
199
|
+
jsonOutput,
|
|
200
|
+
inlineOnly,
|
|
201
|
+
});
|
|
202
|
+
// Step 5: Log missing deps info (backend resolves them in hybrid mode)
|
|
203
|
+
if (missingDeps.size > 0 && !jsonOutput) {
|
|
204
|
+
const allMissing = new Set();
|
|
205
|
+
for (const deps of missingDeps.values()) {
|
|
206
|
+
for (const dep of deps)
|
|
207
|
+
allMissing.add(dep);
|
|
208
|
+
}
|
|
209
|
+
this.log(`\n${pc.dim(`${allMissing.size} missing local dependency(ies) will be resolved from deployed resources.`)}`);
|
|
210
|
+
}
|
|
211
|
+
// Step 6: Collect docs for inline resources
|
|
212
|
+
const spec = templateDoc.content['spec'];
|
|
213
|
+
const templateType = spec?.['type'] || 'pdf';
|
|
214
|
+
const functionDocs = relevantDocs.filter((d) => d.kind === SchemaKind.JsonataFunction);
|
|
215
|
+
const schemaDocs = relevantDocs
|
|
216
|
+
.filter((d) => d.kind === SchemaKind.Schema)
|
|
217
|
+
.map((d) => this.payloadBuilder.buildSchemaPayload(d));
|
|
218
|
+
// Step 7: Resolve entity data — local scenario files first, then AI generation
|
|
219
|
+
const templateResource = this.payloadBuilder.buildTemplateResource(templateDoc);
|
|
220
|
+
const entityData = await this.resolveLocalScenarioEntities({
|
|
221
|
+
contractDir: pathArg,
|
|
222
|
+
scenarioKey,
|
|
223
|
+
entitySlots: (templateResource.spec.inputs || []).map((i) => ({
|
|
224
|
+
key: i.key,
|
|
225
|
+
schemaKey: i.schemaKey,
|
|
226
|
+
schemaVersion: i.schemaVersion,
|
|
227
|
+
})),
|
|
228
|
+
schemaDocs,
|
|
229
|
+
jsonOutput,
|
|
230
|
+
inlineOnly,
|
|
231
|
+
blueprintName: templateResource.metadata.name,
|
|
232
|
+
});
|
|
233
|
+
// Step 8: Build unified render request
|
|
234
|
+
const renderReq = this.payloadBuilder.buildRenderTemplateReq({
|
|
235
|
+
templateDoc,
|
|
236
|
+
assetDocs,
|
|
237
|
+
functionDocs,
|
|
238
|
+
schemaDocs,
|
|
239
|
+
fileIdMap,
|
|
240
|
+
entities: entityData.entities.length > 0 ? entityData.entities : undefined,
|
|
241
|
+
inlineOnly,
|
|
242
|
+
skipSignatureFields,
|
|
243
|
+
});
|
|
244
|
+
// Step 9: Call render API (keyless — inline resources in body)
|
|
245
|
+
const renderResult = await this.callRenderTemplate(renderReq, jsonOutput);
|
|
246
|
+
// Step 10: Print results
|
|
247
|
+
this.formatter.printTemplatePreviewResults({
|
|
248
|
+
signedUrl: renderResult.signedUrl,
|
|
249
|
+
detectedFields: renderResult.detectedFields,
|
|
250
|
+
}, jsonOutput, entityData, {
|
|
251
|
+
ref: templateRef,
|
|
252
|
+
key: templateResource.metadata.key,
|
|
253
|
+
version: templateResource.metadata.version,
|
|
254
|
+
name: templateResource.metadata.name,
|
|
255
|
+
type: templateType,
|
|
256
|
+
source: 'local',
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
// ── List scenarios ─────────────────────────────────────────────
|
|
260
|
+
async listScenarios(jsonOutput) {
|
|
261
|
+
const fetchSpinner = jsonOutput
|
|
262
|
+
? null
|
|
263
|
+
: ora({
|
|
264
|
+
text: 'Fetching scenarios...',
|
|
265
|
+
color: 'cyan',
|
|
266
|
+
}).start();
|
|
267
|
+
let resp;
|
|
268
|
+
try {
|
|
269
|
+
resp = await this.apiClient.get(`/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/scenarios`);
|
|
270
|
+
fetchSpinner?.succeed(`Fetched ${resp.data.length} scenario(s)`);
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
fetchSpinner?.fail('Failed to fetch scenarios');
|
|
274
|
+
throw error;
|
|
275
|
+
}
|
|
276
|
+
this.formatter.printScenariosList(resp.data.map((s) => ({ key: s.metadata.key, name: s.metadata.name })), jsonOutput);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Resolve entity data from local scenario files, with fallback to AI generation + save.
|
|
280
|
+
*
|
|
281
|
+
* Priority:
|
|
282
|
+
* 1. scenarioKey is a file path → load directly
|
|
283
|
+
* 2. scenarioKey is a key → look up scenarios/<key>.json locally, fall back to remote API
|
|
284
|
+
* 3. No scenarioKey → load default scenario (first alphabetically)
|
|
285
|
+
* 4. No scenarios exist → generate via inline API, save to scenarios/, use first one
|
|
286
|
+
* 5. Inline API unavailable → fall through to existing heuristic generation
|
|
287
|
+
*/
|
|
288
|
+
async resolveLocalScenarioEntities(params) {
|
|
289
|
+
const { contractDir, scenarioKey, entitySlots, schemaDocs, jsonOutput, inlineOnly, blueprintName, } = params;
|
|
290
|
+
// No entity slots → nothing to resolve
|
|
291
|
+
if (!entitySlots || entitySlots.length === 0) {
|
|
292
|
+
return { entities: [], isAutoGenerated: false };
|
|
293
|
+
}
|
|
294
|
+
// 1. scenarioKey is a file path → load directly
|
|
295
|
+
if (scenarioKey && isScenarioFilePath(scenarioKey)) {
|
|
296
|
+
try {
|
|
297
|
+
const entities = loadScenarioFromPath(resolve(scenarioKey));
|
|
298
|
+
if (!jsonOutput)
|
|
299
|
+
this.log(`Loaded scenario from file: ${scenarioKey}`);
|
|
300
|
+
return { entities, isAutoGenerated: false };
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
this.error(`Failed to load scenario file: ${scenarioKey}`, {
|
|
304
|
+
exit: 1,
|
|
305
|
+
suggestions: [
|
|
306
|
+
'Check that the file exists and contains valid JSON',
|
|
307
|
+
'Scenario files should be an array of { key, data } objects',
|
|
308
|
+
],
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// 2. scenarioKey is a key → look up locally
|
|
313
|
+
if (scenarioKey) {
|
|
314
|
+
const entities = loadScenario(contractDir, scenarioKey);
|
|
315
|
+
if (entities) {
|
|
316
|
+
if (!jsonOutput)
|
|
317
|
+
this.log(`Using scenario: ${scenarioKey}`);
|
|
318
|
+
return { entities, isAutoGenerated: false };
|
|
319
|
+
}
|
|
320
|
+
// Key not found locally — fall back to remote in non-local mode
|
|
321
|
+
if (!inlineOnly) {
|
|
322
|
+
if (!jsonOutput)
|
|
323
|
+
this.log(`Scenario "${scenarioKey}" not found locally, fetching from API`);
|
|
324
|
+
const scenario = await this.apiClient.get(`/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/scenarios/${encodeURIComponent(scenarioKey)}`);
|
|
325
|
+
const entityByKey = new Map((scenario.entities || []).map((e) => [e.key, e]));
|
|
326
|
+
const resolved = entitySlots
|
|
327
|
+
.map((slot) => {
|
|
328
|
+
const entity = entityByKey.get(slot.key);
|
|
329
|
+
if (!entity)
|
|
330
|
+
return null;
|
|
331
|
+
return {
|
|
332
|
+
key: slot.key,
|
|
333
|
+
data: entity.data,
|
|
334
|
+
};
|
|
335
|
+
})
|
|
336
|
+
.filter((e) => e !== null);
|
|
337
|
+
return { entities: resolved, isAutoGenerated: false };
|
|
338
|
+
}
|
|
339
|
+
this.error(`Scenario "${scenarioKey}" not found in ${contractDir}/scenarios/`, {
|
|
340
|
+
exit: 1,
|
|
341
|
+
suggestions: [
|
|
342
|
+
`Create a scenario file at: ${contractDir}/scenarios/${scenarioKey}.json`,
|
|
343
|
+
'Or omit --scenario to auto-generate one',
|
|
344
|
+
'Or remove --resolve local to use a remote scenario',
|
|
345
|
+
],
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
// 3. No scenarioKey → load default scenario
|
|
349
|
+
const defaultScenario = loadDefaultScenario(contractDir);
|
|
350
|
+
if (defaultScenario) {
|
|
351
|
+
if (!jsonOutput)
|
|
352
|
+
this.log(`Using scenario: ${defaultScenario.key}`);
|
|
353
|
+
return {
|
|
354
|
+
entities: defaultScenario.entities,
|
|
355
|
+
isAutoGenerated: false,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
// 4. No scenarios exist → generate via inline API, save, and use first
|
|
359
|
+
// entitySlots[].schemaKey is key-only (e.g. "client_info"), ParsedDocument has .key and .version
|
|
360
|
+
const entitySchemaKeys = new Set(entitySlots.map((slot) => slot.schemaKey));
|
|
361
|
+
const schemasForApi = [];
|
|
362
|
+
for (const s of schemaDocs) {
|
|
363
|
+
if (!entitySchemaKeys.has(s.key))
|
|
364
|
+
continue;
|
|
365
|
+
const spec = s.content['spec'];
|
|
366
|
+
const definition = spec?.['definition'];
|
|
367
|
+
if (definition) {
|
|
368
|
+
schemasForApi.push({ key: s.key, schemaDefinition: definition });
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
if (schemasForApi.length > 0) {
|
|
372
|
+
const spinner = jsonOutput
|
|
373
|
+
? null
|
|
374
|
+
: ora({
|
|
375
|
+
text: 'Generating scenarios from schemas using AI...',
|
|
376
|
+
color: 'cyan',
|
|
377
|
+
}).start();
|
|
378
|
+
try {
|
|
379
|
+
const resp = await this.apiClient.post(`/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/schemas/examples/inline`, { schemas: schemasForApi, context: blueprintName });
|
|
380
|
+
if (resp.scenarios.length > 0) {
|
|
381
|
+
const scenariosToSave = resp.scenarios.map((s) => ({
|
|
382
|
+
name: s.name,
|
|
383
|
+
entities: s.entities.map((e) => {
|
|
384
|
+
// Generator returns one example per schema. Map each to the first
|
|
385
|
+
// input slot using that schema; fall back to the schema key itself
|
|
386
|
+
// if no slot matches (shouldn't happen in practice).
|
|
387
|
+
const slot = entitySlots.find((sl) => sl.schemaKey === e.schemaKey);
|
|
388
|
+
return {
|
|
389
|
+
key: slot?.key ?? e.schemaKey,
|
|
390
|
+
data: e.exampleData,
|
|
391
|
+
};
|
|
392
|
+
}),
|
|
393
|
+
}));
|
|
394
|
+
saveScenarios(contractDir, scenariosToSave);
|
|
395
|
+
spinner?.succeed(`Generated ${resp.scenarios.length} scenario(s) → scenarios/`);
|
|
396
|
+
return {
|
|
397
|
+
entities: scenariosToSave[0].entities,
|
|
398
|
+
isAutoGenerated: true,
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
spinner?.succeed('No scenarios needed (no meaningful variations)');
|
|
402
|
+
}
|
|
403
|
+
catch (error) {
|
|
404
|
+
spinner?.fail('Failed to generate AI scenarios');
|
|
405
|
+
throw error;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
// No schemas with definitions found — proceed without entity data
|
|
409
|
+
return { entities: [], isAutoGenerated: false };
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Shared preparation for local / hybrid preview (used by both blueprint and template flows).
|
|
413
|
+
* Delegates to LocalResourceLoader for validation, dependency collection, and asset upload.
|
|
414
|
+
*/
|
|
415
|
+
async prepareLocalPreview(opts) {
|
|
416
|
+
return this.localLoader.prepareLocalResources({
|
|
417
|
+
...opts,
|
|
418
|
+
callbacks: {
|
|
419
|
+
printValidationErrors: (summary, jsonOutput) => this.formatter.printValidationErrors(summary, jsonOutput),
|
|
420
|
+
printValidationSuccess: (count) => this.formatter.printValidationSuccess(count),
|
|
421
|
+
},
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
// ── Shared private methods ─────────────────────────────────────
|
|
425
|
+
/**
|
|
426
|
+
* Call blueprints/:key/render API endpoint (DB mode).
|
|
427
|
+
*/
|
|
428
|
+
async performRender(apiCall, spinnerMessages, jsonOutput) {
|
|
429
|
+
const spinner = jsonOutput
|
|
430
|
+
? null
|
|
431
|
+
: ora({ text: spinnerMessages.start, color: 'cyan' }).start();
|
|
432
|
+
try {
|
|
433
|
+
const result = await apiCall();
|
|
434
|
+
spinner?.succeed(spinnerMessages.success(result));
|
|
435
|
+
if (result.warnings?.length && !jsonOutput) {
|
|
436
|
+
this.formatter.printWarnings(result.warnings);
|
|
437
|
+
}
|
|
438
|
+
return result;
|
|
439
|
+
}
|
|
440
|
+
catch (error) {
|
|
441
|
+
spinner?.fail(spinnerMessages.fail);
|
|
442
|
+
throw error;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Call unified POST /blueprints/render endpoint.
|
|
447
|
+
*/
|
|
448
|
+
async callRenderBlueprint(payload, jsonOutput) {
|
|
449
|
+
const spinner = jsonOutput
|
|
450
|
+
? null
|
|
451
|
+
: ora({
|
|
452
|
+
text: 'Rendering preview...',
|
|
453
|
+
color: 'cyan',
|
|
454
|
+
}).start();
|
|
455
|
+
try {
|
|
456
|
+
const result = await this.renderBlueprintViaJobs(payload);
|
|
457
|
+
spinner?.succeed(`Rendered ${result.envelopes.flatMap((e) => e.documents).length} document(s)`);
|
|
458
|
+
if (result.warnings?.length && !jsonOutput) {
|
|
459
|
+
this.formatter.printWarnings(result.warnings);
|
|
460
|
+
}
|
|
461
|
+
return result;
|
|
462
|
+
}
|
|
463
|
+
catch (error) {
|
|
464
|
+
spinner?.fail('Failed to render preview');
|
|
465
|
+
throw error;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* POST /blueprints/render (async) and poll the envelope-job to terminal.
|
|
470
|
+
* The endpoint returns `{ jobId }` immediately (one envelope per request);
|
|
471
|
+
* the spinner stays up while we poll.
|
|
472
|
+
*/
|
|
473
|
+
async renderBlueprintViaJobs(payload) {
|
|
474
|
+
const { jobId } = await this.apiClient.post(`/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/blueprints/render`, payload);
|
|
475
|
+
if (!jobId) {
|
|
476
|
+
throw new Error('Failed to render blueprint: no jobId returned from the API');
|
|
477
|
+
}
|
|
478
|
+
return this.pollRenderJob(jobId);
|
|
479
|
+
}
|
|
480
|
+
/** POST /templates/render (async) and poll the job to terminal. */
|
|
481
|
+
async renderTemplateViaJobs(body) {
|
|
482
|
+
const { jobId } = await this.apiClient.post(`/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/templates/render`, body);
|
|
483
|
+
if (!jobId) {
|
|
484
|
+
throw new Error('Failed to render template: no jobId returned from the API');
|
|
485
|
+
}
|
|
486
|
+
return this.pollRenderJob(jobId);
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Poll `GET /render-jobs/:jobId` until the job is terminal, returning its
|
|
490
|
+
* `result` on success. Mirrors the old server-side long-poll cadence.
|
|
491
|
+
*/
|
|
492
|
+
async pollRenderJob(jobId) {
|
|
493
|
+
const url = `/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/render-jobs/${jobId}`;
|
|
494
|
+
const deadline = Date.now() + 280_000;
|
|
495
|
+
while (Date.now() < deadline) {
|
|
496
|
+
const job = await this.apiClient.get(url);
|
|
497
|
+
if (job.status === 'completed') {
|
|
498
|
+
if (!job.result) {
|
|
499
|
+
throw new Error(`render job ${jobId} completed without a result`);
|
|
500
|
+
}
|
|
501
|
+
return job.result;
|
|
502
|
+
}
|
|
503
|
+
if (job.status === 'failed') {
|
|
504
|
+
throw new Error(job.error ?? `render job ${jobId} failed`);
|
|
505
|
+
}
|
|
506
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
507
|
+
}
|
|
508
|
+
throw new Error(`render job ${jobId} polling timed out`);
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Load blueprint metadata from SignStack API.
|
|
512
|
+
*/
|
|
513
|
+
async loadBlueprintFromApi(blueprintKey, version, jsonOutput) {
|
|
514
|
+
const fetchSpinner = jsonOutput
|
|
515
|
+
? null
|
|
516
|
+
: ora({
|
|
517
|
+
text: 'Fetching blueprint from SignStack...',
|
|
518
|
+
color: 'cyan',
|
|
519
|
+
}).start();
|
|
520
|
+
let blueprint;
|
|
521
|
+
try {
|
|
522
|
+
const baseUrl = `/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/blueprints/${encodeURIComponent(blueprintKey)}`;
|
|
523
|
+
const url = version
|
|
524
|
+
? `${baseUrl}?version=${encodeURIComponent(version)}`
|
|
525
|
+
: baseUrl;
|
|
526
|
+
blueprint = await this.apiClient.get(url);
|
|
527
|
+
fetchSpinner?.succeed(`Found blueprint: ${pc.cyan(blueprint.metadata.name)} (v${blueprint.metadata.version})`);
|
|
528
|
+
}
|
|
529
|
+
catch (error) {
|
|
530
|
+
fetchSpinner?.fail('Failed to fetch blueprint from SignStack');
|
|
531
|
+
throw error;
|
|
532
|
+
}
|
|
533
|
+
return {
|
|
534
|
+
key: blueprintKey,
|
|
535
|
+
version: blueprint.metadata.version,
|
|
536
|
+
name: blueprint.metadata.name || blueprintKey,
|
|
537
|
+
inputs: blueprint.spec.inputs || [],
|
|
538
|
+
};
|
|
539
|
+
}
|
|
540
|
+
// ── Template-specific private methods ──────────────────────────
|
|
541
|
+
/**
|
|
542
|
+
* Load template metadata from SignStack API.
|
|
543
|
+
*/
|
|
544
|
+
async loadTemplateFromApi(templateKey, version, jsonOutput) {
|
|
545
|
+
const fetchSpinner = jsonOutput
|
|
546
|
+
? null
|
|
547
|
+
: ora({
|
|
548
|
+
text: 'Fetching template from SignStack...',
|
|
549
|
+
color: 'cyan',
|
|
550
|
+
}).start();
|
|
551
|
+
try {
|
|
552
|
+
const baseUrl = `/v1/orgs/${this.config.orgId}/namespaces/${this.config.namespaceKey}/templates/${encodeURIComponent(templateKey)}`;
|
|
553
|
+
const url = version
|
|
554
|
+
? `${baseUrl}?version=${encodeURIComponent(version)}`
|
|
555
|
+
: baseUrl;
|
|
556
|
+
const template = await this.apiClient.get(url);
|
|
557
|
+
fetchSpinner?.succeed(`Found template: ${pc.cyan(template.metadata.name)} (v${template.metadata.version}, ${template.spec.type})`);
|
|
558
|
+
return template;
|
|
559
|
+
}
|
|
560
|
+
catch (error) {
|
|
561
|
+
fetchSpinner?.fail('Failed to fetch template from SignStack');
|
|
562
|
+
throw error;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* Call render: POST /templates/render with templateKey/templateVersion in body
|
|
567
|
+
*/
|
|
568
|
+
async callRenderTemplate(payload, jsonOutput, key, version) {
|
|
569
|
+
const spinner = jsonOutput
|
|
570
|
+
? null
|
|
571
|
+
: ora({
|
|
572
|
+
text: 'Rendering template preview...',
|
|
573
|
+
color: 'cyan',
|
|
574
|
+
}).start();
|
|
575
|
+
try {
|
|
576
|
+
const body = {
|
|
577
|
+
...payload,
|
|
578
|
+
...(key && { templateKey: key }),
|
|
579
|
+
...(version && { templateVersion: version }),
|
|
580
|
+
};
|
|
581
|
+
const result = await this.renderTemplateViaJobs(body);
|
|
582
|
+
spinner?.succeed('Template rendered successfully');
|
|
583
|
+
return result;
|
|
584
|
+
}
|
|
585
|
+
catch (error) {
|
|
586
|
+
spinner?.fail('Failed to render template preview');
|
|
587
|
+
throw error;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Get signed download URL for a file.
|
|
592
|
+
*/
|
|
593
|
+
async getSignedUrl(fileId, jsonOutput) {
|
|
594
|
+
const spinner = jsonOutput
|
|
595
|
+
? null
|
|
596
|
+
: ora({
|
|
597
|
+
text: 'Getting download URL...',
|
|
598
|
+
color: 'cyan',
|
|
599
|
+
}).start();
|
|
600
|
+
try {
|
|
601
|
+
const file = await this.apiClient.get(`/v1/orgs/${this.config.orgId}/files/${encodeURIComponent(fileId)}`);
|
|
602
|
+
spinner?.succeed('Download URL ready');
|
|
603
|
+
return file.downloadUrl;
|
|
604
|
+
}
|
|
605
|
+
catch (error) {
|
|
606
|
+
spinner?.fail('Failed to get download URL');
|
|
607
|
+
throw error;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
//# sourceMappingURL=preview-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-handler.js","sourceRoot":"","sources":["../../../../../src/lib/preview-handler.ts"],"names":[],"mappings":"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"}
|