@omnicross/core 0.1.6 → 0.1.8

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 (137) hide show
  1. package/dist/ApiConverter.cjs +2 -2
  2. package/dist/ApiConverter.js +1 -1
  3. package/dist/{ProviderProxy-C-xqrkKi.d.ts → ProviderProxy--ROec6VI.d.ts} +22 -3
  4. package/dist/{ProviderProxy-CnMQYN59.d.cts → ProviderProxy-QdwNV6l1.d.cts} +22 -3
  5. package/dist/auth/GeminiCodeAssistProjectResolver.cjs +4 -3
  6. package/dist/auth/GeminiCodeAssistProjectResolver.js +3 -2
  7. package/dist/{chunk-3Z5BQZFM.cjs → chunk-235MXAGX.cjs} +3 -1
  8. package/dist/{chunk-SQYVORNP.cjs → chunk-26K6T2YS.cjs} +1520 -523
  9. package/dist/{chunk-DLXZEZWO.cjs → chunk-2E42SAW3.cjs} +42 -4
  10. package/dist/{chunk-7AK7B36B.cjs → chunk-2Z4XM3H5.cjs} +6 -6
  11. package/dist/{chunk-OEWZUX4G.js → chunk-32O35CIF.js} +9 -20
  12. package/dist/chunk-3SCOLIPT.cjs +63 -0
  13. package/dist/{chunk-SYQF7OIR.js → chunk-3WD4HTR2.js} +2 -0
  14. package/dist/{chunk-AT7B7SOZ.js → chunk-5NJLQ6T6.js} +21 -10
  15. package/dist/chunk-5RSZYQJH.cjs +62 -0
  16. package/dist/{chunk-IFXJ2BG7.js → chunk-7C7DET6S.js} +51 -6
  17. package/dist/{chunk-SNYBEXLB.cjs → chunk-EPN67EGP.cjs} +6 -1
  18. package/dist/chunk-FU7EAR73.js +62 -0
  19. package/dist/{chunk-UX7VWA46.js → chunk-FXR6N3SR.js} +39 -1
  20. package/dist/{chunk-WYTEQ4Q5.cjs → chunk-GDIXXKF2.cjs} +21 -10
  21. package/dist/{chunk-WB6PH56J.js → chunk-GFIZ6LQI.js} +12 -8
  22. package/dist/chunk-GL6XM527.js +61 -0
  23. package/dist/{chunk-EJLH6NFT.cjs → chunk-J3QQ6JS5.cjs} +12 -8
  24. package/dist/{chunk-VRFBB5DB.js → chunk-MYYR3HZL.js} +4 -4
  25. package/dist/{chunk-YJVHCHQX.js → chunk-N7OOJI5V.js} +46 -2
  26. package/dist/chunk-NKVZ6Z3Y.cjs +61 -0
  27. package/dist/chunk-OTZC4TNH.cjs +79 -0
  28. package/dist/{chunk-6VUQPOV3.cjs → chunk-OVQBNVSV.cjs} +10 -21
  29. package/dist/{chunk-4VLRHHFE.cjs → chunk-OXHNSZ53.cjs} +9 -11
  30. package/dist/{chunk-6CL5HTPQ.js → chunk-PEGTIPB3.js} +8 -10
  31. package/dist/chunk-PO3XB56Z.js +79 -0
  32. package/dist/{chunk-UDCC7EMR.js → chunk-QYC54PMG.js} +1242 -245
  33. package/dist/{chunk-SIZQQD6T.js → chunk-RJ5ZGNI3.js} +42 -5
  34. package/dist/{chunk-KCVJWJST.cjs → chunk-RJUONLUQ.cjs} +47 -10
  35. package/dist/{chunk-BPKCU575.js → chunk-UAPBLNN2.js} +6 -1
  36. package/dist/{chunk-UNWKG6EI.cjs → chunk-XPIOJQS2.cjs} +51 -6
  37. package/dist/chunk-XXFYLL7R.js +63 -0
  38. package/dist/{chunk-YK57NMIF.cjs → chunk-YWL7YZWS.cjs} +47 -3
  39. package/dist/completion/ApiKeyPoolService.cjs +32 -1
  40. package/dist/completion/ApiKeyPoolService.d.cts +17 -1
  41. package/dist/completion/ApiKeyPoolService.d.ts +17 -1
  42. package/dist/completion/ApiKeyPoolService.js +31 -0
  43. package/dist/completion/CompletionService.cjs +23 -19
  44. package/dist/completion/CompletionService.d.cts +1 -0
  45. package/dist/completion/CompletionService.d.ts +1 -0
  46. package/dist/completion/CompletionService.js +22 -18
  47. package/dist/completion.cjs +23 -19
  48. package/dist/completion.d.cts +1 -0
  49. package/dist/completion.d.ts +1 -0
  50. package/dist/completion.js +22 -18
  51. package/dist/index.cjs +81 -21
  52. package/dist/index.d.cts +5 -5
  53. package/dist/index.d.ts +5 -5
  54. package/dist/index.js +82 -22
  55. package/dist/outbound-api/auditCapture.cjs +2 -2
  56. package/dist/outbound-api/auditCapture.d.cts +3 -4
  57. package/dist/outbound-api/auditCapture.d.ts +3 -4
  58. package/dist/outbound-api/auditCapture.js +1 -1
  59. package/dist/outbound-api/routeResolver.d.cts +4 -3
  60. package/dist/outbound-api/routeResolver.d.ts +4 -3
  61. package/dist/outbound-api/subscriptionRegistryPort.d.cts +1 -0
  62. package/dist/outbound-api/subscriptionRegistryPort.d.ts +1 -0
  63. package/dist/outbound-api/types.d.cts +3 -2
  64. package/dist/outbound-api/types.d.ts +3 -2
  65. package/dist/outbound-api.cjs +23 -19
  66. package/dist/outbound-api.d.cts +8 -6
  67. package/dist/outbound-api.d.ts +8 -6
  68. package/dist/outbound-api.js +22 -18
  69. package/dist/pipeline/AccountAllowanceScheduling.d.cts +3 -2
  70. package/dist/pipeline/AccountAllowanceScheduling.d.ts +3 -2
  71. package/dist/pipeline/AccountRouteActivity.cjs +10 -0
  72. package/dist/pipeline/AccountRouteActivity.d.cts +61 -0
  73. package/dist/pipeline/AccountRouteActivity.d.ts +61 -0
  74. package/dist/pipeline/AccountRouteActivity.js +10 -0
  75. package/dist/pipeline/ServerOverloadCounter.cjs +16 -0
  76. package/dist/pipeline/ServerOverloadCounter.d.cts +77 -0
  77. package/dist/pipeline/ServerOverloadCounter.d.ts +77 -0
  78. package/dist/pipeline/ServerOverloadCounter.js +16 -0
  79. package/dist/pipeline/SubscriptionAccountHealth.cjs +4 -2
  80. package/dist/pipeline/SubscriptionAccountHealth.d.cts +32 -3
  81. package/dist/pipeline/SubscriptionAccountHealth.d.ts +32 -3
  82. package/dist/pipeline/SubscriptionAccountHealth.js +3 -1
  83. package/dist/pipeline/upstreamFetch.cjs +4 -3
  84. package/dist/pipeline/upstreamFetch.d.cts +35 -6
  85. package/dist/pipeline/upstreamFetch.d.ts +35 -6
  86. package/dist/pipeline/upstreamFetch.js +3 -2
  87. package/dist/pipeline/upstreamTrace.cjs +4 -2
  88. package/dist/pipeline/upstreamTrace.d.cts +22 -8
  89. package/dist/pipeline/upstreamTrace.d.ts +22 -8
  90. package/dist/pipeline/upstreamTrace.js +3 -1
  91. package/dist/ports.d.cts +2 -2
  92. package/dist/ports.d.ts +2 -2
  93. package/dist/provider-proxy/ProviderProxy.cjs +23 -19
  94. package/dist/provider-proxy/ProviderProxy.d.cts +2 -1
  95. package/dist/provider-proxy/ProviderProxy.d.ts +2 -1
  96. package/dist/provider-proxy/ProviderProxy.js +22 -18
  97. package/dist/provider-proxy/identity/codexCliHeaders.cjs +10 -0
  98. package/dist/provider-proxy/identity/codexCliHeaders.d.cts +45 -0
  99. package/dist/provider-proxy/identity/codexCliHeaders.d.ts +45 -0
  100. package/dist/provider-proxy/identity/codexCliHeaders.js +10 -0
  101. package/dist/provider-proxy/ingress/providerProxyShared.cjs +23 -19
  102. package/dist/provider-proxy/ingress/providerProxyShared.d.cts +11 -1
  103. package/dist/provider-proxy/ingress/providerProxyShared.d.ts +11 -1
  104. package/dist/provider-proxy/ingress/providerProxyShared.js +22 -18
  105. package/dist/provider-proxy/matchText.cjs +2 -2
  106. package/dist/provider-proxy/matchText.d.cts +1 -3
  107. package/dist/provider-proxy/matchText.d.ts +1 -3
  108. package/dist/provider-proxy/matchText.js +1 -1
  109. package/dist/provider-proxy/types.d.cts +20 -1
  110. package/dist/provider-proxy/types.d.ts +20 -1
  111. package/dist/provider-proxy.cjs +79 -19
  112. package/dist/provider-proxy.d.cts +255 -8
  113. package/dist/provider-proxy.d.ts +255 -8
  114. package/dist/provider-proxy.js +80 -20
  115. package/dist/{routeResolver-CHTv_Bs5.d.ts → routeResolver-C0mkkZaM.d.ts} +1 -1
  116. package/dist/{routeResolver-kepxnfcC.d.cts → routeResolver-CVFE8KKe.d.cts} +1 -1
  117. package/dist/transformer/transformers/AnthropicTransformer.cjs +3 -2
  118. package/dist/transformer/transformers/AnthropicTransformer.js +2 -1
  119. package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -2
  120. package/dist/transformer/transformers/OpenAIResponseTransformer.js +2 -1
  121. package/dist/transformer/transformers.cjs +7 -6
  122. package/dist/transformer/transformers.js +6 -5
  123. package/dist/transformer.cjs +9 -8
  124. package/dist/transformer.js +8 -7
  125. package/dist/{types-hsoKrVQS.d.ts → types-BB8pxk_3.d.ts} +40 -1
  126. package/dist/{types-H3wGZSOo.d.cts → types-C2MwkLah.d.cts} +40 -1
  127. package/dist/usage/pricing-engine.cjs +2 -2
  128. package/dist/usage/pricing-engine.d.cts +20 -0
  129. package/dist/usage/pricing-engine.d.ts +20 -0
  130. package/dist/usage/pricing-engine.js +1 -1
  131. package/dist/usage/usage-recorder.cjs +2 -2
  132. package/dist/usage/usage-recorder.d.cts +11 -1
  133. package/dist/usage/usage-recorder.d.ts +11 -1
  134. package/dist/usage/usage-recorder.js +1 -1
  135. package/dist/usage.cjs +3 -3
  136. package/dist/usage.js +2 -2
  137. package/package.json +1 -1
@@ -2,37 +2,68 @@ import {
2
2
  DEFAULT_ROUTE_IDLE_MS,
3
3
  ProviderProxy,
4
4
  ProviderProxyRouteMap,
5
+ ROUTE_LEASE_API_VERSION,
6
+ ROUTE_LEASE_CAPABILITIES,
7
+ ROUTE_LEASE_CAPABILITIES_SCHEMA,
8
+ ROUTE_LEASE_CODEX_TOKEN_ENV,
9
+ ROUTE_LEASE_DEFAULT_TTL_SECONDS,
10
+ ROUTE_LEASE_MAX_CONSUMER_BYTES,
11
+ ROUTE_LEASE_MAX_EXECUTION_ID_BYTES,
12
+ ROUTE_LEASE_MAX_IDEMPOTENCY_BYTES,
13
+ ROUTE_LEASE_MAX_MODEL_BYTES,
14
+ ROUTE_LEASE_MAX_SESSION_ID_BYTES,
15
+ ROUTE_LEASE_MAX_TTL_SECONDS,
16
+ ROUTE_LEASE_REQUEST_SCHEMA,
17
+ ROUTE_LEASE_RESULT_SCHEMA,
18
+ ROUTE_LEASE_RUNTIMES,
19
+ ROUTE_LEASE_RUNTIME_TABLE,
20
+ ROUTE_LEASE_SESSION_HASH_DOMAIN,
21
+ RouteLeaseError,
22
+ RouteLeaseManager,
23
+ RouteLeaseTargetResolver,
24
+ SYSTEM_ROUTE_LEASE_CLOCK,
5
25
  __resetProviderProxyForTests,
26
+ canonicalizeRouteLeasePayload,
6
27
  extractRouteToken,
7
- getProviderProxy
8
- } from "./chunk-UDCC7EMR.js";
9
- import "./chunk-WB6PH56J.js";
28
+ getProviderProxy,
29
+ hashRouteLeasePayload,
30
+ hashRouteLeaseSessionId,
31
+ isLoopbackAddress,
32
+ normalizeRouteLeaseIdempotencyKey,
33
+ normalizeRouteLeaseTtl,
34
+ parseRouteLeaseCreate,
35
+ routeLeaseRuntime
36
+ } from "./chunk-QYC54PMG.js";
10
37
  import "./chunk-VVEHS2LI.js";
11
38
  import "./chunk-46RLHI7D.js";
12
- import "./chunk-WNKWAEUR.js";
13
- import "./chunk-MZNPGW5Q.js";
14
- import "./chunk-DK4A7DLE.js";
15
- import "./chunk-VRFBB5DB.js";
39
+ import "./chunk-MYYR3HZL.js";
40
+ import "./chunk-PEGTIPB3.js";
16
41
  import "./chunk-LVUCAWMK.js";
17
- import "./chunk-OEWZUX4G.js";
42
+ import "./chunk-32O35CIF.js";
43
+ import "./chunk-FU7EAR73.js";
18
44
  import "./chunk-LB6EBS6Y.js";
19
- import "./chunk-6CL5HTPQ.js";
20
45
  import "./chunk-7VU7V2E4.js";
21
- import "./chunk-UX7VWA46.js";
22
- import "./chunk-BPKCU575.js";
23
- import "./chunk-DRWHTIIZ.js";
46
+ import "./chunk-FXR6N3SR.js";
47
+ import "./chunk-UAPBLNN2.js";
48
+ import "./chunk-WNKWAEUR.js";
49
+ import "./chunk-MZNPGW5Q.js";
50
+ import "./chunk-DK4A7DLE.js";
51
+ import "./chunk-XXFYLL7R.js";
24
52
  import "./chunk-XTEI64OU.js";
25
53
  import "./chunk-XX6NQJMA.js";
54
+ import "./chunk-GFIZ6LQI.js";
55
+ import "./chunk-OE6TDIWW.js";
56
+ import "./chunk-DRWHTIIZ.js";
57
+ import "./chunk-JWC6APFQ.js";
26
58
  import "./chunk-5ERIZW3D.js";
27
- import "./chunk-YJVHCHQX.js";
59
+ import "./chunk-PO3XB56Z.js";
60
+ import "./chunk-N7OOJI5V.js";
28
61
  import "./chunk-23S5OPIO.js";
29
62
  import "./chunk-AVYJ4YBN.js";
30
- import "./chunk-OE6TDIWW.js";
31
63
  import "./chunk-OPRS4IQZ.js";
32
64
  import "./chunk-2JYRIADS.js";
33
65
  import "./chunk-DE2SRBFZ.js";
34
66
  import "./chunk-ZY6KU6P3.js";
35
- import "./chunk-JWC6APFQ.js";
36
67
  import "./chunk-WLYIIEAF.js";
37
68
  import "./chunk-TKJMZBAH.js";
38
69
  import "./chunk-3QFXFCHG.js";
@@ -40,16 +71,17 @@ import "./chunk-EBLFCNPY.js";
40
71
  import "./chunk-AQ5TNQB7.js";
41
72
  import "./chunk-XEKD23J5.js";
42
73
  import "./chunk-H5JUT3KV.js";
43
- import "./chunk-IFXJ2BG7.js";
74
+ import "./chunk-7C7DET6S.js";
44
75
  import "./chunk-K5NM7VAH.js";
45
76
  import "./chunk-WNY4WMRF.js";
46
77
  import "./chunk-OZFM4X3S.js";
47
- import "./chunk-AT7B7SOZ.js";
78
+ import "./chunk-5NJLQ6T6.js";
48
79
  import "./chunk-N5T4M4GU.js";
49
80
  import "./chunk-TOVPMMHM.js";
50
- import "./chunk-SIZQQD6T.js";
51
- import "./chunk-SYQF7OIR.js";
81
+ import "./chunk-RJ5ZGNI3.js";
82
+ import "./chunk-3WD4HTR2.js";
52
83
  import "./chunk-MKF46GNZ.js";
84
+ import "./chunk-GL6XM527.js";
53
85
  import "./chunk-CDHS2QDC.js";
54
86
  import "./chunk-Y7FO65VT.js";
55
87
  import "./chunk-FMOBD2OQ.js";
@@ -58,7 +90,35 @@ export {
58
90
  DEFAULT_ROUTE_IDLE_MS,
59
91
  ProviderProxy,
60
92
  ProviderProxyRouteMap,
93
+ ROUTE_LEASE_API_VERSION,
94
+ ROUTE_LEASE_CAPABILITIES,
95
+ ROUTE_LEASE_CAPABILITIES_SCHEMA,
96
+ ROUTE_LEASE_CODEX_TOKEN_ENV,
97
+ ROUTE_LEASE_DEFAULT_TTL_SECONDS,
98
+ ROUTE_LEASE_MAX_CONSUMER_BYTES,
99
+ ROUTE_LEASE_MAX_EXECUTION_ID_BYTES,
100
+ ROUTE_LEASE_MAX_IDEMPOTENCY_BYTES,
101
+ ROUTE_LEASE_MAX_MODEL_BYTES,
102
+ ROUTE_LEASE_MAX_SESSION_ID_BYTES,
103
+ ROUTE_LEASE_MAX_TTL_SECONDS,
104
+ ROUTE_LEASE_REQUEST_SCHEMA,
105
+ ROUTE_LEASE_RESULT_SCHEMA,
106
+ ROUTE_LEASE_RUNTIMES,
107
+ ROUTE_LEASE_RUNTIME_TABLE,
108
+ ROUTE_LEASE_SESSION_HASH_DOMAIN,
109
+ RouteLeaseError,
110
+ RouteLeaseManager,
111
+ RouteLeaseTargetResolver,
112
+ SYSTEM_ROUTE_LEASE_CLOCK,
61
113
  __resetProviderProxyForTests,
114
+ canonicalizeRouteLeasePayload,
62
115
  extractRouteToken,
63
- getProviderProxy
116
+ getProviderProxy,
117
+ hashRouteLeasePayload,
118
+ hashRouteLeaseSessionId,
119
+ isLoopbackAddress,
120
+ normalizeRouteLeaseIdempotencyKey,
121
+ normalizeRouteLeaseTtl,
122
+ parseRouteLeaseCreate,
123
+ routeLeaseRuntime
64
124
  };
@@ -1,6 +1,6 @@
1
1
  import { ProviderConfigSource } from './ports/provider-config-source.js';
2
2
  import { IngressFormat, RouteContext } from './provider-proxy/types.js';
3
- import { s as OutboundEndpoint, Q as ModelRef, c as EndpointRoutingConfig, R as RequestRole } from './types-hsoKrVQS.js';
3
+ import { s as OutboundEndpoint, Q as ModelRef, c as EndpointRoutingConfig, R as RequestRole } from './types-BB8pxk_3.js';
4
4
  import { SubscriptionProviderId } from '@omnicross/contracts/subscription-types';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import { ProviderConfigSource } from './ports/provider-config-source.cjs';
2
2
  import { IngressFormat, RouteContext } from './provider-proxy/types.cjs';
3
- import { s as OutboundEndpoint, Q as ModelRef, c as EndpointRoutingConfig, R as RequestRole } from './types-H3wGZSOo.cjs';
3
+ import { s as OutboundEndpoint, Q as ModelRef, c as EndpointRoutingConfig, R as RequestRole } from './types-C2MwkLah.cjs';
4
4
  import { SubscriptionProviderId } from '@omnicross/contracts/subscription-types';
5
5
 
6
6
  /**
@@ -1,6 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk4VLRHHFEcjs = require('../../chunk-4VLRHHFE.cjs');
3
+ var _chunkOXHNSZ53cjs = require('../../chunk-OXHNSZ53.cjs');
4
+ require('../../chunk-5RSZYQJH.cjs');
4
5
 
5
6
 
6
- exports.AnthropicTransformer = _chunk4VLRHHFEcjs.AnthropicTransformer;
7
+ exports.AnthropicTransformer = _chunkOXHNSZ53cjs.AnthropicTransformer;
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  AnthropicTransformer
3
- } from "../../chunk-6CL5HTPQ.js";
3
+ } from "../../chunk-PEGTIPB3.js";
4
+ import "../../chunk-FU7EAR73.js";
4
5
  export {
5
6
  AnthropicTransformer
6
7
  };
@@ -1,6 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk6VUQPOV3cjs = require('../../chunk-6VUQPOV3.cjs');
3
+ var _chunkOVQBNVSVcjs = require('../../chunk-OVQBNVSV.cjs');
4
+ require('../../chunk-5RSZYQJH.cjs');
4
5
 
5
6
 
6
- exports.OpenAIResponseTransformer = _chunk6VUQPOV3cjs.OpenAIResponseTransformer;
7
+ exports.OpenAIResponseTransformer = _chunkOVQBNVSVcjs.OpenAIResponseTransformer;
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  OpenAIResponseTransformer
3
- } from "../../chunk-OEWZUX4G.js";
3
+ } from "../../chunk-32O35CIF.js";
4
+ import "../../chunk-FU7EAR73.js";
4
5
  export {
5
6
  OpenAIResponseTransformer
6
7
  };
@@ -3,19 +3,20 @@
3
3
 
4
4
 
5
5
 
6
- var _chunk7AK7B36Bcjs = require('../chunk-7AK7B36B.cjs');
6
+ var _chunk2Z4XM3H5cjs = require('../chunk-2Z4XM3H5.cjs');
7
7
 
8
8
 
9
- var _chunkV4TXMEJScjs = require('../chunk-V4TXMEJS.cjs');
9
+ var _chunkOXHNSZ53cjs = require('../chunk-OXHNSZ53.cjs');
10
10
 
11
11
 
12
- var _chunk6VUQPOV3cjs = require('../chunk-6VUQPOV3.cjs');
12
+ var _chunkV4TXMEJScjs = require('../chunk-V4TXMEJS.cjs');
13
13
 
14
14
 
15
- var _chunkOF3BECU2cjs = require('../chunk-OF3BECU2.cjs');
15
+ var _chunkOVQBNVSVcjs = require('../chunk-OVQBNVSV.cjs');
16
+ require('../chunk-5RSZYQJH.cjs');
16
17
 
17
18
 
18
- var _chunk4VLRHHFEcjs = require('../chunk-4VLRHHFE.cjs');
19
+ var _chunkOF3BECU2cjs = require('../chunk-OF3BECU2.cjs');
19
20
 
20
21
 
21
22
  var _chunkOKMJLEXXcjs = require('../chunk-OKMJLEXX.cjs');
@@ -30,4 +31,4 @@ require('../chunk-KBM2W6UY.cjs');
30
31
 
31
32
 
32
33
 
33
- exports.AnthropicTransformer = _chunk4VLRHHFEcjs.AnthropicTransformer; exports.BUILTIN_TRANSFORMER_NAMES = _chunk7AK7B36Bcjs.BUILTIN_TRANSFORMER_NAMES; exports.BuiltinTransformers = _chunk7AK7B36Bcjs.BuiltinTransformers; exports.GeminiCodeAssistTransformer = _chunkOKMJLEXXcjs.GeminiCodeAssistTransformer; exports.GeminiTransformer = _chunkV4TXMEJScjs.GeminiTransformer; exports.OpenAIResponseTransformer = _chunk6VUQPOV3cjs.OpenAIResponseTransformer; exports.OpenAITransformer = _chunkOF3BECU2cjs.OpenAITransformer; exports.getBuiltinTransformers = _chunk7AK7B36Bcjs.getBuiltinTransformers; exports.registerBuiltinTransformers = _chunk7AK7B36Bcjs.registerBuiltinTransformers;
34
+ exports.AnthropicTransformer = _chunkOXHNSZ53cjs.AnthropicTransformer; exports.BUILTIN_TRANSFORMER_NAMES = _chunk2Z4XM3H5cjs.BUILTIN_TRANSFORMER_NAMES; exports.BuiltinTransformers = _chunk2Z4XM3H5cjs.BuiltinTransformers; exports.GeminiCodeAssistTransformer = _chunkOKMJLEXXcjs.GeminiCodeAssistTransformer; exports.GeminiTransformer = _chunkV4TXMEJScjs.GeminiTransformer; exports.OpenAIResponseTransformer = _chunkOVQBNVSVcjs.OpenAIResponseTransformer; exports.OpenAITransformer = _chunkOF3BECU2cjs.OpenAITransformer; exports.getBuiltinTransformers = _chunk2Z4XM3H5cjs.getBuiltinTransformers; exports.registerBuiltinTransformers = _chunk2Z4XM3H5cjs.registerBuiltinTransformers;
@@ -3,19 +3,20 @@ import {
3
3
  BuiltinTransformers,
4
4
  getBuiltinTransformers,
5
5
  registerBuiltinTransformers
6
- } from "../chunk-VRFBB5DB.js";
6
+ } from "../chunk-MYYR3HZL.js";
7
+ import {
8
+ AnthropicTransformer
9
+ } from "../chunk-PEGTIPB3.js";
7
10
  import {
8
11
  GeminiTransformer
9
12
  } from "../chunk-LVUCAWMK.js";
10
13
  import {
11
14
  OpenAIResponseTransformer
12
- } from "../chunk-OEWZUX4G.js";
15
+ } from "../chunk-32O35CIF.js";
16
+ import "../chunk-FU7EAR73.js";
13
17
  import {
14
18
  OpenAITransformer
15
19
  } from "../chunk-LB6EBS6Y.js";
16
- import {
17
- AnthropicTransformer
18
- } from "../chunk-6CL5HTPQ.js";
19
20
  import {
20
21
  GeminiCodeAssistTransformer
21
22
  } from "../chunk-N5T4M4GU.js";
@@ -1,22 +1,23 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-FZ46M34D.cjs');
2
2
 
3
3
 
4
+ var _chunk2Z4XM3H5cjs = require('./chunk-2Z4XM3H5.cjs');
5
+ require('./chunk-OXHNSZ53.cjs');
6
+ require('./chunk-V4TXMEJS.cjs');
7
+ require('./chunk-OVQBNVSV.cjs');
8
+ require('./chunk-5RSZYQJH.cjs');
9
+ require('./chunk-OF3BECU2.cjs');
10
+
11
+
4
12
  var _chunkIIRPUVPHcjs = require('./chunk-IIRPUVPH.cjs');
5
13
  require('./chunk-GBHYAGX3.cjs');
6
14
 
7
15
 
8
16
  var _chunk3OPYJG76cjs = require('./chunk-3OPYJG76.cjs');
9
-
10
-
11
- var _chunk7AK7B36Bcjs = require('./chunk-7AK7B36B.cjs');
12
- require('./chunk-V4TXMEJS.cjs');
13
- require('./chunk-6VUQPOV3.cjs');
14
- require('./chunk-OF3BECU2.cjs');
15
- require('./chunk-4VLRHHFE.cjs');
16
17
  require('./chunk-OKMJLEXX.cjs');
17
18
  require('./chunk-KBM2W6UY.cjs');
18
19
 
19
20
 
20
21
 
21
22
 
22
- exports.TransformerChainExecutor = _chunkIIRPUVPHcjs.TransformerChainExecutor; exports.TransformerService = _chunk3OPYJG76cjs.TransformerService; exports.registerBuiltinTransformers = _chunk7AK7B36Bcjs.registerBuiltinTransformers;
23
+ exports.TransformerChainExecutor = _chunkIIRPUVPHcjs.TransformerChainExecutor; exports.TransformerService = _chunk3OPYJG76cjs.TransformerService; exports.registerBuiltinTransformers = _chunk2Z4XM3H5cjs.registerBuiltinTransformers;
@@ -1,4 +1,12 @@
1
1
  import "./chunk-46RLHI7D.js";
2
+ import {
3
+ registerBuiltinTransformers
4
+ } from "./chunk-MYYR3HZL.js";
5
+ import "./chunk-PEGTIPB3.js";
6
+ import "./chunk-LVUCAWMK.js";
7
+ import "./chunk-32O35CIF.js";
8
+ import "./chunk-FU7EAR73.js";
9
+ import "./chunk-LB6EBS6Y.js";
2
10
  import {
3
11
  TransformerChainExecutor
4
12
  } from "./chunk-WNKWAEUR.js";
@@ -6,13 +14,6 @@ import "./chunk-MZNPGW5Q.js";
6
14
  import {
7
15
  TransformerService
8
16
  } from "./chunk-DK4A7DLE.js";
9
- import {
10
- registerBuiltinTransformers
11
- } from "./chunk-VRFBB5DB.js";
12
- import "./chunk-LVUCAWMK.js";
13
- import "./chunk-OEWZUX4G.js";
14
- import "./chunk-LB6EBS6Y.js";
15
- import "./chunk-6CL5HTPQ.js";
16
17
  import "./chunk-N5T4M4GU.js";
17
18
  import "./chunk-TOVPMMHM.js";
18
19
  export {
@@ -6,7 +6,7 @@ import { VoucherRecord, VoucherGrant, VoucherInfo, VoucherConfig } from '@omnicr
6
6
  import { WebhookConfig } from '@omnicross/contracts/webhook-types';
7
7
  import { L as Logger } from './logger-4GvQNzhE.js';
8
8
  import { ProviderConfigSource } from './ports/provider-config-source.js';
9
- import { P as ProviderProxy } from './ProviderProxy-C-xqrkKi.js';
9
+ import { P as ProviderProxy } from './ProviderProxy--ROec6VI.js';
10
10
  import { ProviderProxyDeps } from './provider-proxy/types.js';
11
11
  import { BoundAccountFallbackPolicy } from './pipeline/BoundAccountSelectionError.js';
12
12
  import { c as KeySpend } from './keyPolicy-zdWTu3CQ.js';
@@ -654,6 +654,13 @@ interface OutboundApiKeyInfo {
654
654
  id: string;
655
655
  name: string;
656
656
  keyPrefix: string;
657
+ /**
658
+ * Whether the operator "view key" affordance is available for this key — true
659
+ * only when a reversibly-encrypted `keySecret` was persisted at creation.
660
+ * Legacy hash-only rows (and any DB without a `SecretBox`) read as absent ⇒
661
+ * not revealable. Optional so a pre-upgrade daemon response type-checks.
662
+ */
663
+ revealable?: boolean;
657
664
  enabled: boolean;
658
665
  createdAt: number;
659
666
  lastUsedAt: number | null;
@@ -751,6 +758,15 @@ interface OutboundKeyDbRow {
751
758
  name: string;
752
759
  keyHash: string;
753
760
  keyPrefix: string;
761
+ /**
762
+ * OPTIONAL reversibly-encrypted plaintext of the secret (an `enc:v1:…`
763
+ * envelope produced by the daemon's `SecretBox`). Absent on legacy rows
764
+ * (created before revealable storage) AND on any DB constructed without a
765
+ * `SecretBox` — in both cases the key is NOT revealable. The hash above
766
+ * remains the auth lookup index; this field only powers the operator
767
+ * "view key" affordance.
768
+ */
769
+ keySecret?: string;
754
770
  enabled: boolean;
755
771
  createdAt: number;
756
772
  lastUsedAt: number | null;
@@ -803,6 +819,14 @@ interface OutboundKeyDb {
803
819
  kind?: 'client' | 'integration';
804
820
  allowedEndpoints?: OutboundEndpoint[];
805
821
  loopbackOnly?: boolean;
822
+ /**
823
+ * The generated plaintext secret. When the DB holds a `SecretBox` it
824
+ * persists a reversibly-encrypted copy as `keySecret` (enabling the
825
+ * "view key" affordance); when no box is wired the plaintext is dropped
826
+ * (byte-identical to the legacy hash-only storage). The hash above — NOT
827
+ * this field — remains the auth lookup index.
828
+ */
829
+ plaintext?: string;
806
830
  }): Promise<OutboundKeyDbRow>;
807
831
  outboundApiKeysRevoke(id: string): Promise<boolean>;
808
832
  outboundApiKeysTouchLastUsed(id: string): Promise<boolean>;
@@ -830,6 +854,21 @@ interface OutboundKeyDb {
830
854
  * idempotent).
831
855
  */
832
856
  outboundApiKeysMarkActivated(id: string, activatedAt: number): Promise<boolean>;
857
+ /**
858
+ * Reveal the stored plaintext for a key (the operator "view key" affordance),
859
+ * or `null` when the key is missing OR was persisted without a `keySecret`
860
+ * (legacy hash-only rows / a DB constructed without a `SecretBox`). The
861
+ * daemon-owned DB decrypts its stored envelope; core never handles the
862
+ * master key.
863
+ */
864
+ outboundApiKeysReveal(id: string): Promise<string | null>;
865
+ /**
866
+ * Permanently remove a key row (hard delete), returning whether a row was
867
+ * removed. Unlike {@link outboundApiKeysRevoke} (a soft revoke that keeps the
868
+ * row for history), this purges the row entirely — intended for cleaning up
869
+ * already-revoked keys. Irreversible; the caller confirms.
870
+ */
871
+ outboundApiKeysDelete(id: string): Promise<boolean>;
833
872
  }
834
873
  /**
835
874
  * App-session-scoped dependencies the outbound server needs. The resident
@@ -6,7 +6,7 @@ import { VoucherRecord, VoucherGrant, VoucherInfo, VoucherConfig } from '@omnicr
6
6
  import { WebhookConfig } from '@omnicross/contracts/webhook-types';
7
7
  import { L as Logger } from './logger-4GvQNzhE.cjs';
8
8
  import { ProviderConfigSource } from './ports/provider-config-source.cjs';
9
- import { P as ProviderProxy } from './ProviderProxy-CnMQYN59.cjs';
9
+ import { P as ProviderProxy } from './ProviderProxy-QdwNV6l1.cjs';
10
10
  import { ProviderProxyDeps } from './provider-proxy/types.cjs';
11
11
  import { BoundAccountFallbackPolicy } from './pipeline/BoundAccountSelectionError.cjs';
12
12
  import { c as KeySpend } from './keyPolicy-zdWTu3CQ.cjs';
@@ -654,6 +654,13 @@ interface OutboundApiKeyInfo {
654
654
  id: string;
655
655
  name: string;
656
656
  keyPrefix: string;
657
+ /**
658
+ * Whether the operator "view key" affordance is available for this key — true
659
+ * only when a reversibly-encrypted `keySecret` was persisted at creation.
660
+ * Legacy hash-only rows (and any DB without a `SecretBox`) read as absent ⇒
661
+ * not revealable. Optional so a pre-upgrade daemon response type-checks.
662
+ */
663
+ revealable?: boolean;
657
664
  enabled: boolean;
658
665
  createdAt: number;
659
666
  lastUsedAt: number | null;
@@ -751,6 +758,15 @@ interface OutboundKeyDbRow {
751
758
  name: string;
752
759
  keyHash: string;
753
760
  keyPrefix: string;
761
+ /**
762
+ * OPTIONAL reversibly-encrypted plaintext of the secret (an `enc:v1:…`
763
+ * envelope produced by the daemon's `SecretBox`). Absent on legacy rows
764
+ * (created before revealable storage) AND on any DB constructed without a
765
+ * `SecretBox` — in both cases the key is NOT revealable. The hash above
766
+ * remains the auth lookup index; this field only powers the operator
767
+ * "view key" affordance.
768
+ */
769
+ keySecret?: string;
754
770
  enabled: boolean;
755
771
  createdAt: number;
756
772
  lastUsedAt: number | null;
@@ -803,6 +819,14 @@ interface OutboundKeyDb {
803
819
  kind?: 'client' | 'integration';
804
820
  allowedEndpoints?: OutboundEndpoint[];
805
821
  loopbackOnly?: boolean;
822
+ /**
823
+ * The generated plaintext secret. When the DB holds a `SecretBox` it
824
+ * persists a reversibly-encrypted copy as `keySecret` (enabling the
825
+ * "view key" affordance); when no box is wired the plaintext is dropped
826
+ * (byte-identical to the legacy hash-only storage). The hash above — NOT
827
+ * this field — remains the auth lookup index.
828
+ */
829
+ plaintext?: string;
806
830
  }): Promise<OutboundKeyDbRow>;
807
831
  outboundApiKeysRevoke(id: string): Promise<boolean>;
808
832
  outboundApiKeysTouchLastUsed(id: string): Promise<boolean>;
@@ -830,6 +854,21 @@ interface OutboundKeyDb {
830
854
  * idempotent).
831
855
  */
832
856
  outboundApiKeysMarkActivated(id: string, activatedAt: number): Promise<boolean>;
857
+ /**
858
+ * Reveal the stored plaintext for a key (the operator "view key" affordance),
859
+ * or `null` when the key is missing OR was persisted without a `keySecret`
860
+ * (legacy hash-only rows / a DB constructed without a `SecretBox`). The
861
+ * daemon-owned DB decrypts its stored envelope; core never handles the
862
+ * master key.
863
+ */
864
+ outboundApiKeysReveal(id: string): Promise<string | null>;
865
+ /**
866
+ * Permanently remove a key row (hard delete), returning whether a row was
867
+ * removed. Unlike {@link outboundApiKeysRevoke} (a soft revoke that keeps the
868
+ * row for history), this purges the row entirely — intended for cleaning up
869
+ * already-revoked keys. Irreversible; the caller confirms.
870
+ */
871
+ outboundApiKeysDelete(id: string): Promise<boolean>;
833
872
  }
834
873
  /**
835
874
  * App-session-scoped dependencies the outbound server needs. The resident
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkDLXZEZWOcjs = require('../chunk-DLXZEZWO.cjs');
3
+ var _chunk2E42SAW3cjs = require('../chunk-2E42SAW3.cjs');
4
4
 
5
5
 
6
- exports.PricingEngine = _chunkDLXZEZWOcjs.PricingEngine;
6
+ exports.PricingEngine = _chunk2E42SAW3cjs.PricingEngine;
@@ -50,6 +50,15 @@ declare class PricingEngine {
50
50
  * non-wildcard entry per model wins.
51
51
  */
52
52
  private cacheByModel;
53
+ /**
54
+ * Last-resort fuzzy index: `[normalizedModelId, entry]` pairs over the same
55
+ * non-wildcard, non-openrouter rows as `cacheByModel`. Used when even the
56
+ * model-name fallback misses — e.g. usage recorded under a bare model id
57
+ * (`glm-5.2`) while the catalog only knows prefixed slugs
58
+ * (`cloudflare/@cf/zai-org/glm-5.2`). This is an ESTIMATE: the matched row
59
+ * may be an aggregate-route price rather than the direct-vendor rate.
60
+ */
61
+ private fuzzyEntries;
53
62
  private cacheLoaded;
54
63
  /** Coalesce manual and background refreshes to prevent a catalog stampede. */
55
64
  private refreshInFlight;
@@ -65,8 +74,19 @@ declare class PricingEngine {
65
74
  * 2. wildcard provider ('*', modelId)
66
75
  * 3. model name alone (any provider) — tolerates a runtime-alias vs
67
76
  * canonical provider-id mismatch for the same model.
77
+ * 4. normalized fuzzy match (last resort) — matches a bare id like
78
+ * `glm-5.2` against prefixed catalog slugs like
79
+ * `cloudflare/@cf/zai-org/glm-5.2`. ESTIMATE only: the matched row may
80
+ * be an aggregate-route price, not the direct-vendor rate.
68
81
  */
69
82
  getEntry(providerId: string, modelId: string): Promise<PricingEntry | null>;
83
+ /**
84
+ * Normalized substring match over the catalog's non-openrouter rows. Lowercases
85
+ * and strips all non-alphanumerics, then matches bidirectionally, preferring
86
+ * the shortest catalog key (tightest match) to reduce over-matching version
87
+ * variants. Returns null when nothing matches.
88
+ */
89
+ private fuzzyMatch;
70
90
  /**
71
91
  * Compute the cost (and cache savings) for a single response.
72
92
  *
@@ -50,6 +50,15 @@ declare class PricingEngine {
50
50
  * non-wildcard entry per model wins.
51
51
  */
52
52
  private cacheByModel;
53
+ /**
54
+ * Last-resort fuzzy index: `[normalizedModelId, entry]` pairs over the same
55
+ * non-wildcard, non-openrouter rows as `cacheByModel`. Used when even the
56
+ * model-name fallback misses — e.g. usage recorded under a bare model id
57
+ * (`glm-5.2`) while the catalog only knows prefixed slugs
58
+ * (`cloudflare/@cf/zai-org/glm-5.2`). This is an ESTIMATE: the matched row
59
+ * may be an aggregate-route price rather than the direct-vendor rate.
60
+ */
61
+ private fuzzyEntries;
53
62
  private cacheLoaded;
54
63
  /** Coalesce manual and background refreshes to prevent a catalog stampede. */
55
64
  private refreshInFlight;
@@ -65,8 +74,19 @@ declare class PricingEngine {
65
74
  * 2. wildcard provider ('*', modelId)
66
75
  * 3. model name alone (any provider) — tolerates a runtime-alias vs
67
76
  * canonical provider-id mismatch for the same model.
77
+ * 4. normalized fuzzy match (last resort) — matches a bare id like
78
+ * `glm-5.2` against prefixed catalog slugs like
79
+ * `cloudflare/@cf/zai-org/glm-5.2`. ESTIMATE only: the matched row may
80
+ * be an aggregate-route price, not the direct-vendor rate.
68
81
  */
69
82
  getEntry(providerId: string, modelId: string): Promise<PricingEntry | null>;
83
+ /**
84
+ * Normalized substring match over the catalog's non-openrouter rows. Lowercases
85
+ * and strips all non-alphanumerics, then matches bidirectionally, preferring
86
+ * the shortest catalog key (tightest match) to reduce over-matching version
87
+ * variants. Returns null when nothing matches.
88
+ */
89
+ private fuzzyMatch;
70
90
  /**
71
91
  * Compute the cost (and cache savings) for a single response.
72
92
  *
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  PricingEngine
3
- } from "../chunk-UX7VWA46.js";
3
+ } from "../chunk-FXR6N3SR.js";
4
4
  export {
5
5
  PricingEngine
6
6
  };
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkSNYBEXLBcjs = require('../chunk-SNYBEXLB.cjs');
3
+ var _chunkEPN67EGPcjs = require('../chunk-EPN67EGP.cjs');
4
4
  require('../chunk-XSVNC2UD.cjs');
5
5
 
6
6
 
7
- exports.UsageRecorder = _chunkSNYBEXLBcjs.UsageRecorder;
7
+ exports.UsageRecorder = _chunkEPN67EGPcjs.UsageRecorder;
@@ -1,5 +1,5 @@
1
1
  import { PricingEngine } from './pricing-engine.cjs';
2
- import { UsageDateRange, UsageTotals, ModelUsageRow, ApiKeyUsageRow, UsageTimeBucket, UsageTimeSeriesBucket, MessageUsageRow, SessionCacheStats } from '@omnicross/contracts/usage-stats-types';
2
+ import { UsageCacheKeySource, UsageDateRange, UsageTotals, ModelUsageRow, ApiKeyUsageRow, UsageTimeBucket, UsageTimeSeriesBucket, MessageUsageRow, SessionCacheStats } from '@omnicross/contracts/usage-stats-types';
3
3
  import { UsageEngineOrigin, UsageTokens } from '@omnicross/contracts/usage-types';
4
4
  import { L as Logger } from '../logger-4GvQNzhE.cjs';
5
5
  import { UsageEventStore } from '../ports/usage-event-store.cjs';
@@ -32,8 +32,18 @@ interface UsageRecordInput {
32
32
  rawUsage?: unknown;
33
33
  /** Host run-correlation id. Optional / additive. */
34
34
  runId?: string | null;
35
+ /** Token-free process-local Route Lease id. */
36
+ routeLeaseId?: string | null;
37
+ /** Bounded logical Route Lease consumer. */
38
+ routeLeaseConsumer?: string | null;
39
+ /** Bounded Route Lease stage attribution. */
40
+ routeLeaseStageId?: string | null;
35
41
  /** Host event-correlation id for this call. Optional / additive. */
36
42
  eventId?: string | null;
43
+ /** Safe prompt-cache-key provenance; raw key material is never recorded. */
44
+ cacheKeySource?: UsageCacheKeySource;
45
+ /** Whether the gateway, rather than the client, attached the cache key. */
46
+ cacheKeyInjected?: boolean;
37
47
  /**
38
48
  * OPTIONAL per-request audit correlation key (request-audit-log). When the
39
49
  * OUTBOUND relay taps set this to the request's `http.ServerResponse`, the
@@ -1,5 +1,5 @@
1
1
  import { PricingEngine } from './pricing-engine.js';
2
- import { UsageDateRange, UsageTotals, ModelUsageRow, ApiKeyUsageRow, UsageTimeBucket, UsageTimeSeriesBucket, MessageUsageRow, SessionCacheStats } from '@omnicross/contracts/usage-stats-types';
2
+ import { UsageCacheKeySource, UsageDateRange, UsageTotals, ModelUsageRow, ApiKeyUsageRow, UsageTimeBucket, UsageTimeSeriesBucket, MessageUsageRow, SessionCacheStats } from '@omnicross/contracts/usage-stats-types';
3
3
  import { UsageEngineOrigin, UsageTokens } from '@omnicross/contracts/usage-types';
4
4
  import { L as Logger } from '../logger-4GvQNzhE.js';
5
5
  import { UsageEventStore } from '../ports/usage-event-store.js';
@@ -32,8 +32,18 @@ interface UsageRecordInput {
32
32
  rawUsage?: unknown;
33
33
  /** Host run-correlation id. Optional / additive. */
34
34
  runId?: string | null;
35
+ /** Token-free process-local Route Lease id. */
36
+ routeLeaseId?: string | null;
37
+ /** Bounded logical Route Lease consumer. */
38
+ routeLeaseConsumer?: string | null;
39
+ /** Bounded Route Lease stage attribution. */
40
+ routeLeaseStageId?: string | null;
35
41
  /** Host event-correlation id for this call. Optional / additive. */
36
42
  eventId?: string | null;
43
+ /** Safe prompt-cache-key provenance; raw key material is never recorded. */
44
+ cacheKeySource?: UsageCacheKeySource;
45
+ /** Whether the gateway, rather than the client, attached the cache key. */
46
+ cacheKeyInjected?: boolean;
37
47
  /**
38
48
  * OPTIONAL per-request audit correlation key (request-audit-log). When the
39
49
  * OUTBOUND relay taps set this to the request's `http.ServerResponse`, the
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  UsageRecorder
3
- } from "../chunk-BPKCU575.js";
3
+ } from "../chunk-UAPBLNN2.js";
4
4
  import "../chunk-OZFM4X3S.js";
5
5
  export {
6
6
  UsageRecorder
package/dist/usage.cjs CHANGED
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-EYZYXJTJ.cjs');
2
2
 
3
3
 
4
- var _chunkDLXZEZWOcjs = require('./chunk-DLXZEZWO.cjs');
4
+ var _chunk2E42SAW3cjs = require('./chunk-2E42SAW3.cjs');
5
5
 
6
6
 
7
- var _chunkSNYBEXLBcjs = require('./chunk-SNYBEXLB.cjs');
7
+ var _chunkEPN67EGPcjs = require('./chunk-EPN67EGP.cjs');
8
8
  require('./chunk-XSVNC2UD.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.PricingEngine = _chunkDLXZEZWOcjs.PricingEngine; exports.UsageRecorder = _chunkSNYBEXLBcjs.UsageRecorder;
12
+ exports.PricingEngine = _chunk2E42SAW3cjs.PricingEngine; exports.UsageRecorder = _chunkEPN67EGPcjs.UsageRecorder;