aquaman-proxy 0.14.0 → 0.15.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.
Files changed (57) hide show
  1. package/README.md +28 -5
  2. package/dist/broker-scope.d.ts +89 -0
  3. package/dist/broker-scope.d.ts.map +1 -0
  4. package/dist/broker-scope.js +186 -0
  5. package/dist/broker-scope.js.map +1 -0
  6. package/dist/cli/index.js +374 -35
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/core/index.d.ts +1 -1
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +1 -1
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/core/types.d.ts +14 -0
  13. package/dist/core/types.d.ts.map +1 -1
  14. package/dist/core/utils/config.d.ts +9 -0
  15. package/dist/core/utils/config.d.ts.map +1 -1
  16. package/dist/core/utils/config.js +29 -1
  17. package/dist/core/utils/config.js.map +1 -1
  18. package/dist/core/utils/index.d.ts +1 -1
  19. package/dist/core/utils/index.d.ts.map +1 -1
  20. package/dist/core/utils/index.js +1 -1
  21. package/dist/core/utils/index.js.map +1 -1
  22. package/dist/daemon.d.ts +36 -0
  23. package/dist/daemon.d.ts.map +1 -1
  24. package/dist/daemon.js +136 -15
  25. package/dist/daemon.js.map +1 -1
  26. package/dist/hermes/config-writer.d.ts +19 -0
  27. package/dist/hermes/config-writer.d.ts.map +1 -1
  28. package/dist/hermes/config-writer.js +51 -1
  29. package/dist/hermes/config-writer.js.map +1 -1
  30. package/dist/index.d.ts +7 -5
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +9 -5
  33. package/dist/index.js.map +1 -1
  34. package/dist/migration/openclaw-migrator.d.ts.map +1 -1
  35. package/dist/migration/openclaw-migrator.js +7 -6
  36. package/dist/migration/openclaw-migrator.js.map +1 -1
  37. package/dist/openclaw/channel-routing.d.ts +81 -0
  38. package/dist/openclaw/channel-routing.d.ts.map +1 -0
  39. package/dist/openclaw/channel-routing.js +152 -0
  40. package/dist/openclaw/channel-routing.js.map +1 -0
  41. package/dist/openclaw/integration.d.ts +18 -0
  42. package/dist/openclaw/integration.d.ts.map +1 -1
  43. package/dist/openclaw/integration.js +32 -0
  44. package/dist/openclaw/integration.js.map +1 -1
  45. package/dist/openclaw/secretref.d.ts +35 -6
  46. package/dist/openclaw/secretref.d.ts.map +1 -1
  47. package/dist/openclaw/secretref.js +73 -8
  48. package/dist/openclaw/secretref.js.map +1 -1
  49. package/dist/request-policy.d.ts +7 -0
  50. package/dist/request-policy.d.ts.map +1 -1
  51. package/dist/request-policy.js +31 -2
  52. package/dist/request-policy.js.map +1 -1
  53. package/dist/service-registry.d.ts +8 -0
  54. package/dist/service-registry.d.ts.map +1 -1
  55. package/dist/service-registry.js +11 -4
  56. package/dist/service-registry.js.map +1 -1
  57. package/package.json +20 -6
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,UAAU,EACV,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,cAAc,EACd,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,KAAK,aAAa,EAClB,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,cAAc,EACd,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,UAAU,EACV,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,cAAc,EACd,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,KAAK,aAAa,EAClB,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,cAAc,EACd,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,kBAAkB,CAAC"}
@@ -16,5 +16,5 @@ export { AuditLogger, createAuditLogger, redactSensitiveParams } from './audit/i
16
16
  // Secret-pattern redactor (v0.12.0+)
17
17
  export { BUILTIN_PATTERNS, redact, redactDeep, containsSecret, buildValuePatterns } from './redactor/index.js';
18
18
  // Utils
19
- export { computeHash, computeChainedHash, generateId, generateNonce, generateSigningKeyPair, sign, verify, encryptWithPassword, decryptWithPassword, generateSelfSignedCert, getConfigDir, getConfigPath, expandPath, getDefaultConfig, loadConfig, ensureConfigDir, saveConfig, applyEnvOverrides, generateLoopbackToken, DEFAULT_LOOPBACK_PORT, DEFAULT_CACHE_TTL_SECONDS, CACHED_BY_DEFAULT_BACKENDS, resolveCacheTtl } from './utils/index.js';
19
+ export { computeHash, computeChainedHash, generateId, generateNonce, generateSigningKeyPair, sign, verify, encryptWithPassword, decryptWithPassword, generateSelfSignedCert, getConfigDir, getConfigPath, expandPath, getDefaultConfig, loadConfig, ensureConfigDir, saveConfig, applyEnvOverrides, generateLoopbackToken, isAquamanPlaceholder, LOOPBACK_TOKEN_PREFIX, DEFAULT_LOOPBACK_PORT, DEFAULT_CACHE_TTL_SECONDS, CACHED_BY_DEFAULT_BACKENDS, resolveCacheTtl } from './utils/index.js';
20
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,cAAc;AACd,OAAO,EAIL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,aAAa,EAEb,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EAEnB,UAAU,EACV,gBAAgB,EAEhB,cAAc,EACd,oBAAoB,EAEpB,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAEhC,QAAQ;AACR,OAAO,EAEL,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,qCAAqC;AACrC,OAAO,EAEL,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,cAAc,EACd,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,QAAQ;AACR,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EAGtB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,cAAc;AACd,OAAO,EAIL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,aAAa,EAEb,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EAEnB,UAAU,EACV,gBAAgB,EAEhB,cAAc,EACd,oBAAoB,EAEpB,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAEhC,QAAQ;AACR,OAAO,EAEL,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,qCAAqC;AACrC,OAAO,EAEL,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,cAAc,EACd,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,QAAQ;AACR,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EAGtB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,kBAAkB,CAAC"}
@@ -107,6 +107,19 @@ export interface HermesConfig {
107
107
  configMethod: 'env' | 'dotenv';
108
108
  binaryPath?: string;
109
109
  }
110
+ /**
111
+ * Credential broker (`POST /broker/resolve`), served by `aquaman daemon` only
112
+ * (v0.15.0+). The broker hands credential VALUES to same-user callers, so it
113
+ * serves only refs declared for materialization: the env refs in
114
+ * projects.yaml, plus `allowedRefs` here (e.g. Hermes secret-source bindings).
115
+ * OpenClaw-hosted proxies never serve it.
116
+ */
117
+ export interface BrokerConfig {
118
+ /** Serve the broker from `aquaman daemon`. Default true. */
119
+ enabled: boolean;
120
+ /** Extra `aquaman://service/key` refs callers may materialize. Manage with `aquaman broker allow|revoke`. */
121
+ allowedRefs?: string[];
122
+ }
110
123
  export interface WrapperConfig {
111
124
  credentials: CredentialsConfig;
112
125
  audit: AuditConfig;
@@ -114,6 +127,7 @@ export interface WrapperConfig {
114
127
  openclaw: OpenClawConfig;
115
128
  loopback?: LoopbackConfig;
116
129
  hermes?: HermesConfig;
130
+ broker?: BrokerConfig;
117
131
  policy?: Record<string, {
118
132
  defaultAction: 'allow' | 'deny';
119
133
  rules: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,mBAAmB,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,gBAAgB,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,gBAAgB,GAAG,WAAW,GAAG,eAAe,GAAG,WAAW,CAAC;IAC7G,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,6GAA6G;IAC7G,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CACxI;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,gBAAgB,GAAG,WAAW,GAAG,eAAe,GAAG,WAAW,CAAC"}
@@ -32,7 +32,16 @@ export declare function resolveCacheTtl(config: WrapperConfig): number;
32
32
  * agent host as the provider api_key; the proxy strips it and injects the real
33
33
  * credential. Prefixed so it's recognizable in `~/.hermes/.env` and logs.
34
34
  */
35
+ /** Every generated loopback token starts with this, so it is recognizable. */
36
+ export declare const LOOPBACK_TOKEN_PREFIX = "aqm_lb_";
35
37
  export declare function generateLoopbackToken(): string;
38
+ /**
39
+ * True for a value aquaman itself wrote into a host's config as a stand-in
40
+ * for a credential: the static placeholder, an `aquaman://` reference, or a
41
+ * loopback token. None of them work against the vendor API, so tools that
42
+ * hunt for plaintext credentials must not report them as findings.
43
+ */
44
+ export declare function isAquamanPlaceholder(value: unknown): boolean;
36
45
  export declare function getConfigDir(): string;
37
46
  export declare function getConfigPath(): string;
38
47
  export declare function expandPath(p: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,gEAAgE;AAChE,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,EAAE,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CACzD,CAAC;AAEtC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAQ7D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5C;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CA2BhD;AAED,wBAAgB,UAAU,IAAI,aAAa,CAmB1C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAyEtE;AAwCD,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAUtD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,gEAAgE;AAChE,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,EAAE,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CACzD,CAAC;AAEtC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAQ7D;AAED;;;;GAIG;AACH,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAO5D;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5C;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CA+BhD;AAED,wBAAgB,UAAU,IAAI,aAAa,CAmB1C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAgFtE;AA2CD,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAUtD"}
@@ -46,8 +46,23 @@ export function resolveCacheTtl(config) {
46
46
  * agent host as the provider api_key; the proxy strips it and injects the real
47
47
  * credential. Prefixed so it's recognizable in `~/.hermes/.env` and logs.
48
48
  */
49
+ /** Every generated loopback token starts with this, so it is recognizable. */
50
+ export const LOOPBACK_TOKEN_PREFIX = 'aqm_lb_';
49
51
  export function generateLoopbackToken() {
50
- return 'aqm_lb_' + crypto.randomBytes(24).toString('hex');
52
+ return LOOPBACK_TOKEN_PREFIX + crypto.randomBytes(24).toString('hex');
53
+ }
54
+ /**
55
+ * True for a value aquaman itself wrote into a host's config as a stand-in
56
+ * for a credential: the static placeholder, an `aquaman://` reference, or a
57
+ * loopback token. None of them work against the vendor API, so tools that
58
+ * hunt for plaintext credentials must not report them as findings.
59
+ */
60
+ export function isAquamanPlaceholder(value) {
61
+ if (typeof value !== 'string')
62
+ return false;
63
+ return (value === 'aquaman-proxy-managed' ||
64
+ value.startsWith('aquaman://') ||
65
+ value.startsWith(LOOPBACK_TOKEN_PREFIX));
51
66
  }
52
67
  export function getConfigDir() {
53
68
  return process.env['AQUAMAN_CONFIG_DIR'] || DEFAULT_CONFIG_DIR;
@@ -89,6 +104,10 @@ export function getDefaultConfig() {
89
104
  },
90
105
  hermes: {
91
106
  configMethod: 'dotenv'
107
+ },
108
+ broker: {
109
+ enabled: true,
110
+ allowedRefs: []
92
111
  }
93
112
  };
94
113
  }
@@ -171,6 +190,12 @@ export function applyEnvOverrides(config) {
171
190
  config.loopback = config.loopback ?? { enabled: false, port: DEFAULT_LOOPBACK_PORT, host: '127.0.0.1' };
172
191
  config.loopback.token = env['AQUAMAN_LOOPBACK_TOKEN'];
173
192
  }
193
+ // Credential broker switch (v0.15.0+). Only 'false' disables; the broker is
194
+ // still limited to declared refs when on.
195
+ if (env['AQUAMAN_BROKER_ENABLED']) {
196
+ config.broker = config.broker ?? { enabled: true, allowedRefs: [] };
197
+ config.broker.enabled = env['AQUAMAN_BROKER_ENABLED'] !== 'false';
198
+ }
174
199
  return config;
175
200
  }
176
201
  function mergeConfig(base, override) {
@@ -203,6 +228,9 @@ function mergeConfig(base, override) {
203
228
  hermes: override.hermes !== undefined
204
229
  ? { ...base.hermes, ...override.hermes }
205
230
  : base.hermes,
231
+ broker: override.broker !== undefined
232
+ ? { ...base.broker, ...override.broker }
233
+ : base.broker,
206
234
  policy: override.policy !== undefined ? { ...base.policy, ...override.policy } : base.policy
207
235
  };
208
236
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/utils/config.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,5 @@
2
2
  * Utility functions for aquaman
3
3
  */
4
4
  export { computeHash, computeChainedHash, generateId, generateNonce, generateSigningKeyPair, sign, verify, encryptWithPassword, decryptWithPassword, generateSelfSignedCert, type SigningKeyPair, type SelfSignedCert } from './hash.js';
5
- export { getConfigDir, getConfigPath, expandPath, getDefaultConfig, loadConfig, ensureConfigDir, saveConfig, applyEnvOverrides, generateLoopbackToken, DEFAULT_LOOPBACK_PORT, DEFAULT_CACHE_TTL_SECONDS, CACHED_BY_DEFAULT_BACKENDS, resolveCacheTtl } from './config.js';
5
+ export { getConfigDir, getConfigPath, expandPath, getDefaultConfig, loadConfig, ensureConfigDir, saveConfig, applyEnvOverrides, generateLoopbackToken, isAquamanPlaceholder, LOOPBACK_TOKEN_PREFIX, DEFAULT_LOOPBACK_PORT, DEFAULT_CACHE_TTL_SECONDS, CACHED_BY_DEFAULT_BACKENDS, resolveCacheTtl } from './config.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,aAAa,CAAC"}
@@ -2,5 +2,5 @@
2
2
  * Utility functions for aquaman
3
3
  */
4
4
  export { computeHash, computeChainedHash, generateId, generateNonce, generateSigningKeyPair, sign, verify, encryptWithPassword, decryptWithPassword, generateSelfSignedCert } from './hash.js';
5
- export { getConfigDir, getConfigPath, expandPath, getDefaultConfig, loadConfig, ensureConfigDir, saveConfig, applyEnvOverrides, generateLoopbackToken, DEFAULT_LOOPBACK_PORT, DEFAULT_CACHE_TTL_SECONDS, CACHED_BY_DEFAULT_BACKENDS, resolveCacheTtl } from './config.js';
5
+ export { getConfigDir, getConfigPath, expandPath, getDefaultConfig, loadConfig, ensureConfigDir, saveConfig, applyEnvOverrides, generateLoopbackToken, isAquamanPlaceholder, LOOPBACK_TOKEN_PREFIX, DEFAULT_LOOPBACK_PORT, DEFAULT_CACHE_TTL_SECONDS, CACHED_BY_DEFAULT_BACKENDS, resolveCacheTtl } from './config.js';
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EAGvB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EAGvB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,aAAa,CAAC"}
package/dist/daemon.d.ts CHANGED
@@ -5,6 +5,28 @@
5
5
  import { type CredentialStore } from './core/index.js';
6
6
  import { ServiceRegistry, type ServiceDefinition } from './service-registry.js';
7
7
  import { type PolicyConfig } from './request-policy.js';
8
+ import type { BrokerScope } from './broker-scope.js';
9
+ /**
10
+ * A url-path service carries its credential in a path segment instead of a
11
+ * header (Telegram: `/bot<TOKEN>/sendMessage`). A client pointed at us sends
12
+ * that segment filled with whatever it has — a placeholder, or on the loopback
13
+ * listener the aquaman token, because the segment is the only auth slot the
14
+ * shape has.
15
+ */
16
+ export interface UrlPathCredentialSlot {
17
+ /** Index of the credential segment within the service-relative path. */
18
+ index: number;
19
+ /** What the client put there. Never forwarded upstream. */
20
+ presented: string;
21
+ }
22
+ /**
23
+ * Locate the credential segment in a service-relative path.
24
+ *
25
+ * Returns null when the client sent no such segment, which is the shape the
26
+ * plugin's fetch interceptor produces (`/telegram/sendMessage`). Callers then
27
+ * insert the credential at index 0, the pre-v0.15.0 behaviour.
28
+ */
29
+ export declare function findUrlPathCredentialSlot(segments: string[], authPathTemplate: string): UrlPathCredentialSlot | null;
8
30
  export interface CredentialProxyOptions {
9
31
  socketPath: string;
10
32
  store: CredentialStore;
@@ -25,6 +47,13 @@ export interface CredentialProxyOptions {
25
47
  token: string;
26
48
  host?: string;
27
49
  };
50
+ /**
51
+ * Credential broker (`POST /broker/resolve`) scope. When omitted the broker
52
+ * is OFF: the endpoint refuses every request without touching the vault.
53
+ * Only `aquaman daemon` passes a scope; OpenClaw-hosted proxies never do.
54
+ * See broker-scope.ts for the rules.
55
+ */
56
+ broker?: BrokerScope;
28
57
  }
29
58
  export interface RequestInfo {
30
59
  id: string;
@@ -58,6 +87,13 @@ export declare class CredentialProxy {
58
87
  * explicit `x-aquaman-token`. Comparison is constant-time.
59
88
  */
60
89
  private isLoopbackTokenValid;
90
+ /**
91
+ * A url-path service sends no auth header at all, so the loopback token can
92
+ * only arrive in the credential segment. OpenClaw's Telegram channel, for
93
+ * instance, is pointed at us with `channels.telegram.apiRoot` and a
94
+ * placeholder bot token; the placeholder it sends is the loopback token.
95
+ */
96
+ private urlPathTokenCandidate;
61
97
  private handleRequest;
62
98
  private proxyRequest;
63
99
  private emitRequest;
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,KAAK,eAAe,EAAc,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAyB,KAAK,iBAAiB,EAAiB,MAAM,uBAAuB,CAAC;AAEtH,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA0BrE,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,eAAe,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAkB;gBAExB,OAAO,EAAE,sBAAsB;IAMrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuE5B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;YAwBd,aAAa;YA+Jb,YAAY;IAoI1B,OAAO,CAAC,WAAW;IAMnB;;;;;;;;;;;;;;;;;;OAkBG;YACW,mBAAmB;IA4H3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B3B,SAAS,IAAI,OAAO;IAIpB,aAAa,IAAI,MAAM;IAIvB;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAQnC,kBAAkB,IAAI,eAAe;IAIrC,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;CAGnD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAEtF;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,KAAK,eAAe,EAAc,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAyB,KAAK,iBAAiB,EAAiB,MAAM,uBAAuB,CAAC;AAEtH,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;CACnB;AASD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAAE,EAClB,gBAAgB,EAAE,MAAM,GACvB,qBAAqB,GAAG,IAAI,CAiB9B;AAuBD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,eAAe,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAkB;gBAExB,OAAO,EAAE,sBAAsB;IAMrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuE5B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;YAaf,aAAa;YAiMb,YAAY;IAqI1B,OAAO,CAAC,WAAW;IAMnB;;;;;;;;;;;;;;;;;;OAkBG;YACW,mBAAmB;IA4J3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B3B,SAAS,IAAI,OAAO;IAIpB,aAAa,IAAI,MAAM;IAIvB;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAQnC,kBAAkB,IAAI,eAAe;IAIrC,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;CAGnD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAEtF;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
package/dist/daemon.js CHANGED
@@ -14,6 +14,40 @@ import { createOAuthTokenCache } from './oauth-token-cache.js';
14
14
  import { matchPolicy } from './request-policy.js';
15
15
  // Service name validation: lowercase alphanum, dots, hyphens, underscores
16
16
  const SAFE_SERVICE_NAME = /^[a-z0-9][a-z0-9._-]*$/;
17
+ /**
18
+ * Only the first two segments are considered. Telegram builds exactly
19
+ * `/bot<TOKEN>/<method>` and `/file/bot<TOKEN>/<file_path>`, so a deeper scan
20
+ * would only add ways for a method or file name to be mistaken for the slot.
21
+ */
22
+ const URL_PATH_SLOT_SCAN_DEPTH = 2;
23
+ /**
24
+ * Locate the credential segment in a service-relative path.
25
+ *
26
+ * Returns null when the client sent no such segment, which is the shape the
27
+ * plugin's fetch interceptor produces (`/telegram/sendMessage`). Callers then
28
+ * insert the credential at index 0, the pre-v0.15.0 behaviour.
29
+ */
30
+ export function findUrlPathCredentialSlot(segments, authPathTemplate) {
31
+ const templateSegments = authPathTemplate.split('/').filter(s => s);
32
+ if (templateSegments.length !== 1)
33
+ return null;
34
+ const [prefix, suffix] = templateSegments[0].split('{token}');
35
+ if (suffix === undefined)
36
+ return null;
37
+ const depth = Math.min(segments.length, URL_PATH_SLOT_SCAN_DEPTH);
38
+ for (let index = 0; index < depth; index++) {
39
+ const segment = segments[index];
40
+ if (segment.length <= prefix.length + suffix.length)
41
+ continue;
42
+ if (!segment.startsWith(prefix) || !segment.endsWith(suffix))
43
+ continue;
44
+ return {
45
+ index,
46
+ presented: segment.slice(prefix.length, segment.length - suffix.length)
47
+ };
48
+ }
49
+ return null;
50
+ }
17
51
  /**
18
52
  * Constant-time string comparison that doesn't leak length via an early
19
53
  * return. timingSafeEqual requires equal-length buffers, so unequal lengths
@@ -151,8 +185,30 @@ export class CredentialProxy {
151
185
  if (authz) {
152
186
  candidates.push(authz.replace(/^Bearer\s+/i, ''));
153
187
  }
188
+ const pathBorne = this.urlPathTokenCandidate(req.url || '/');
189
+ if (pathBorne)
190
+ candidates.push(pathBorne);
154
191
  return candidates.some(c => timingSafeStrEqual(c, expected));
155
192
  }
193
+ /**
194
+ * A url-path service sends no auth header at all, so the loopback token can
195
+ * only arrive in the credential segment. OpenClaw's Telegram channel, for
196
+ * instance, is pointed at us with `channels.telegram.apiRoot` and a
197
+ * placeholder bot token; the placeholder it sends is the loopback token.
198
+ */
199
+ urlPathTokenCandidate(url) {
200
+ const segments = url.split('/').filter(p => p);
201
+ const service = segments[0];
202
+ if (!service || !SAFE_SERVICE_NAME.test(service))
203
+ return undefined;
204
+ if (!this.options.allowedServices.includes(service))
205
+ return undefined;
206
+ const serviceDef = this.serviceRegistry.get(service);
207
+ if (!serviceDef || serviceDef.authMode !== 'url-path' || !serviceDef.authPathTemplate) {
208
+ return undefined;
209
+ }
210
+ return findUrlPathCredentialSlot(segments.slice(1), serviceDef.authPathTemplate)?.presented;
211
+ }
156
212
  async handleRequest(req, res, fromLoopback = false) {
157
213
  const requestId = generateId();
158
214
  const url = req.url || '/';
@@ -164,7 +220,7 @@ export class CredentialProxy {
164
220
  res.statusCode = 401;
165
221
  res.end(JSON.stringify({
166
222
  error: 'Loopback request rejected: missing or invalid aquaman loopback token',
167
- fix: 'Set the placeholder api_key in ~/.hermes/.env to the token from: aquaman hermes status'
223
+ fix: 'The host must present the loopback token as its placeholder credential. Hermes: aquaman hermes status. OpenClaw: aquaman openclaw status'
168
224
  }));
169
225
  return;
170
226
  }
@@ -187,13 +243,14 @@ export class CredentialProxy {
187
243
  res.end(JSON.stringify(obj));
188
244
  return;
189
245
  }
190
- // Broker endpoint — resolves a vault-stored credential and returns it
191
- // with a short-lived expiry hint. Used by aquaman-coder hooks (v0.12.0+)
192
- // to materialize credentials on-demand for one tool call, then discard.
246
+ // Broker endpoint: resolves a vault-stored credential and returns its
247
+ // VALUE, with a short-lived expiry hint. Used by aquaman-coder (v0.12.0+)
248
+ // and the Hermes secret source (v0.14.0+) to materialize declared refs.
193
249
  // The expires_at field is a hint for the consumer, not a server-side
194
- // expiration (the value isn't cached daemon-side beyond the call).
250
+ // expiration. Scoped since v0.15.0: off unless the proxy was built with a
251
+ // BrokerScope, and limited to declared refs when on (broker-scope.ts).
195
252
  if ((url === '/broker/resolve' || url === '/broker/resolve/') && req.method === 'POST') {
196
- await this.handleBrokerResolve(req, res, requestId);
253
+ await this.handleBrokerResolve(req, res, requestId, fromLoopback);
197
254
  return;
198
255
  }
199
256
  // Parse service from path: /anthropic/v1/messages -> anthropic
@@ -228,12 +285,23 @@ export class CredentialProxy {
228
285
  authPrefix: serviceDef.authPrefix,
229
286
  credentialKey: serviceDef.credentialKey
230
287
  };
231
- const remainingPath = '/' + pathParts.slice(1).join('/');
288
+ // Split the credential segment out of a url-path request before anything
289
+ // else reads the path, so policy rules match the method (`/sendMessage`,
290
+ // not `/bot<TOKEN>/sendMessage`) and nothing observable records the token
291
+ // the client presented.
292
+ const serviceSegments = pathParts.slice(1);
293
+ const credentialSlot = authMode === 'url-path' && serviceDef.authPathTemplate
294
+ ? findUrlPathCredentialSlot(serviceSegments, serviceDef.authPathTemplate)
295
+ : null;
296
+ const canonicalSegments = credentialSlot
297
+ ? serviceSegments.filter((_, i) => i !== credentialSlot.index)
298
+ : serviceSegments;
299
+ const remainingPath = '/' + canonicalSegments.join('/');
232
300
  const requestInfo = {
233
301
  id: requestId,
234
302
  service,
235
303
  method: req.method || 'GET',
236
- path: url,
304
+ path: credentialSlot ? `/${service}${remainingPath}` : url,
237
305
  timestamp: new Date(),
238
306
  authenticated: false
239
307
  };
@@ -247,7 +315,7 @@ export class CredentialProxy {
247
315
  res.setHeader('Content-Type', 'application/json');
248
316
  res.statusCode = 403;
249
317
  res.end(JSON.stringify({
250
- error: `Request denied by policy: ${req.method || 'GET'} ${url}`,
318
+ error: `Request denied by policy: ${req.method || 'GET'} ${requestInfo.path}`,
251
319
  fix: `Check policy rules for "${service}" in ~/.aquaman/config.yaml`
252
320
  }));
253
321
  return;
@@ -272,9 +340,31 @@ export class CredentialProxy {
272
340
  // Build upstream URL based on auth mode
273
341
  let upstreamPath;
274
342
  if (authMode === 'url-path' && serviceDef.authPathTemplate) {
275
- // Inject token into URL path: /bot{token}/getUpdates
276
- const tokenPath = serviceDef.authPathTemplate.replace('{token}', credential);
277
- upstreamPath = tokenPath + remainingPath;
343
+ // Put the real token back in the position the client used it: index 0
344
+ // for `/bot<TOKEN>/sendMessage`, index 1 for the file-download shape
345
+ // `/file/bot<TOKEN>/<file_path>`. A client that sent no segment at all
346
+ // gets the credential prefixed, as before.
347
+ // A credential that contains a slash would silently become extra path
348
+ // segments and send the request somewhere the service definition never
349
+ // named. No url-path token has one; refuse rather than guess.
350
+ if (credential.includes('/')) {
351
+ requestInfo.error = 'Invalid credential: url-path token contains a slash';
352
+ requestInfo.statusCode = 500;
353
+ this.emitRequest(requestInfo);
354
+ res.setHeader('Content-Type', 'application/json');
355
+ res.statusCode = 500;
356
+ res.end(JSON.stringify({
357
+ error: `Stored credential ${service}/${config.credentialKey} is not a valid ${service} token`,
358
+ fix: `Re-add it: aquaman credentials add ${service} ${config.credentialKey}`
359
+ }));
360
+ return;
361
+ }
362
+ const template = serviceDef.authPathTemplate;
363
+ const injected = (template.startsWith('/') ? template.slice(1) : template)
364
+ .replace('{token}', credential);
365
+ const segments = [...canonicalSegments];
366
+ segments.splice(credentialSlot?.index ?? 0, 0, injected);
367
+ upstreamPath = '/' + segments.join('/');
278
368
  }
279
369
  else {
280
370
  upstreamPath = remainingPath;
@@ -384,8 +474,9 @@ export class CredentialProxy {
384
474
  }
385
475
  resolve();
386
476
  });
387
- // Add timeout to prevent indefinite hangs
388
- const timeout = this.options.requestTimeout ?? 30000;
477
+ // Add timeout to prevent indefinite hangs. Long-polling services declare
478
+ // a floor so a shorter global setting can't cut their polls short.
479
+ const timeout = Math.max(this.options.requestTimeout ?? 30000, serviceDef.minRequestTimeout ?? 0);
389
480
  proxyReq.setTimeout(timeout, () => {
390
481
  proxyReq.destroy();
391
482
  requestInfo.error = 'Gateway timeout';
@@ -425,7 +516,7 @@ export class CredentialProxy {
425
516
  * v0.12.0+ — used by the aquaman-coder hook adapters to materialize
426
517
  * credentials per tool call without writing .env files to disk.
427
518
  */
428
- async handleBrokerResolve(req, res, requestId) {
519
+ async handleBrokerResolve(req, res, requestId, fromLoopback) {
429
520
  res.setHeader('Content-Type', 'application/json');
430
521
  // Read request body
431
522
  let bodyBuf = '';
@@ -481,6 +572,34 @@ export class CredentialProxy {
481
572
  }
482
573
  ttlSeconds = Math.floor(ttlInput);
483
574
  }
575
+ // Scope check BEFORE the vault lookup: a refusal must not depend on (or
576
+ // reveal) what the vault holds. 404 rather than 403 so that clients which
577
+ // treat 401/403 as "bad token" (the Hermes source aborts all refs on
578
+ // those) handle a refusal per ref, like a missing credential.
579
+ const scope = this.options.broker;
580
+ const decision = scope
581
+ ? scope.check(service, key, fromLoopback ? 'loopback' : 'uds')
582
+ : {
583
+ allowed: false,
584
+ code: 'broker_disabled',
585
+ reason: 'The credential broker is disabled on this proxy',
586
+ fix: 'OpenClaw-hosted proxies never hand out credential values. For coding agents or the Hermes secret source, run: aquaman daemon',
587
+ };
588
+ if (!decision.allowed) {
589
+ res.statusCode = 404;
590
+ res.end(JSON.stringify({ error: decision.reason, fix: decision.fix, code: decision.code }));
591
+ this.emitRequest({
592
+ id: requestId,
593
+ service,
594
+ method: 'BROKER',
595
+ path: '/broker/resolve',
596
+ timestamp: new Date(),
597
+ authenticated: false,
598
+ statusCode: 404,
599
+ error: `${decision.code}: ${service}/${key}`,
600
+ });
601
+ return;
602
+ }
484
603
  // Fetch from vault
485
604
  let value;
486
605
  try {
@@ -519,6 +638,8 @@ export class CredentialProxy {
519
638
  timestamp: new Date(),
520
639
  authenticated: false,
521
640
  statusCode: 404,
641
+ // Without an error the audit logger records this as a successful use.
642
+ error: `credential_not_found: ${service}/${key}`,
522
643
  });
523
644
  return;
524
645
  }