@monster-orange/den 0.0.0 โ 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +204 -0
- package/LICENSE +21 -0
- package/README.md +165 -1
- package/bin/den +68 -0
- package/docs/distributions.md +499 -0
- package/make/demo.mk +82 -0
- package/make/den.mk +80 -0
- package/make/journeys.mk +57 -0
- package/make/local_dev.mk +154 -0
- package/make/security.mk +59 -0
- package/make/test.mk +405 -0
- package/package.json +101 -4
- package/scripts/auth-configure.ts +415 -0
- package/scripts/heal-config.ts +92 -0
- package/scripts/jsonl-playwright-reporter.js +70 -0
- package/scripts/manifest-read.cjs +91 -0
- package/scripts/setup-1password.ts +570 -0
- package/scripts/setup-secrets.ts +149 -0
- package/scripts/view-results.js +156 -0
- package/service/install.sh +112 -0
- package/src/pillars/api/fixtures/index.ts +128 -0
- package/src/pillars/api/fixtures/openapi-validator.ts +111 -0
- package/src/pillars/api/global-setup.ts +103 -0
- package/src/pillars/api/playwright.config.ts +105 -0
- package/src/pillars/api/schemas/example-api.json +110 -0
- package/src/pillars/api/tests/health/health.spec.ts +19 -0
- package/src/pillars/api/tests/health/manifest.yml +6 -0
- package/src/pillars/browser/fixtures/index.ts +232 -0
- package/src/pillars/browser/fixtures/package.json +10 -0
- package/src/pillars/browser/global-setup.ts +140 -0
- package/src/pillars/browser/global-teardown.ts +48 -0
- package/src/pillars/browser/playwright.config.ts +212 -0
- package/src/pillars/browser/setup.ts +219 -0
- package/src/pillars/journeys/app-config.ts +237 -0
- package/src/pillars/journeys/discover.ts +160 -0
- package/src/pillars/journeys/hooks/deny-shell.cjs +44 -0
- package/src/pillars/journeys/observability/events.ts +288 -0
- package/src/pillars/journeys/observability/sdk-mapper.ts +306 -0
- package/src/pillars/journeys/report/friction.ts +304 -0
- package/src/pillars/journeys/report/junit.ts +105 -0
- package/src/pillars/journeys/report/render.ts +273 -0
- package/src/pillars/journeys/report/results.ts +323 -0
- package/src/pillars/journeys/run.ts +673 -0
- package/src/pillars/journeys/runner.ts +1025 -0
- package/src/pillars/journeys/sandbox.ts +403 -0
- package/src/pillars/journeys/spec/loader.ts +152 -0
- package/src/pillars/journeys/spec/schema.ts +208 -0
- package/src/pillars/journeys/teardown.ts +98 -0
- package/src/pillars/journeys/tools/browser-session.ts +219 -0
- package/src/pillars/journeys/tools/browser-tool.ts +914 -0
- package/src/pillars/journeys/tools/http-tool.ts +564 -0
- package/src/pillars/journeys/tools/ledger.ts +278 -0
- package/src/pillars/journeys/tools/snapshot-store.ts +117 -0
- package/src/pillars/journeys/verify/assertions.ts +502 -0
- package/src/pillars/journeys/verify/verdict.ts +71 -0
- package/src/pillars/perf/build-report.ts +36 -0
- package/src/pillars/perf/k6.config.js +112 -0
- package/src/pillars/perf/run.ts +345 -0
- package/src/pillars/perf/scenarios/load-profile.js +97 -0
- package/src/pillars/perf/staging.ts +73 -0
- package/src/pillars/security/discover.ts +124 -0
- package/src/pillars/security/findings.ts +151 -0
- package/src/pillars/security/plan.ts +355 -0
- package/src/pillars/security/run.ts +757 -0
- package/src/pillars/smoke/admin-probe.ts +68 -0
- package/src/pillars/smoke/base-url.ts +56 -0
- package/src/pillars/smoke/cleanup.ts +8 -0
- package/src/pillars/smoke/discover.ts +237 -0
- package/src/pillars/smoke/ensure-smoke-teardown.ts +40 -0
- package/src/pillars/smoke/fixture-manager.ts +217 -0
- package/src/pillars/smoke/fixtures.ts +468 -0
- package/src/pillars/smoke/global-setup-all.ts +262 -0
- package/src/pillars/smoke/global-setup-global.ts +262 -0
- package/src/pillars/smoke/global-setup.ts +273 -0
- package/src/pillars/smoke/global-teardown-all.ts +8 -0
- package/src/pillars/smoke/global-teardown-global.ts +8 -0
- package/src/pillars/smoke/global-teardown.ts +139 -0
- package/src/pillars/smoke/playwright-all.config.ts +147 -0
- package/src/pillars/smoke/playwright-global.config.ts +141 -0
- package/src/pillars/smoke/playwright.config.ts +162 -0
- package/src/pillars/smoke/setup-env.ts +132 -0
- package/src/pillars/smoke/setup-global.ts +126 -0
- package/src/pillars/smoke/setup.ts +115 -0
- package/src/pillars/smoke/smoke-repo.ts +16 -0
- package/src/pillars/smoke/staging.ts +49 -0
- package/src/pillars/suites/run.ts +147 -0
- package/src/scripts/configure-aws-profiles.ts +114 -0
- package/src/scripts/register-repos.ts +307 -0
- package/src/scripts/setup-default-workspace.ts +203 -0
- package/src/shared/agent-actor.ts +77 -0
- package/src/shared/applications.ts +138 -0
- package/src/shared/auth/api-token.ts +416 -0
- package/src/shared/auth/auth0-helper.ts +284 -0
- package/src/shared/auth/headless-login.ts +265 -0
- package/src/shared/auth/jwt-helper.ts +186 -0
- package/src/shared/auth/sudo-vault.ts +69 -0
- package/src/shared/auth/test-accounts.ts +98 -0
- package/src/shared/auth/token-injection.ts +184 -0
- package/src/shared/auth/token-providers/auth0.ts +80 -0
- package/src/shared/auth/token-providers/index.ts +182 -0
- package/src/shared/auth/token-refresh.ts +273 -0
- package/src/shared/banner.ts +15 -0
- package/src/shared/brand.ts +79 -0
- package/src/shared/cli-tabs.ts +131 -0
- package/src/shared/constants.ts +128 -0
- package/src/shared/den-config.ts +688 -0
- package/src/shared/dev-metrics/emit.ts +354 -0
- package/src/shared/edge/config.ts +229 -0
- package/src/shared/edge/render.ts +221 -0
- package/src/shared/edge/runtime.ts +268 -0
- package/src/shared/edge/status.ts +74 -0
- package/src/shared/edge/types.ts +62 -0
- package/src/shared/engine.ts +67 -0
- package/src/shared/environment/aws-profiles.ts +49 -0
- package/src/shared/environment/env-selector.ts +161 -0
- package/src/shared/environment/playwright-env.ts +82 -0
- package/src/shared/environment-manager/catalog.ts +77 -0
- package/src/shared/environment-manager/clone-guard.ts +163 -0
- package/src/shared/environment-manager/dag.ts +286 -0
- package/src/shared/environment-manager/default-workspace.ts +182 -0
- package/src/shared/environment-manager/derivation/alias.ts +90 -0
- package/src/shared/environment-manager/derivation/cache.ts +97 -0
- package/src/shared/environment-manager/derivation/derive-graph.ts +421 -0
- package/src/shared/environment-manager/derivation/derived-up.ts +354 -0
- package/src/shared/environment-manager/derivation/load-alias.ts +11 -0
- package/src/shared/environment-manager/derivation/rules-compose.ts +42 -0
- package/src/shared/environment-manager/derivation/rules-events.ts +50 -0
- package/src/shared/environment-manager/derivation/rules-http.ts +247 -0
- package/src/shared/environment-manager/derivation/rules-infra.ts +64 -0
- package/src/shared/environment-manager/derivation/rules-readiness.ts +96 -0
- package/src/shared/environment-manager/derivation/scan.ts +160 -0
- package/src/shared/environment-manager/derivation/text.ts +40 -0
- package/src/shared/environment-manager/derivation/types.ts +69 -0
- package/src/shared/environment-manager/health.ts +635 -0
- package/src/shared/environment-manager/index.ts +6 -0
- package/src/shared/environment-manager/load-applications.ts +108 -0
- package/src/shared/environment-manager/log-tail.ts +213 -0
- package/src/shared/environment-manager/make-targets.ts +78 -0
- package/src/shared/environment-manager/opctl.ts +335 -0
- package/src/shared/environment-manager/readiness.ts +93 -0
- package/src/shared/environment-manager/register-local.ts +72 -0
- package/src/shared/environment-manager/secrets-check.ts +260 -0
- package/src/shared/environment-manager/service-container.ts +47 -0
- package/src/shared/environment-manager/service-env.ts +110 -0
- package/src/shared/environment-manager/service-runner.ts +1603 -0
- package/src/shared/environment-manager/sync-targets.ts +66 -0
- package/src/shared/environment-manager/up-plan.ts +326 -0
- package/src/shared/environment-manager/workspace-manager.ts +905 -0
- package/src/shared/environment-manager/workspaces.ts +860 -0
- package/src/shared/manifest/deps.ts +27 -0
- package/src/shared/manifest/merge-override.ts +75 -0
- package/src/shared/manifest/migrate-manifest.ts +101 -0
- package/src/shared/manifest/placement.ts +321 -0
- package/src/shared/manifest/read-manifest.ts +278 -0
- package/src/shared/manifest/schema.ts +313 -0
- package/src/shared/manifest/service-links.ts +93 -0
- package/src/shared/manifest/validate-layers.ts +229 -0
- package/src/shared/manifest/validate-manifest.ts +200 -0
- package/src/shared/manifest/workspace-manifests.ts +92 -0
- package/src/shared/open-url.ts +122 -0
- package/src/shared/org.ts +44 -0
- package/src/shared/paths.ts +190 -0
- package/src/shared/perf/optional-fields.ts +105 -0
- package/src/shared/perf/report-normalizer.ts +404 -0
- package/src/shared/perf/report-paths.ts +19 -0
- package/src/shared/perf/report-store.ts +110 -0
- package/src/shared/perf/report-types.ts +70 -0
- package/src/shared/perf/test-paths.ts +25 -0
- package/src/shared/process/log-rotation.ts +147 -0
- package/src/shared/process/spawn-streaming.ts +229 -0
- package/src/shared/product.ts +92 -0
- package/src/shared/profile.ts +141 -0
- package/src/shared/redact.ts +107 -0
- package/src/shared/repo-kind.ts +32 -0
- package/src/shared/reporting/jsonl-reporter.ts +131 -0
- package/src/shared/reporting/slack-reporter.ts +340 -0
- package/src/shared/results/result-reader.ts +266 -0
- package/src/shared/results/result-writer.ts +168 -0
- package/src/shared/secrets/doppler.ts +126 -0
- package/src/shared/secrets/env.ts +48 -0
- package/src/shared/secrets/index.ts +197 -0
- package/src/shared/secrets/keys.ts +33 -0
- package/src/shared/secrets/onepassword.ts +75 -0
- package/src/shared/secrets/types.ts +52 -0
- package/src/shared/service-url.ts +119 -0
- package/src/shared/smoke/branch-resolver.ts +141 -0
- package/src/shared/smoke/git-remote.ts +70 -0
- package/src/shared/smoke/repo-cloner.ts +151 -0
- package/src/shared/stacks/config.ts +137 -0
- package/src/shared/stacks/manifest-commands.ts +118 -0
- package/src/shared/stacks/render.ts +253 -0
- package/src/shared/stacks/runtime.ts +334 -0
- package/src/shared/stacks/status.ts +99 -0
- package/src/shared/stacks/types.ts +53 -0
- package/src/shared/terminal/tabs.ts +212 -0
- package/src/shared/test-discovery/module-scanner.ts +569 -0
- package/src/shared/types/index.ts +701 -0
- package/src/shared/ui-marker.ts +19 -0
- package/src/ui/cli/applications-command.ts +148 -0
- package/src/ui/cli/config-command.ts +68 -0
- package/src/ui/cli/create-main.ts +9 -0
- package/src/ui/cli/create.ts +360 -0
- package/src/ui/cli/edge-command.ts +81 -0
- package/src/ui/cli/flag-parser.ts +246 -0
- package/src/ui/cli/graph-command.ts +570 -0
- package/src/ui/cli/health-display.ts +63 -0
- package/src/ui/cli/index.ts +3742 -0
- package/src/ui/cli/init.ts +855 -0
- package/src/ui/cli/invocation-target.ts +175 -0
- package/src/ui/cli/logs-command.ts +104 -0
- package/src/ui/cli/mcp-main.ts +13 -0
- package/src/ui/cli/mcp-stdout-guard.ts +10 -0
- package/src/ui/cli/module-selection.ts +31 -0
- package/src/ui/cli/prompts.ts +767 -0
- package/src/ui/cli/results-viewer.ts +436 -0
- package/src/ui/cli/secrets-preflight.ts +91 -0
- package/src/ui/cli/stack-command.ts +117 -0
- package/src/ui/cli/stalled-setup-recovery.ts +129 -0
- package/src/ui/cli/test-runner.ts +1319 -0
- package/src/ui/cli/web-command.ts +1073 -0
- package/src/ui/mcp/api.ts +284 -0
- package/src/ui/mcp/guards.ts +141 -0
- package/src/ui/mcp/server.ts +147 -0
- package/src/ui/mcp/tools.ts +565 -0
- package/src/ui/server/audit.ts +71 -0
- package/src/ui/server/changelog-parser.ts +105 -0
- package/src/ui/server/daemon-reaper.ts +129 -0
- package/src/ui/server/editor-manager.ts +301 -0
- package/src/ui/server/github-service.ts +223 -0
- package/src/ui/server/graph-prefs.ts +89 -0
- package/src/ui/server/health-row.ts +15 -0
- package/src/ui/server/http-helpers.ts +98 -0
- package/src/ui/server/index.ts +3350 -0
- package/src/ui/server/log-history.ts +453 -0
- package/src/ui/server/perf-report.ts +42 -0
- package/src/ui/server/public/environments.html +496 -0
- package/src/ui/server/public/favicon.ico +0 -0
- package/src/ui/server/public/graph-model.js +416 -0
- package/src/ui/server/public/graph.css +976 -0
- package/src/ui/server/public/graph.js +986 -0
- package/src/ui/server/public/header.js +1373 -0
- package/src/ui/server/public/index.html +2595 -0
- package/src/ui/server/public/local-dev.html +5344 -0
- package/src/ui/server/public/logs.html +1496 -0
- package/src/ui/server/public/panel.js +787 -0
- package/src/ui/server/public/perf-report.js +359 -0
- package/src/ui/server/public/release.html +2111 -0
- package/src/ui/server/public/services.html +1103 -0
- package/src/ui/server/public/workspace-picker.js +69 -0
- package/src/ui/server/readonly-routes.ts +200 -0
- package/src/ui/server/release-deploy-session.ts +246 -0
- package/src/ui/server/release-service.ts +1125 -0
- package/src/ui/server/sudo-store.ts +111 -0
- package/src/ui/server/ui-assets.ts +73 -0
- package/src/ui/server/workspace-routes.ts +2185 -0
package/make/test.mk
ADDED
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
# make/test.mk โ Test execution
|
|
2
|
+
#
|
|
3
|
+
# Synthetic (browser/Playwright), integration (API), performance (k6),
|
|
4
|
+
# and smoke tests (service-repo owned files, den harness).
|
|
5
|
+
# Results, reporting, JWT token cache, and process cleanup also live here.
|
|
6
|
+
|
|
7
|
+
.PHONY: test test-syn-all test-int-all test-perf-all test-perf \
|
|
8
|
+
test-smk test-smk- test-smk-all test-smk-global \
|
|
9
|
+
smoke-link smoke-status smoke-clone smoke-clone-status \
|
|
10
|
+
synth-link synth-status test-framework \
|
|
11
|
+
int-jwt-clear int-jwt-status \
|
|
12
|
+
results results-flaky results-api results-perf \
|
|
13
|
+
report clean-reports test-down _open-report .check-auth
|
|
14
|
+
|
|
15
|
+
# Sessions are created fresh by global-setup on every run โ nothing to check.
|
|
16
|
+
.check-auth:
|
|
17
|
+
@true
|
|
18
|
+
|
|
19
|
+
# Interactive test runner
|
|
20
|
+
test: .check-auth
|
|
21
|
+
@echo "Starting interactive test runner..."
|
|
22
|
+
@$(DEN_CLI_TS) menu
|
|
23
|
+
|
|
24
|
+
# โโ Synthetic tests (browser, Playwright) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
25
|
+
|
|
26
|
+
test-syn-all: .check-auth
|
|
27
|
+
@echo "๐งช Running ALL synthetic tests (headless)..."
|
|
28
|
+
@echo "๐ Environment: $(env)"
|
|
29
|
+
@echo ""
|
|
30
|
+
@SYNTH_REPO=$(repo) $(DEN_TSX) $(DEN_ENGINE)/src/pillars/browser/setup.ts && \
|
|
31
|
+
SYNTH_REPO=$(repo) $(DEN_PLAYWRIGHT) test --config=$(DEN_ENGINE)/src/pillars/browser/playwright.config.ts
|
|
32
|
+
@[ ! "$$CI" = "true" ] && [ -d "playwright-report" ] && $(MAKE) --no-print-directory _open-report || true
|
|
33
|
+
|
|
34
|
+
# make test-syn-<module>
|
|
35
|
+
test-syn-%: .check-auth
|
|
36
|
+
@MODULE_NAME=$(subst test-syn-,,$@); \
|
|
37
|
+
STAGING_DIR=".synth-run/$(repo)/$$MODULE_NAME"; \
|
|
38
|
+
echo "๐งช Staging synthetic tests for repo=$(repo)..."; \
|
|
39
|
+
SYNTH_REPO=$(repo) $(DEN_TSX) $(DEN_ENGINE)/src/pillars/browser/setup.ts || exit 1; \
|
|
40
|
+
if [ -d "$$STAGING_DIR" ]; then \
|
|
41
|
+
echo "๐งช Running synthetic/$$MODULE_NAME tests..."; \
|
|
42
|
+
echo "๐ Environment: $(env)"; \
|
|
43
|
+
echo ""; \
|
|
44
|
+
SYNTH_REPO=$(repo) $(DEN_PLAYWRIGHT) test --config=$(DEN_ENGINE)/src/pillars/browser/playwright.config.ts "$$STAGING_DIR/"; \
|
|
45
|
+
else \
|
|
46
|
+
echo "โ Module '$$MODULE_NAME' not found in .synth-run/$(repo)/"; \
|
|
47
|
+
echo ""; \
|
|
48
|
+
echo "Available modules:"; \
|
|
49
|
+
find ".synth-run/$(repo)" -maxdepth 1 -type d ! -path ".synth-run/$(repo)" ! -name "node_modules" -exec basename {} \; 2>/dev/null | sort | sed 's/^/ - test-syn-/' || true; \
|
|
50
|
+
exit 1; \
|
|
51
|
+
fi
|
|
52
|
+
@[ ! "$$CI" = "true" ] && [ -d "playwright-report" ] && $(MAKE) --no-print-directory _open-report || true
|
|
53
|
+
|
|
54
|
+
# โโ Integration tests (API, Playwright) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
55
|
+
|
|
56
|
+
test-int-all: .check-auth
|
|
57
|
+
@echo "๐งช Running ALL integration tests (headless)..."
|
|
58
|
+
@echo "๐ Environment: $(env)"
|
|
59
|
+
@echo ""
|
|
60
|
+
@$(DEN_PLAYWRIGHT) test --config=$(DEN_ENGINE)/src/pillars/api/playwright.config.ts
|
|
61
|
+
@[ ! "$$CI" = "true" ] && [ -d "playwright-report" ] && $(MAKE) --no-print-directory _open-report || true
|
|
62
|
+
|
|
63
|
+
# make test-int-<module>
|
|
64
|
+
test-int-%: .check-auth
|
|
65
|
+
@MODULE_NAME=$(subst test-int-,,$@); \
|
|
66
|
+
if [ -d "$(DEN_ENGINE)/src/pillars/api/tests/$$MODULE_NAME" ]; then \
|
|
67
|
+
echo "๐งช Running integration/$$MODULE_NAME API tests..."; \
|
|
68
|
+
echo "๐ Environment: $(env)"; \
|
|
69
|
+
echo ""; \
|
|
70
|
+
$(DEN_PLAYWRIGHT) test --config=$(DEN_ENGINE)/src/pillars/api/playwright.config.ts $(DEN_ENGINE)/src/pillars/api/tests/$$MODULE_NAME/; \
|
|
71
|
+
else \
|
|
72
|
+
echo "โ Module 'src/pillars/api/tests/$$MODULE_NAME' not found"; \
|
|
73
|
+
echo ""; \
|
|
74
|
+
echo "Available modules:"; \
|
|
75
|
+
find $(DEN_ENGINE)/src/pillars/api/tests/ -maxdepth 1 -type d ! -name "tests" ! -name "_*" -exec basename {} \; | sort | sed 's/^/ - test-int-/'; \
|
|
76
|
+
exit 1; \
|
|
77
|
+
fi
|
|
78
|
+
@[ ! "$$CI" = "true" ] && [ -d "playwright-report" ] && $(MAKE) --no-print-directory _open-report || true
|
|
79
|
+
|
|
80
|
+
# โโ Performance tests (k6) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
81
|
+
|
|
82
|
+
test-perf-all: .check-auth
|
|
83
|
+
@echo "๐งช Running ALL performance tests..."
|
|
84
|
+
@echo "๐ Environment: $(env)"
|
|
85
|
+
@echo ""
|
|
86
|
+
@if ! which k6 > /dev/null 2>&1; then echo "โ k6 not installed. Run: brew install k6"; exit 1; fi
|
|
87
|
+
@$(DEN_TSX) $(DEN_ENGINE)/src/ui/cli/index.ts run --pillar=performance --environment=$(env) $(if $(repo),--repo=$(repo),)
|
|
88
|
+
|
|
89
|
+
# make test-perf module=<name> env=<env>
|
|
90
|
+
test-perf: .check-auth
|
|
91
|
+
@if [ -z "$(module)" ]; then echo "โ Usage: make test-perf module=<name|repo/name> env=<env>"; exit 1; fi
|
|
92
|
+
@echo "๐งช Running performance module $(module)..."
|
|
93
|
+
@echo "๐ Environment: $(env)"
|
|
94
|
+
@echo ""
|
|
95
|
+
@if ! which k6 > /dev/null 2>&1; then echo "โ k6 not installed. Run: brew install k6"; exit 1; fi
|
|
96
|
+
@$(DEN_TSX) $(DEN_ENGINE)/src/ui/cli/index.ts run --pillar=performance --environment=$(env) --module=$(module)
|
|
97
|
+
|
|
98
|
+
# make test-perf-<module> โ shorthand for `make test-perf module=<module>`.
|
|
99
|
+
# Suites come from the distribution (<dist root>/tests/pillars/perf/<module>/
|
|
100
|
+
# test.js) or a registered repo's manifest; the engine ships none, so the CLI
|
|
101
|
+
# resolves the module rather than a path under this checkout.
|
|
102
|
+
test-perf-%: .check-auth
|
|
103
|
+
@MODULE_NAME=$(subst test-perf-,,$@); \
|
|
104
|
+
echo "๐งช Running performance module $$MODULE_NAME..."; \
|
|
105
|
+
echo "๐ Environment: $(env)"; \
|
|
106
|
+
echo ""; \
|
|
107
|
+
if ! which k6 > /dev/null 2>&1; then echo "โ k6 not installed. Run: brew install k6"; exit 1; fi; \
|
|
108
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/ui/cli/index.ts run --pillar=performance --environment=$(env) --module=$$MODULE_NAME
|
|
109
|
+
|
|
110
|
+
# โโ Smoke tests โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
111
|
+
# Test files live in service repos (e.g. ../<repo>/). den provides the harness.
|
|
112
|
+
#
|
|
113
|
+
# Usage:
|
|
114
|
+
# make smoke-link repo=shop Link sibling repo into .den/
|
|
115
|
+
# make test-smk-all repo=<repo> All smoke tests for one repo
|
|
116
|
+
# make test-smk-api-all env=sandbox All api suites against sandbox
|
|
117
|
+
# make test-smk-api-items Dev iteration: just the items suite
|
|
118
|
+
# make test-smk-global All repos, one combined report (CI)
|
|
119
|
+
|
|
120
|
+
# synth-link is an alias for smoke-link โ both share the .den/<repo>/ directory.
|
|
121
|
+
synth-link: smoke-link
|
|
122
|
+
|
|
123
|
+
synth-status:
|
|
124
|
+
@echo "๐ Linked Repo Synthetics Config"
|
|
125
|
+
@echo "โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ"
|
|
126
|
+
@if [ ! -d ".den" ] || [ -z "$$(ls -A .den 2>/dev/null)" ]; then \
|
|
127
|
+
echo " (none โ run: make synth-link repo=<repo>)"; \
|
|
128
|
+
else \
|
|
129
|
+
for entry in .den/*/; do \
|
|
130
|
+
name=$$(basename "$$entry"); \
|
|
131
|
+
if [ -f "$$entry/.den.yml" ] || [ -f "$$entry/.den.json" ]; then \
|
|
132
|
+
synth=$$(node $(DEN_ENGINE)/scripts/manifest-read.cjs "$$entry" synth-testdir 2>/dev/null || echo "?"); \
|
|
133
|
+
echo " โ
$$name (synthetics.testDir: $$synth)"; \
|
|
134
|
+
else \
|
|
135
|
+
echo " โ $$name (no .den.yml)"; \
|
|
136
|
+
fi; \
|
|
137
|
+
done; \
|
|
138
|
+
fi
|
|
139
|
+
@echo ""
|
|
140
|
+
|
|
141
|
+
smoke-link:
|
|
142
|
+
@mkdir -p .den
|
|
143
|
+
@if [ -d ".den/$(repo)" ]; then \
|
|
144
|
+
echo "โน๏ธ .den/$(repo) already exists (remove it first to re-link)"; \
|
|
145
|
+
elif [ -d "../$(repo)" ]; then \
|
|
146
|
+
ln -sf "../../$(repo)" ".den/$(repo)"; \
|
|
147
|
+
echo "โ
Linked .den/$(repo) โ ../$(repo)"; \
|
|
148
|
+
if [ -f ".den/$(repo)/.den.yml" ] || [ -f ".den/$(repo)/.den.json" ]; then \
|
|
149
|
+
echo " Manifest found โ services available:"; \
|
|
150
|
+
node $(DEN_ENGINE)/scripts/manifest-read.cjs ".den/$(repo)" smoke-keys 2>/dev/null | tr ' ' '\n' | sed "s/^/ โข /" || true; \
|
|
151
|
+
else \
|
|
152
|
+
echo " โ No .den.yml found in $(repo) root"; \
|
|
153
|
+
fi; \
|
|
154
|
+
else \
|
|
155
|
+
echo "โ Repo '../$(repo)' not found as a sibling directory."; \
|
|
156
|
+
exit 1; \
|
|
157
|
+
fi
|
|
158
|
+
|
|
159
|
+
# Clone repos at their deployed SHA for non-local smoke tests.
|
|
160
|
+
# Usage: make smoke-clone env=staging [repo=shop]
|
|
161
|
+
smoke-clone:
|
|
162
|
+
@if [ "$(env)" = "local" ]; then \
|
|
163
|
+
echo "โน smoke-clone is not needed for env=local (uses sibling symlink)"; \
|
|
164
|
+
else \
|
|
165
|
+
echo "๐ฆ Cloning repos at deployed SHA for env=$(env)..."; \
|
|
166
|
+
if [ -n "$(repo)" ]; then \
|
|
167
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/setup-env.ts --env $(env) --repo $(repo); \
|
|
168
|
+
else \
|
|
169
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/setup-env.ts --env $(env); \
|
|
170
|
+
fi; \
|
|
171
|
+
fi
|
|
172
|
+
|
|
173
|
+
# Show what's currently cloned in .smoke-clones/ and at which SHA.
|
|
174
|
+
smoke-clone-status:
|
|
175
|
+
@echo "๐ Smoke Clones (.smoke-clones/)"
|
|
176
|
+
@echo "โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ"
|
|
177
|
+
@if [ ! -d ".smoke-clones" ] || [ -z "$$(ls -A .smoke-clones 2>/dev/null)" ]; then \
|
|
178
|
+
echo " (none โ run: make smoke-clone env=<env>)"; \
|
|
179
|
+
else \
|
|
180
|
+
for repo_dir in .smoke-clones/*/; do \
|
|
181
|
+
repo_name=$$(basename "$$repo_dir"); \
|
|
182
|
+
for env_dir in "$$repo_dir"*/; do \
|
|
183
|
+
[ -d "$$env_dir" ] || continue; \
|
|
184
|
+
env_name=$$(basename "$$env_dir"); \
|
|
185
|
+
sha_file="$$env_dir.deployed-sha"; \
|
|
186
|
+
if [ -f "$$sha_file" ]; then \
|
|
187
|
+
sha=$$(cat "$$sha_file"); \
|
|
188
|
+
echo " โ
$$repo_name @ $$env_name โ $${sha:0:8}"; \
|
|
189
|
+
else \
|
|
190
|
+
echo " โ $$repo_name @ $$env_name (no .deployed-sha โ incomplete clone?)"; \
|
|
191
|
+
fi; \
|
|
192
|
+
done; \
|
|
193
|
+
done; \
|
|
194
|
+
fi
|
|
195
|
+
@echo ""
|
|
196
|
+
|
|
197
|
+
smoke-status:
|
|
198
|
+
@echo "๐ Linked Smoke Test Repos"
|
|
199
|
+
@echo "โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ"
|
|
200
|
+
@if [ ! -d ".den" ] || [ -z "$$(ls -A .den 2>/dev/null)" ]; then \
|
|
201
|
+
echo " (none โ run: make smoke-link repo=<repo>)"; \
|
|
202
|
+
else \
|
|
203
|
+
for entry in .den/*/; do \
|
|
204
|
+
name=$$(basename "$$entry"); \
|
|
205
|
+
if [ -f "$$entry/.den.yml" ] || [ -f "$$entry/.den.json" ]; then \
|
|
206
|
+
services=$$(node $(DEN_ENGINE)/scripts/manifest-read.cjs "$$entry" smoke-keys 2>/dev/null | tr ' ' ', ' || echo "?"); \
|
|
207
|
+
echo " โ
$$name (services: $$services)"; \
|
|
208
|
+
else \
|
|
209
|
+
echo " โ $$name (no .den.yml)"; \
|
|
210
|
+
fi; \
|
|
211
|
+
done; \
|
|
212
|
+
fi
|
|
213
|
+
@echo ""
|
|
214
|
+
|
|
215
|
+
# List available services โ make test-smk or make test-smk-
|
|
216
|
+
test-smk test-smk-:
|
|
217
|
+
@echo "๐จ Smoke Tests (repo=$(repo))"
|
|
218
|
+
@echo ""
|
|
219
|
+
@echo "Available services:"
|
|
220
|
+
@node $(DEN_ENGINE)/scripts/manifest-read.cjs ".den/$(repo)" smoke-keys 2>/dev/null \
|
|
221
|
+
| tr ' ' '\n' | grep . | sed "s/.*/ make test-smk-&-<suite> (dev iteration โ partial)/" \
|
|
222
|
+
|| echo " (none โ run: make smoke-link repo=$(repo))"
|
|
223
|
+
@echo ""
|
|
224
|
+
@echo " make test-smk-all (all services, one combined report) โ use this"
|
|
225
|
+
@echo " make test-smk-global (all repos, one combined report) โ use this in CI"
|
|
226
|
+
@echo ""
|
|
227
|
+
@echo "To list suites within a service:"
|
|
228
|
+
@echo " make test-smk-<service>- (e.g. make test-smk-api-)"
|
|
229
|
+
|
|
230
|
+
# All smoke tests for all services in the linked repo โ one combined report
|
|
231
|
+
test-smk-all:
|
|
232
|
+
@echo "๐จ Running ALL smoke tests (repo=$(repo), env=$(env))..."
|
|
233
|
+
@echo ""
|
|
234
|
+
@if [ "$(env)" != "local" ] && [ "$${USE_LOCAL_CHECKOUT:-0}" != "1" ]; then \
|
|
235
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/setup-env.ts --env $(env) --repo $(repo) || exit 1; \
|
|
236
|
+
fi
|
|
237
|
+
@SERVICES=$$(node $(DEN_ENGINE)/scripts/manifest-read.cjs ".den/$(repo)" smoke-keys 2>/dev/null) \
|
|
238
|
+
|| (echo "โ Cannot read manifest for repo=$(repo). Run: make smoke-link repo=$(repo)"; exit 1); \
|
|
239
|
+
for svc in $$SERVICES; do \
|
|
240
|
+
SMOKE_SERVICE=$$svc SMOKE_REPO=$(repo) $(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/setup.ts || exit 1; \
|
|
241
|
+
done && \
|
|
242
|
+
SMOKE_REPO=$(repo) \
|
|
243
|
+
$(DEN_PLAYWRIGHT) test --config=$(DEN_ENGINE)/src/pillars/smoke/playwright-all.config.ts && \
|
|
244
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/ensure-smoke-teardown.ts
|
|
245
|
+
@[ ! "$$CI" = "true" ] && [ "$$OPEN_REPORT" = "1" ] && [ -d "playwright-report" ] && $(MAKE) --no-print-directory _open-report || true
|
|
246
|
+
|
|
247
|
+
# All smoke tests across ALL registered repos โ one combined report (use in CI)
|
|
248
|
+
test-smk-global:
|
|
249
|
+
@echo "๐จ Running ALL smoke tests across ALL registered repos (env=$(env))..."
|
|
250
|
+
@echo ""
|
|
251
|
+
@if [ "$(env)" != "local" ] && [ "$${USE_LOCAL_CHECKOUT:-0}" != "1" ]; then \
|
|
252
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/setup-env.ts --env $(env) || exit 1; \
|
|
253
|
+
fi
|
|
254
|
+
@$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/setup-global.ts && \
|
|
255
|
+
$(DEN_PLAYWRIGHT) test --config=$(DEN_ENGINE)/src/pillars/smoke/playwright-global.config.ts && \
|
|
256
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/ensure-smoke-teardown.ts
|
|
257
|
+
@[ ! "$$CI" = "true" ] && [ "$$OPEN_REPORT" = "1" ] && [ -d "playwright-report" ] && $(MAKE) --no-print-directory _open-report || true
|
|
258
|
+
|
|
259
|
+
# All suites for a specific service โ make test-smk-api-all
|
|
260
|
+
test-smk-%-all:
|
|
261
|
+
@SERVICE=$(subst test-smk-,,$(subst -all,,$@)); \
|
|
262
|
+
echo "๐จ Running ALL $$SERVICE smoke tests (repo=$(repo), env=$(env))..."; \
|
|
263
|
+
echo ""; \
|
|
264
|
+
if [ "$(env)" != "local" ] && [ "$${USE_LOCAL_CHECKOUT:-0}" != "1" ]; then \
|
|
265
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/setup-env.ts --env $(env) --repo $(repo) || exit 1; \
|
|
266
|
+
fi; \
|
|
267
|
+
SMOKE_SERVICE=$$SERVICE SMOKE_REPO=$(repo) $(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/setup.ts && \
|
|
268
|
+
SMOKE_SERVICE=$$SERVICE SMOKE_REPO=$(repo) \
|
|
269
|
+
$(DEN_PLAYWRIGHT) test --config=$(DEN_ENGINE)/src/pillars/smoke/playwright.config.ts && \
|
|
270
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/ensure-smoke-teardown.ts
|
|
271
|
+
@[ ! "$$CI" = "true" ] && [ "$$OPEN_REPORT" = "1" ] && [ -d "playwright-report" ] && $(MAKE) --no-print-directory _open-report || true
|
|
272
|
+
|
|
273
|
+
# Specific suite โ make test-smk-api-items
|
|
274
|
+
test-smk-%:
|
|
275
|
+
@FULL="$(subst test-smk-,,$@)"; \
|
|
276
|
+
SERVICE="$${FULL%%-*}"; \
|
|
277
|
+
SUITE="$${FULL#*-}"; \
|
|
278
|
+
if [ -z "$$SUITE" ] || [ "$$SUITE" = "$$SERVICE" ]; then \
|
|
279
|
+
echo "โ No suite specified for service '$$SERVICE'"; \
|
|
280
|
+
echo ""; \
|
|
281
|
+
echo "Available suites:"; \
|
|
282
|
+
TEST_DIR=$$(node $(DEN_ENGINE)/scripts/manifest-read.cjs ".den/$(repo)" smoke-testdir "$$SERVICE" 2>/dev/null); \
|
|
283
|
+
if [ -n "$$TEST_DIR" ]; then \
|
|
284
|
+
find ".den/$(repo)/$$TEST_DIR" -maxdepth 1 -type d \
|
|
285
|
+
! -path ".den/$(repo)/$$TEST_DIR" \
|
|
286
|
+
! -name "__*" ! -name "_*" \
|
|
287
|
+
-exec basename {} \; 2>/dev/null | sort | sed "s/^/ make test-smk-$$SERVICE-/"; \
|
|
288
|
+
fi; \
|
|
289
|
+
echo ""; \
|
|
290
|
+
echo " make test-smk-$$SERVICE-all (run all suites)"; \
|
|
291
|
+
exit 1; \
|
|
292
|
+
fi; \
|
|
293
|
+
SUITE_DIR=".smoke-run/$(repo)-$$SERVICE/$$SUITE"; \
|
|
294
|
+
echo "๐จ Running $$SERVICE/$$SUITE smoke tests (repo=$(repo), env=$(env))..."; \
|
|
295
|
+
echo ""; \
|
|
296
|
+
if [ "$(env)" != "local" ] && [ "$${USE_LOCAL_CHECKOUT:-0}" != "1" ]; then \
|
|
297
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/setup-env.ts --env $(env) --repo $(repo) || exit 1; \
|
|
298
|
+
fi; \
|
|
299
|
+
SMOKE_SERVICE=$$SERVICE SMOKE_REPO=$(repo) $(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/setup.ts && \
|
|
300
|
+
if [ ! -d "$$SUITE_DIR" ]; then \
|
|
301
|
+
echo "โ Suite '$$SUITE' not found: $$SUITE_DIR"; \
|
|
302
|
+
echo ""; \
|
|
303
|
+
echo "Available suites:"; \
|
|
304
|
+
find ".smoke-run/$(repo)-$$SERVICE" -maxdepth 1 -type d \
|
|
305
|
+
! -path ".smoke-run/$(repo)-$$SERVICE" ! -name "node_modules" \
|
|
306
|
+
-exec basename {} \; 2>/dev/null | sort | sed "s/^/ make test-smk-$$SERVICE-/"; \
|
|
307
|
+
exit 1; \
|
|
308
|
+
fi; \
|
|
309
|
+
SMOKE_SERVICE=$$SERVICE SMOKE_REPO=$(repo) \
|
|
310
|
+
$(DEN_PLAYWRIGHT) test --config=$(DEN_ENGINE)/src/pillars/smoke/playwright.config.ts "$$SUITE_DIR" && \
|
|
311
|
+
$(DEN_TSX) $(DEN_ENGINE)/src/pillars/smoke/ensure-smoke-teardown.ts
|
|
312
|
+
@[ ! "$$CI" = "true" ] && [ "$$OPEN_REPORT" = "1" ] && [ -d "playwright-report" ] && $(MAKE) --no-print-directory _open-report || true
|
|
313
|
+
|
|
314
|
+
# โโ JWT token cache โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
315
|
+
|
|
316
|
+
int-jwt-clear:
|
|
317
|
+
@echo "๐๏ธ Clearing integration JWT token cache for env=$(env)..."
|
|
318
|
+
@rm -f "playwright/.auth/api-token-admin-$(env).json"
|
|
319
|
+
@rm -f "playwright/.auth/api-token-user-$(env).json"
|
|
320
|
+
@rm -f "playwright/.auth/api-token-beta-$(env).json"
|
|
321
|
+
@echo "โ
Token cache cleared for $(env). Tokens will be re-fetched on next test run."
|
|
322
|
+
|
|
323
|
+
int-jwt-status:
|
|
324
|
+
@echo "๐ Integration JWT Token Cache Status"
|
|
325
|
+
@echo "โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ"
|
|
326
|
+
@for e in local dev sandbox staging production; do \
|
|
327
|
+
echo ""; \
|
|
328
|
+
echo " $$e:"; \
|
|
329
|
+
for role in admin user beta; do \
|
|
330
|
+
f="playwright/.auth/api-token-$$role-$$e.json"; \
|
|
331
|
+
if [ -f "$$f" ]; then \
|
|
332
|
+
expires=$$(node -e "try{var d=JSON.parse(require('fs').readFileSync('$$f','utf8'));var m=Math.round((d.expiresAt-Date.now())/60000);console.log(m>0?'\u2705 '+d.email+' ('+m+'m remaining)':'\u26a0\ufe0f '+d.email+' (EXPIRED)')}catch(e){console.log('\u274c (unreadable)')}" 2>/dev/null || echo "โ (error)"); \
|
|
333
|
+
echo " $$role: $$expires"; \
|
|
334
|
+
else \
|
|
335
|
+
echo " $$role: โ NOT CACHED"; \
|
|
336
|
+
fi; \
|
|
337
|
+
done; \
|
|
338
|
+
done
|
|
339
|
+
@echo ""
|
|
340
|
+
@echo " Run: make int-jwt-clear [env=<env>] to force re-fetch"
|
|
341
|
+
@echo " Credentials: 1Password (eval \$$(op signin)) or CI ENV vars"
|
|
342
|
+
|
|
343
|
+
# โโ Results & reports โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
344
|
+
|
|
345
|
+
results:
|
|
346
|
+
@node $(DEN_ENGINE)/scripts/view-results.js summary synthetic local
|
|
347
|
+
|
|
348
|
+
results-flaky:
|
|
349
|
+
@node $(DEN_ENGINE)/scripts/view-results.js flaky synthetic local
|
|
350
|
+
|
|
351
|
+
results-api:
|
|
352
|
+
@node $(DEN_ENGINE)/scripts/view-results.js summary integration local
|
|
353
|
+
|
|
354
|
+
results-perf:
|
|
355
|
+
@node $(DEN_ENGINE)/scripts/view-results.js summary performance local
|
|
356
|
+
|
|
357
|
+
# Internal: open playwright-report, handling port conflicts gracefully.
|
|
358
|
+
# Skipped when PLAYWRIGHT_HTML_OPEN=never (set by the web UI server).
|
|
359
|
+
_open-report:
|
|
360
|
+
@[ "$$PLAYWRIGHT_HTML_OPEN" = "never" ] && exit 0 || true; \
|
|
361
|
+
REPORT_PORT=9323; \
|
|
362
|
+
EXISTING_PID=$$(lsof -ti:$$REPORT_PORT 2>/dev/null); \
|
|
363
|
+
if [ -n "$$EXISTING_PID" ]; then \
|
|
364
|
+
echo "โ ๏ธ Port $$REPORT_PORT is already in use (PID $$EXISTING_PID)."; \
|
|
365
|
+
printf " Kill it and open the report? [y/N] "; \
|
|
366
|
+
read ANSWER; \
|
|
367
|
+
if [ "$$ANSWER" = "y" ] || [ "$$ANSWER" = "Y" ]; then \
|
|
368
|
+
kill $$EXISTING_PID 2>/dev/null && sleep 0.5; \
|
|
369
|
+
echo "โ
Process killed."; \
|
|
370
|
+
else \
|
|
371
|
+
echo "Aborted."; \
|
|
372
|
+
exit 0; \
|
|
373
|
+
fi; \
|
|
374
|
+
fi; \
|
|
375
|
+
echo "๐ Opening test report..."; \
|
|
376
|
+
$(DEN_PLAYWRIGHT) show-report playwright-report
|
|
377
|
+
|
|
378
|
+
report:
|
|
379
|
+
@if [ ! -d "playwright-report" ]; then \
|
|
380
|
+
echo "โ No report found. Run tests first:"; \
|
|
381
|
+
echo " โข make test-syn-all (browser tests)"; \
|
|
382
|
+
echo " โข make test-int-all (API tests)"; \
|
|
383
|
+
exit 1; \
|
|
384
|
+
fi
|
|
385
|
+
@$(MAKE) --no-print-directory _open-report
|
|
386
|
+
|
|
387
|
+
clean-reports:
|
|
388
|
+
@echo "๐งน Cleaning HTML reports..."
|
|
389
|
+
@rm -rf playwright-report
|
|
390
|
+
@echo "โ
HTML reports cleaned (JSONL results preserved)"
|
|
391
|
+
|
|
392
|
+
# Stop running test processes. Named `test-down` because `make down` stops
|
|
393
|
+
# SERVICES (make/local_dev.mk) โ the old `make down` silently killed test
|
|
394
|
+
# processes while every service container kept running.
|
|
395
|
+
test-down:
|
|
396
|
+
@echo "๐ Stopping any running tests..."
|
|
397
|
+
@pkill -f "playwright" 2>/dev/null || true
|
|
398
|
+
@pkill -f "k6" 2>/dev/null || true
|
|
399
|
+
@pkill -f "node.*cli" 2>/dev/null || true
|
|
400
|
+
@echo "โ
All tests stopped"
|
|
401
|
+
|
|
402
|
+
# Deprecated: use make preflight
|
|
403
|
+
test-framework:
|
|
404
|
+
@echo "โ ๏ธ 'make test-framework' is deprecated โ use 'make preflight' instead"
|
|
405
|
+
@$(MAKE) preflight
|
package/package.json
CHANGED
|
@@ -1,11 +1,108 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monster-orange/den",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Den: a
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Den: a local multi-repo dev orchestrator, HTTPS edge and E2E harness",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"den": "./bin/den"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"src/",
|
|
12
|
+
"!src/**/*.test.ts",
|
|
13
|
+
"make/",
|
|
14
|
+
"service/",
|
|
15
|
+
"scripts/auth-configure.ts",
|
|
16
|
+
"scripts/heal-config.ts",
|
|
17
|
+
"scripts/jsonl-playwright-reporter.js",
|
|
18
|
+
"scripts/manifest-read.cjs",
|
|
19
|
+
"scripts/setup-1password.ts",
|
|
20
|
+
"scripts/setup-secrets.ts",
|
|
21
|
+
"scripts/view-results.js",
|
|
22
|
+
"LICENSE",
|
|
23
|
+
"README.md",
|
|
24
|
+
"CHANGELOG.md",
|
|
25
|
+
"docs/"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"cli": "tsx src/ui/cli/index.ts menu",
|
|
29
|
+
"build": "tsc -p tsconfig.build.json && node scripts/copy-web-assets.mjs",
|
|
30
|
+
"test:unit": "jest --coverage --forceExit",
|
|
31
|
+
"test:unit:watch": "jest --watch",
|
|
32
|
+
"test:framework": "npm run test:unit",
|
|
33
|
+
"lint": "eslint . --ext .ts",
|
|
34
|
+
"lint:fix": "eslint . --ext .ts --fix",
|
|
35
|
+
"format": "prettier --write \"**/*.{ts,js,json,md}\"",
|
|
36
|
+
"format:check": "prettier --check \"**/*.{ts,js,json,md}\"",
|
|
37
|
+
"preflight": "npm run format && npm run lint:fix && npm run test:unit",
|
|
38
|
+
"prepare": "husky install",
|
|
39
|
+
"typecheck": "tsc --noEmit -p tsconfig.typecheck.json && tsc --noEmit -p tsconfig.build.json",
|
|
40
|
+
"test": "jest --forceExit",
|
|
41
|
+
"gate:org-names": "node scripts/org-name-gate.mjs",
|
|
42
|
+
"example:regen": "rm -rf examples/distribution && ./bin/den create acme examples/distribution",
|
|
43
|
+
"dist-smoke": "bash scripts/dist-smoke.sh"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"e2e",
|
|
47
|
+
"testing",
|
|
48
|
+
"playwright",
|
|
49
|
+
"k6",
|
|
50
|
+
"local-dev",
|
|
51
|
+
"localstack"
|
|
52
|
+
],
|
|
53
|
+
"author": "Monster Orange",
|
|
54
|
+
"license": "MIT",
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@cursor/sdk": "1.0.40",
|
|
57
|
+
"@modelcontextprotocol/sdk": "1.32.1",
|
|
58
|
+
"@playwright/test": "^1.61.1",
|
|
59
|
+
"@slack/webhook": "^7.0.2",
|
|
60
|
+
"ajv": "^8.12.0",
|
|
61
|
+
"ajv-formats": "^2.1.1",
|
|
62
|
+
"auth0": "^4.3.1",
|
|
63
|
+
"chalk": "^5.3.0",
|
|
64
|
+
"cli-table3": "^0.6.3",
|
|
65
|
+
"dotenv": "^16.4.1",
|
|
66
|
+
"elkjs": "0.12.0",
|
|
67
|
+
"inquirer": "^9.2.14",
|
|
68
|
+
"jsonwebtoken": "^9.0.2",
|
|
69
|
+
"openapi-typescript": "^7.13.0",
|
|
70
|
+
"ora": "^8.0.1",
|
|
71
|
+
"tsx": "^4.23.1",
|
|
72
|
+
"yaml": "^2.8.2",
|
|
73
|
+
"zod": "^4.3.6"
|
|
74
|
+
},
|
|
75
|
+
"devDependencies": {
|
|
76
|
+
"@types/inquirer": "^9.0.7",
|
|
77
|
+
"@types/jest": "^29.5.11",
|
|
78
|
+
"@types/jsonwebtoken": "^9.0.5",
|
|
79
|
+
"@types/node": "^22.20.1",
|
|
80
|
+
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
81
|
+
"@typescript-eslint/parser": "^7.18.0",
|
|
82
|
+
"eslint": "^8.56.0",
|
|
83
|
+
"husky": "^8.0.3",
|
|
84
|
+
"jest": "^29.7.0",
|
|
85
|
+
"lint-staged": "^15.2.0",
|
|
86
|
+
"prettier": "^3.2.4",
|
|
87
|
+
"ts-jest": "^29.4.9",
|
|
88
|
+
"ts-node": "^10.9.2",
|
|
89
|
+
"typescript": "^5.3.3"
|
|
90
|
+
},
|
|
91
|
+
"overrides": {
|
|
92
|
+
"flatted": "^3.4.2",
|
|
93
|
+
"picomatch": "^2.3.2",
|
|
94
|
+
"brace-expansion": "^2.0.3"
|
|
95
|
+
},
|
|
96
|
+
"engines": {
|
|
97
|
+
"node": ">=22.13",
|
|
98
|
+
"npm": ">=9.0.0"
|
|
99
|
+
},
|
|
5
100
|
"repository": {
|
|
6
101
|
"type": "git",
|
|
7
102
|
"url": "git+https://github.com/Monster-Orange/den.git"
|
|
8
103
|
},
|
|
9
|
-
"
|
|
10
|
-
"
|
|
104
|
+
"homepage": "https://github.com/Monster-Orange/den",
|
|
105
|
+
"bugs": {
|
|
106
|
+
"url": "https://github.com/Monster-Orange/den/issues"
|
|
107
|
+
}
|
|
11
108
|
}
|