@aifabrix/builder 2.51.0 → 2.51.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/jest.isolated-projects.js +77 -1
- package/jest.projects.js +5 -426
- package/lib/api/assistants.api.js +67 -0
- package/lib/api/datasources-extended.api.js +6 -6
- package/lib/api/evidence-authoring-helpers.js +267 -0
- package/lib/api/evidence-authoring.api.js +337 -0
- package/lib/api/evidence.api.js +57 -1
- package/lib/api/index.js +24 -7
- package/lib/api/pipeline.api.js +43 -3
- package/lib/api/records-bulk.api.js +28 -3
- package/lib/api/types/evidence.types.js +156 -8
- package/lib/api/work.api.js +283 -0
- package/lib/app/run-deploy-job.js +108 -0
- package/lib/app/run-helpers.js +10 -3
- package/lib/app/run.js +8 -0
- package/lib/channels/add-channel.js +54 -23
- package/lib/channels/approval-guides/chatgpt.js +8 -7
- package/lib/channels/approval-guides/microsoft-copilot.js +7 -8
- package/lib/channels/channel-artifact-generator.js +14 -2
- package/lib/channels/channel-credential.js +3 -1
- package/lib/channels/channel-probe-evidence.js +79 -0
- package/lib/channels/channel-probe.js +265 -13
- package/lib/channels/channel-runtime-resolver.js +120 -29
- package/lib/channels/channel-status-display.js +44 -0
- package/lib/channels/channel-targets.js +7 -0
- package/lib/channels/chatgpt-runtime-contract.js +29 -0
- package/lib/channels/microsoft-copilot-package.js +280 -0
- package/lib/channels/runtime-tool-catalog.js +165 -0
- package/lib/cli/index.js +2 -0
- package/lib/cli/setup-app.js +4 -0
- package/lib/cli/setup-external-system-help.js +8 -2
- package/lib/cli/setup-external-system.js +12 -0
- package/lib/commands/app-test.js +2 -14
- package/lib/commands/datasource-load-export-cli.js +6 -1
- package/lib/commands/deploy-gate-failure-details.js +19 -17
- package/lib/commands/dev-down.js +2 -6
- package/lib/commands/evidence-kind.js +65 -15
- package/lib/commands/governance-generate-external.js +56 -21
- package/lib/commands/lifecycle-external.js +10 -4
- package/lib/commands/repair-datasource-apply.js +10 -1
- package/lib/commands/repair-datasource-run.js +4 -2
- package/lib/commands/repair-datasource-test-payload.js +80 -19
- package/lib/commands/repair-datasource-webhooks-sync-bridge.js +42 -3
- package/lib/commands/repair-internal.js +9 -1
- package/lib/commands/repair-openapi-sync.js +34 -17
- package/lib/commands/role-assistant.js +313 -0
- package/lib/commands/upload-data-sync-finalize.js +5 -4
- package/lib/commands/upload-sidecar-followups.js +144 -47
- package/lib/commands/upload.js +43 -6
- package/lib/commands/verify-governance-combined-external.js +73 -9
- package/lib/commands/verify-governance-db.js +80 -25
- package/lib/commands/verify-governance-external.js +29 -5
- package/lib/commands/wizard-core-helpers.js +7 -3
- package/lib/commands/wizard-core.js +78 -9
- package/lib/datasource/bulk-loader-run-batches.js +4 -2
- package/lib/datasource/bulk-loader-service.js +5 -1
- package/lib/datasource/datasource-validate-summary.js +2 -2
- package/lib/datasource/validate.js +13 -6
- package/lib/external-system/deploy-helpers.js +35 -1
- package/lib/external-system/deploy.js +23 -10
- package/lib/external-system/download-helpers.js +111 -2
- package/lib/external-system/download-role-assistant.js +55 -0
- package/lib/external-system/download.js +45 -26
- package/lib/external-system/test-helpers.js +1 -1
- package/lib/external-system/test.js +39 -3
- package/lib/generator/builders.js +3 -0
- package/lib/generator/wizard.js +51 -4
- package/lib/lifecycle/access-control-abac.js +121 -0
- package/lib/lifecycle/lifecycle-governance-options.js +4 -1
- package/lib/lifecycle/product-model.js +3 -2
- package/lib/lifecycle/report-display.js +14 -2
- package/lib/programmatic/capability-registry.js +20 -1
- package/lib/programmatic/command-options.js +1 -0
- package/lib/programmatic/index.js +4 -0
- package/lib/programmatic/manifest-patch-section.js +48 -9
- package/lib/programmatic/manifest-section-registry-data.js +3 -2
- package/lib/programmatic/openapi-apply-result-schemas.js +44 -0
- package/lib/programmatic/openapi-component-schemas.js +16 -1
- package/lib/programmatic/openapi-description-enricher.js +3 -1
- package/lib/programmatic/openapi-descriptions.js +55 -5
- package/lib/programmatic/openapi-evidence-schemas.js +161 -0
- package/lib/programmatic/openapi-manifest-schemas.js +6 -2
- package/lib/programmatic/openapi-operation-bindings.js +99 -0
- package/lib/programmatic/openapi-request-schemas.js +36 -1
- package/lib/programmatic/openapi-result-schemas.js +1 -1
- package/lib/programmatic/openapi-schema-descriptions-certify.js +5 -1
- package/lib/programmatic/openapi-schema-descriptions-core.js +1 -1
- package/lib/programmatic/openapi-schema-descriptions-evidence.js +156 -0
- package/lib/programmatic/openapi-schema-descriptions-manifest.js +4 -3
- package/lib/programmatic/openapi-schema-descriptions-operations.js +70 -0
- package/lib/programmatic/openapi-spec.js +47 -28
- package/lib/programmatic/orchestration-openapi-meta.js +5 -0
- package/lib/programmatic/request-timeout.js +3 -0
- package/lib/programmatic/route-handler-map.js +89 -2
- package/lib/programmatic/run-certify.js +15 -2
- package/lib/programmatic/run-deploy.js +74 -0
- package/lib/programmatic/run-evidence-authoring.js +80 -0
- package/lib/programmatic/run-protection.js +124 -0
- package/lib/programmatic/run-template-workspace.js +28 -1
- package/lib/programmatic/workspace-context.js +6 -0
- package/lib/protection/auth-context.js +48 -6
- package/lib/protection/paths.js +22 -0
- package/lib/protection/run-protection-create-helpers.js +22 -1
- package/lib/protection/run-protection-create.js +1 -1
- package/lib/protection/sync-after-upload.js +1 -1
- package/lib/role-assistant/evidence-sync.js +450 -0
- package/lib/role-assistant/github-workflow.js +96 -0
- package/lib/role-assistant/knowledge-sync.js +465 -0
- package/lib/role-assistant/settings.js +126 -0
- package/lib/role-assistant/test-cases-evaluate.js +170 -0
- package/lib/role-assistant/test-cases-honesty.js +184 -0
- package/lib/role-assistant/test-cases.js +364 -0
- package/lib/role-assistant/test-runner-workhub-answers.js +203 -0
- package/lib/role-assistant/test-runner-workhub.js +385 -0
- package/lib/role-assistant/test-runner.js +500 -0
- package/lib/schema/application-schema.json +16 -2
- package/lib/schema/deployment-rules.yaml +1 -0
- package/lib/schema/external-datasource.schema.json +38 -4
- package/lib/schema/external-system.schema.json +4 -4
- package/lib/schema/infra.parameter.yaml +20 -0
- package/lib/schema/role-assistant-settings.schema.json +108 -0
- package/lib/utils/api.js +52 -27
- package/lib/utils/app-path-resolve.js +72 -24
- package/lib/utils/authentication-shape.js +3 -1
- package/lib/utils/deployment-validation.js +28 -3
- package/lib/utils/docker-run-ephemeral.js +55 -0
- package/lib/utils/enterprise-knowledge-paths.js +29 -12
- package/lib/utils/env-copy-keycloak.js +196 -0
- package/lib/utils/env-copy.js +34 -1
- package/lib/utils/external-system-readiness-compact-display.js +3 -0
- package/lib/utils/help-builder.js +1 -0
- package/lib/utils/paths.js +67 -23
- package/lib/utils/pipeline-upload-auth-retry.js +15 -3
- package/lib/utils/role-assistant-paths.js +98 -0
- package/lib/utils/schema-loader.js +41 -0
- package/lib/utils/schema-resolver.js +36 -4
- package/lib/utils/token-manager.js +38 -29
- package/lib/utils/url-declarative-resolve-load-doc.js +38 -1
- package/lib/validation/external-manifest-validator.js +31 -8
- package/lib/validation/validate-external-file.js +8 -1
- package/package.json +2 -1
- package/scripts/export-builder-api-evidence.js +1 -1
- package/templates/applications/dataplane/application.yaml +23 -15
- package/templates/applications/dataplane/env.template +1 -1
- package/templates/applications/dataplane/rbac.yaml +14 -0
- package/templates/applications/miso-controller/application.yaml +1 -1
- package/templates/applications/miso-controller/env.template +3 -1
- package/templates/channels/chatgpt/install.template.md.hbs +42 -24
- package/templates/channels/chatgpt/integration/README.md +10 -7
- package/templates/channels/chatgpt/integration/application.json +2 -2
- package/templates/channels/chatgpt/integration/chatgpt-system.json +3 -3
- package/templates/channels/chatgpt/integration/env.template +1 -1
- package/templates/channels/chatgpt/manifest.template.json.hbs +36 -5
- package/templates/channels/microsoft-copilot/ai-plugin.template.json.hbs +28 -0
- package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +22 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +32 -22
- package/templates/channels/microsoft-copilot/integration/README.md +9 -7
- package/templates/channels/microsoft-copilot/integration/application.json +2 -2
- package/templates/channels/microsoft-copilot/integration/env.template +1 -1
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +7 -6
- package/templates/channels/microsoft-copilot/manifest.template.json.hbs +34 -6
- /package/.cursor/plans/{157.1-security-quality-violations-by-type.csv → Done/157.1-security-quality-violations-by-type.csv} +0 -0
|
@@ -1,9 +1,40 @@
|
|
|
1
1
|
{
|
|
2
|
+
"channelTarget": "{{channelTarget}}",
|
|
2
3
|
"name": "{{appName}}",
|
|
4
|
+
"baseName": "{{baseName}}",
|
|
3
5
|
"description": "{{appDescription}}",
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
"environment": "{{environment}}",
|
|
7
|
+
"runtime": {
|
|
8
|
+
"runtimeSystemKey": "{{runtimeSystemKey}}",
|
|
9
|
+
"remoteMcpUrl": "{{mcpUrl}}",
|
|
10
|
+
"transport": "{{runtimeTransport}}",
|
|
11
|
+
"assistantCatalogUrl": "{{assistantCatalogUrl}}",
|
|
12
|
+
"roleAssistantResolution": "dynamic-runtime",
|
|
13
|
+
"layerBToolNames": [
|
|
14
|
+
{{#each layerBToolNames}}
|
|
15
|
+
"{{this}}"{{#unless @last}},{{/unless}}
|
|
16
|
+
{{/each}}
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"authentication": {
|
|
20
|
+
"mode": "{{runtimeAuthMode}}",
|
|
21
|
+
"credentialKey": "{{credentialKey}}",
|
|
22
|
+
"credentialPortalUrl": "{{credentialPortalUrl}}",
|
|
23
|
+
"scopes": {{{scopesJson}}}
|
|
24
|
+
},
|
|
25
|
+
"boundaries": {
|
|
26
|
+
"oneConnectionSupportsManyRoleAssistants": true,
|
|
27
|
+
"topLevelEvidenceToolsExposed": false,
|
|
28
|
+
"runtimeOwnsWorkInterface": true,
|
|
29
|
+
"evidenceCapabilityPath": "ChatGPT -> runtime-orchestration -> Business Transformation Assistant -> internal evidence capabilities"
|
|
30
|
+
},
|
|
31
|
+
"lifecycle": {
|
|
32
|
+
"locallyValidated": true,
|
|
33
|
+
"runtimeValidated": false,
|
|
34
|
+
"requiresChatGptWorkspaceAdmin": true
|
|
35
|
+
},
|
|
36
|
+
"artifact": {
|
|
37
|
+
"format": "chatgpt-custom-mcp-app",
|
|
38
|
+
"version": "1.0.0"
|
|
39
|
+
}
|
|
9
40
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://developer.microsoft.com/json-schemas/copilot/plugin/v2.4/schema.json",
|
|
3
|
+
"schema_version": "v2.4",
|
|
4
|
+
"name_for_human": "{{appName}}",
|
|
5
|
+
"name_for_model": "aifabrix_runtime_orchestration",
|
|
6
|
+
"description_for_human": "{{appDescription}}",
|
|
7
|
+
"description_for_model": "Runtime orchestration tools for governed enterprise work.",
|
|
8
|
+
"runtimes": [
|
|
9
|
+
{
|
|
10
|
+
"type": "RemoteMCPServer",
|
|
11
|
+
"spec": {
|
|
12
|
+
"url": "{{mcpUrl}}"
|
|
13
|
+
},
|
|
14
|
+
"auth": {
|
|
15
|
+
"type": "oauth",
|
|
16
|
+
"scopes": {{{scopesJson}}}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"mcp_tool_description": {
|
|
21
|
+
"mode": "dynamic",
|
|
22
|
+
"layerBToolNames": [
|
|
23
|
+
{{#each layerBToolNames}}
|
|
24
|
+
"{{this}}"{{#unless @last}},{{/unless}}
|
|
25
|
+
{{/each}}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "{{packageAppId}}-agent",
|
|
3
|
+
"name": "{{appName}}",
|
|
4
|
+
"description": "{{appDescription}}",
|
|
5
|
+
"instructions": "Use Runtime Layer B tools only. Resolve Role Assistants dynamically and keep business reasoning inside authorized Role Assistant boundaries.",
|
|
6
|
+
"conversation_starters": [
|
|
7
|
+
{
|
|
8
|
+
"title": "Show my role assistants",
|
|
9
|
+
"text": "List my available Role Assistants and what they can do."
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"title": "Start guided work",
|
|
13
|
+
"text": "Help me start work for my current business objective."
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"actions": [
|
|
17
|
+
{
|
|
18
|
+
"id": "{{pluginId}}",
|
|
19
|
+
"file": "ai-plugin.json"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -1,29 +1,37 @@
|
|
|
1
|
-
# {{appName}} — Microsoft Copilot
|
|
1
|
+
# {{appName}} — Microsoft 365 Copilot package setup
|
|
2
2
|
|
|
3
3
|
{{appDescription}}
|
|
4
4
|
|
|
5
5
|
Environment: **{{environment}}** · Credential key: `{{credentialKey}}`
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
This channel output is a Microsoft 365 Copilot app package:
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
```text
|
|
10
|
+
dist/channels/microsoft-copilot/source/manifest.json
|
|
11
|
+
dist/channels/microsoft-copilot/source/declarativeAgent.json
|
|
12
|
+
dist/channels/microsoft-copilot/source/ai-plugin.json
|
|
13
|
+
dist/channels/microsoft-copilot/build/appPackage.{{environment}}.zip
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Microsoft admin workflow (manual)
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
1. Sign in to [Microsoft 365 admin](https://admin.cloud.microsoft.com/) or Copilot Studio as a tenant admin.
|
|
19
|
+
2. Upload or sideload `appPackage.{{environment}}.zip` to your organization app catalog.
|
|
20
|
+
3. Review the declarative agent + Remote MCP plugin metadata and approve tenant distribution.
|
|
21
|
+
4. Configure workspace authentication and consent according to your Entra/OAuth policy.
|
|
22
|
+
5. Store credential references in AI Fabrix authentication settings: [Authentication settings]({{credentialPortalUrl}})
|
|
23
|
+
6. Assign the app to users/groups and complete first-user sign-in.
|
|
18
24
|
|
|
19
|
-
|
|
25
|
+
## Runtime connection contract
|
|
20
26
|
|
|
21
|
-
{{
|
|
22
|
-
- **
|
|
23
|
-
{{
|
|
24
|
-
{{
|
|
25
|
-
- **
|
|
26
|
-
{{
|
|
27
|
+
- **Runtime system key:** `{{runtimeSystemKey}}`
|
|
28
|
+
- **Remote MCP URL:** `{{mcpUrl}}`
|
|
29
|
+
- **Transport:** `{{runtimeTransport}}`
|
|
30
|
+
- **Auth mode:** `{{runtimeAuthMode}}`
|
|
31
|
+
- **Layer B tools expected:**
|
|
32
|
+
{{#each layerBToolNames}}
|
|
33
|
+
- `{{this}}`
|
|
34
|
+
{{/each}}
|
|
27
35
|
|
|
28
36
|
## Assistant catalog
|
|
29
37
|
|
|
@@ -31,14 +39,16 @@ Runtime lists **assistants** available to each user from:
|
|
|
31
39
|
|
|
32
40
|
{{assistantCatalogUrl}}
|
|
33
41
|
|
|
34
|
-
##
|
|
42
|
+
## Probe truthfulness
|
|
35
43
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
- `builderValidated` means package files, ZIP, hashes, and secret checks passed.
|
|
45
|
+
- `runtimeValidated` means Runtime MCP is reachable and tool boundary checks pass.
|
|
46
|
+
- `requiresMicrosoftAdmin` remains true until tenant upload/approval/assignment is complete.
|
|
39
47
|
|
|
40
|
-
|
|
48
|
+
## Validate after admin setup
|
|
41
49
|
|
|
42
50
|
```bash
|
|
43
51
|
aifabrix channel add {{channelTarget}} --name "{{baseName}}" --probe
|
|
44
52
|
```
|
|
53
|
+
|
|
54
|
+
`--force` regenerates artifacts but does not rotate credentials.
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
# Microsoft Copilot
|
|
1
|
+
# Microsoft 365 Copilot package channel
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Generated by `aifabrix channel scaffold microsoft-copilot`.
|
|
4
|
+
|
|
5
|
+
Recommended flow:
|
|
4
6
|
|
|
5
7
|
```bash
|
|
6
|
-
|
|
7
|
-
aifabrix
|
|
8
|
-
aifabrix upload microsoft-copilot --probe
|
|
9
|
-
aifabrix deploy microsoft-copilot
|
|
10
|
-
aifabrix app add-channel microsoft-copilot --name "Your Assistant"
|
|
8
|
+
aifabrix upload microsoft-copilot --force
|
|
9
|
+
aifabrix channel add microsoft-copilot --name "Your Assistant" --probe
|
|
11
10
|
```
|
|
11
|
+
|
|
12
|
+
`channel add` generates package artifacts under
|
|
13
|
+
`dist/channels/microsoft-copilot/` for Microsoft 365 tenant admins.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"app": {
|
|
3
3
|
"key": "microsoft-copilot",
|
|
4
|
-
"displayName": "Microsoft Copilot
|
|
5
|
-
"description": "Assistant communication channel — deploy then
|
|
4
|
+
"displayName": "Microsoft Copilot package channel",
|
|
5
|
+
"description": "Assistant communication channel — deploy then channel add",
|
|
6
6
|
"type": "external"
|
|
7
7
|
},
|
|
8
8
|
"externalIntegration": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"key": "microsoft-copilot",
|
|
3
|
-
"displayName": "Microsoft Copilot
|
|
4
|
-
"description": "Communication external system for Microsoft Copilot
|
|
3
|
+
"displayName": "Microsoft Copilot package channel",
|
|
4
|
+
"description": "Communication external system for Microsoft Copilot package onboarding",
|
|
5
5
|
"type": "custom",
|
|
6
6
|
"systemKind": "communication",
|
|
7
7
|
"enabled": true,
|
|
@@ -9,14 +9,15 @@
|
|
|
9
9
|
"authType": "credential",
|
|
10
10
|
"credential": {
|
|
11
11
|
"credentialKey": "microsoft-copilot-channel",
|
|
12
|
-
"displayName": "Microsoft Copilot
|
|
12
|
+
"displayName": "Microsoft Copilot package channel",
|
|
13
13
|
"method": "oauth2",
|
|
14
14
|
"writeOnce": true,
|
|
15
15
|
"variables": {
|
|
16
|
+
"baseUrl": "https://login.microsoftonline.com",
|
|
17
|
+
"authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
|
16
18
|
"tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
|
|
17
|
-
"grantType": "
|
|
18
|
-
"scope": "
|
|
19
|
-
"baseUrl": "https://graph.microsoft.com/v1.0"
|
|
19
|
+
"grantType": "authorization_code",
|
|
20
|
+
"scope": "openid profile offline_access"
|
|
20
21
|
},
|
|
21
22
|
"security": {
|
|
22
23
|
"clientId": "kv://microsoft-copilot/clientId",
|
|
@@ -1,8 +1,36 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
|
|
2
|
+
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.21/MicrosoftTeams.schema.json",
|
|
3
|
+
"manifestVersion": "1.21",
|
|
4
|
+
"version": "{{packageVersion}}",
|
|
5
|
+
"id": "{{packageAppId}}",
|
|
6
|
+
"name": {
|
|
7
|
+
"short": "{{baseName}}",
|
|
8
|
+
"full": "{{appName}}"
|
|
9
|
+
},
|
|
10
|
+
"description": {
|
|
11
|
+
"short": "{{appDescription}}",
|
|
12
|
+
"full": "{{appDescription}}"
|
|
13
|
+
},
|
|
14
|
+
"developer": {
|
|
15
|
+
"name": "AI Fabrix",
|
|
16
|
+
"websiteUrl": "{{dataplaneBaseUrl}}",
|
|
17
|
+
"privacyUrl": "{{dataplaneBaseUrl}}/privacy",
|
|
18
|
+
"termsOfUseUrl": "{{dataplaneBaseUrl}}/terms"
|
|
19
|
+
},
|
|
20
|
+
"icons": {
|
|
21
|
+
"color": "color.png",
|
|
22
|
+
"outline": "outline.png"
|
|
23
|
+
},
|
|
24
|
+
"accentColor": "#0F172A",
|
|
25
|
+
"copilotAgents": {
|
|
26
|
+
"declarativeAgents": [
|
|
27
|
+
{
|
|
28
|
+
"id": "{{packageAppId}}-agent",
|
|
29
|
+
"file": "declarativeAgent.json"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"validDomains": [
|
|
34
|
+
"{{runtimeDomain}}"
|
|
35
|
+
]
|
|
8
36
|
}
|