@sealmetrics/mcp 1.2.0 → 1.3.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 (41) hide show
  1. package/README.md +30 -6
  2. package/dist/client.d.ts +28 -5
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +92 -3
  5. package/dist/client.js.map +1 -1
  6. package/dist/embedded.d.ts +29 -0
  7. package/dist/embedded.d.ts.map +1 -0
  8. package/dist/embedded.js +37 -0
  9. package/dist/embedded.js.map +1 -0
  10. package/dist/index.js +3811 -123
  11. package/dist/index.js.map +1 -1
  12. package/dist/sealmetrics.mcpb +0 -0
  13. package/dist/server.d.ts +38 -0
  14. package/dist/server.d.ts.map +1 -0
  15. package/dist/server.js +132 -0
  16. package/dist/server.js.map +1 -0
  17. package/dist/tools/channels.js +4 -4
  18. package/dist/tools/channels.js.map +1 -1
  19. package/dist/tools/conversions.d.ts +3 -0
  20. package/dist/tools/conversions.d.ts.map +1 -1
  21. package/dist/tools/conversions.js +251 -2
  22. package/dist/tools/conversions.js.map +1 -1
  23. package/dist/tools/index.d.ts.map +1 -1
  24. package/dist/tools/index.js +5 -1
  25. package/dist/tools/index.js.map +1 -1
  26. package/dist/tools/pages.d.ts.map +1 -1
  27. package/dist/tools/pages.js +103 -3
  28. package/dist/tools/pages.js.map +1 -1
  29. package/dist/tools/setup.d.ts +49 -0
  30. package/dist/tools/setup.d.ts.map +1 -0
  31. package/dist/tools/setup.js +347 -0
  32. package/dist/tools/setup.js.map +1 -0
  33. package/dist/tools/shared.d.ts +0 -12
  34. package/dist/tools/shared.d.ts.map +1 -1
  35. package/dist/tools/shared.js +0 -99
  36. package/dist/tools/shared.js.map +1 -1
  37. package/package.json +12 -3
  38. package/dist/tools/manage.d.ts +0 -3
  39. package/dist/tools/manage.d.ts.map +0 -1
  40. package/dist/tools/manage.js +0 -55
  41. package/dist/tools/manage.js.map +0 -1
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @sealmetrics/mcp-server
1
+ # @sealmetrics/mcp
2
2
 
3
3
  MCP server for querying [SealMetrics](https://sealmetrics.com) analytics from Claude Code, Claude Desktop, or any MCP-compatible client.
4
4
 
@@ -17,7 +17,7 @@ Add to your project's `.mcp.json` or `~/.claude/settings.json`:
17
17
  "mcpServers": {
18
18
  "sealmetrics": {
19
19
  "command": "npx",
20
- "args": ["-y", "@sealmetrics/mcp-server"],
20
+ "args": ["-y", "@sealmetrics/mcp"],
21
21
  "env": {
22
22
  "SEALMETRICS_API_KEY": "sm_xxxx...",
23
23
  "SEALMETRICS_SITE_ID": "my-site"
@@ -69,26 +69,50 @@ Campaign performance (utm_campaign) with entrances, conversions, and revenue.
69
69
 
70
70
  Metrics per page URL path: pageviews, entrances, conversions.
71
71
 
72
- **Parameters:** `site_id`, `period`, `compare`, `limit`, `sort_by`, `sort_order`, `path_filter`
72
+ **Parameters:** `site_id`, `period`, `compare`, `limit`, `sort_by`, `sort_order`, `path_filter`, multi-value filters `country`, `device_type`, `browser`, `os`, `channel_group`, `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, and `include` (`device|browser|os|channel_group`).
73
+
74
+ > **Breaking change in 1.2.0**: `country` is now `array of string` (was `string`). Pass `country: ["ES"]` instead of `country: "ES"`.
73
75
 
74
76
  ### get_landing_pages
75
77
 
76
78
  Landing page performance: entrances, bounce rate, conversions.
77
79
 
78
- **Parameters:** `site_id`, `period`, `compare`, `limit`, `sort_by`, `sort_order`, `path_filter`
80
+ **Parameters:** `site_id`, `period`, `compare`, `limit`, `sort_by`, `sort_order`, `path_filter`, plus the same multi-value filter set and `include` parameter as `get_pages` (same breaking change on `country`).
79
81
 
80
82
  ### get_conversions
81
83
 
82
- Conversions by type (purchase, signup) with count, revenue, and average order value.
84
+ Aggregated conversions by type (purchase, signup) with count, revenue, and average order value.
83
85
 
84
86
  **Parameters:** `site_id`, `period`, `compare`, `limit`, `sort_by`, `sort_order`, `utm_source`, `utm_medium`, `country`
85
87
 
88
+ For per-event detail use `get_conversions_raw`. For per-product analysis use `get_conversion_items_raw`.
89
+
86
90
  ### get_microconversions
87
91
 
88
- Microconversions (add_to_cart, newsletter_signup, etc.) by type with counts.
92
+ Aggregated microconversions (add_to_cart, newsletter_signup, etc.) by type with counts.
89
93
 
90
94
  **Parameters:** `site_id`, `period`, `compare`, `limit`, `sort_by`, `sort_order`, `conversion_type`
91
95
 
96
+ For per-event detail use `get_microconversions_raw`.
97
+
98
+ ### get_conversions_raw
99
+
100
+ Raw conversion rows (one per event) with `timestamp_utc`, `timestamp_local`, full attribution. Date range capped at 31 days; `limit` capped at 100 (default 10) to control LLM token usage.
101
+
102
+ **Parameters:** `site_id`, `period` or (`start_date` + `end_date`), `page`, `limit` (1–100), `include_properties` (default `false`), and multi-value filters `conversion_type`, `country`, `device_type`, `browser`, `os`, `channel_group`, `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`.
103
+
104
+ When `include_properties=false` the custom `properties` map is stripped from each row to keep responses compact.
105
+
106
+ ### get_microconversions_raw
107
+
108
+ Same shape as `get_conversions_raw` but for `/stats/microconversions/raw` (no `amount`/`clid`).
109
+
110
+ ### get_conversion_items_raw
111
+
112
+ One row per item inside a conversion (e.g. one row per product in a purchase). `properties` is **always** included — that's where `product_id`, `sku`, `price`, `quantity` live.
113
+
114
+ **Parameters:** `site_id`, `period` or (`start_date` + `end_date`), `page`, `limit` (1–100), and the same multi-value filter set as the other raw tools. Note: this tool does **not** accept `include_properties`.
115
+
92
116
  ### get_countries
93
117
 
94
118
  Traffic by country with entrances, conversions, and revenue.
package/dist/client.d.ts CHANGED
@@ -12,26 +12,49 @@ export interface RawAPIResponse {
12
12
  [key: string]: unknown;
13
13
  }
14
14
  export declare class SealMetricsClient {
15
- private readonly apiKey;
15
+ /**
16
+ * Read-only api_key (X-API-Key). Optional + mutable so the server can start in
17
+ * setup-only mode without a key (RF-3202) and adopt the key returned by
18
+ * provision_site at runtime to enable the read-only tools (RF-3202b). Held in
19
+ * memory only — never echoed to the model or logs (VAL-3201).
20
+ */
21
+ private apiKey;
16
22
  private readonly baseUrl;
17
- constructor(apiKey: string, baseUrl: string);
23
+ constructor(apiKey: string | undefined, baseUrl: string);
24
+ /** True once a read-only api_key is available (env at boot or post-provision). */
25
+ hasApiKey(): boolean;
26
+ /** Return the in-memory api_key (for setup-core verify). Never logged by callers. */
27
+ getApiKey(): string | undefined;
28
+ /** Adopt the api_key returned by provision_site so read-only tools work (RF-3202b). */
29
+ setApiKey(apiKey: string): void;
30
+ /**
31
+ * Authenticated POST (RF-3201). The client was GET-only in v1.2.0; the
32
+ * write-path needs it. NOT auto-retried — POST is not idempotent (a blind retry
33
+ * of /provision could create duplicate accounts). Authenticates with the
34
+ * publishable provision key (`provisionKey`) for provisioning, or X-API-Key
35
+ * otherwise. On 2xx returns the parsed JSON; on non-2xx / network throws
36
+ * SealMetricsAPIError carrying the status code for the caller to map.
37
+ */
38
+ post<T>(path: string, body: unknown, opts?: {
39
+ provisionKey?: string;
40
+ }): Promise<T>;
18
41
  /**
19
42
  * Send an authenticated GET request. Unwraps the API envelope
20
43
  * and returns just the `data` field.
21
44
  */
22
- request<T>(path: string, params?: Record<string, string | undefined>): Promise<T>;
45
+ request<T>(path: string, params?: Record<string, string | string[] | undefined>): Promise<T>;
23
46
  /**
24
47
  * Send an authenticated GET request and return the full JSON body
25
48
  * without unwrapping. Use this for endpoints that don't use the
26
49
  * standard APIResponse envelope (e.g. alerts, webhooks).
27
50
  */
28
- requestDirect<T>(path: string, params?: Record<string, string | undefined>): Promise<T>;
51
+ requestDirect<T>(path: string, params?: Record<string, string | string[] | undefined>): Promise<T>;
29
52
  /**
30
53
  * Send an authenticated GET request and return the full response
31
54
  * including pagination fields (total, page, has_next, etc.).
32
55
  * Use this for paginated endpoints.
33
56
  */
34
- requestPaginated<T>(path: string, params?: Record<string, string | undefined>): Promise<{
57
+ requestPaginated<T>(path: string, params?: Record<string, string | string[] | undefined>): Promise<{
35
58
  data: T[];
36
59
  total: number;
37
60
  page: number;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IAEd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK3C;;;OAGG;IACG,OAAO,CAAC,CAAC,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC,CAAC,CAAC;IAKb;;;;OAIG;IACG,aAAa,CAAC,CAAC,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC,CAAC,CAAC;IAKb;;;;OAIG;IACG,gBAAgB,CAAC,CAAC,EACtB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC;QACT,IAAI,EAAE,CAAC,EAAE,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;YAsBY,UAAU;CAkGzB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IAEd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,iBAAiB;IAC5B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM;IAKvD,kFAAkF;IAClF,SAAS,IAAI,OAAO;IAIpB,qFAAqF;IACrF,SAAS,IAAI,MAAM,GAAG,SAAS;IAI/B,uFAAuF;IACvF,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;;;;;;OAOG;IACG,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAC/B,OAAO,CAAC,CAAC,CAAC;IA0Cb;;;OAGG;IACG,OAAO,CAAC,CAAC,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,OAAO,CAAC,CAAC,CAAC;IAKb;;;;OAIG;IACG,aAAa,CAAC,CAAC,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,OAAO,CAAC,CAAC,CAAC;IAKb;;;;OAIG;IACG,gBAAgB,CAAC,CAAC,EACtB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,OAAO,CAAC;QACT,IAAI,EAAE,CAAC,EAAE,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;YAsBY,UAAU;CAwHzB"}
package/dist/client.js CHANGED
@@ -3,12 +3,81 @@ const DEFAULT_TIMEOUT_MS = 30_000;
3
3
  const MAX_RETRIES = 2;
4
4
  const RETRY_BASE_MS = 1_000;
5
5
  export class SealMetricsClient {
6
+ /**
7
+ * Read-only api_key (X-API-Key). Optional + mutable so the server can start in
8
+ * setup-only mode without a key (RF-3202) and adopt the key returned by
9
+ * provision_site at runtime to enable the read-only tools (RF-3202b). Held in
10
+ * memory only — never echoed to the model or logs (VAL-3201).
11
+ */
6
12
  apiKey;
7
13
  baseUrl;
8
14
  constructor(apiKey, baseUrl) {
9
15
  this.apiKey = apiKey;
10
16
  this.baseUrl = baseUrl.replace(/\/+$/, "");
11
17
  }
18
+ /** True once a read-only api_key is available (env at boot or post-provision). */
19
+ hasApiKey() {
20
+ return typeof this.apiKey === "string" && this.apiKey.length > 0;
21
+ }
22
+ /** Return the in-memory api_key (for setup-core verify). Never logged by callers. */
23
+ getApiKey() {
24
+ return this.apiKey;
25
+ }
26
+ /** Adopt the api_key returned by provision_site so read-only tools work (RF-3202b). */
27
+ setApiKey(apiKey) {
28
+ this.apiKey = apiKey;
29
+ }
30
+ /**
31
+ * Authenticated POST (RF-3201). The client was GET-only in v1.2.0; the
32
+ * write-path needs it. NOT auto-retried — POST is not idempotent (a blind retry
33
+ * of /provision could create duplicate accounts). Authenticates with the
34
+ * publishable provision key (`provisionKey`) for provisioning, or X-API-Key
35
+ * otherwise. On 2xx returns the parsed JSON; on non-2xx / network throws
36
+ * SealMetricsAPIError carrying the status code for the caller to map.
37
+ */
38
+ async post(path, body, opts) {
39
+ const url = `${this.baseUrl}${path}`;
40
+ const headers = {
41
+ "Content-Type": "application/json",
42
+ Accept: "application/json",
43
+ };
44
+ if (opts?.provisionKey) {
45
+ headers["X-Provision-Key"] = opts.provisionKey;
46
+ }
47
+ else if (this.apiKey) {
48
+ headers["X-API-Key"] = this.apiKey;
49
+ }
50
+ const controller = new AbortController();
51
+ const timeout = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS);
52
+ let response;
53
+ try {
54
+ response = await fetch(url, {
55
+ method: "POST",
56
+ headers,
57
+ body: JSON.stringify(body),
58
+ signal: controller.signal,
59
+ });
60
+ }
61
+ catch (error) {
62
+ if (error instanceof Error && error.name === "AbortError") {
63
+ throw new SealMetricsAPIError(0, "Request timed out after 30 seconds.");
64
+ }
65
+ throw new SealMetricsAPIError(0, error instanceof Error ? error.message : "Network error");
66
+ }
67
+ finally {
68
+ clearTimeout(timeout);
69
+ }
70
+ const text = await response.text();
71
+ if (!response.ok) {
72
+ throw mapHttpError(response.status, text);
73
+ }
74
+ try {
75
+ return JSON.parse(text);
76
+ }
77
+ catch {
78
+ throw new SealMetricsAPIError(response.status, "API returned invalid JSON.", text.slice(0, 500));
79
+ }
80
+ }
12
81
  /**
13
82
  * Send an authenticated GET request. Unwraps the API envelope
14
83
  * and returns just the `data` field.
@@ -47,10 +116,29 @@ export class SealMetricsClient {
47
116
  return result;
48
117
  }
49
118
  async requestRaw(path, params) {
119
+ // Defense in depth (RF-3202/RF-3602): without an api_key the read-only tools
120
+ // are never registered, but if one is somehow invoked, fail with a clear
121
+ // AUTH_REQUIRED instead of sending an unauthenticated request.
122
+ if (!this.apiKey) {
123
+ throw new SealMetricsAPIError(401, "AUTH_REQUIRED: a SealMetrics api_key is required for data tools. " +
124
+ "Provision a site first (provision_site) or set SEALMETRICS_API_KEY.");
125
+ }
126
+ const apiKey = this.apiKey;
50
127
  const url = new URL(`${this.baseUrl}${path}`);
51
128
  if (params) {
52
129
  for (const [key, value] of Object.entries(params)) {
53
- if (value !== undefined && value !== "") {
130
+ if (value === undefined)
131
+ continue;
132
+ if (Array.isArray(value)) {
133
+ // Multi-value: append each entry as a repeated query param
134
+ // (FastAPI deserializes `?k=a&k=b` into a list[str]).
135
+ for (const item of value) {
136
+ if (item !== undefined && item !== "") {
137
+ url.searchParams.append(key, item);
138
+ }
139
+ }
140
+ }
141
+ else if (value !== "") {
54
142
  url.searchParams.set(key, value);
55
143
  }
56
144
  }
@@ -67,7 +155,7 @@ export class SealMetricsClient {
67
155
  const response = await fetch(url.toString(), {
68
156
  method: "GET",
69
157
  headers: {
70
- "X-API-Key": this.apiKey,
158
+ "X-API-Key": apiKey,
71
159
  Accept: "application/json",
72
160
  },
73
161
  signal: controller.signal,
@@ -94,7 +182,8 @@ export class SealMetricsClient {
94
182
  continue;
95
183
  }
96
184
  // Non-retryable error
97
- const siteId = params?.["site_id"] ?? params?.["account_id"] ?? undefined;
185
+ const siteIdRaw = params?.["site_id"] ?? params?.["account_id"] ?? undefined;
186
+ const siteId = typeof siteIdRaw === "string" ? siteIdRaw : undefined;
98
187
  throw mapHttpError(response.status, body, siteId);
99
188
  }
100
189
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,aAAa,GAAG,KAAK,CAAC;AAiB5B,MAAM,OAAO,iBAAiB;IAC5B;;;;;OAKG;IACK,MAAM,CAAqB;IAClB,OAAO,CAAS;IAEjC,YAAY,MAA0B,EAAE,OAAe;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,kFAAkF;IAClF,SAAS;QACP,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,qFAAqF;IACrF,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,uFAAuF;IACvF,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,CACR,IAAY,EACZ,IAAa,EACb,IAAgC;QAEhC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;SAC3B,CAAC;QACF,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QACjD,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACrC,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACzE,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC1B,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,MAAM,IAAI,mBAAmB,CAAC,CAAC,EAAE,qCAAqC,CAAC,CAAC;YAC1E,CAAC;YACD,MAAM,IAAI,mBAAmB,CAAC,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC7F,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,EAAE,4BAA4B,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,MAAsD;QAEtD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,IAAS,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CACjB,IAAY,EACZ,MAAsD;QAEtD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO,GAAmB,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CACpB,IAAY,EACZ,MAAsD;QAUtD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAQR;YACF,IAAI,EAAE,GAAG,CAAC,IAAW;YACrB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;YACrB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;YACnB,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC;YAC7B,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,KAAK;SAChC,CAAC;QACF,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI;YAAE,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QAC/D,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI;YAAE,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,IAAY,EACZ,MAAsD;QAEtD,6EAA6E;QAC7E,yEAAyE;QACzE,+DAA+D;QAC/D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,mBAAmB,CAC3B,GAAG,EACH,mEAAmE;gBACjE,qEAAqE,CACxE,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,2DAA2D;oBAC3D,sDAAsD;oBACtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;4BACtC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;wBACrC,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;oBACxB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,MAAM,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;gBACvD,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,kBAAkB,CACnB,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;oBAC3C,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE;wBACP,WAAW,EAAE,MAAM;wBACnB,MAAM,EAAE,kBAAkB;qBAC3B;oBACD,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;gBAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACnC,IAAI,CAAC;wBACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;oBAC5C,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,IAAI,mBAAmB,CAC3B,QAAQ,CAAC,MAAM,EACf,4BAA4B,EAC5B,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CACnB,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAEnC,4CAA4C;gBAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;oBACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;wBAC5B,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;wBACxE,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;4BACnB,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;wBAC1B,CAAC;oBACH,CAAC;oBACD,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChD,SAAS;gBACX,CAAC;gBAED,sBAAsB;gBACtB,MAAM,SAAS,GACb,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;gBAC7D,MAAM,MAAM,GACV,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxD,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;oBACzC,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,IACE,KAAK,YAAY,KAAK;oBACtB,KAAK,CAAC,IAAI,KAAK,YAAY,EAC3B,CAAC;oBACD,SAAS,GAAG,IAAI,mBAAmB,CACjC,CAAC,EACD,qCAAqC,CACtC,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,SAAS;oBACP,KAAK,YAAY,KAAK;wBACpB,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAC1C,+BAA+B;gBAC/B,SAAS;YACX,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,MAAM,CACJ,SAAS;YACT,IAAI,mBAAmB,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAC5D,CAAC;IACJ,CAAC;CACF;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,eAAe,CAAC,MAAqB;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;QACrD,OAAO,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Compile-time constants for the MCP write-path.
3
+ *
4
+ * The provision key is **publishable** (Fase 1, RF-202 / RF-1001 / VAL-3301): it
5
+ * only grants attribution + rate-limited access to POST /provision and is
6
+ * revocable per channel without republishing. It is NEVER a TOKEN_SECRET/
7
+ * API_KEY_SECRET.
8
+ *
9
+ * This is the **dedicated `mcp`-channel key** (RF-3205 / PRE-2), distinct from the
10
+ * CLI's `npx` key and the `pk_provision_fallback`. A separate key lets us revoke
11
+ * the chat-provisioning channel on its own:
12
+ * UPDATE provision_keys SET is_active=FALSE WHERE channel='mcp'; (VAL-3601)
13
+ * without touching the CLI. Override with SEALMETRICS_PROVISION_KEY when targeting
14
+ * local/PRE (the PROD key doesn't exist there — use `pk_provision_fallback`).
15
+ */
16
+ export declare const EMBEDDED_PROVISION_KEY = "pk_mcp_69bb5a1ec96f2cc4d5dd77be";
17
+ /** Publishable fallback key seeded in non-prod DBs (local/PRE) but NOT in PROD. */
18
+ export declare const FALLBACK_PROVISION_KEY = "pk_provision_fallback";
19
+ /** Attribution channel sent as `install_source` on /provision (RF-3205 / RF-3604). */
20
+ export declare const INSTALL_SOURCE = "mcp";
21
+ /** True for local/PRE base URLs, where the fallback provision key is auto-used. */
22
+ export declare function isNonProdTarget(baseUrl: string): boolean;
23
+ /**
24
+ * Resolve the provision key to embed in /provision requests. Precedence:
25
+ * explicit env (SEALMETRICS_PROVISION_KEY) > local/PRE auto-fallback > embedded
26
+ * PROD mcp-channel key (mirrors the CLI's resolveProvisionKey).
27
+ */
28
+ export declare function resolveProvisionKey(baseUrl: string): string;
29
+ //# sourceMappingURL=embedded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded.d.ts","sourceRoot":"","sources":["../src/embedded.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,oCAAoC,CAAC;AAExE,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D,sFAAsF;AACtF,eAAO,MAAM,cAAc,QAAQ,CAAC;AAEpC,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI3D"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Compile-time constants for the MCP write-path.
3
+ *
4
+ * The provision key is **publishable** (Fase 1, RF-202 / RF-1001 / VAL-3301): it
5
+ * only grants attribution + rate-limited access to POST /provision and is
6
+ * revocable per channel without republishing. It is NEVER a TOKEN_SECRET/
7
+ * API_KEY_SECRET.
8
+ *
9
+ * This is the **dedicated `mcp`-channel key** (RF-3205 / PRE-2), distinct from the
10
+ * CLI's `npx` key and the `pk_provision_fallback`. A separate key lets us revoke
11
+ * the chat-provisioning channel on its own:
12
+ * UPDATE provision_keys SET is_active=FALSE WHERE channel='mcp'; (VAL-3601)
13
+ * without touching the CLI. Override with SEALMETRICS_PROVISION_KEY when targeting
14
+ * local/PRE (the PROD key doesn't exist there — use `pk_provision_fallback`).
15
+ */
16
+ export const EMBEDDED_PROVISION_KEY = "pk_mcp_69bb5a1ec96f2cc4d5dd77be";
17
+ /** Publishable fallback key seeded in non-prod DBs (local/PRE) but NOT in PROD. */
18
+ export const FALLBACK_PROVISION_KEY = "pk_provision_fallback";
19
+ /** Attribution channel sent as `install_source` on /provision (RF-3205 / RF-3604). */
20
+ export const INSTALL_SOURCE = "mcp";
21
+ /** True for local/PRE base URLs, where the fallback provision key is auto-used. */
22
+ export function isNonProdTarget(baseUrl) {
23
+ return /localhost|127\.0\.0\.1|pre\.sealmetrics\.com/.test(baseUrl);
24
+ }
25
+ /**
26
+ * Resolve the provision key to embed in /provision requests. Precedence:
27
+ * explicit env (SEALMETRICS_PROVISION_KEY) > local/PRE auto-fallback > embedded
28
+ * PROD mcp-channel key (mirrors the CLI's resolveProvisionKey).
29
+ */
30
+ export function resolveProvisionKey(baseUrl) {
31
+ if (process.env.SEALMETRICS_PROVISION_KEY)
32
+ return process.env.SEALMETRICS_PROVISION_KEY;
33
+ if (isNonProdTarget(baseUrl))
34
+ return FALLBACK_PROVISION_KEY;
35
+ return EMBEDDED_PROVISION_KEY;
36
+ }
37
+ //# sourceMappingURL=embedded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded.js","sourceRoot":"","sources":["../src/embedded.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,iCAAiC,CAAC;AAExE,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAE9D,sFAAsF;AACtF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAEpC,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,8CAA8C,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACxF,IAAI,eAAe,CAAC,OAAO,CAAC;QAAE,OAAO,sBAAsB,CAAC;IAC5D,OAAO,sBAAsB,CAAC;AAChC,CAAC"}