esign_css
Orientation scope
Verified against the
develbase branch (the working tree was checked out onupdate/customization/instacash-2026-05-27; canonical files such ascustomization/customizations.jswere re-read viagit show devel:so this doc describes the un-customized product). See customization-architecture / customization-branch-catalog for branch-specific behavior.
1. Purpose & role in FaceKom
esign_css is the FaceKom eSign customer-side server (package.json:4 description: “FaceKom eSign customer side server”; README.md). “CSS” = Customer-Side Server — it is the public-facing web tier the signing customer interacts with, the counterpart to the operator-side OSS (operator-side server, referenced everywhere as esign-oss / esign:rpc-system-oss).
It is a thin Express web/UI tier + Socket.IO server that:
- Serves the customer signing UI (Twig + Dust templated pages: homepage, token-check, offer-sign, waiting-for-offer/contract, agreement-checks, system-check, goodbye, contract download) —
server/web/routes.js. - Exposes a JSON
/api/**surface for the browser/native app (customer login, 2-factor auth, document/contract/offer fetch, signature M1/M2, timestamp) —server/web/routes.js:220-306. - Holds no business logic or database of its own — every operation is delegated over RabbitMQ RPC to backend eSign services (
server.js:84-128). CSS is essentially an auth/session + presentation gateway in front of the eSign queue bus.
CSS vs OSS hosts
config.hosts.cssandconfig.hosts.ossare first-class config (config/dev.json:59-62,config.js:47-52). In dev they default toesign-css.<domain>/esign-oss.<domain>.
2. Tech stack & runtime
| Aspect | Value | Source |
|---|---|---|
| Language | JavaScript (CommonJS, Node) | package.json, *.js |
| Runtime | Node >=22.13.0 | package.json:6-8 (engines.node) |
| CI Node | Node 24 | .github/workflows/pull-request.yaml:11 (NODE_VERSION: "24") |
| Web framework | Express 5 (express ^5.2.1) | package.json:52, server/web/web-server.js:1 |
| Realtime | Socket.IO 4 (server + client) | package.json:74-75, server/socket/socket-server.js |
| Message bus | @techteamer/mq ^7.0.1 (RabbitMQ over AMQPS) | package.json:35, server.js:71 |
| Templating | Twig 3 (server pages) + Dust (dustjs-linkedin/dustjs-helpers, client bundles) | package.json:50-51,80, server/web/web-server.js:224, engines/dust/ |
| Sessions | express-session + connect-redis ^9 (Redis store) | package.json:45,54, server/web/web-server.js:106 |
| Auth tokens | jsonwebtoken, node-jose (JWE encrypt of session JWT) | package.json:61,69, server/service/SessionService.js, server/service/TokenService.js |
| Security | helmet ^8, nocache, csurf (CSRF), custom CSP + IP filter | package.json:48,57,67, server/web/routes.js |
| Logging | log4js (+ optional syslog/papertrail appenders) | package.json:64, server/logger.js |
| Frontend build | browserify (JS) + stylus → clean-css/autoprefixer (CSS), via hideout task runner | package.json:40,77,43,6, bin/, engines/build/ |
| Config | getconfig ^4 (NODE_ENV-selected JSON) + optional Spring Cloud Config | package.json:56, config.js, config/ |
| Package manager | Yarn (classic; yarn.lock present, .yarnrc, CI uses yarn install --frozen-lockfile) | yarn.lock, .yarnrc, CI workflow |
| Lint | ESLint 9 flat config (eslint.config.mjs), eslint-config-standard base | package.json:86-95, eslint.config.mjs |
No Dockerfile in the repo
There is no
Dockerfile,.dockerignore, ordocker-composeanywhere indevel(verified viagit ls-tree -r devel). The repo ships nginx + supervisor config instead (nginx_dev.conf,nginx_docker.conf,supervisor_dev.conf,supervisor_docker.conf). The container image is built elsewhere; this repo provides the process/proxy config that image runs. The config profile is chosen byNODE_ENV(dev→config/dev.json,docker→config/docker.json) — set by supervisor (supervisor_dev.confsetsNODE_ENV=dev,supervisor_docker.confsetsNODE_ENV=docker).
3. Build & run
Entrypoints
main:server.js(package.json:5). Boot sequence (server.js:245-254):config.loaded → setupQueue → setupServices → setupCustomizations → StartWebServer → StartSocketServer. On any failure it logsCANNOT START ESIGN_CSSandprocess.exit(2).- Web server listens on
127.0.0.1:10183(server.js:203-206). - Socket server listens on
127.0.0.1:10184— only started whenfeatures.browserSignatureis true (server.js:219-243). - Public traffic is fronted by nginx on port 30180 which proxies
/socket.io→:10184and everything else →:10183, serving staticweb/**directly with 1y cache (nginx_dev.conf).nginx_dev.confandnginx_docker.confare byte-identical (verifieddiff). - Process supervision via supervisord runs
nginx,redis, andesign_css(node server.js) as managed programs (supervisor_dev.conf); accepted exit codes0,2, auto-restart on.
package.json scripts (verbatim → effect)
| Script | Command (package.json:9-19) | What it does |
|---|---|---|
start | node server.js | Boots the server (see entrypoint above). |
test | eslint . --quiet --ignore-pattern "test/*" && echo 'eslint --quiet' | There is no real test suite — test is just ESLint (errors only). See §8. |
lint | eslint . --max-warnings 0 --ignore-pattern "test/*" && echo 'npm run eslint --max-warnings 0' | Strict lint (fails on any warning). This is what CI runs. |
lint:fix | eslint . --fix && eslint --max-warnings 0 . | Auto-fix then re-verify zero-warnings. |
build | node bin/build/build | Builds both scripts and styles (browserify + stylus) once. |
style | node bin/style/style.task | Builds only the CSS bundles. |
script | node bin/script/script.task | Builds only the JS bundles. |
watch | node bin/watch/watch | Builds scripts+styles and watches for changes (live-reload via browser-sync when configured). |
credits | node bin/credits > CREDITS.html | Regenerates CREDITS.html — an HTML license table of all deps via license-checker. |
Typical local run
yarn install(uses--install.ignore-optional truefrom.yarnrc).yarn build(oryarn watchduring dev) to produceweb/js,web/css,web/branding.- Provide a
config/dev.json-shaped config; RabbitMQ reachable atamqps://localhost:5671with mTLS certs under/workspace/vuer_mq_cert/...(config/dev.json:143-153); Redis at/var/run/redis/redis-server.sock(config/dev.json:44-48). NODE_ENV=dev node server.js(this is exactly whatsupervisor_dev.confdoes).
4. Top-level structure
| Path | Role | Verified |
|---|---|---|
server.js | Boot/wiring entrypoint (queue, services, web, socket) | read |
config.js | getconfig loader + Spring Cloud Config + CORS/socket hardening + config.get/has helpers | read |
config/ | dev.json, docker.json — the two NODE_ENV profiles | read both |
server/ | Backend: logger.js, serviceContainer.js, SocketTokenStorage.js, dirs queue/ service/ socket/ web/ logger/ | mapped + sampled |
client/ | Browser source compiled into web/ bundles: engine/ features/ ui/ resources/ utils/ assets/ (Dust pages, stylus, MVC engine) | dir-mapped |
engines/ | First-party build & render engines: build/ dust/ twig/ translator/ util/ | mapped + read build/build.js |
bin/ | CLI tasks: build/ script/ style/ watch/ credits (see §5) | all read |
customization/ | Per-tenant override layer: ui/ server/ translations/ customization-security/ customization-maintenance/, customizations.js, branding-options.json, RELEASE.md | mapped + read |
web/ | Build output + static assets served by nginx: entry/ font/ img/ libs/, 502.html, robots.txt (excluded from Sonar) | dir-mapped |
security/ | Monthly security audit notes (YYYY-MM-DD.md, 34 files) | dir-listed |
maintenance/ | Monthly maintenance notes (YYYY-MM-DD.md, 34 files) | dir-listed |
logs/ | Runtime log dir (just .gitkeep) | listed |
.github/workflows/ | pull-request.yaml CI (lint/audit/sonar/build) | read |
.agents/ao/ | AgentOps scaffolding dir (empty) | listed |
| Root configs | .babelrc, .browserslistrc, .editorconfig, eslint.config.mjs, sonar-project.properties, nginx_*.conf, supervisor_*.conf, changelog.md, CREDITS.html, PULL_REQUEST_TEMPLATE.md | listed/sampled |
5. Helper scripts under bin/
All read line-by-line. There are no shebang CLI binaries except
bin/credits; the others are Node modules invoked vianode bin/....bin/readme.md= "Project related CLI commands."
bin/build/build.js— pushes--no-exit, thenPromise.all([script.task, style.task]); exits when done unless--watch. Thebuildnpm script’s engine.bin/script/script.task.js— declares the JS bundle targets:client/ui/pages/**/*.script.js,customization/ui/pages/**/*.script.js,customization/ui/layouts/**/*.layout.js,client/ui/layouts/**/*.layout.js→ outputweb/js. Adds watch globs (client/**/*.js,customization/**/*.js,**/*.dust) under--watch. Delegates toengines/build/build.bin/script/script.compiler.js— single-file compiler: browserify (noParse: ['./'],browserifyDusttransform,browserify-require-not-found-parentplugin) → optional@babel/coreminifypreset whenconfig.build.minify.bin/style/style.task.js— declares the CSS bundle targets (5 bundles): pages, layouts,customization/ui/branding/**/*.branding.styl→web/branding, custom pages, custom layouts → mostlyweb/css. Watchesclient/**/*.styl,customization/**/*.styl,customization/branding-options.jsonunder--watch; live-reloads*.css.bin/style/style.compiler.js— single-file stylus compiler: importsclient/ui/styles/global.styl, injects breakpoints/device-sizes/colors and brandingresources+valuesas stylus vars, runs@techteamer/poststylus+autoprefixer, optionalclean-cssminify + inline source maps.bin/watch/watch.js— three lines: forces--watchand requires bothscript.taskandstyle.task(thewatchnpm script).bin/credits—#!/usr/bin/env node; runslicense-checkerover deps and prints an HTML<table>of name/license/url/publisher → piped intoCREDITS.html.
6. Key modules / services / entities
Boot & DI
server/serviceContainer.js— exports a singleton{ emitter: ServiceBus }.ServiceBus extends WildEmitterand implements the customization hook system:addHook/callHooks(multi-handler, parallel viaPromise.all),registerOverride/callOverride(single route override with default fallback),callOnlyHook. This is the backbone of customization-architecture.server/logger.js— log4js config; channelsesign|express|session|csp; appendersconsolealways, plusfile|syslog|papertrailwhen configured; throws on any unsupportedlogging.*appender key (server/logger.js:70-74).server/SocketTokenStorage.js— in-memoryMapofuserId → randomUUIDsocket tokens (stored on the container atserver.js:63).
RabbitMQ wiring (server.js:70-143) — the heart of CSS
Built from config.queue via @techteamer/mq QueueManager. On connection close → process.exit(2).
- RPC servers (CSS answers):
esign:css-ping(Ping),esign:rpc-system-oss(SystemOss). - RPC clients (CSS calls backend):
esign:rpc-jwt-auth(JwtAuth),esign:rpc-app(App),esign:rpc-customer(Customer),esign:rpc-timestamp(Timestamp),esign:rpc-document(Document),esign:rpc-contract(Contract),esign:rpc-offer(Offer),esign:rpc-signature(Signature); plussignaturecheckclient only whenfeatures.browserSignature. - Queue servers (CSS consumes):
esign:queue-service-bus(ServiceBus),esign:queue-customer(Customer),contract. - Queue clients (CSS publishes):
queue-clienterror-log(ClientErrorLog). server/queue/{QueueError,QueueMessage,QueueReply}.jsare the shared status/error envelope used throughout the API layer (e.g.QueueReply.STATUS_ERROR,QueueError.ERR_INVALID_SESSION/ERR_SESSION_EXPIRED/ERR_SESSION_BLOCKED/ERR_NOT_FOUND/ERR_APP_OUTDATED).server/queue/rpc_server/SystemOss.js— answersgetConfigby returning a sanitized copy of the whole CSS config (stripsgetconfig) — lets the OSS read CSS config over the bus.
Services (server.js:145-195, instantiated into serviceContainer.service.*)
All under server/service/. Conditionals on features.browserSignature: CompatibilityService, SignatureCheckService are only created when enabled.
SocketService,TokenService,SessionService,DisasterModeService,IpFilterService,BrandingService,AppService,CustomerService,SignatureService,TimestampService,DocumentService,ContractService,OfferService(+CompatibilityService,SignatureCheckService).TokenService.loadKeyStore()is awaited at boot (server.js:186-191); failure aborts startup (“Unable to initialize token keystore”).SessionService—generateSession:jwt.sign(sessionData, session.secret)→TokenService.encrypt(JWE).resolveSession: decrypt →jwt.verify. The app session token rides in cookieapp_session_tokenor a Bearer token.BrandingService— also used standalone by the build (engines/build/build.js:7-8,bin/style/style.task.jsbranding bundle) to feed branding vars into stylus;setupCustomizations()is called before bundling.
Web layer (server/web/)
server/web/web-server.js— builds the Express app. Key middleware order: per-requestnonce(UUID) → user-agent/browser detection (only whenbrowserSignature) →helmet()+nocache()+referrerPolicy('origin')→ body parsers (50mb; specialapplication/csp-reporthandler) →cookie-parser→locale→express-bearer-token. CSP-report sink atPOST /report-violation. Redis-backed session (only whenbrowserSignature) with a 3-try session-lookup retry and an iOS-12sameSite=falsecookie workaround. Twig render engine attached viaengines/twig/render-server. 404 → redirect toportal.urlfor HTML, else404. Trailing 400 error handler (“Something broke into 400 pieces!”).server/web/routes.js— the full route table (read in full). Defines reusable middleware:handleDisaster()(disaster-mode → redirect/404),resolveSession()(bearer orapp_session_tokencookie →req.appSessionData),requireSession(),registerBrowser()(callsappService.registerApp/updateApp, issuesapp_session_token),csp()(per-requesthelmet.contentSecurityPolicywith nonce, sandbox,allowPopups/allowDownloadsfrom config, live-reload exceptions),csrfProtection(csurfcookie-based, only forappType === 'browser'). IP-filtered endpoints:/api/customer/2f-authand/api/signature/resend-token. Many page routes are wrapped inemitter.callOverride('routes:<name>', ...)so customizations can replace them.server/web/api/**— ~30 endpoint modules grouped by domain (app/ customer/ contract/ document/ offer/ signature/ timestamp/ site/+pre-check.js,sentry.js). Each is a thin(req,res)handler that validates input, calls aserviceContainer.service.*method (which RPCs the backend), mapsQueueError.*→ HTTP status, and replies viaApiResponse. Representative:server/web/api/signature/m1.js(sends customer public key, persistsreq.session.authTokento throttle SMS tokens, returns{signatureId, token}).server/web/routes/*.endpoint.js— server-rendered Twig pages (homepage, token-check, offer-sign, offer-signed/refused, waiting-for-offer/contract, agreement-checks, system-check, goodbye, download-contract, ui-kit, apple-app-site-association).server/web/Template.js— render helper: resolves the page’sweb/js,web/css, branding CSS, and.trans.jsdictionary (engines/translator/Dictionary), injectsconfig, locale, branding, CSRF token, optional browser-sync live-reload path;res.render(templatePath, this).
Socket layer (server/socket/)
socket-server.js—start()wrapssocket.io(httpServer, config.web.socket);setupEvents()loads modulesclient,events/auth,events/pagevisit,events/ping, lets customizations push more viacallHooks('socket', modules), and binds each onconnection.
Client & engines (compiled into web/)
client/— a custom browser MVC framework:client/engine/{controller,view,service,network,message,metadata,radio},client/features/{signature,socket,socket-ping,system-check,webrtc},client/ui/{pages,layouts,elements,regions,screens,states,styles,libs},client/resources/{breakpoints,colors,device-sizes.json}(consumed by the stylus compiler). Surveyed structurally (see gaps).engines/build/—build.js(watch/bundle orchestrator + path filtering by page name + branding setup),bundle.js,watch.js,livereload.js(browser-sync).engines/dust/(client+server Dust render, helpersasset/script/style, filters).engines/twig/render-server.js(server Twig).engines/translator/Dictionary.js(i18n).engines/util/(date/filesize/timestamp/zeropad/inheritance filters).
7. Configuration
- Loader:
config.jsrequiresgetconfig, which selectsconfig/<NODE_ENV>.json(config/dev.json,config/docker.json).config.jsadds a custom SyntaxError pretty-printer for malformed config JSON (prints the offending substring,process.exit(2)),config.get(path)/config.has(path)helpers (dot-paths), dev-host defaulting, and secure-by-default CORS/socket.io rewrites (turnsorigin: '*'into the CSS host). No AJV/JSON-schema validation was found (the only validation is the appender-name check inserver/logger.js). - Spring Cloud Config (optional): if
config.springCloudConfigServeris set,config.jsloads remote config viacloud-config-clientwithpromise-retry, merging keys withdot-object;config.loadedis the promise the boot chain awaits (config.js:68-97,server.js:245). - Key config keys (from
config/dev.json/config/docker.json):portal.url/urlForExternals— where unauthenticated/404 traffic redirects;agreementUrls(FaceKom trust-service PDFs).web.socketioSettings,web.socket(Socket.IO server opts incl.allowEIO3),web.csp.allowPopups/allowDownloads,web.trustedProxy(loopback, linklocal, uniquelocal).session.{secret,expiryPeriod:'1y',redis.socket.path,name:'esignsid'}.security.ipFilter.{suppressAfterAttempts:5, throttlePeriodMs:60000, coolDownPeriodMs:1800000}.hosts.{css,oss}.app.{appleAppId, compatibleAppVersion, legacySocketio}.browsers.{compatible,incompatible}— large UA/version allow/deny matrix drivingCompatibilityService.features.{browserSignature, offerRefuseReason, offerPackage, authTokenResend, requireSignaturePhoto}— feature flags that gate services, routes, and socket server. All five keys are present in bothdev.jsonanddocker.json: indev.jsonall five aretrue; indocker.jsonthe first four (browserSignature,offerRefuseReason,offerPackage,authTokenResend) arefalsewhilerequireSignaturePhotoistrue.queue.{url:'amqps://...:5671', options.{cert,key,ca}, rpcTimeoutMs:60000, rpcQueueMaxSize:100}— mTLS client certs under/workspace/vuer_mq_cert/....timezone:'Europe/Budapest',locales.{supported:['hu'],default:'hu'}.jwt.{secret,expiryPeriod:'24h',keystore}(note: an oct keystore key is committed in config — dev/default value).build.{generateSourceMaps, minify, forceCleanCache, liveReloadSettings, uikit}— drives the bundlers.
- Env vars (verified usages):
NODE_ENV(selects config +Template.isDev+app.jsonprofile in supervisor),DEV_DOMAIN(dev host derivation,config.js:40),NODE_TLS_REJECT_UNAUTHORIZED(set to'0'whensettings.allowSelfSignedCerts,server.js:54-56),TZ(forced toEtc/UTC,server.js:52). Supervisor injectsENV_APP_HOME,ENV_DOCKER_USER(supervisor_*.conf).
8. Tests
There is effectively no automated test suite.
package.jsontestscript runs ESLint only (eslint . --quiet --ignore-pattern "test/*"). There is no Jest/Mocha runner wired, even thougheslint-plugin-jestis a devDependency andsonar-project.propertiesexcludestest/**/customization/test/**.- No
test/directory exists at the repo root (the eslint ignore-patterntest/*is defensive). The Sonar exclusions (server/__mocks__/**,customization/test/**) reference paths that are not present ondevel.- CI does not run tests —
.github/workflows/pull-request.yamljobs are:lint(yarn lint),audit(yarn audit+improved-yarn-audit --min-severity critical),sonar(SonarCloud scan, projectTechTeamer_esign_css), andbuild(yarn build, gated on the prior three). “How to run”:yarn lintfor static checks;yarn buildto verify bundles compile.
9. Dependencies on other FaceKom services
Evidenced only in code/config:
- RabbitMQ (eSign queue bus) — central dependency. mTLS AMQPS at
config.queue.url(amqps://localhost:5671dev /amqps://rabbitmq:5671docker) with certs from/workspace/vuer_mq_cert/.... CSS connects via@techteamer/mq(server.js:71); losing the connection kills the process (server.js:78-82). Queues/RPC names CSS depends on (all read fromserver.js:84-128):- Calls RPC:
esign:rpc-jwt-auth,esign:rpc-app,esign:rpc-customer,esign:rpc-timestamp,esign:rpc-document,esign:rpc-contract,esign:rpc-offer,esign:rpc-signature(+signaturecheck). - Serves RPC:
esign:css-ping,esign:rpc-system-oss(consumed by the OSS). - Consumes queues:
esign:queue-service-bus,esign:queue-customer,contract. - Publishes queue:
queue-clienterror-log. These backend RPC handlers live in sibling eSign services (the OSS and core eSign backend), not in this repo. See architecture-overview / vuer_oss.
- Calls RPC:
- Redis — session store (
connect-redis) and run as a supervised process; unix socket/var/run/redis/redis-server.sock(config/*.json:44-48,supervisor_*.conf [program:redis]). Only used whenfeatures.browserSignatureis on (server/web/web-server.js:99-116). - nginx — reverse proxy / static file server in front of CSS (
nginx_*.conf,supervisor_*.conf [program:nginx]), port 30180 →:10183/:10184. - Spring Cloud Config server — optional remote config source (
config.js:68-97) ifspringCloudConfigServeris configured. - Portal —
portal.urlis the redirect target for unauthenticated/disaster/404 HTML traffic (server/web/routes.js,config.js:54-56). - No direct SQL/DB — CSS has no database client; all persistence is delegated over the queue bus. (
sonar-project.propertieslistsdb/**exclusions but nodb/dir exists ondevel.)
10. Verified gotchas
Working tree ≠ product
The checked-out branch
update/customization/instacash-2026-05-27carries Instacash/MBH overrides:customization/customizations.jsregisters route overrides forwaiting-for-contract,goodbye,offer-signed,offer-refused(all →offer-signed.endpoint), andbranding-options.jsonpoints logos atmbh_logo*. Thedevelcustomizations.jsis an empty template (verified viagit show devel:). Always check which branch you’re on. See customization-branch-catalog.
Process exits with code 2 on many failures
Boot failures, RabbitMQ disconnect, malformed config JSON, and uncaught startup errors all
process.exit(2)— supervisor treats0,2as clean exits and restarts. A crash-loop will look “healthy” to supervisor.
browserSignaturefeature flag is load-bearingWhen
features.browserSignatureis false, the Socket.IO server, Redis sessions, Twig rendering, browser/UA detection, and all public page routes are disabled — CSS degrades to a bare JSON API.web-server.jseven warns about a “404 loop” ifportal.url === '/'with the flag off (server/web/web-server.js:232-235).
Secrets committed as dev defaults
session.secret,jwt.secret, and a JWK injwt.keystoreare committed inconfig/dev.json&config/docker.json. These are environment defaults expected to be overridden (e.g. via Spring Cloud Config) in real deployments — do not treat as production secrets.
Express 5 / dependency-major churn
The repo recently moved to Express 5, jQuery 3.7/4, connect-redis v9, redis v5, body-parser 2, helmet 8 (see
changelog.md,customization/RELEASE.md, recent commitsf20fba7/71fb0fd/9cce25f). Several fixes are Express-5 compat (res.sendStatusvsres.send(statusCode)) and connect-redis v9 namedRedisStoreexport — keep this in mind when porting code from older eSign repos.
Unverified / gaps
client/tree (browser MVC framework) — mapped structurally (all dirs listed in §4/§6) but not read line-by-line:client/engine/*,client/features/{signature,webrtc,socket,system-check},client/ui/{pages,layouts,elements,screens,states}. The build targets and compilers were fully read; the page/feature implementations were not.engines/internals —engines/build/build.jsread in full;bundle.js,livereload.js,dust/*,twig/render-server.js,translator/Dictionary.js,util/*were mapped/named but not read line-by-line.- Individual
server/web/api/**handlers — the routing table and one representative handler (signature/m1.js) were read; the other ~29 handlers were enumerated but not each read in full. Their pattern is uniform (validate → service RPC →QueueError→HTTP map →ApiResponse). - Individual
server/service/*andserver/queue/**files —SessionService,SystemOss,JwtAuthread in full; the remaining services/RPC clients were enumerated fromserver.jswiring but not each opened. security/andmaintenance/notes (34 files each) — listed by name only, not read.- No JSON-schema/AJV config validation was found; if one exists it is not in this repo on
devel.
Sources
Files/dirs actually opened:
package.json,README.md,changelog.md,config.js,server.jsconfig/dev.json,config/docker.jsonserver/serviceContainer.js,server/logger.js,server/SocketTokenStorage.jsserver/web/web-server.js,server/web/routes.js,server/web/Template.js,server/web/api/signature/m1.jsserver/service/SessionService.jsserver/queue/rpc_server/SystemOss.js,server/queue/rpc_client/JwtAuth.jsserver/socket/socket-server.jsbin/readme.md,bin/credits,bin/build/build.js,bin/script/script.task.js,bin/script/script.compiler.js,bin/style/style.task.js,bin/style/style.compiler.js,bin/watch/watch.jsengines/build/build.jscustomization/customizations.js(working tree +git show devel:),customization/RELEASE.md,customization/branding-options.jsonnginx_dev.conf,nginx_docker.conf(diff),supervisor_dev.conf,supervisor_docker.conf(diff).github/workflows/pull-request.yaml,sonar-project.properties,.yarnrc,.browserslistrc- Directory listings: repo root,
bin/,client/,config/,customization/,engines/,server/(+queue/ service/ socket/ web/),web/,security/,maintenance/,.github/,.agents/ - Git:
git branch -a,git log(devel+ working branch),git ls-tree -r devel(Dockerfile check)