mppx 0.4.9 → 0.4.11
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/CHANGELOG.md +25 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +155 -0
- package/dist/cli/cli.js.map +1 -1
- package/dist/discovery/Discovery.d.ts +146 -0
- package/dist/discovery/Discovery.d.ts.map +1 -0
- package/dist/discovery/Discovery.js +60 -0
- package/dist/discovery/Discovery.js.map +1 -0
- package/dist/discovery/OpenApi.d.ts +61 -0
- package/dist/discovery/OpenApi.d.ts.map +1 -0
- package/dist/discovery/OpenApi.js +139 -0
- package/dist/discovery/OpenApi.js.map +1 -0
- package/dist/discovery/Validate.d.ts +10 -0
- package/dist/discovery/Validate.d.ts.map +1 -0
- package/dist/discovery/Validate.js +63 -0
- package/dist/discovery/Validate.js.map +1 -0
- package/dist/discovery/index.d.ts +4 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +4 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/middlewares/elysia.d.ts +52 -1
- package/dist/middlewares/elysia.d.ts.map +1 -1
- package/dist/middlewares/elysia.js +17 -0
- package/dist/middlewares/elysia.js.map +1 -1
- package/dist/middlewares/express.d.ts +13 -1
- package/dist/middlewares/express.d.ts.map +1 -1
- package/dist/middlewares/express.js +18 -0
- package/dist/middlewares/express.js.map +1 -1
- package/dist/middlewares/hono.d.ts +19 -1
- package/dist/middlewares/hono.d.ts.map +1 -1
- package/dist/middlewares/hono.js +51 -0
- package/dist/middlewares/hono.js.map +1 -1
- package/dist/middlewares/internal/mppx.d.ts +4 -2
- package/dist/middlewares/internal/mppx.d.ts.map +1 -1
- package/dist/middlewares/internal/mppx.js +10 -3
- package/dist/middlewares/internal/mppx.js.map +1 -1
- package/dist/middlewares/nextjs.d.ts +11 -0
- package/dist/middlewares/nextjs.d.ts.map +1 -1
- package/dist/middlewares/nextjs.js +15 -0
- package/dist/middlewares/nextjs.js.map +1 -1
- package/dist/proxy/Proxy.d.ts +6 -0
- package/dist/proxy/Proxy.d.ts.map +1 -1
- package/dist/proxy/Proxy.js +56 -80
- package/dist/proxy/Proxy.js.map +1 -1
- package/dist/proxy/Service.d.ts +16 -23
- package/dist/proxy/Service.d.ts.map +1 -1
- package/dist/proxy/Service.js +19 -83
- package/dist/proxy/Service.js.map +1 -1
- package/dist/proxy/internal/Route.js +1 -1
- package/dist/proxy/internal/Route.js.map +1 -1
- package/dist/proxy/services/anthropic.d.ts.map +1 -1
- package/dist/proxy/services/anthropic.js +5 -0
- package/dist/proxy/services/anthropic.js.map +1 -1
- package/dist/proxy/services/openai.d.ts.map +1 -1
- package/dist/proxy/services/openai.js +6 -3
- package/dist/proxy/services/openai.js.map +1 -1
- package/dist/proxy/services/stripe.d.ts.map +1 -1
- package/dist/proxy/services/stripe.js +6 -3
- package/dist/proxy/services/stripe.js.map +1 -1
- package/dist/stripe/internal/types.d.ts +3 -0
- package/dist/stripe/internal/types.d.ts.map +1 -1
- package/dist/stripe/server/Charge.d.ts.map +1 -1
- package/dist/stripe/server/Charge.js +9 -2
- package/dist/stripe/server/Charge.js.map +1 -1
- package/dist/tempo/server/Session.d.ts.map +1 -1
- package/dist/tempo/server/Session.js +25 -8
- package/dist/tempo/server/Session.js.map +1 -1
- package/dist/tempo/server/internal/transport.d.ts.map +1 -1
- package/dist/tempo/server/internal/transport.js +8 -0
- package/dist/tempo/server/internal/transport.js.map +1 -1
- package/dist/tempo/session/Chain.js +1 -1
- package/dist/tempo/session/Chain.js.map +1 -1
- package/package.json +6 -1
- package/src/BodyDigest.test.ts +1 -1
- package/src/Challenge.fuzz.test.ts +121 -0
- package/src/Challenge.test-d.ts +1 -1
- package/src/Challenge.test.ts +1 -1
- package/src/Credential.fuzz.test.ts +62 -0
- package/src/Credential.test.ts +1 -1
- package/src/Errors.test.ts +1 -1
- package/src/Expires.test.ts +1 -1
- package/src/Method.test.ts +1 -1
- package/src/PaymentRequest.test.ts +1 -1
- package/src/Receipt.test.ts +1 -1
- package/src/Store.test-d.ts +1 -1
- package/src/Store.test.ts +1 -1
- package/src/cli/cli.test.ts +212 -1
- package/src/cli/cli.ts +162 -0
- package/src/client/Mppx.test-d.ts +1 -1
- package/src/client/Mppx.test.ts +1 -1
- package/src/client/Transport.test.ts +1 -1
- package/src/client/internal/Fetch.browser.test.ts +1 -1
- package/src/client/internal/Fetch.test-d.ts +1 -1
- package/src/client/internal/Fetch.test.ts +2 -1
- package/src/discovery/Discovery.test.ts +152 -0
- package/src/discovery/Discovery.ts +72 -0
- package/src/discovery/OpenApi.test.ts +425 -0
- package/src/discovery/OpenApi.ts +224 -0
- package/src/discovery/Validate.test.ts +188 -0
- package/src/discovery/Validate.ts +76 -0
- package/src/discovery/index.ts +3 -0
- package/src/internal/constantTimeEqual.test.ts +1 -1
- package/src/mcp-sdk/client/McpClient.test-d.ts +1 -1
- package/src/mcp-sdk/client/McpClient.test.ts +1 -1
- package/src/mcp-sdk/server/Transport.test.ts +1 -1
- package/src/middlewares/elysia.test.ts +27 -2
- package/src/middlewares/elysia.ts +35 -1
- package/src/middlewares/express.test.ts +35 -7
- package/src/middlewares/express.ts +34 -0
- package/src/middlewares/hono.test.ts +28 -6
- package/src/middlewares/hono.ts +73 -1
- package/src/middlewares/internal/mppx.test.ts +1 -1
- package/src/middlewares/internal/mppx.ts +14 -6
- package/src/middlewares/nextjs.test.ts +31 -6
- package/src/middlewares/nextjs.ts +28 -0
- package/src/proxy/Proxy.test.ts +54 -270
- package/src/proxy/Proxy.ts +71 -93
- package/src/proxy/Service.test.ts +23 -1
- package/src/proxy/Service.ts +40 -86
- package/src/proxy/internal/Headers.test.ts +1 -1
- package/src/proxy/internal/Route.test.ts +9 -1
- package/src/proxy/internal/Route.ts +1 -1
- package/src/proxy/services/anthropic.test.ts +132 -0
- package/src/proxy/services/anthropic.ts +5 -0
- package/src/proxy/services/openai.test.ts +1 -1
- package/src/proxy/services/openai.ts +6 -4
- package/src/proxy/services/stripe.test.ts +132 -0
- package/src/proxy/services/stripe.ts +6 -4
- package/src/server/Mppx.test-d.ts +1 -1
- package/src/server/Mppx.test.ts +2 -1
- package/src/server/NodeListener.test.ts +1 -1
- package/src/server/Request.test.ts +1 -1
- package/src/server/Response.test.ts +1 -1
- package/src/server/Transport.test.ts +1 -1
- package/src/stripe/Charge.integration.test.ts +1 -1
- package/src/stripe/Methods.test.ts +1 -1
- package/src/stripe/client/Charge.test.ts +1 -1
- package/src/stripe/internal/types.ts +5 -1
- package/src/stripe/server/Charge.test.ts +53 -2
- package/src/stripe/server/Charge.ts +12 -4
- package/src/tempo/Attribution.test.ts +1 -1
- package/src/tempo/Methods.test.ts +1 -1
- package/src/tempo/client/ChannelOps.test.ts +6 -3
- package/src/tempo/client/Session.test.ts +5 -2
- package/src/tempo/client/SessionManager.test.ts +1 -1
- package/src/tempo/internal/auto-swap.test.ts +1 -1
- package/src/tempo/internal/defaults.test.ts +1 -1
- package/src/tempo/internal/fee-payer.test.ts +1 -1
- package/src/tempo/server/Charge.test.ts +1 -1
- package/src/tempo/server/Session.test.ts +116 -37
- package/src/tempo/server/Session.ts +32 -11
- package/src/tempo/server/Sse.test.ts +1 -1
- package/src/tempo/server/internal/transport.test.ts +24 -1
- package/src/tempo/server/internal/transport.ts +11 -0
- package/src/tempo/session/Chain.test.ts +5 -2
- package/src/tempo/session/Chain.ts +1 -1
- package/src/tempo/session/Channel.test.ts +1 -1
- package/src/tempo/session/ChannelStore.test.ts +1 -1
- package/src/tempo/session/Receipt.test.ts +1 -1
- package/src/tempo/session/Sse.fuzz.test.ts +138 -0
- package/src/tempo/session/Sse.test.ts +1 -1
- package/src/tempo/session/Voucher.test.ts +1 -1
- package/src/viem/Account.test.ts +1 -1
- package/src/viem/Client.test.ts +1 -1
- package/src/zod.test.ts +147 -0
|
@@ -11,14 +11,21 @@ export function wrap(mppx, wrapper) {
|
|
|
11
11
|
for (const mi of mppx.methods) {
|
|
12
12
|
const key = `${mi.name}/${mi.intent}`;
|
|
13
13
|
const methodFn = mppx[key];
|
|
14
|
-
|
|
14
|
+
const wrapWithMeta = (options) => {
|
|
15
|
+
const configured = methodFn(options);
|
|
16
|
+
const handler = wrapper(methodFn, options);
|
|
17
|
+
if (configured._internal)
|
|
18
|
+
handler._internal = configured._internal;
|
|
19
|
+
return handler;
|
|
20
|
+
};
|
|
21
|
+
result[key] = wrapWithMeta;
|
|
15
22
|
// Also set shorthand intent key if Mppx registered it (no collision)
|
|
16
23
|
if (mppx[mi.intent])
|
|
17
|
-
result[mi.intent] =
|
|
24
|
+
result[mi.intent] = wrapWithMeta;
|
|
18
25
|
// Build nested handlers: wrapped.tempo.charge(...)
|
|
19
26
|
if (!result[mi.name] || typeof result[mi.name] !== 'object')
|
|
20
27
|
result[mi.name] = {};
|
|
21
|
-
result[mi.name][mi.intent] =
|
|
28
|
+
result[mi.name][mi.intent] = wrapWithMeta;
|
|
22
29
|
}
|
|
23
30
|
return result;
|
|
24
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mppx.js","sourceRoot":"","sources":["../../../src/middlewares/internal/mppx.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mppx.js","sourceRoot":"","sources":["../../../src/middlewares/internal/mppx.ts"],"names":[],"mappings":"AAgCA;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAClB,IAAU,EACV,OAAuD;IAEvD,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,IAAW,CAAA;IAC3C,MAAM,MAAM,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAA;IACnD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,OAAsC,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;QACrC,MAAM,QAAQ,GAAI,IAAY,CAAC,GAAG,CAAC,CAAA;QACnC,MAAM,YAAY,GAAG,CAAC,OAAY,EAAE,EAAE;YACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAQ,CAAA;YACjD,IAAI,UAAU,CAAC,SAAS;gBAAE,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;YAClE,OAAO,OAAO,CAAA;QAChB,CAAC,CAAA;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAA;QAC1B,qEAAqE;QACrE,IAAK,IAAY,CAAC,EAAE,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,YAAY,CAAA;QAC9D,mDAAmD;QACnD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ;YACzD,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAA6B,CAChD;QAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAA6B,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,YAAY,CAAA;IACzE,CAAC;IACD,OAAO,MAAe,CAAA;AACxB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type GenerateConfig, type RouteConfig } from '../discovery/OpenApi.js';
|
|
1
2
|
import * as Mppx_core from '../server/Mppx.js';
|
|
2
3
|
import * as Mppx_internal from './internal/mppx.js';
|
|
3
4
|
export * from '../server/Methods.js';
|
|
@@ -42,4 +43,14 @@ export declare namespace Mppx {
|
|
|
42
43
|
* ```
|
|
43
44
|
*/
|
|
44
45
|
export declare function payment<const intent extends Mppx_internal.AnyMethodFn>(intent: intent, options: intent extends (options: infer options) => any ? options : never, handler: RouteHandler): RouteHandler;
|
|
46
|
+
export type DiscoveryConfig = Omit<GenerateConfig, 'routes'> & {
|
|
47
|
+
routes?: RouteConfig[];
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Creates a route handler that serves an OpenAPI discovery document.
|
|
51
|
+
*/
|
|
52
|
+
export declare function discovery(mppx: {
|
|
53
|
+
methods: readonly Mppx_internal.AnyServer[];
|
|
54
|
+
realm: string;
|
|
55
|
+
}, config?: DiscoveryConfig): RouteHandler;
|
|
45
56
|
//# sourceMappingURL=nextjs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/middlewares/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAEpC,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAA;AAEtE,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,YAAY,CAAA;AAE5D,yBAAiB,IAAI,CAAC;IACpB;;;;;;;;;;;;;;;OAeG;IACH,SAAgB,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,CAAC,OAAO,EAC5D,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GACvC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAI5D;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,WAAW,EACpE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,OAAO,KAAK,GAAG,GAAG,OAAO,GAAG,KAAK,EACzE,OAAO,EAAE,YAAY,GACpB,YAAY,CAOd"}
|
|
1
|
+
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/middlewares/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACzF,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAEpC,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAA;AAEtE,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,YAAY,CAAA;AAE5D,yBAAiB,IAAI,CAAC;IACpB;;;;;;;;;;;;;;;OAeG;IACH,SAAgB,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,CAAC,OAAO,EAC5D,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GACvC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAI5D;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,WAAW,EACpE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,OAAO,KAAK,GAAG,GAAG,OAAO,GAAG,KAAK,EACzE,OAAO,EAAE,YAAY,GACpB,YAAY,CAOd;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG;IAC7D,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;CACvB,CAAA;AAID;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE;IAAE,OAAO,EAAE,SAAS,aAAa,CAAC,SAAS,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACpE,MAAM,GAAE,eAAoB,GAC3B,YAAY,CAad"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { generate } from '../discovery/OpenApi.js';
|
|
1
2
|
import * as Mppx_core from '../server/Mppx.js';
|
|
2
3
|
import * as Mppx_internal from './internal/mppx.js';
|
|
3
4
|
export * from '../server/Methods.js';
|
|
@@ -54,4 +55,18 @@ export function payment(intent, options, handler) {
|
|
|
54
55
|
return result.withReceipt(response);
|
|
55
56
|
};
|
|
56
57
|
}
|
|
58
|
+
const discoveryHeaders = { 'Cache-Control': 'public, max-age=300' };
|
|
59
|
+
/**
|
|
60
|
+
* Creates a route handler that serves an OpenAPI discovery document.
|
|
61
|
+
*/
|
|
62
|
+
export function discovery(mppx, config = {}) {
|
|
63
|
+
const cached = JSON.stringify(generate(mppx, {
|
|
64
|
+
...(config.info ? { info: config.info } : {}),
|
|
65
|
+
routes: config.routes ?? [],
|
|
66
|
+
...(config.serviceInfo ? { serviceInfo: config.serviceInfo } : {}),
|
|
67
|
+
}));
|
|
68
|
+
return () => new Response(cached, {
|
|
69
|
+
headers: { ...discoveryHeaders, 'Content-Type': 'application/json' },
|
|
70
|
+
});
|
|
71
|
+
}
|
|
57
72
|
//# sourceMappingURL=nextjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/middlewares/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAMpC,MAAM,KAAW,IAAI,CAwBpB;AAxBD,WAAiB,IAAI;IACnB;;;;;;;;;;;;;;;OAeG;IACH,SAAgB,MAAM,CACpB,MAAwC;QAExC,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YACtE,OAAO,CAAC,OAAqB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QACrE,CAAC,CAAC,CAAA;IACJ,CAAC;IANe,WAAM,SAMrB,CAAA;AACH,CAAC,EAxBgB,IAAI,KAAJ,IAAI,QAwBpB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,OAAyE,EACzE,OAAqB;IAErB,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAA;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC,SAAS,CAAA;QAClD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QACvC,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IACrC,CAAC,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/middlewares/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAyC,MAAM,yBAAyB,CAAA;AACzF,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAMpC,MAAM,KAAW,IAAI,CAwBpB;AAxBD,WAAiB,IAAI;IACnB;;;;;;;;;;;;;;;OAeG;IACH,SAAgB,MAAM,CACpB,MAAwC;QAExC,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YACtE,OAAO,CAAC,OAAqB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QACrE,CAAC,CAAC,CAAA;IACJ,CAAC;IANe,WAAM,SAMrB,CAAA;AACH,CAAC,EAxBgB,IAAI,KAAJ,IAAI,QAwBpB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,OAAyE,EACzE,OAAqB;IAErB,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAA;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC,SAAS,CAAA;QAClD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QACvC,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IACrC,CAAC,CAAA;AACH,CAAC;AAMD,MAAM,gBAAgB,GAAG,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAA;AAEnE;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,IAAoE,EACpE,SAA0B,EAAE;IAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAC3B,QAAQ,CAAC,IAAI,EAAE;QACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC,CACH,CAAA;IAED,OAAO,GAAG,EAAE,CACV,IAAI,QAAQ,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,EAAE,GAAG,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE;KACrE,CAAC,CAAA;AACN,CAAC"}
|
package/dist/proxy/Proxy.d.ts
CHANGED
|
@@ -38,14 +38,20 @@ export declare namespace create {
|
|
|
38
38
|
type Config = {
|
|
39
39
|
/** Base path prefix to strip before routing (e.g. `'/api/proxy'`). */
|
|
40
40
|
basePath?: string | undefined;
|
|
41
|
+
/** Free-form categories for root discovery metadata. */
|
|
42
|
+
categories?: string[] | undefined;
|
|
41
43
|
/** Short description of the proxy shown in `llms.txt`. */
|
|
42
44
|
description?: string | undefined;
|
|
45
|
+
/** Structured documentation links for root discovery metadata. */
|
|
46
|
+
docs?: Service.Docs | undefined;
|
|
43
47
|
/** Custom `fetch` implementation. Defaults to `globalThis.fetch`. */
|
|
44
48
|
fetch?: typeof globalThis.fetch | undefined;
|
|
45
49
|
/** Services to proxy. Each service is mounted at `/{serviceId}/`. */
|
|
46
50
|
services: Service.Service[];
|
|
47
51
|
/** Human-readable title for the proxy shown in `llms.txt`. */
|
|
48
52
|
title?: string | undefined;
|
|
53
|
+
/** Version to include in the generated OpenAPI document. */
|
|
54
|
+
version?: string | undefined;
|
|
49
55
|
};
|
|
50
56
|
}
|
|
51
57
|
//# sourceMappingURL=Proxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/Proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"Proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/Proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAA;AAQtC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC,kFAAkF;AAClF,MAAM,MAAM,KAAK,GAAG;IAClB,sFAAsF;IACtF,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC9C,uFAAuF;IACvF,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI,CAAA;CACxE,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAsGnD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAY,MAAM,GAAG;QACnB,sEAAsE;QACtE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B,wDAAwD;QACxD,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;QACjC,0DAA0D;QAC1D,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,kEAAkE;QAClE,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,GAAG,SAAS,CAAA;QAC/B,qEAAqE;QACrE,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,SAAS,CAAA;QAC3C,qEAAqE;QACrE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;QAC3B,8DAA8D;QAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B,4DAA4D;QAC5D,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;CACF"}
|
package/dist/proxy/Proxy.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createFetchProxy } from '@remix-run/fetch-proxy';
|
|
2
|
+
import { generateProxy } from '../discovery/OpenApi.js';
|
|
2
3
|
import * as Request from '../server/Request.js';
|
|
3
4
|
import * as Headers from './internal/Headers.js';
|
|
4
5
|
import * as Route from './internal/Route.js';
|
|
@@ -39,56 +40,39 @@ export function create(config) {
|
|
|
39
40
|
});
|
|
40
41
|
return [s.id, { service: s, proxy }];
|
|
41
42
|
}));
|
|
43
|
+
// Pre-generate static discovery responses once at startup.
|
|
44
|
+
const openApiJson = JSON.stringify(generateProxy({
|
|
45
|
+
basePath: config.basePath,
|
|
46
|
+
info: {
|
|
47
|
+
title: config.title ?? 'API Proxy',
|
|
48
|
+
version: config.version ?? '1.0.0',
|
|
49
|
+
},
|
|
50
|
+
routes: buildDiscoveryRoutes(config.services),
|
|
51
|
+
serviceInfo: buildServiceInfo(config),
|
|
52
|
+
}));
|
|
53
|
+
const llmsTxt = Service.toLlmsTxt(config.services, {
|
|
54
|
+
title: config.title,
|
|
55
|
+
description: config.description,
|
|
56
|
+
openApiPath: withBasePath(config.basePath, '/openapi.json'),
|
|
57
|
+
});
|
|
42
58
|
async function handle(request) {
|
|
43
59
|
const url = new URL(request.url);
|
|
44
60
|
const pathname = Route.pathname(url, config.basePath);
|
|
45
61
|
if (!pathname)
|
|
46
62
|
return new Response('Not Found', { status: 404 });
|
|
47
|
-
if (request.method === 'GET' && pathname === '/llms.txt')
|
|
48
|
-
return new Response(Service.toLlmsTxt(config.services, {
|
|
49
|
-
title: config.title,
|
|
50
|
-
description: config.description,
|
|
51
|
-
}), { headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
|
|
52
|
-
if (request.method === 'GET' && pathname === '/discover.md')
|
|
53
|
-
return new Response(Service.toLlmsTxt(config.services, {
|
|
54
|
-
title: config.title,
|
|
55
|
-
description: config.description,
|
|
56
|
-
}), { headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
|
|
57
|
-
if (request.method === 'GET' && (pathname === '/discover' || pathname === '/discover/')) {
|
|
58
|
-
if (wantsMarkdown(request))
|
|
59
|
-
return new Response(Service.toLlmsTxt(config.services, {
|
|
60
|
-
title: config.title,
|
|
61
|
-
description: config.description,
|
|
62
|
-
}), { headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
|
|
63
|
-
return Response.json(config.services.map(Service.serialize));
|
|
64
|
-
}
|
|
65
63
|
if (request.method === 'GET' &&
|
|
66
|
-
(pathname === '/
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
if (request.method === 'GET' && pathname === '/discover/all.md')
|
|
74
|
-
return new Response(Service.toServicesMarkdown(config.services), {
|
|
75
|
-
headers: { 'Content-Type': 'text/markdown; charset=utf-8' },
|
|
64
|
+
(pathname === '/openapi.json' || pathname === '/openapi.json/')) {
|
|
65
|
+
return new Response(openApiJson, {
|
|
66
|
+
headers: {
|
|
67
|
+
'Cache-Control': 'public, max-age=300',
|
|
68
|
+
'Content-Type': 'application/json',
|
|
69
|
+
},
|
|
76
70
|
});
|
|
77
|
-
{
|
|
78
|
-
// List service
|
|
79
|
-
const match = pathname.match(/^\/discover\/([^/]+)\.md$/) ?? pathname.match(/^\/discover\/([^/]+)\/?$/);
|
|
80
|
-
if (request.method === 'GET' && match) {
|
|
81
|
-
const service = config.services.find((s) => s.id === match[1]);
|
|
82
|
-
if (!service)
|
|
83
|
-
return new Response('Not Found', { status: 404 });
|
|
84
|
-
const wantsText = pathname.endsWith('.md') || wantsMarkdown(request);
|
|
85
|
-
if (wantsText)
|
|
86
|
-
return new Response(Service.toMarkdown(service), {
|
|
87
|
-
headers: { 'Content-Type': 'text/markdown; charset=utf-8' },
|
|
88
|
-
});
|
|
89
|
-
return Response.json(Service.serialize(service));
|
|
90
|
-
}
|
|
91
71
|
}
|
|
72
|
+
if (request.method === 'GET' && pathname === '/llms.txt')
|
|
73
|
+
return new Response(llmsTxt, {
|
|
74
|
+
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
|
|
75
|
+
});
|
|
92
76
|
const parsed = Route.parse(pathname);
|
|
93
77
|
if (!parsed)
|
|
94
78
|
return new Response('Not Found', { status: 404 });
|
|
@@ -155,43 +139,35 @@ async function proxyUpstream(options) {
|
|
|
155
139
|
upstreamRes = await service.rewriteResponse(upstreamRes, ctx);
|
|
156
140
|
return upstreamRes;
|
|
157
141
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
if (accept && (accept.includes('text/markdown') || accept.includes('text/plain')))
|
|
189
|
-
return true;
|
|
190
|
-
const ua = request.headers.get('user-agent') ?? '';
|
|
191
|
-
if (aiUserAgents.some((agent) => ua.includes(agent)))
|
|
192
|
-
return true;
|
|
193
|
-
if (terminalUserAgents.some((agent) => ua.includes(agent)))
|
|
194
|
-
return true;
|
|
195
|
-
return false;
|
|
142
|
+
function buildDiscoveryRoutes(services) {
|
|
143
|
+
return services.flatMap((service) => Object.entries(service.routes).map(([pattern, endpoint]) => {
|
|
144
|
+
const tokens = pattern.trim().split(/\s+/);
|
|
145
|
+
const hasMethod = tokens.length >= 2;
|
|
146
|
+
const path = hasMethod ? tokens.slice(1).join(' ') : tokens[0];
|
|
147
|
+
return {
|
|
148
|
+
method: hasMethod ? tokens[0] : 'GET',
|
|
149
|
+
path: `/${service.id}${path}`,
|
|
150
|
+
payment: endpoint ? Service.paymentOf(endpoint) : null,
|
|
151
|
+
};
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
function buildServiceInfo(config) {
|
|
155
|
+
const categories = config.categories ??
|
|
156
|
+
Array.from(new Set(config.services.flatMap((service) => service.categories ?? [])));
|
|
157
|
+
const docs = {
|
|
158
|
+
...(config.docs ?? {}),
|
|
159
|
+
llms: config.docs?.llms ?? withBasePath(config.basePath, '/llms.txt'),
|
|
160
|
+
};
|
|
161
|
+
return {
|
|
162
|
+
...(categories.length > 0 ? { categories } : {}),
|
|
163
|
+
docs,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function withBasePath(basePath, path) {
|
|
167
|
+
if (!basePath)
|
|
168
|
+
return path;
|
|
169
|
+
const normalized = basePath.startsWith('/') ? basePath : `/${basePath}`;
|
|
170
|
+
const trimmed = normalized.endsWith('/') ? normalized.slice(0, -1) : normalized;
|
|
171
|
+
return `${trimmed}${path}`;
|
|
196
172
|
}
|
|
197
173
|
//# sourceMappingURL=Proxy.js.map
|
package/dist/proxy/Proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Proxy.js","sourceRoot":"","sources":["../../src/proxy/Proxy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAUvC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,MAAM,CAAC,MAAqB;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IAElD,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,OAAO,EAAE;YACxC,KAAK,EAAE,SAAS;YAChB,mBAAmB,EAAE,KAAK;YAC1B,iBAAiB,EAAE,KAAK;SACzB,CAAC,CAAA;QACF,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAU,CAAA;IAC/C,CAAC,CAAC,CACH,CAAA;IAED,
|
|
1
|
+
{"version":3,"file":"Proxy.js","sourceRoot":"","sources":["../../src/proxy/Proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy/Service.d.ts
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
export type Service = {
|
|
3
3
|
/** Base URL of the upstream service (e.g. `'https://api.openai.com'`). */
|
|
4
4
|
baseUrl: string;
|
|
5
|
+
/** Free-form service categories for discovery metadata. */
|
|
6
|
+
categories?: string[] | undefined;
|
|
5
7
|
/** Short description of the service. */
|
|
6
8
|
description?: string | undefined;
|
|
9
|
+
/** Structured service documentation links for discovery metadata. */
|
|
10
|
+
docs?: Docs | undefined;
|
|
7
11
|
/** Unique identifier used as the URL prefix (e.g. `'openai'` → `/{id}/...`). */
|
|
8
12
|
id: string;
|
|
9
|
-
/** Returns a documentation URL. Called with no argument for the service root, or with a route pattern for per-endpoint docs. */
|
|
10
|
-
docsLlmsUrl?: ((options: {
|
|
11
|
-
route?: string | undefined;
|
|
12
|
-
}) => string | undefined) | undefined;
|
|
13
13
|
/** Hook to modify the upstream request before sending (e.g. inject auth headers). */
|
|
14
14
|
rewriteRequest?: ((req: Request, ctx: Context) => Request | Promise<Request>) | undefined;
|
|
15
15
|
/** Hook to modify the upstream response before returning to the client. */
|
|
@@ -19,6 +19,11 @@ export type Service = {
|
|
|
19
19
|
/** Human-readable title for the service (e.g. `'OpenAI'`). */
|
|
20
20
|
title?: string | undefined;
|
|
21
21
|
};
|
|
22
|
+
export type Docs = {
|
|
23
|
+
apiReference?: string | undefined;
|
|
24
|
+
homepage?: string | undefined;
|
|
25
|
+
llms?: string | undefined;
|
|
26
|
+
};
|
|
22
27
|
/**
|
|
23
28
|
* An endpoint definition.
|
|
24
29
|
*
|
|
@@ -79,8 +84,12 @@ export declare namespace from {
|
|
|
79
84
|
baseUrl: string;
|
|
80
85
|
/** Shorthand: inject `Authorization: Bearer {token}` header. */
|
|
81
86
|
bearer?: string | undefined;
|
|
87
|
+
/** Free-form service categories for discovery metadata. */
|
|
88
|
+
categories?: string[] | undefined;
|
|
82
89
|
/** Short description of the service. */
|
|
83
90
|
description?: string | undefined;
|
|
91
|
+
/** Structured service documentation links for discovery metadata. */
|
|
92
|
+
docs?: Docs | undefined;
|
|
84
93
|
/** Shorthand: inject custom headers. */
|
|
85
94
|
headers?: Record<string, string> | undefined;
|
|
86
95
|
/** Documentation URL for the service. String for a static base URL, or a function receiving an optional endpoint pattern. */
|
|
@@ -98,29 +107,13 @@ export declare namespace from {
|
|
|
98
107
|
};
|
|
99
108
|
}
|
|
100
109
|
export { from as custom };
|
|
101
|
-
/** Serializes a service for discovery responses. */
|
|
102
|
-
export declare function serialize(s: Service): {
|
|
103
|
-
description: string | undefined;
|
|
104
|
-
id: string;
|
|
105
|
-
docsLlmsUrl: string | undefined;
|
|
106
|
-
routes: {
|
|
107
|
-
docsLlmsUrl: string | undefined;
|
|
108
|
-
method: string | undefined;
|
|
109
|
-
path: string;
|
|
110
|
-
pattern: string;
|
|
111
|
-
payment: Record<string, unknown> | null;
|
|
112
|
-
}[];
|
|
113
|
-
title: string | undefined;
|
|
114
|
-
};
|
|
115
110
|
/** Renders an llms.txt markdown string for a list of services. */
|
|
116
111
|
export declare function toLlmsTxt(services: Service[], options?: {
|
|
117
|
-
title?: string | undefined;
|
|
118
112
|
description?: string | undefined;
|
|
113
|
+
openApiPath?: string | undefined;
|
|
114
|
+
title?: string | undefined;
|
|
119
115
|
}): string;
|
|
120
|
-
/** Renders a full markdown listing of all services with their routes. */
|
|
121
|
-
export declare function toServicesMarkdown(services: Service[]): string;
|
|
122
|
-
/** Renders a markdown string for a single service. */
|
|
123
|
-
export declare function toMarkdown(s: Service): string;
|
|
124
116
|
/** Extracts per-endpoint options from an endpoint definition. */
|
|
125
117
|
export declare function getOptions(endpoint: Endpoint): EndpointOptions | undefined;
|
|
118
|
+
export declare function paymentOf(endpoint: Endpoint): Record<string, unknown> | null;
|
|
126
119
|
//# sourceMappingURL=Service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Service.d.ts","sourceRoot":"","sources":["../../src/proxy/Service.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,MAAM,MAAM,OAAO,GAAG;IACpB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAA;IACf,
|
|
1
|
+
{"version":3,"file":"Service.d.ts","sourceRoot":"","sources":["../../src/proxy/Service.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,MAAM,MAAM,OAAO,GAAG;IACpB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IACjC,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,qEAAqE;IACrE,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;IACvB,gFAAgF;IAChF,EAAE,EAAE,MAAM,CAAA;IACV,qFAAqF;IACrF,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;IACzF,2EAA2E;IAC3E,eAAe,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAA;IAC7F,kDAAkD;IAClD,MAAM,EAAE,WAAW,CAAA;IACnB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC1B,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG;IAAE,GAAG,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAA;AAE9F,+DAA+D;AAC/D,MAAM,MAAM,WAAW,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GACzF,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;AAE/B,0EAA0E;AAC1E,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;AAErE,6FAA6F;AAC7F,MAAM,MAAM,YAAY,GACpB;IAAE,SAAS,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK,QAAQ,CAAA;CAAE,CAAA;AAE5E,sGAAsG;AACtG,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB,GAAG,eAAe,CAAA;AAEnB,MAAM,MAAM,IAAI,CACd,OAAO,SAAS;IACd,MAAM,EAAE,MAAM,CAAA;CACf,IACC;IACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;CACvC,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAE3B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAmBzF;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,KAAY,MAAM,CAAC,OAAO,GAAG,OAAO,IAAI;QACtC,wCAAwC;QACxC,OAAO,EAAE,MAAM,CAAA;QACf,gEAAgE;QAChE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B,2DAA2D;QAC3D,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;QACjC,wCAAwC;QACxC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,qEAAqE;QACrE,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;QACvB,wCAAwC;QACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;QAC5C,6HAA6H;QAC7H,WAAW,CAAC,EACR,MAAM,GACN,CAAC,CAAC,OAAO,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAAE,KAAK,MAAM,GAAG,SAAS,CAAC,GACjE,SAAS,CAAA;QACb,yFAAyF;QACzF,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;QACnE,0FAA0F;QAC1F,cAAc,CAAC,EACX,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GACpF,SAAS,CAAA;QACb,qDAAqD;QACrD,MAAM,EAAE,WAAW,CAAA;QACnB,4CAA4C;QAC5C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC3B,CAAA;CACF;AAED,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,CAAA;AAiCzB,kEAAkE;AAClE,wBAAgB,SAAS,CACvB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,GACA,MAAM,CAmBR;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,SAAS,CAI1E;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAkB5E"}
|
package/dist/proxy/Service.js
CHANGED
|
@@ -18,9 +18,10 @@ export function from(id, config) {
|
|
|
18
18
|
const rewriteFromConfig = resolveRewriteRequest(config);
|
|
19
19
|
return {
|
|
20
20
|
baseUrl: config.baseUrl,
|
|
21
|
+
categories: config.categories,
|
|
21
22
|
description: config.description,
|
|
23
|
+
docs: resolveDocs(config),
|
|
22
24
|
id,
|
|
23
|
-
docsLlmsUrl: resolveLlmsUrl(config.docsLlmsUrl),
|
|
24
25
|
routes: config.routes,
|
|
25
26
|
title: config.title,
|
|
26
27
|
rewriteRequest: config.rewriteRequest
|
|
@@ -63,27 +64,6 @@ function resolveRewriteRequest(config) {
|
|
|
63
64
|
}
|
|
64
65
|
return undefined;
|
|
65
66
|
}
|
|
66
|
-
/** Serializes a service for discovery responses. */
|
|
67
|
-
export function serialize(s) {
|
|
68
|
-
return {
|
|
69
|
-
description: s.description,
|
|
70
|
-
id: s.id,
|
|
71
|
-
docsLlmsUrl: s.docsLlmsUrl?.({}),
|
|
72
|
-
routes: Object.entries(s.routes).map(([pattern, endpoint]) => {
|
|
73
|
-
const tokens = pattern.trim().split(/\s+/);
|
|
74
|
-
const hasMethod = tokens.length >= 2;
|
|
75
|
-
const path = hasMethod ? tokens.slice(1).join(' ') : tokens[0];
|
|
76
|
-
return {
|
|
77
|
-
docsLlmsUrl: s.docsLlmsUrl?.({ route: pattern }),
|
|
78
|
-
method: hasMethod ? tokens[0] : undefined,
|
|
79
|
-
path: `/${s.id}${path}`,
|
|
80
|
-
pattern: hasMethod ? `${tokens[0]} /${s.id}${path}` : `/${s.id}${path}`,
|
|
81
|
-
payment: endpoint ? resolvePayment(endpoint) : null,
|
|
82
|
-
};
|
|
83
|
-
}),
|
|
84
|
-
title: s.title,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
67
|
/** Renders an llms.txt markdown string for a list of services. */
|
|
88
68
|
export function toLlmsTxt(services, options) {
|
|
89
69
|
const lines = [
|
|
@@ -98,77 +78,23 @@ export function toLlmsTxt(services, options) {
|
|
|
98
78
|
for (const s of services) {
|
|
99
79
|
const label = s.title ?? s.id;
|
|
100
80
|
const desc = s.description ? `: ${s.description}` : '';
|
|
101
|
-
lines.push(`-
|
|
102
|
-
}
|
|
103
|
-
lines.push('', '[See all service definitions](/discover/all.md)');
|
|
104
|
-
return lines.join('\n');
|
|
105
|
-
}
|
|
106
|
-
/** Renders a full markdown listing of all services with their routes. */
|
|
107
|
-
export function toServicesMarkdown(services) {
|
|
108
|
-
const lines = ['# Services', ''];
|
|
109
|
-
if (services.length === 0)
|
|
110
|
-
return lines.join('\n');
|
|
111
|
-
for (const s of services) {
|
|
112
|
-
lines.push(`## [${s.title ?? s.id}](/discover/${s.id}.md)`, '');
|
|
113
|
-
if (s.description)
|
|
114
|
-
lines.push(s.description, '');
|
|
115
|
-
pushRoutes(lines, s);
|
|
81
|
+
lines.push(`- ${label}${desc}`);
|
|
116
82
|
}
|
|
83
|
+
lines.push('', `[OpenAPI discovery](${options?.openApiPath ?? '/openapi.json'})`);
|
|
117
84
|
return lines.join('\n');
|
|
118
85
|
}
|
|
119
|
-
/** Renders a markdown string for a single service. */
|
|
120
|
-
export function toMarkdown(s) {
|
|
121
|
-
const docsLlmsUrl = s.docsLlmsUrl?.({});
|
|
122
|
-
const lines = [`# ${s.title ?? s.id}`, ''];
|
|
123
|
-
if (docsLlmsUrl)
|
|
124
|
-
lines.push(`> Documentation: ${docsLlmsUrl}`, '');
|
|
125
|
-
if (s.description)
|
|
126
|
-
lines.push(s.description, '');
|
|
127
|
-
pushRoutes(lines, s, '##');
|
|
128
|
-
return lines.join('\n');
|
|
129
|
-
}
|
|
130
|
-
function pushRoutes(lines, s, heading = '###') {
|
|
131
|
-
lines.push(`${heading} Routes`, '');
|
|
132
|
-
const serialized = serialize(s);
|
|
133
|
-
for (const route of serialized.routes) {
|
|
134
|
-
const p = route.payment;
|
|
135
|
-
const desc = p?.description ? `: ${p.description}` : '';
|
|
136
|
-
lines.push(`- \`${route.pattern}\`${desc}`);
|
|
137
|
-
if (!p) {
|
|
138
|
-
lines.push(' - Type: free');
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
lines.push(` - Type: ${p.intent}`);
|
|
142
|
-
if (p.amount) {
|
|
143
|
-
const perUnit = p.unitType ? `/${p.unitType}` : '';
|
|
144
|
-
if (p.decimals !== undefined) {
|
|
145
|
-
const price = Number(p.amount) / 10 ** Number(p.decimals);
|
|
146
|
-
lines.push(` - Price: ${price}${perUnit} (${p.amount} units, ${p.decimals} decimals)`);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
lines.push(` - Units: ${p.amount}${perUnit}`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
if (p.currency)
|
|
153
|
-
lines.push(` - Currency: ${p.currency}`);
|
|
154
|
-
}
|
|
155
|
-
if (route.docsLlmsUrl)
|
|
156
|
-
lines.push(` - Docs: ${route.docsLlmsUrl}`);
|
|
157
|
-
lines.push('');
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
86
|
/** Extracts per-endpoint options from an endpoint definition. */
|
|
161
87
|
export function getOptions(endpoint) {
|
|
162
88
|
if (typeof endpoint === 'object' && endpoint !== null && 'options' in endpoint)
|
|
163
89
|
return endpoint.options;
|
|
164
90
|
return undefined;
|
|
165
91
|
}
|
|
166
|
-
function
|
|
92
|
+
export function paymentOf(endpoint) {
|
|
167
93
|
if (endpoint === true)
|
|
168
94
|
return null;
|
|
169
95
|
const handler = typeof endpoint === 'function' ? endpoint : endpoint.pay;
|
|
170
96
|
if (!('_internal' in handler))
|
|
171
|
-
return
|
|
97
|
+
return null;
|
|
172
98
|
const { name, intent, defaults: _, schema: _s, _canonicalRequest, ...rest } = handler._internal;
|
|
173
99
|
const amount = (() => {
|
|
174
100
|
if (typeof rest.amount === 'string' && typeof rest.decimals === 'number')
|
|
@@ -177,11 +103,21 @@ function resolvePayment(endpoint) {
|
|
|
177
103
|
})();
|
|
178
104
|
return { intent, method: name, ...rest, ...(amount !== undefined && { amount }) };
|
|
179
105
|
}
|
|
180
|
-
function
|
|
106
|
+
function resolveDocs(config) {
|
|
107
|
+
if (config.docs) {
|
|
108
|
+
return {
|
|
109
|
+
...config.docs,
|
|
110
|
+
...(config.docs.llms ? {} : { llms: resolveLlmsFromLegacy(config.docsLlmsUrl) }),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const llms = resolveLlmsFromLegacy(config.docsLlmsUrl);
|
|
114
|
+
return llms ? { llms } : undefined;
|
|
115
|
+
}
|
|
116
|
+
function resolveLlmsFromLegacy(input) {
|
|
181
117
|
if (!input)
|
|
182
118
|
return undefined;
|
|
183
|
-
if (typeof input === '
|
|
119
|
+
if (typeof input === 'string')
|
|
184
120
|
return input;
|
|
185
|
-
return ({
|
|
121
|
+
return input({}) ?? undefined;
|
|
186
122
|
}
|
|
187
123
|
//# sourceMappingURL=Service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/proxy/Service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/proxy/Service.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ export function pathname(url, basePath) {
|
|
|
4
4
|
let pathname = url.pathname;
|
|
5
5
|
if (basePath) {
|
|
6
6
|
const base = basePath.replace(/\/+$/, '');
|
|
7
|
-
if (!pathname.startsWith(base))
|
|
7
|
+
if (!(pathname === base || pathname.startsWith(`${base}/`)))
|
|
8
8
|
return null;
|
|
9
9
|
pathname = pathname.slice(base.length);
|
|
10
10
|
}
|