@revenium/claude-code-metering 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -64
- package/dist/cli/commands/backfill.d.ts +2 -7
- package/dist/cli/commands/backfill.d.ts.map +1 -1
- package/dist/cli/commands/backfill.js +37 -34
- package/dist/cli/commands/backfill.js.map +1 -1
- package/dist/cli/commands/setup.d.ts +1 -0
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +1 -0
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/api/client.d.ts +16 -6
- package/dist/core/api/client.d.ts.map +1 -1
- package/dist/core/api/client.js +75 -10
- package/dist/core/api/client.js.map +1 -1
- package/dist/core/config/loader.d.ts.map +1 -1
- package/dist/core/config/loader.js +11 -13
- package/dist/core/config/loader.js.map +1 -1
- package/dist/core/config/writer.d.ts.map +1 -1
- package/dist/core/config/writer.js +31 -23
- package/dist/core/config/writer.js.map +1 -1
- package/dist/types/index.d.ts +4 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/constants.d.ts +3 -19
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +4 -22
- package/dist/utils/constants.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/backfill.ts +41 -46
- package/src/cli/commands/setup.ts +3 -1
- package/src/cli/index.ts +2 -0
- package/src/core/api/client.ts +80 -19
- package/src/core/config/loader.ts +11 -15
- package/src/core/config/writer.ts +39 -30
- package/src/types/index.ts +4 -10
- package/src/utils/constants.ts +4 -22
package/dist/core/api/client.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.sendOtlpLogs = sendOtlpLogs;
|
|
4
4
|
exports.createTestPayload = createTestPayload;
|
|
5
5
|
exports.generateTestSessionId = generateTestSessionId;
|
|
6
|
+
exports.verifyApiKey = verifyApiKey;
|
|
6
7
|
exports.checkEndpointHealth = checkEndpointHealth;
|
|
7
8
|
const loader_js_1 = require("../config/loader.js");
|
|
8
9
|
/**
|
|
@@ -34,8 +35,11 @@ async function sendOtlpLogs(baseEndpoint, apiKey, payload) {
|
|
|
34
35
|
*/
|
|
35
36
|
function createTestPayload(sessionId, options) {
|
|
36
37
|
const now = Date.now() * 1_000_000; // Convert to nanoseconds
|
|
37
|
-
// Build log record attributes
|
|
38
|
-
// Note:
|
|
38
|
+
// Build log record attributes.
|
|
39
|
+
// Note: user.email is read from log record attrs by ClaudeCodeMapper.
|
|
40
|
+
// organization.name and product.name are read from resource attrs only
|
|
41
|
+
// (the backend intentionally ignores them in log record attrs to avoid
|
|
42
|
+
// Claude Code's auto-generated UUIDs polluting the org table).
|
|
39
43
|
const logAttributes = [
|
|
40
44
|
{ key: "session.id", value: { stringValue: sessionId } },
|
|
41
45
|
{ key: "model", value: { stringValue: "cli-connectivity-test" } },
|
|
@@ -46,18 +50,23 @@ function createTestPayload(sessionId, options) {
|
|
|
46
50
|
{ key: "cost_usd", value: { stringValue: "0.0" } },
|
|
47
51
|
{ key: "duration_ms", value: { stringValue: "0" } },
|
|
48
52
|
];
|
|
49
|
-
// Add
|
|
50
|
-
//
|
|
51
|
-
|
|
53
|
+
// Add subscriber email to log record attrs — backend ClaudeCodeMapper reads user.email from here.
|
|
54
|
+
// Falls back to REVENIUM_SUBSCRIBER_EMAIL env var if not provided in options.
|
|
55
|
+
const emailValue = options?.email ?? process.env['REVENIUM_SUBSCRIBER_EMAIL'];
|
|
56
|
+
if (emailValue) {
|
|
52
57
|
logAttributes.push({
|
|
53
58
|
key: "user.email",
|
|
54
|
-
value: { stringValue:
|
|
59
|
+
value: { stringValue: emailValue },
|
|
55
60
|
});
|
|
56
61
|
}
|
|
62
|
+
// Build resource attributes — service.name is required for mapper detection.
|
|
63
|
+
// organization.name and product.name must be here (not in log record attrs) because
|
|
64
|
+
// the backend ClaudeCodeMapper reads them from resource attrs only.
|
|
65
|
+
const resourceAttributes = [{ key: "service.name", value: { stringValue: "claude-code" } }];
|
|
57
66
|
// Support both new (organizationName) and old (organizationId) field names with fallback
|
|
58
67
|
const organizationValue = options?.organizationName || options?.organizationId;
|
|
59
68
|
if (organizationValue) {
|
|
60
|
-
|
|
69
|
+
resourceAttributes.push({
|
|
61
70
|
key: "organization.name",
|
|
62
71
|
value: { stringValue: organizationValue },
|
|
63
72
|
});
|
|
@@ -65,13 +74,33 @@ function createTestPayload(sessionId, options) {
|
|
|
65
74
|
// Support both new (productName) and old (productId) field names with fallback
|
|
66
75
|
const productValue = options?.productName || options?.productId;
|
|
67
76
|
if (productValue) {
|
|
68
|
-
|
|
77
|
+
resourceAttributes.push({
|
|
69
78
|
key: "product.name",
|
|
70
79
|
value: { stringValue: productValue },
|
|
71
80
|
});
|
|
72
81
|
}
|
|
73
|
-
//
|
|
74
|
-
|
|
82
|
+
// Parse OTEL_RESOURCE_ATTRIBUTES from environment and include in resource attrs.
|
|
83
|
+
// This ensures subscription_tier and any other resource attributes configured by the user
|
|
84
|
+
// appear in test metrics. Values are URL-decoded to reverse writer.ts URL-encoding (,=").
|
|
85
|
+
const existingKeys = new Set(resourceAttributes.map((a) => a.key));
|
|
86
|
+
const otelResourceAttrsEnv = process.env['OTEL_RESOURCE_ATTRIBUTES'];
|
|
87
|
+
if (otelResourceAttrsEnv) {
|
|
88
|
+
for (const pair of otelResourceAttrsEnv.split(',')) {
|
|
89
|
+
const eqIdx = pair.indexOf('=');
|
|
90
|
+
if (eqIdx > 0) {
|
|
91
|
+
const key = pair.substring(0, eqIdx).trim();
|
|
92
|
+
let value = pair.substring(eqIdx + 1).trim();
|
|
93
|
+
try {
|
|
94
|
+
value = decodeURIComponent(value);
|
|
95
|
+
}
|
|
96
|
+
catch { /* use raw value on decode failure */ }
|
|
97
|
+
if (key && !existingKeys.has(key) && key !== 'user.email') {
|
|
98
|
+
resourceAttributes.push({ key, value: { stringValue: value } });
|
|
99
|
+
existingKeys.add(key);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
75
104
|
return {
|
|
76
105
|
resourceLogs: [
|
|
77
106
|
{
|
|
@@ -105,6 +134,42 @@ function generateTestSessionId() {
|
|
|
105
134
|
const random = Math.random().toString(36).substring(2, 8);
|
|
106
135
|
return `test-${timestamp}-${random}`;
|
|
107
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Verifies an API key is accepted by the Revenium backend by calling the resolve-key endpoint.
|
|
139
|
+
* Returns true if the key is accepted (200 OK), false otherwise.
|
|
140
|
+
* Network errors and non-200 responses all return false.
|
|
141
|
+
*
|
|
142
|
+
* This function is exported as a lightweight SDK utility for programmatic callers that need
|
|
143
|
+
* to check key validity without sending a test OTLP event. The CLI setup wizard uses
|
|
144
|
+
* {@link checkEndpointHealth} instead, which validates end-to-end connectivity.
|
|
145
|
+
*
|
|
146
|
+
* @param baseEndpoint The base Revenium endpoint (e.g. "https://api.revenium.io")
|
|
147
|
+
* @param apiKey The Revenium API key (format: hak_<tenant>_<secret>)
|
|
148
|
+
* @returns true if the key is valid, false otherwise
|
|
149
|
+
*/
|
|
150
|
+
async function verifyApiKey(baseEndpoint, apiKey) {
|
|
151
|
+
try {
|
|
152
|
+
// Enforce HTTPS to prevent API key exfiltration to an attacker-controlled host
|
|
153
|
+
const parsedBase = new URL(baseEndpoint);
|
|
154
|
+
if (parsedBase.protocol !== 'https:') {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
const url = parsedBase.origin + '/v2/sdk/resolve-key';
|
|
158
|
+
const controller = new AbortController();
|
|
159
|
+
const timeoutId = setTimeout(() => controller.abort(), 10_000);
|
|
160
|
+
const response = await fetch(url, {
|
|
161
|
+
method: 'GET',
|
|
162
|
+
headers: {
|
|
163
|
+
'x-api-key': apiKey,
|
|
164
|
+
},
|
|
165
|
+
signal: controller.signal,
|
|
166
|
+
}).finally(() => clearTimeout(timeoutId));
|
|
167
|
+
return response.ok;
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
108
173
|
/**
|
|
109
174
|
* Performs a health check by sending a minimal test payload to the endpoint.
|
|
110
175
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/api/client.ts"],"names":[],"mappings":";;AAUA,oCA+BC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/api/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2CvE;AA4DD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2CvE;AA4DD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAwDjE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAKrC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI3D"}
|
|
@@ -134,16 +134,10 @@ async function loadConfig() {
|
|
|
134
134
|
if (!apiKey) {
|
|
135
135
|
return null;
|
|
136
136
|
}
|
|
137
|
-
// Parse cost multiplier override if present
|
|
138
|
-
const costMultiplierStr = env[constants_js_1.ENV_VARS.COST_MULTIPLIER];
|
|
139
|
-
const costMultiplierOverride = costMultiplierStr
|
|
140
|
-
? parseFloat(costMultiplierStr)
|
|
141
|
-
: undefined;
|
|
142
137
|
// Parse OTEL_RESOURCE_ATTRIBUTES for org/product (primary source)
|
|
143
138
|
const resourceAttrsStr = env["OTEL_RESOURCE_ATTRIBUTES"] || "";
|
|
144
139
|
const resourceAttrs = parseOtelResourceAttributes(resourceAttrsStr);
|
|
145
|
-
//
|
|
146
|
-
// Priority: organizationName > organizationId > organization.name > organization.id > env var
|
|
140
|
+
// Read organization/product from resource attributes or standalone env vars (backward compat)
|
|
147
141
|
const organizationName = resourceAttrs["organization.name"] ||
|
|
148
142
|
resourceAttrs["organization.id"] ||
|
|
149
143
|
env[constants_js_1.ENV_VARS.ORGANIZATION_ID];
|
|
@@ -154,14 +148,18 @@ async function loadConfig() {
|
|
|
154
148
|
apiKey,
|
|
155
149
|
endpoint: extractBaseEndpoint(fullEndpoint),
|
|
156
150
|
email: env[constants_js_1.ENV_VARS.SUBSCRIBER_EMAIL],
|
|
157
|
-
subscriptionTier: env[constants_js_1.ENV_VARS.SUBSCRIPTION],
|
|
158
|
-
costMultiplierOverride: costMultiplierOverride !== undefined && !isNaN(costMultiplierOverride)
|
|
159
|
-
? costMultiplierOverride
|
|
160
|
-
: undefined,
|
|
151
|
+
subscriptionTier: (env[constants_js_1.ENV_VARS.SUBSCRIPTION_TIER] || env[constants_js_1.ENV_VARS.SUBSCRIPTION]),
|
|
161
152
|
organizationName,
|
|
162
|
-
organizationId: organizationName,
|
|
153
|
+
organizationId: organizationName,
|
|
163
154
|
productName,
|
|
164
|
-
productId: productName,
|
|
155
|
+
productId: productName,
|
|
156
|
+
// Boolean env var: '1'->true, '0'->false, absent->undefined
|
|
157
|
+
// IMPORTANT: do NOT use Boolean(env[...]) — that makes '0' truthy
|
|
158
|
+
extraUsageEnabled: env[constants_js_1.ENV_VARS.EXTRA_USAGE_ENABLED] === '1'
|
|
159
|
+
? true
|
|
160
|
+
: env[constants_js_1.ENV_VARS.EXTRA_USAGE_ENABLED] === '0'
|
|
161
|
+
? false
|
|
162
|
+
: undefined,
|
|
165
163
|
};
|
|
166
164
|
}
|
|
167
165
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":";;AAgBA,sCAEC;AAKD,oCAEC;AAKD,0CA2CC;AAgED,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/core/config/writer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/core/config/writer.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAyL3D;;;GAGG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAezE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
|
|
@@ -12,7 +12,9 @@ const loader_js_1 = require("./loader.js");
|
|
|
12
12
|
* Wraps the value in double quotes and escapes special characters.
|
|
13
13
|
*/
|
|
14
14
|
function escapeShellValue(value) {
|
|
15
|
-
|
|
15
|
+
// Strip newlines/carriage returns to prevent multi-line injection into the env file
|
|
16
|
+
const sanitized = value.replace(/[\r\n]/g, "");
|
|
17
|
+
return `"${sanitized.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\$/g, "\\$").replace(/`/g, "\\`")}"`;
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
18
20
|
* Escapes a value for use in OTEL_RESOURCE_ATTRIBUTES.
|
|
@@ -21,8 +23,12 @@ function escapeShellValue(value) {
|
|
|
21
23
|
* We URL-encode these characters to ensure safe parsing.
|
|
22
24
|
*/
|
|
23
25
|
function escapeResourceAttributeValue(value) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
const sanitized = value.replace(/[\r\n]/g, "");
|
|
27
|
+
return sanitized
|
|
28
|
+
.replace(/%/g, "%25")
|
|
29
|
+
.replace(/\\/g, "%5C")
|
|
30
|
+
.replace(/\$/g, "%24")
|
|
31
|
+
.replace(/`/g, "%60")
|
|
26
32
|
.replace(/,/g, "%2C")
|
|
27
33
|
.replace(/=/g, "%3D")
|
|
28
34
|
.replace(/"/g, "%22");
|
|
@@ -67,37 +73,43 @@ function generateEnvContent(config) {
|
|
|
67
73
|
lines.push(`export ${constants_js_1.ENV_VARS.SUBSCRIBER_EMAIL}=${escapeShellValue(config.email)}`);
|
|
68
74
|
}
|
|
69
75
|
if (config.subscriptionTier) {
|
|
70
|
-
const tier = config.subscriptionTier;
|
|
71
|
-
const costMultiplier = config.costMultiplierOverride ?? (0, constants_js_1.getCostMultiplier)(tier);
|
|
72
|
-
const discountPercent = Math.round((1 - costMultiplier) * 100);
|
|
73
76
|
lines.push("");
|
|
74
77
|
lines.push("# Claude Code subscription tier");
|
|
78
|
+
lines.push(`export ${constants_js_1.ENV_VARS.SUBSCRIPTION_TIER}=${escapeShellValue(config.subscriptionTier)}`);
|
|
75
79
|
lines.push(`export ${constants_js_1.ENV_VARS.SUBSCRIPTION}=${escapeShellValue(config.subscriptionTier)}`);
|
|
76
|
-
|
|
77
|
-
lines.push("# Cost multiplier for subscription tier");
|
|
78
|
-
lines.push("# This adjusts Claude Code costs based on your subscription discount");
|
|
79
|
-
lines.push(`# ${tier}: ${discountPercent}% discount vs API rates`);
|
|
80
|
-
if (config.costMultiplierOverride !== undefined) {
|
|
81
|
-
lines.push("# (custom override applied)");
|
|
82
|
-
lines.push(`export ${constants_js_1.ENV_VARS.COST_MULTIPLIER}=${costMultiplier}`);
|
|
83
|
-
}
|
|
84
|
-
// Build OTEL_RESOURCE_ATTRIBUTES with cost_multiplier and optional organization.name/product.name.
|
|
80
|
+
// Build OTEL_RESOURCE_ATTRIBUTES with subscription_tier and optional organization.name/product.name.
|
|
85
81
|
// Special characters (,=") in values are URL-encoded to ensure safe parsing.
|
|
86
82
|
// Note: The backend ONLY reads organization.name and product.name from resourceAttributes,
|
|
87
83
|
// ignoring any auto-generated values in log record attributes from Claude Code.
|
|
88
|
-
const resourceAttrs = [
|
|
89
|
-
// Support both new (organizationName) and old (organizationId) field names with fallback
|
|
84
|
+
const resourceAttrs = [];
|
|
90
85
|
const organizationValue = config.organizationName || config.organizationId;
|
|
91
86
|
if (organizationValue) {
|
|
92
87
|
resourceAttrs.push(`organization.name=${escapeResourceAttributeValue(organizationValue)}`);
|
|
93
88
|
}
|
|
94
|
-
// Support both new (productName) and old (productId) field names with fallback
|
|
95
89
|
const productValue = config.productName || config.productId;
|
|
96
90
|
if (productValue) {
|
|
97
91
|
resourceAttrs.push(`product.name=${escapeResourceAttributeValue(productValue)}`);
|
|
98
92
|
}
|
|
93
|
+
resourceAttrs.push(`${constants_js_1.ENV_VARS.SUBSCRIPTION_TIER}=${escapeResourceAttributeValue(config.subscriptionTier)}`);
|
|
94
|
+
if (config.email) {
|
|
95
|
+
resourceAttrs.push(`user.email=${escapeResourceAttributeValue(config.email)}`);
|
|
96
|
+
}
|
|
97
|
+
lines.push(`export OTEL_RESOURCE_ATTRIBUTES="${resourceAttrs.join(",")}"`);
|
|
98
|
+
}
|
|
99
|
+
else if (config.email) {
|
|
100
|
+
// No subscriptionTier, but email is set — still embed in OTEL_RESOURCE_ATTRIBUTES
|
|
101
|
+
// so every OTEL event carries the identity as a resource attribute.
|
|
102
|
+
const resourceAttrs = [];
|
|
103
|
+
resourceAttrs.push(`user.email=${escapeResourceAttributeValue(config.email)}`);
|
|
104
|
+
lines.push("");
|
|
105
|
+
lines.push("# OTEL resource attributes for identity");
|
|
99
106
|
lines.push(`export OTEL_RESOURCE_ATTRIBUTES="${resourceAttrs.join(",")}"`);
|
|
100
107
|
}
|
|
108
|
+
if (config.extraUsageEnabled !== undefined) {
|
|
109
|
+
lines.push("");
|
|
110
|
+
lines.push("# Whether extra usage beyond subscription limits is enabled");
|
|
111
|
+
lines.push(`export ${constants_js_1.ENV_VARS.EXTRA_USAGE_ENABLED}=${config.extraUsageEnabled ? '1' : '0'}`);
|
|
112
|
+
}
|
|
101
113
|
// Add advanced configuration section
|
|
102
114
|
lines.push("");
|
|
103
115
|
lines.push("# ─────────────────────────────────────────────────────────────────────────────");
|
|
@@ -111,11 +123,7 @@ function generateEnvContent(config) {
|
|
|
111
123
|
lines.push("# HOW TO CONFIGURE:");
|
|
112
124
|
lines.push("# Edit the OTEL_RESOURCE_ATTRIBUTES line above to include organization.name and/or product.name:");
|
|
113
125
|
lines.push("#");
|
|
114
|
-
|
|
115
|
-
const exampleMultiplier = config.subscriptionTier && config.costMultiplierOverride === undefined
|
|
116
|
-
? (0, constants_js_1.getCostMultiplier)(config.subscriptionTier)
|
|
117
|
-
: (config.costMultiplierOverride ?? "0.08");
|
|
118
|
-
lines.push(`# OTEL_RESOURCE_ATTRIBUTES="cost_multiplier=${exampleMultiplier},organization.name=my-org,product.name=my-product"`);
|
|
126
|
+
lines.push(`# OTEL_RESOURCE_ATTRIBUTES="organization.name=my-org,product.name=my-product"`);
|
|
119
127
|
lines.push("#");
|
|
120
128
|
lines.push("# ATTRIBUTE DESCRIPTIONS:");
|
|
121
129
|
lines.push("# organization.name - Attribute costs to a customer/company (e.g., client name, team)");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../src/core/config/writer.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../src/core/config/writer.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -7,22 +7,16 @@ export interface ReveniumConfig {
|
|
|
7
7
|
endpoint: string;
|
|
8
8
|
email?: string;
|
|
9
9
|
subscriptionTier?: SubscriptionTier;
|
|
10
|
-
/** Optional override for the cost multiplier (overrides tier default) */
|
|
11
|
-
costMultiplierOverride?: number;
|
|
12
10
|
/** Optional organization name for attributing costs to a specific customer/company */
|
|
13
11
|
organizationName?: string;
|
|
14
|
-
/**
|
|
15
|
-
* @deprecated Use organizationName instead. This field will be removed in a future version.
|
|
16
|
-
* Organization or company identifier
|
|
17
|
-
*/
|
|
12
|
+
/** Alias for organizationName — accepted for backward compatibility */
|
|
18
13
|
organizationId?: string;
|
|
19
14
|
/** Optional product name for attributing costs to a specific product/project */
|
|
20
15
|
productName?: string;
|
|
21
|
-
/**
|
|
22
|
-
* @deprecated Use productName instead. This field will be removed in a future version.
|
|
23
|
-
* Product or application identifier
|
|
24
|
-
*/
|
|
16
|
+
/** Alias for productName — accepted for backward compatibility */
|
|
25
17
|
productId?: string;
|
|
18
|
+
/** Whether extra usage beyond subscription limits is enabled */
|
|
19
|
+
extraUsageEnabled?: boolean;
|
|
26
20
|
}
|
|
27
21
|
/**
|
|
28
22
|
* Result of configuration validation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,KAAK,CAAC;QAClB,QAAQ,CAAC,EAAE;YACT,UAAU,CAAC,EAAE,KAAK,CAAC;gBACjB,GAAG,EAAE,MAAM,CAAC;gBACZ,KAAK,EAAE,SAAS,CAAC;aAClB,CAAC,CAAC;SACJ,CAAC;QACF,SAAS,EAAE,KAAK,CAAC;YACf,KAAK,CAAC,EAAE;gBACN,IAAI,EAAE,MAAM,CAAC;gBACb,OAAO,EAAE,MAAM,CAAC;aACjB,CAAC;YACF,UAAU,EAAE,KAAK,CAAC;gBAChB,YAAY,CAAC,EAAE,MAAM,CAAC;gBACtB,IAAI,EAAE,SAAS,CAAC;gBAChB,UAAU,EAAE,KAAK,CAAC;oBAChB,GAAG,EAAE,MAAM,CAAC;oBACZ,KAAK,EAAE,SAAS,CAAC;iBAClB,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,cAAc,oBAAoB,CAAC"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAuGA,qDAAmC"}
|
|
@@ -13,46 +13,29 @@ export declare const CLAUDE_CONFIG_DIR = ".claude";
|
|
|
13
13
|
export declare const REVENIUM_ENV_FILE = "revenium.env";
|
|
14
14
|
/** File permissions for config file (owner read/write only) */
|
|
15
15
|
export declare const CONFIG_FILE_MODE = 384;
|
|
16
|
-
/** Available subscription tiers
|
|
17
|
-
*
|
|
18
|
-
* Cost multipliers represent the effective discount vs API pricing.
|
|
19
|
-
* Values are estimates based on fully consuming monthly token allotments.
|
|
20
|
-
*
|
|
21
|
-
* Calculation basis: Max 20x tier ($200 for 20X tokens = $2,500 API equivalent)
|
|
22
|
-
* establishes $125 per X tokens at API rates. Other tiers calculated proportionally.
|
|
23
|
-
*
|
|
24
|
-
* For detailed explanation and manual override instructions, see README.md
|
|
25
|
-
*/
|
|
16
|
+
/** Available subscription tiers */
|
|
26
17
|
export declare const SUBSCRIPTION_TIER_CONFIG: {
|
|
27
18
|
readonly pro: {
|
|
28
19
|
readonly name: "Pro (~$20 USD/month or local equivalent)";
|
|
29
|
-
readonly multiplier: 0.16;
|
|
30
20
|
};
|
|
31
21
|
readonly max_5x: {
|
|
32
22
|
readonly name: "Max 5x (~$100 USD/month or local equivalent)";
|
|
33
|
-
readonly multiplier: 0.16;
|
|
34
23
|
};
|
|
35
24
|
readonly max_20x: {
|
|
36
25
|
readonly name: "Max 20x (~$200 USD/month or local equivalent)";
|
|
37
|
-
readonly multiplier: 0.08;
|
|
38
26
|
};
|
|
39
27
|
readonly team_premium: {
|
|
40
28
|
readonly name: "Team Premium (~$125 USD/seat or local equivalent)";
|
|
41
|
-
readonly multiplier: 0.2;
|
|
42
29
|
};
|
|
43
30
|
readonly enterprise: {
|
|
44
31
|
readonly name: "Enterprise (custom)";
|
|
45
|
-
readonly multiplier: 0.05;
|
|
46
32
|
};
|
|
47
33
|
readonly api: {
|
|
48
34
|
readonly name: "API (no subscription)";
|
|
49
|
-
readonly multiplier: 1;
|
|
50
35
|
};
|
|
51
36
|
};
|
|
52
37
|
export declare const SUBSCRIPTION_TIERS: ReadonlyArray<keyof typeof SUBSCRIPTION_TIER_CONFIG>;
|
|
53
38
|
export type SubscriptionTier = keyof typeof SUBSCRIPTION_TIER_CONFIG;
|
|
54
|
-
/** Get the cost multiplier for a given tier */
|
|
55
|
-
export declare function getCostMultiplier(tier: SubscriptionTier): number;
|
|
56
39
|
/** Environment variable names */
|
|
57
40
|
export declare const ENV_VARS: {
|
|
58
41
|
readonly TELEMETRY_ENABLED: "CLAUDE_CODE_ENABLE_TELEMETRY";
|
|
@@ -61,8 +44,9 @@ export declare const ENV_VARS: {
|
|
|
61
44
|
readonly OTLP_PROTOCOL: "OTEL_EXPORTER_OTLP_PROTOCOL";
|
|
62
45
|
readonly SUBSCRIBER_EMAIL: "REVENIUM_SUBSCRIBER_EMAIL";
|
|
63
46
|
readonly SUBSCRIPTION: "CLAUDE_CODE_SUBSCRIPTION";
|
|
64
|
-
readonly
|
|
47
|
+
readonly SUBSCRIPTION_TIER: "CLAUDE_CODE_SUBSCRIPTION_TIER";
|
|
65
48
|
readonly ORGANIZATION_ID: "REVENIUM_ORGANIZATION_ID";
|
|
66
49
|
readonly PRODUCT_ID: "REVENIUM_PRODUCT_ID";
|
|
50
|
+
readonly EXTRA_USAGE_ENABLED: "CLAUDE_CODE_EXTRA_USAGE_ENABLED";
|
|
67
51
|
};
|
|
68
52
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oCAAoC;AACpC,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAE9D,kDAAkD;AAClD,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAE1C,0DAA0D;AAC1D,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,MAAQ,CAAC;AAEtC
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oCAAoC;AACpC,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAE9D,kDAAkD;AAClD,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAE1C,0DAA0D;AAC1D,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,MAAQ,CAAC;AAEtC,mCAAmC;AACnC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;CAmB3B,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAA4C,aAAa,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAC;AAEhI,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,wBAAwB,CAAC;AAErE,iCAAiC;AACjC,eAAO,MAAM,QAAQ;;;;;;;;;;;CAYX,CAAC"}
|
package/dist/utils/constants.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.ENV_VARS = exports.SUBSCRIPTION_TIERS = exports.SUBSCRIPTION_TIER_CONFIG = exports.CONFIG_FILE_MODE = exports.REVENIUM_ENV_FILE = exports.CLAUDE_CONFIG_DIR = exports.API_KEY_PREFIX = exports.OTLP_PATH = exports.DEFAULT_REVENIUM_URL = void 0;
|
|
7
|
-
exports.getCostMultiplier = getCostMultiplier;
|
|
8
7
|
/** Default Revenium API base URL */
|
|
9
8
|
exports.DEFAULT_REVENIUM_URL = 'https://api.revenium.ai';
|
|
10
9
|
/** Path appended to base URL for OTLP endpoint */
|
|
@@ -17,47 +16,28 @@ exports.CLAUDE_CONFIG_DIR = '.claude';
|
|
|
17
16
|
exports.REVENIUM_ENV_FILE = 'revenium.env';
|
|
18
17
|
/** File permissions for config file (owner read/write only) */
|
|
19
18
|
exports.CONFIG_FILE_MODE = 0o600;
|
|
20
|
-
/** Available subscription tiers
|
|
21
|
-
*
|
|
22
|
-
* Cost multipliers represent the effective discount vs API pricing.
|
|
23
|
-
* Values are estimates based on fully consuming monthly token allotments.
|
|
24
|
-
*
|
|
25
|
-
* Calculation basis: Max 20x tier ($200 for 20X tokens = $2,500 API equivalent)
|
|
26
|
-
* establishes $125 per X tokens at API rates. Other tiers calculated proportionally.
|
|
27
|
-
*
|
|
28
|
-
* For detailed explanation and manual override instructions, see README.md
|
|
29
|
-
*/
|
|
19
|
+
/** Available subscription tiers */
|
|
30
20
|
exports.SUBSCRIPTION_TIER_CONFIG = {
|
|
31
21
|
pro: {
|
|
32
22
|
name: 'Pro (~$20 USD/month or local equivalent)',
|
|
33
|
-
multiplier: 0.16, // $20 / $125 API equivalent = 16%
|
|
34
23
|
},
|
|
35
24
|
max_5x: {
|
|
36
25
|
name: 'Max 5x (~$100 USD/month or local equivalent)',
|
|
37
|
-
multiplier: 0.16, // $100 / $625 API equivalent = 16%
|
|
38
26
|
},
|
|
39
27
|
max_20x: {
|
|
40
28
|
name: 'Max 20x (~$200 USD/month or local equivalent)',
|
|
41
|
-
multiplier: 0.08, // $200 / $2,500 API equivalent = 8% (baseline from real data)
|
|
42
29
|
},
|
|
43
30
|
team_premium: {
|
|
44
31
|
name: 'Team Premium (~$125 USD/seat or local equivalent)',
|
|
45
|
-
multiplier: 0.20, // $125 / $625 API equivalent = 20%
|
|
46
32
|
},
|
|
47
33
|
enterprise: {
|
|
48
34
|
name: 'Enterprise (custom)',
|
|
49
|
-
multiplier: 0.05, // Custom pricing with best discounts
|
|
50
35
|
},
|
|
51
36
|
api: {
|
|
52
37
|
name: 'API (no subscription)',
|
|
53
|
-
multiplier: 1.0, // Full API pricing
|
|
54
38
|
},
|
|
55
39
|
};
|
|
56
40
|
exports.SUBSCRIPTION_TIERS = Object.keys(exports.SUBSCRIPTION_TIER_CONFIG);
|
|
57
|
-
/** Get the cost multiplier for a given tier */
|
|
58
|
-
function getCostMultiplier(tier) {
|
|
59
|
-
return exports.SUBSCRIPTION_TIER_CONFIG[tier].multiplier;
|
|
60
|
-
}
|
|
61
41
|
/** Environment variable names */
|
|
62
42
|
exports.ENV_VARS = {
|
|
63
43
|
TELEMETRY_ENABLED: 'CLAUDE_CODE_ENABLE_TELEMETRY',
|
|
@@ -66,8 +46,10 @@ exports.ENV_VARS = {
|
|
|
66
46
|
OTLP_PROTOCOL: 'OTEL_EXPORTER_OTLP_PROTOCOL',
|
|
67
47
|
SUBSCRIBER_EMAIL: 'REVENIUM_SUBSCRIBER_EMAIL',
|
|
68
48
|
SUBSCRIPTION: 'CLAUDE_CODE_SUBSCRIPTION',
|
|
69
|
-
|
|
49
|
+
// Revenium-specific resource attribute name; value is read from native CLAUDE_CODE_SUBSCRIPTION during setup
|
|
50
|
+
SUBSCRIPTION_TIER: 'CLAUDE_CODE_SUBSCRIPTION_TIER',
|
|
70
51
|
ORGANIZATION_ID: 'REVENIUM_ORGANIZATION_ID',
|
|
71
52
|
PRODUCT_ID: 'REVENIUM_PRODUCT_ID',
|
|
53
|
+
EXTRA_USAGE_ENABLED: 'CLAUDE_CODE_EXTRA_USAGE_ENABLED',
|
|
72
54
|
};
|
|
73
55
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,oCAAoC;AACvB,QAAA,oBAAoB,GAAG,yBAAyB,CAAC;AAE9D,kDAAkD;AACrC,QAAA,SAAS,GAAG,gBAAgB,CAAC;AAE1C,0DAA0D;AAC7C,QAAA,cAAc,GAAG,MAAM,CAAC;AAErC,8CAA8C;AACjC,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAE3C,sDAAsD;AACzC,QAAA,iBAAiB,GAAG,cAAc,CAAC;AAEhD,+DAA+D;AAClD,QAAA,gBAAgB,GAAG,KAAK,CAAC;AAEtC,mCAAmC;AACtB,QAAA,wBAAwB,GAAG;IACtC,GAAG,EAAE;QACH,IAAI,EAAE,0CAA0C;KACjD;IACD,MAAM,EAAE;QACN,IAAI,EAAE,8CAA8C;KACrD;IACD,OAAO,EAAE;QACP,IAAI,EAAE,+CAA+C;KACtD;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mDAAmD;KAC1D;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAqB;KAC5B;IACD,GAAG,EAAE;QACH,IAAI,EAAE,uBAAuB;KAC9B;CACO,CAAC;AAEE,QAAA,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,gCAAwB,CAAyD,CAAC;AAIhI,iCAAiC;AACpB,QAAA,QAAQ,GAAG;IACtB,iBAAiB,EAAE,8BAA8B;IACjD,aAAa,EAAE,6BAA6B;IAC5C,YAAY,EAAE,4BAA4B;IAC1C,aAAa,EAAE,6BAA6B;IAC5C,gBAAgB,EAAE,2BAA2B;IAC7C,YAAY,EAAE,0BAA0B;IACxC,6GAA6G;IAC7G,iBAAiB,EAAE,+BAA+B;IAClD,eAAe,EAAE,0BAA0B;IAC3C,UAAU,EAAE,qBAAqB;IACjC,mBAAmB,EAAE,iCAAiC;CAC9C,CAAC"}
|