meridianjs 0.1.1 → 0.1.3

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 CHANGED
@@ -115,6 +115,58 @@ Each configured provider exposes a client with:
115
115
  - `delete<T>(endpoint: string, options?: RequestOptions): Promise<NormalizedResponse<T>>`
116
116
  - `paginate<T>(endpoint: string, options?: RequestOptions): AsyncGenerator<NormalizedResponse<T>>`
117
117
 
118
+ ## Claw Code Integration (Agent Proxy)
119
+
120
+ Meridian ships a built-in HTTP proxy that lets AI agents (such as [Claw Code](https://github.com/instructkr)) route all outbound API calls through the Meridian pipeline automatically — rate limiting, circuit breaking, and secret redaction apply to every request without any changes to the agent runtime.
121
+
122
+ ### Start the proxy
123
+
124
+ ```bash
125
+ # After installing meridianjs
126
+ export GITHUB_TOKEN="ghp_..."
127
+ export ANTHROPIC_API_KEY="sk-ant-..."
128
+ export OPENAI_API_KEY="sk-..."
129
+ export STRIPE_SECRET_KEY="sk_live_..."
130
+
131
+ npx boundary-proxy # listens on http://127.0.0.1:4242
132
+ npx boundary-proxy 8080 # custom port
133
+ BOUNDARY_PROXY_PORT=9000 npx boundary-proxy
134
+ ```
135
+
136
+ ### Route pattern
137
+
138
+ ```
139
+ http://127.0.0.1:4242/<provider>/<endpoint>
140
+ ```
141
+
142
+ | Example | Forwards to |
143
+ |---|---|
144
+ | `GET /github/repos/octocat/Hello-World` | `GET https://api.github.com/repos/octocat/Hello-World` |
145
+ | `POST /anthropic/v1/messages` | `POST https://api.anthropic.com/v1/messages` |
146
+ | `GET /openai/v1/models` | `GET https://api.openai.com/v1/models` |
147
+ | `GET /stripe/v1/customers` | `GET https://api.stripe.com/v1/customers` |
148
+
149
+ Every response is a `NormalizedResponse<T>` with a consistent `{ data, meta }` shape regardless of provider.
150
+
151
+ ### Embed programmatically
152
+
153
+ ```typescript
154
+ import { BoundaryProxyServer } from "meridianjs";
155
+
156
+ const proxy = new BoundaryProxyServer({
157
+ port: 4242,
158
+ providers: {
159
+ github: { token: process.env.GITHUB_TOKEN },
160
+ anthropic: { apiKey: process.env.ANTHROPIC_API_KEY },
161
+ openai: { apiKey: process.env.OPENAI_API_KEY },
162
+ stripe: { apiKey: process.env.STRIPE_SECRET_KEY },
163
+ },
164
+ });
165
+
166
+ await proxy.start();
167
+ // → [Boundary Proxy] Listening on http://127.0.0.1:4242
168
+ ```
169
+
118
170
  ## Project Status
119
171
 
120
172
  **v0.1.0** - Early release. Core functionality is stable and tested. Provider support includes Anthropic, OpenAI, Stripe, and GitHub out of the box. API may evolve based on real-world feedback before v1.0.
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Boundary Proxy — CLI entrypoint
4
+ *
5
+ * Starts a local HTTP proxy that routes agent tool calls through the
6
+ * Boundary (Meridian) pipeline: rate limiting, circuit breaking, and
7
+ * secret redaction are applied automatically to every request.
8
+ *
9
+ * Usage:
10
+ * node dist/proxy/cli.js [port]
11
+ * BOUNDARY_PROXY_PORT=4242 node dist/proxy/cli.js
12
+ *
13
+ * Environment variables for provider credentials:
14
+ * GITHUB_TOKEN — GitHub personal access token
15
+ * ANTHROPIC_API_KEY — Anthropic API key
16
+ * OPENAI_API_KEY — OpenAI API key
17
+ * STRIPE_SECRET_KEY — Stripe secret key
18
+ *
19
+ * Point your Claw agent at:
20
+ * http://127.0.0.1:<port>/<provider>/<endpoint>
21
+ *
22
+ * Example:
23
+ * http://127.0.0.1:4242/github/repos/octocat/Hello-World
24
+ * http://127.0.0.1:4242/anthropic/v1/messages
25
+ */
26
+ export {};
27
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/proxy/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Boundary Proxy — CLI entrypoint
4
+ *
5
+ * Starts a local HTTP proxy that routes agent tool calls through the
6
+ * Boundary (Meridian) pipeline: rate limiting, circuit breaking, and
7
+ * secret redaction are applied automatically to every request.
8
+ *
9
+ * Usage:
10
+ * node dist/proxy/cli.js [port]
11
+ * BOUNDARY_PROXY_PORT=4242 node dist/proxy/cli.js
12
+ *
13
+ * Environment variables for provider credentials:
14
+ * GITHUB_TOKEN — GitHub personal access token
15
+ * ANTHROPIC_API_KEY — Anthropic API key
16
+ * OPENAI_API_KEY — OpenAI API key
17
+ * STRIPE_SECRET_KEY — Stripe secret key
18
+ *
19
+ * Point your Claw agent at:
20
+ * http://127.0.0.1:<port>/<provider>/<endpoint>
21
+ *
22
+ * Example:
23
+ * http://127.0.0.1:4242/github/repos/octocat/Hello-World
24
+ * http://127.0.0.1:4242/anthropic/v1/messages
25
+ */
26
+ import { BoundaryProxyServer } from "./server.js";
27
+ const portArg = process.env.BOUNDARY_PROXY_PORT ?? process.argv[2];
28
+ const port = portArg ? parseInt(portArg, 10) : 4242;
29
+ if (Number.isNaN(port) || port < 1 || port > 65535) {
30
+ console.error(`[Boundary Proxy] Invalid port: "${portArg}". Must be 1–65535.`);
31
+ process.exit(1);
32
+ }
33
+ const server = new BoundaryProxyServer({ port });
34
+ server.start().catch((err) => {
35
+ console.error("[Boundary Proxy] Failed to start:", err);
36
+ process.exit(1);
37
+ });
38
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/proxy/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAEpD,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;IACnD,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,qBAAqB,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAEjD,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACpC,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { BoundaryProxyServer } from "./server.js";
2
+ export type { ProxyServerOptions } from "./server.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { BoundaryProxyServer } from "./server.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,24 @@
1
+ declare const SUPPORTED_PROVIDERS: readonly ["github", "anthropic", "openai", "stripe"];
2
+ type SupportedProvider = (typeof SUPPORTED_PROVIDERS)[number];
3
+ export interface ProxyServerOptions {
4
+ /** Port to listen on. Defaults to 4242. */
5
+ port?: number;
6
+ /** Host to bind to. Defaults to 127.0.0.1. */
7
+ host?: string;
8
+ /** Override credentials per provider. Falls back to environment variables. */
9
+ providers?: Partial<Record<SupportedProvider, {
10
+ token?: string;
11
+ apiKey?: string;
12
+ }>>;
13
+ }
14
+ export declare class BoundaryProxyServer {
15
+ private meridian;
16
+ private readonly port;
17
+ private readonly host;
18
+ private readonly opts;
19
+ constructor(opts?: ProxyServerOptions);
20
+ start(): Promise<void>;
21
+ private handleRequest;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,mBAAmB,sDAAuD,CAAC;AACjF,KAAK,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACrF;AAqED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;gBAE9B,IAAI,GAAE,kBAAuB;IAMnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAyBd,aAAa;CAoF5B"}
@@ -0,0 +1,165 @@
1
+ import { createServer } from "node:http";
2
+ import { Meridian } from "../index.js";
3
+ const SUPPORTED_PROVIDERS = ["github", "anthropic", "openai", "stripe"];
4
+ function buildMeridianConfig(opts) {
5
+ const providerConfigs = {
6
+ github: {
7
+ auth: {
8
+ token: opts.providers?.github?.token ??
9
+ process.env.GITHUB_TOKEN ??
10
+ "",
11
+ },
12
+ },
13
+ anthropic: {
14
+ auth: {
15
+ apiKey: opts.providers?.anthropic?.apiKey ??
16
+ process.env.ANTHROPIC_API_KEY ??
17
+ "",
18
+ },
19
+ },
20
+ openai: {
21
+ auth: {
22
+ apiKey: opts.providers?.openai?.apiKey ??
23
+ process.env.OPENAI_API_KEY ??
24
+ "",
25
+ },
26
+ },
27
+ stripe: {
28
+ auth: {
29
+ apiKey: opts.providers?.stripe?.apiKey ??
30
+ process.env.STRIPE_SECRET_KEY ??
31
+ "",
32
+ },
33
+ },
34
+ };
35
+ return {
36
+ providers: providerConfigs,
37
+ localUnsafe: true,
38
+ };
39
+ }
40
+ async function readBody(req) {
41
+ return new Promise((resolve, reject) => {
42
+ const chunks = [];
43
+ req.on("data", (chunk) => chunks.push(chunk));
44
+ req.on("end", () => {
45
+ const raw = Buffer.concat(chunks).toString("utf8");
46
+ if (!raw) {
47
+ resolve(undefined);
48
+ return;
49
+ }
50
+ try {
51
+ resolve(JSON.parse(raw));
52
+ }
53
+ catch {
54
+ resolve(raw);
55
+ }
56
+ });
57
+ req.on("error", reject);
58
+ });
59
+ }
60
+ function sendJson(res, status, body) {
61
+ res.writeHead(status, { "Content-Type": "application/json" });
62
+ res.end(JSON.stringify(body));
63
+ }
64
+ export class BoundaryProxyServer {
65
+ meridian = null;
66
+ port;
67
+ host;
68
+ opts;
69
+ constructor(opts = {}) {
70
+ this.opts = opts;
71
+ this.port = opts.port ?? 4242;
72
+ this.host = opts.host ?? "127.0.0.1";
73
+ }
74
+ async start() {
75
+ const config = buildMeridianConfig(this.opts);
76
+ this.meridian = await Meridian.create(config);
77
+ const server = createServer((req, res) => {
78
+ this.handleRequest(req, res).catch((err) => {
79
+ sendJson(res, 500, {
80
+ error: err instanceof Error ? err.message : String(err),
81
+ });
82
+ });
83
+ });
84
+ await new Promise((resolve) => {
85
+ server.listen(this.port, this.host, resolve);
86
+ });
87
+ console.log(`[Boundary Proxy] Listening on http://${this.host}:${this.port}`);
88
+ console.log(`[Boundary Proxy] Usage: http://${this.host}:${this.port}/<provider>/<endpoint>`);
89
+ console.log(`[Boundary Proxy] Providers: ${SUPPORTED_PROVIDERS.join(", ")}`);
90
+ }
91
+ async handleRequest(req, res) {
92
+ const url = new URL(req.url ?? "/", `http://${this.host}`);
93
+ const parts = url.pathname.replace(/^\//, "").split("/");
94
+ const provider = parts[0];
95
+ const endpoint = "/" + parts.slice(1).join("/");
96
+ if (!provider) {
97
+ sendJson(res, 400, {
98
+ error: "Missing provider in path.",
99
+ usage: `http://${this.host}:${this.port}/<provider>/<endpoint>`,
100
+ providers: SUPPORTED_PROVIDERS,
101
+ });
102
+ return;
103
+ }
104
+ const providerClient = this.meridian?.provider(provider);
105
+ if (!providerClient) {
106
+ sendJson(res, 404, {
107
+ error: `Unknown provider: "${provider}"`,
108
+ providers: SUPPORTED_PROVIDERS,
109
+ });
110
+ return;
111
+ }
112
+ const method = (req.method ?? "GET").toUpperCase();
113
+ const query = {};
114
+ url.searchParams.forEach((val, key) => {
115
+ query[key] = val;
116
+ });
117
+ // Forward incoming headers, excluding hop-by-hop headers
118
+ const headers = {};
119
+ for (const [k, v] of Object.entries(req.headers)) {
120
+ if (typeof v === "string" && k !== "host" && k !== "connection") {
121
+ headers[k] = v;
122
+ }
123
+ }
124
+ const body = method === "POST" || method === "PUT" || method === "PATCH"
125
+ ? await readBody(req)
126
+ : undefined;
127
+ const options = { headers };
128
+ options.method = method;
129
+ if (Object.keys(query).length > 0)
130
+ options.query = query;
131
+ if (body !== undefined)
132
+ options.body = body;
133
+ try {
134
+ let response;
135
+ switch (method) {
136
+ case "POST":
137
+ response = await providerClient.post(endpoint, options);
138
+ break;
139
+ case "PUT":
140
+ response = await providerClient.put(endpoint, options);
141
+ break;
142
+ case "PATCH":
143
+ response = await providerClient.patch(endpoint, options);
144
+ break;
145
+ case "DELETE":
146
+ response = await providerClient.delete(endpoint, options);
147
+ break;
148
+ default:
149
+ response = await providerClient.get(endpoint, options);
150
+ }
151
+ sendJson(res, 200, response);
152
+ }
153
+ catch (err) {
154
+ const status = typeof err?.status === "number" ? err.status : 502;
155
+ sendJson(res, status, {
156
+ error: err instanceof Error ? err.message : String(err),
157
+ code: err?.code,
158
+ category: err?.category,
159
+ retryable: err?.retryable ?? false,
160
+ provider,
161
+ });
162
+ }
163
+ }
164
+ }
165
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"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"}
package/dist/public.d.ts CHANGED
@@ -24,4 +24,6 @@ export { AnthropicAdapter } from "./providers/anthropic/adapter.js";
24
24
  export { OpenAIAdapter } from "./providers/openai/adapter.js";
25
25
  export { StripeAdapter } from "./providers/stripe/adapter.js";
26
26
  export { GitHubAdapter } from "./providers/github/adapter.js";
27
+ export { BoundaryProxyServer } from "./proxy/server.js";
28
+ export type { ProxyServerOptions } from "./proxy/server.js";
27
29
  //# sourceMappingURL=public.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGhF,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG7D,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,MAAM,GACP,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,YAAY,EACV,MAAM,EACN,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGhF,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG7D,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,MAAM,GACP,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,YAAY,EACV,MAAM,EACN,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/public.js CHANGED
@@ -20,4 +20,6 @@ export { AnthropicAdapter } from "./providers/anthropic/adapter.js";
20
20
  export { OpenAIAdapter } from "./providers/openai/adapter.js";
21
21
  export { StripeAdapter } from "./providers/stripe/adapter.js";
22
22
  export { GitHubAdapter } from "./providers/github/adapter.js";
23
+ // Claw / agent proxy integration
24
+ export { BoundaryProxyServer } from "./proxy/server.js";
23
25
  //# sourceMappingURL=public.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.js","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,cAAc;AACd,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AActC,+BAA+B;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAqBhD,kCAAkC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAK5D,4BAA4B;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,wBAAwB;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAa/C,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,cAAc;AACd,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AActC,+BAA+B;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAqBhD,kCAAkC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAK5D,4BAA4B;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,wBAAwB;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAa/C,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,iCAAiC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "meridianjs",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Meridian - A TypeScript-first SDK that enforces a single stable contract across all third-party API providers",
5
5
  "main": "dist/public.js",
6
6
  "types": "dist/public.d.ts",
@@ -25,7 +25,12 @@
25
25
  "test:watch": "vitest --watch",
26
26
  "lint": "biome check .",
27
27
  "format": "biome format --write .",
28
- "prepublishOnly": "npm run build"
28
+ "prepublishOnly": "npm run build",
29
+ "proxy": "node dist/proxy/cli.js",
30
+ "proxy:build": "npm run build && npm run proxy"
31
+ },
32
+ "bin": {
33
+ "boundary-proxy": "dist/proxy/cli.js"
29
34
  },
30
35
  "keywords": [
31
36
  "api",
@@ -38,7 +43,7 @@
38
43
  "license": "MIT",
39
44
  "repository": {
40
45
  "type": "git",
41
- "url": "https://github.com/Raghaverma/meridian"
46
+ "url": "https://github.com/Raghaverma/meridianjs"
42
47
  },
43
48
  "engines": {
44
49
  "node": ">=18.0.0"