satgate 1.5.1

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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/dist/bin/satgate.d.ts +3 -0
  4. package/dist/bin/satgate.d.ts.map +1 -0
  5. package/dist/bin/satgate.js +7 -0
  6. package/dist/bin/satgate.js.map +1 -0
  7. package/dist/src/auth/allowlist.d.ts +24 -0
  8. package/dist/src/auth/allowlist.d.ts.map +1 -0
  9. package/dist/src/auth/allowlist.js +130 -0
  10. package/dist/src/auth/allowlist.js.map +1 -0
  11. package/dist/src/auth/middleware.d.ts +15 -0
  12. package/dist/src/auth/middleware.d.ts.map +1 -0
  13. package/dist/src/auth/middleware.js +29 -0
  14. package/dist/src/auth/middleware.js.map +1 -0
  15. package/dist/src/cli.d.ts +2 -0
  16. package/dist/src/cli.d.ts.map +1 -0
  17. package/dist/src/cli.js +275 -0
  18. package/dist/src/cli.js.map +1 -0
  19. package/dist/src/config.d.ts +133 -0
  20. package/dist/src/config.d.ts.map +1 -0
  21. package/dist/src/config.js +237 -0
  22. package/dist/src/config.js.map +1 -0
  23. package/dist/src/discovery/llms-txt.d.ts +10 -0
  24. package/dist/src/discovery/llms-txt.d.ts.map +1 -0
  25. package/dist/src/discovery/llms-txt.js +25 -0
  26. package/dist/src/discovery/llms-txt.js.map +1 -0
  27. package/dist/src/discovery/openapi.d.ts +8 -0
  28. package/dist/src/discovery/openapi.d.ts.map +1 -0
  29. package/dist/src/discovery/openapi.js +116 -0
  30. package/dist/src/discovery/openapi.js.map +1 -0
  31. package/dist/src/discovery/well-known.d.ts +22 -0
  32. package/dist/src/discovery/well-known.d.ts.map +1 -0
  33. package/dist/src/discovery/well-known.js +44 -0
  34. package/dist/src/discovery/well-known.js.map +1 -0
  35. package/dist/src/index.d.ts +15 -0
  36. package/dist/src/index.d.ts.map +1 -0
  37. package/dist/src/index.js +15 -0
  38. package/dist/src/index.js.map +1 -0
  39. package/dist/src/lightning.d.ts +12 -0
  40. package/dist/src/lightning.d.ts.map +1 -0
  41. package/dist/src/lightning.js +38 -0
  42. package/dist/src/lightning.js.map +1 -0
  43. package/dist/src/logger.d.ts +16 -0
  44. package/dist/src/logger.d.ts.map +1 -0
  45. package/dist/src/logger.js +99 -0
  46. package/dist/src/logger.js.map +1 -0
  47. package/dist/src/proxy/capacity.d.ts +15 -0
  48. package/dist/src/proxy/capacity.d.ts.map +1 -0
  49. package/dist/src/proxy/capacity.js +28 -0
  50. package/dist/src/proxy/capacity.js.map +1 -0
  51. package/dist/src/proxy/handler.d.ts +27 -0
  52. package/dist/src/proxy/handler.d.ts.map +1 -0
  53. package/dist/src/proxy/handler.js +165 -0
  54. package/dist/src/proxy/handler.js.map +1 -0
  55. package/dist/src/proxy/pricing.d.ts +17 -0
  56. package/dist/src/proxy/pricing.d.ts.map +1 -0
  57. package/dist/src/proxy/pricing.js +42 -0
  58. package/dist/src/proxy/pricing.js.map +1 -0
  59. package/dist/src/proxy/streaming.d.ts +12 -0
  60. package/dist/src/proxy/streaming.d.ts.map +1 -0
  61. package/dist/src/proxy/streaming.js +68 -0
  62. package/dist/src/proxy/streaming.js.map +1 -0
  63. package/dist/src/proxy/token-counter.d.ts +22 -0
  64. package/dist/src/proxy/token-counter.d.ts.map +1 -0
  65. package/dist/src/proxy/token-counter.js +66 -0
  66. package/dist/src/proxy/token-counter.js.map +1 -0
  67. package/dist/src/server.d.ts +9 -0
  68. package/dist/src/server.d.ts.map +1 -0
  69. package/dist/src/server.js +239 -0
  70. package/dist/src/server.js.map +1 -0
  71. package/dist/src/tunnel.d.ts +26 -0
  72. package/dist/src/tunnel.d.ts.map +1 -0
  73. package/dist/src/tunnel.js +78 -0
  74. package/dist/src/tunnel.js.map +1 -0
  75. package/dist/src/x402/facilitator.d.ts +7 -0
  76. package/dist/src/x402/facilitator.d.ts.map +1 -0
  77. package/dist/src/x402/facilitator.js +33 -0
  78. package/dist/src/x402/facilitator.js.map +1 -0
  79. package/package.json +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ModelPricing } from '../config.js';
2
+ export interface LlmsTxtInput {
3
+ pricing: ModelPricing;
4
+ models: string[];
5
+ x402?: {
6
+ network: string;
7
+ };
8
+ }
9
+ export declare function generateLlmsTxt(input: LlmsTxtInput): string;
10
+ //# sourceMappingURL=llms-txt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llms-txt.d.ts","sourceRoot":"","sources":["../../../src/discovery/llms-txt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,YAAY,CAAA;IACrB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAwB3D"}
@@ -0,0 +1,25 @@
1
+ export function generateLlmsTxt(input) {
2
+ const modelLines = input.models.map((model) => {
3
+ const price = input.pricing.models[model] ?? input.pricing.default;
4
+ const unit = price === 1 ? 'sat' : 'sats';
5
+ return `- ${model} (${price} ${unit} / 1k tokens)`;
6
+ });
7
+ return `# satgate - Lightning-paid AI inference
8
+
9
+ > This endpoint provides OpenAI-compatible inference behind L402 payments.
10
+ > Pay with Lightning or Cashu. No account required.
11
+
12
+ ## Available Models
13
+ ${modelLines.join('\n')}
14
+
15
+ ## Usage
16
+ Send standard OpenAI-compatible requests to /v1/chat/completions.
17
+ First request returns 402 with a Lightning invoice.
18
+ Pay the invoice, then retry with the L402 credential.
19
+
20
+ ## Payment
21
+ POST /create-invoice to get a Lightning invoice.
22
+ Supports Lightning, NWC, and Cashu.
23
+ ${input.x402 ? `Also accepts x402 stablecoin payments (${input.x402.network} network).\n` : ''}`;
24
+ }
25
+ //# sourceMappingURL=llms-txt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llms-txt.js","sourceRoot":"","sources":["../../../src/discovery/llms-txt.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,eAAe,CAAC,KAAmB;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAA;QAClE,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAA;QACzC,OAAO,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,eAAe,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,OAAO;;;;;;EAMP,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;EAUrB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,0CAA0C,KAAK,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AAChG,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ModelPricing } from '../config.js';
2
+ export interface OpenApiInput {
3
+ models: string[];
4
+ pricing: ModelPricing;
5
+ x402?: boolean;
6
+ }
7
+ export declare function generateOpenApiSpec(input: OpenApiInput): Record<string, any>;
8
+ //# sourceMappingURL=openapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../../src/discovery/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,YAAY,CAAA;IACrB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAoH5E"}
@@ -0,0 +1,116 @@
1
+ export function generateOpenApiSpec(input) {
2
+ const spec = {
3
+ openapi: '3.1.0',
4
+ info: {
5
+ title: 'satgate',
6
+ description: 'Lightning-paid AI inference (OpenAI-compatible)',
7
+ version: '1.0.0',
8
+ },
9
+ paths: {
10
+ '/v1/chat/completions': {
11
+ post: {
12
+ summary: 'Chat completions',
13
+ description: 'OpenAI-compatible chat completions endpoint',
14
+ security: [{ l402: [] }],
15
+ requestBody: {
16
+ required: true,
17
+ content: {
18
+ 'application/json': {
19
+ schema: { $ref: '#/components/schemas/ChatCompletionRequest' },
20
+ },
21
+ },
22
+ },
23
+ responses: {
24
+ '200': { description: 'Successful completion' },
25
+ '402': { description: 'Payment required' },
26
+ '503': { description: 'Service at capacity' },
27
+ },
28
+ },
29
+ },
30
+ '/v1/completions': {
31
+ post: {
32
+ summary: 'Text completions (legacy)',
33
+ security: [{ l402: [] }],
34
+ responses: {
35
+ '200': { description: 'Successful completion' },
36
+ '402': { description: 'Payment required' },
37
+ },
38
+ },
39
+ },
40
+ '/v1/embeddings': {
41
+ post: {
42
+ summary: 'Embeddings',
43
+ security: [{ l402: [] }],
44
+ responses: {
45
+ '200': { description: 'Successful embedding' },
46
+ '402': { description: 'Payment required' },
47
+ },
48
+ },
49
+ },
50
+ '/v1/models': {
51
+ get: {
52
+ summary: 'List available models',
53
+ responses: {
54
+ '200': {
55
+ description: 'Available models',
56
+ content: {
57
+ 'application/json': {
58
+ example: {
59
+ data: input.models.map(id => ({ id, object: 'model' })),
60
+ },
61
+ },
62
+ },
63
+ },
64
+ },
65
+ },
66
+ },
67
+ '/create-invoice': {
68
+ post: {
69
+ summary: 'Create a Lightning invoice for credits',
70
+ responses: {
71
+ '200': { description: 'Invoice created' },
72
+ '429': { description: 'Rate limit exceeded' },
73
+ },
74
+ },
75
+ },
76
+ },
77
+ components: {
78
+ securitySchemes: {
79
+ l402: {
80
+ type: 'http',
81
+ scheme: 'L402',
82
+ description: 'L402 macaroon:preimage credentials',
83
+ },
84
+ },
85
+ schemas: {
86
+ ChatCompletionRequest: {
87
+ type: 'object',
88
+ required: ['model', 'messages'],
89
+ properties: {
90
+ model: { type: 'string', enum: input.models },
91
+ messages: {
92
+ type: 'array',
93
+ items: {
94
+ type: 'object',
95
+ properties: {
96
+ role: { type: 'string', enum: ['system', 'user', 'assistant'] },
97
+ content: { type: 'string' },
98
+ },
99
+ },
100
+ },
101
+ stream: { type: 'boolean', default: false },
102
+ },
103
+ },
104
+ },
105
+ },
106
+ };
107
+ if (input.x402) {
108
+ spec.components.securitySchemes.x402 = {
109
+ type: 'http',
110
+ scheme: 'x-payment',
111
+ description: 'x402 stablecoin payment via x-payment header',
112
+ };
113
+ }
114
+ return spec;
115
+ }
116
+ //# sourceMappingURL=openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../../src/discovery/openapi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ModelPricing } from '../config.js';
2
+ export interface WellKnownInput {
3
+ pricing: ModelPricing;
4
+ models: string[];
5
+ tiers: Array<{
6
+ amountSats: number;
7
+ creditSats: number;
8
+ label: string;
9
+ }>;
10
+ paymentMethods: string[];
11
+ freeTier?: {
12
+ creditsPerDay: number;
13
+ };
14
+ x402?: {
15
+ receiverAddress: string;
16
+ network: string;
17
+ asset?: string;
18
+ facilitatorUrl?: string;
19
+ };
20
+ }
21
+ export declare function generateWellKnown(input: WellKnownInput): Record<string, any>;
22
+ //# sourceMappingURL=well-known.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"well-known.d.ts","sourceRoot":"","sources":["../../../src/discovery/well-known.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,CAAA;IACrB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvE,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,IAAI,CAAC,EAAE;QACL,eAAe,EAAE,MAAM,CAAA;QACvB,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,cAAc,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;CACF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA6C5E"}
@@ -0,0 +1,44 @@
1
+ export function generateWellKnown(input) {
2
+ const modelPricing = {};
3
+ for (const [model, price] of Object.entries(input.pricing.models)) {
4
+ modelPricing[model] = { perThousandTokens: price };
5
+ }
6
+ const result = {
7
+ version: 1,
8
+ name: 'satgate',
9
+ description: 'Lightning-paid AI inference',
10
+ pricing: {
11
+ unit: 'tokens',
12
+ currency: 'SAT',
13
+ models: modelPricing,
14
+ default: { perThousandTokens: input.pricing.default },
15
+ },
16
+ endpoints: [
17
+ { path: '/v1/chat/completions', method: 'POST', description: 'Chat completions (OpenAI-compatible)' },
18
+ { path: '/v1/completions', method: 'POST', description: 'Text completions (legacy)' },
19
+ { path: '/v1/embeddings', method: 'POST', description: 'Embeddings' },
20
+ ],
21
+ payment: {
22
+ methods: input.paymentMethods,
23
+ createInvoice: '/create-invoice',
24
+ tiers: input.tiers.map(t => ({ amountSats: t.amountSats, creditSats: t.creditSats })),
25
+ },
26
+ capabilities: {
27
+ streaming: true,
28
+ models: input.models,
29
+ },
30
+ ...(input.freeTier && input.freeTier.creditsPerDay > 0 && {
31
+ free_tier: { credits_per_day: input.freeTier.creditsPerDay },
32
+ }),
33
+ };
34
+ if (input.x402) {
35
+ result.payment.x402 = {
36
+ receiver: input.x402.receiverAddress,
37
+ network: input.x402.network,
38
+ ...(input.x402.asset && { asset: input.x402.asset }),
39
+ ...(input.x402.facilitatorUrl && { facilitator: input.x402.facilitatorUrl }),
40
+ };
41
+ }
42
+ return result;
43
+ }
44
+ //# sourceMappingURL=well-known.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"well-known.js","sourceRoot":"","sources":["../../../src/discovery/well-known.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,iBAAiB,CAAC,KAAqB;IACrD,MAAM,YAAY,GAAkD,EAAE,CAAA;IACtE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClE,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAA;IACpD,CAAC;IAED,MAAM,MAAM,GAAwB;QAClC,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,EAAE,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;SACtD;QACD,SAAS,EAAE;YACT,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,sCAAsC,EAAE;YACrG,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,2BAA2B,EAAE;YACrF,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE;SACtE;QACD,OAAO,EAAE;YACP,OAAO,EAAE,KAAK,CAAC,cAAc;YAC7B,aAAa,EAAE,iBAAiB;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;SACtF;QACD,YAAY,EAAE;YACZ,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB;QACD,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,IAAI;YACxD,SAAS,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE;SAC7D,CAAC;KACH,CAAA;IAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG;YACpB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe;YACpC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO;YAC3B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;SAC7E,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,15 @@
1
+ export { createTokenTollServer, type TokenTollServer } from './server.js';
2
+ export { loadConfig, type TokenTollConfig, type CliArgs, type FileConfig, type ModelPricing } from './config.js';
3
+ export { createProxyHandler, type ProxyDeps } from './proxy/handler.js';
4
+ export { CapacityTracker } from './proxy/capacity.js';
5
+ export { TokenCounter } from './proxy/token-counter.js';
6
+ export { resolveModelPrice, tokenCostToSats } from './proxy/pricing.js';
7
+ export { createStreamingProxy } from './proxy/streaming.js';
8
+ export { generateWellKnown, type WellKnownInput } from './discovery/well-known.js';
9
+ export { generateLlmsTxt, type LlmsTxtInput } from './discovery/llms-txt.js';
10
+ export { generateOpenApiSpec, type OpenApiInput } from './discovery/openapi.js';
11
+ export { createAuthMiddleware, type AuthMiddlewareConfig } from './auth/middleware.js';
12
+ export { checkAllowlist, type AllowlistResult } from './auth/allowlist.js';
13
+ export { createLightningBackend, type LightningConfig } from './lightning.js';
14
+ export { startTunnel, stopTunnel, findCloudflared, parseTunnelUrl } from './tunnel.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAChH,OAAO,EAAE,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,15 @@
1
+ export { createTokenTollServer } from './server.js';
2
+ export { loadConfig } from './config.js';
3
+ export { createProxyHandler } from './proxy/handler.js';
4
+ export { CapacityTracker } from './proxy/capacity.js';
5
+ export { TokenCounter } from './proxy/token-counter.js';
6
+ export { resolveModelPrice, tokenCostToSats } from './proxy/pricing.js';
7
+ export { createStreamingProxy } from './proxy/streaming.js';
8
+ export { generateWellKnown } from './discovery/well-known.js';
9
+ export { generateLlmsTxt } from './discovery/llms-txt.js';
10
+ export { generateOpenApiSpec } from './discovery/openapi.js';
11
+ export { createAuthMiddleware } from './auth/middleware.js';
12
+ export { checkAllowlist } from './auth/allowlist.js';
13
+ export { createLightningBackend } from './lightning.js';
14
+ export { startTunnel, stopTunnel, findCloudflared, parseTunnelUrl } from './tunnel.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAwB,MAAM,aAAa,CAAA;AACzE,OAAO,EAAE,UAAU,EAA0E,MAAM,aAAa,CAAA;AAChH,OAAO,EAAE,kBAAkB,EAAkB,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAuB,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,eAAe,EAAqB,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAqB,MAAM,wBAAwB,CAAA;AAC/E,OAAO,EAAE,oBAAoB,EAA6B,MAAM,sBAAsB,CAAA;AACtF,OAAO,EAAE,cAAc,EAAwB,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAwB,MAAM,gBAAgB,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { LightningBackend } from '@thecryptodonkey/toll-booth';
2
+ export interface LightningConfig {
3
+ lightning?: string;
4
+ lightningUrl?: string;
5
+ lightningKey?: string;
6
+ }
7
+ /**
8
+ * Creates a Lightning backend from CLI/config options.
9
+ * Returns undefined if no backend is configured.
10
+ */
11
+ export declare function createLightningBackend(config: LightningConfig): LightningBackend | undefined;
12
+ //# sourceMappingURL=lightning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightning.d.ts","sourceRoot":"","sources":["../../src/lightning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAQnE,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAID;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS,CAqC5F"}
@@ -0,0 +1,38 @@
1
+ import { phoenixdBackend, lnbitsBackend, lndBackend, clnBackend, } from '@thecryptodonkey/toll-booth';
2
+ const HEX_RE = /^[0-9a-fA-F]+$/;
3
+ /**
4
+ * Creates a Lightning backend from CLI/config options.
5
+ * Returns undefined if no backend is configured.
6
+ */
7
+ export function createLightningBackend(config) {
8
+ if (!config.lightning)
9
+ return undefined;
10
+ if (!config.lightningKey) {
11
+ throw new Error('--lightning-key is required when --lightning is set');
12
+ }
13
+ if (!config.lightningUrl) {
14
+ throw new Error('--lightning-url is required when --lightning is set');
15
+ }
16
+ const url = config.lightningUrl;
17
+ switch (config.lightning) {
18
+ case 'phoenixd':
19
+ return phoenixdBackend({ url, password: config.lightningKey });
20
+ case 'lnbits':
21
+ return lnbitsBackend({ url, apiKey: config.lightningKey });
22
+ case 'lnd': {
23
+ // Hex string = inline macaroon, otherwise = file path
24
+ const isHex = HEX_RE.test(config.lightningKey);
25
+ return lndBackend({
26
+ url,
27
+ ...(isHex
28
+ ? { macaroon: config.lightningKey }
29
+ : { macaroonPath: config.lightningKey }),
30
+ });
31
+ }
32
+ case 'cln':
33
+ return clnBackend({ url, rune: config.lightningKey });
34
+ default:
35
+ throw new Error(`Unknown lightning backend: ${config.lightning}`);
36
+ }
37
+ }
38
+ //# sourceMappingURL=lightning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightning.js","sourceRoot":"","sources":["../../src/lightning.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,6BAA6B,CAAA;AAQpC,MAAM,MAAM,GAAG,gBAAgB,CAAA;AAE/B;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAuB;IAC5D,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,SAAS,CAAA;IAEvC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAA;IAE/B,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC;QACzB,KAAK,UAAU;YACb,OAAO,eAAe,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAA;QAEhE,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAA;QAE5D,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,sDAAsD;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YAC9C,OAAO,UAAU,CAAC;gBAChB,GAAG;gBACH,GAAG,CAAC,KAAK;oBACP,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE;oBACnC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;aAC3C,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,KAAK;YACR,OAAO,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAA;QAEvD;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;IACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { PaymentEvent, RequestEvent, ChallengeEvent } from '@thecryptodonkey/toll-booth';
2
+ export interface Logger {
3
+ challenge(event: ChallengeEvent): void;
4
+ payment(event: PaymentEvent): void;
5
+ request(event: RequestEvent): void;
6
+ error(message: string, context?: Record<string, unknown>): void;
7
+ info(message: string): void;
8
+ warn(message: string): void;
9
+ }
10
+ export declare function createNoopLogger(): Logger;
11
+ export interface LoggerOptions {
12
+ format: 'pretty' | 'json';
13
+ verbose: boolean;
14
+ }
15
+ export declare function createLogger(opts: LoggerOptions): Logger;
16
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE7F,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IACtC,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;IAClC,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;IAClC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CASzC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;CACjB;AA4FD,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAGxD"}
@@ -0,0 +1,99 @@
1
+ export function createNoopLogger() {
2
+ return {
3
+ challenge() { },
4
+ payment() { },
5
+ request() { },
6
+ error() { },
7
+ info() { },
8
+ warn() { },
9
+ };
10
+ }
11
+ function jsonLine(obj) {
12
+ process.stderr.write(JSON.stringify(obj) + '\n');
13
+ }
14
+ function createJsonLogger() {
15
+ return {
16
+ payment(event) {
17
+ jsonLine({ ts: event.timestamp, level: 'info', event: 'payment', ...event });
18
+ },
19
+ request(event) {
20
+ jsonLine({ ts: event.timestamp, level: 'info', event: 'request', ...event });
21
+ },
22
+ challenge(event) {
23
+ jsonLine({ ts: event.timestamp, level: 'info', event: 'challenge', ...event });
24
+ },
25
+ error(message, context) {
26
+ jsonLine({ ts: new Date().toISOString(), level: 'error', event: 'error', message, ...context });
27
+ },
28
+ info(message) {
29
+ jsonLine({ ts: new Date().toISOString(), level: 'info', event: 'info', message });
30
+ },
31
+ warn(message) {
32
+ jsonLine({ ts: new Date().toISOString(), level: 'warn', event: 'warn', message });
33
+ },
34
+ };
35
+ }
36
+ // ANSI colour helpers
37
+ const RESET = '\x1b[0m';
38
+ const GREEN = '\x1b[32m';
39
+ const DIM = '\x1b[2m';
40
+ const YELLOW = '\x1b[33m';
41
+ const CYAN = '\x1b[36m';
42
+ const RED = '\x1b[31m';
43
+ const WHITE = '\x1b[37m';
44
+ function truncHash(hash) {
45
+ return hash.length > 12 ? `${hash.slice(0, 6)}…${hash.slice(-6)}` : hash;
46
+ }
47
+ function createPrettyLogger(verbose) {
48
+ function write(line) {
49
+ process.stderr.write(line + '\n');
50
+ }
51
+ return {
52
+ payment(event) {
53
+ let line = `${GREEN}⚡ PAID ${event.amountSats} sats (hash=${truncHash(event.paymentHash)})${RESET}`;
54
+ if (verbose) {
55
+ const extras = [];
56
+ if (event.rail)
57
+ extras.push(`rail=${event.rail}`);
58
+ if (event.currency && event.currency !== 'sat')
59
+ extras.push(`currency=${event.currency}`);
60
+ if (extras.length > 0)
61
+ line += ` ${DIM}${extras.join(' ')}${RESET}`;
62
+ }
63
+ write(line);
64
+ },
65
+ request(event) {
66
+ const satLabel = event.satsDeducted === 1 ? '1 sat' : `${event.satsDeducted} sats`;
67
+ let line = `${DIM}→ REQUEST ${event.endpoint} ${event.latencyMs}ms ${satLabel} deducted (${event.remainingBalance} remaining)${RESET}`;
68
+ if (verbose) {
69
+ const extras = [`authenticated=${event.authenticated}`];
70
+ if (extras.length > 0)
71
+ line += ` ${extras.join(' ')}`;
72
+ }
73
+ write(line);
74
+ },
75
+ challenge(event) {
76
+ write(`${CYAN}🔒 CHALLENGE ${event.endpoint} → 402 (${event.amountSats} sats)${RESET}`);
77
+ },
78
+ error(message, context) {
79
+ let line = `${RED}⚠ ERROR ${message}${RESET}`;
80
+ if (context) {
81
+ const extras = Object.entries(context).map(([k, v]) => `${k}=${v}`).join(' ');
82
+ line += ` ${DIM}${extras}${RESET}`;
83
+ }
84
+ write(line);
85
+ },
86
+ info(message) {
87
+ write(`${WHITE}ℹ INFO ${message}${RESET}`);
88
+ },
89
+ warn(message) {
90
+ write(`${YELLOW}⚠ WARN ${message}${RESET}`);
91
+ },
92
+ };
93
+ }
94
+ export function createLogger(opts) {
95
+ if (opts.format === 'json')
96
+ return createJsonLogger();
97
+ return createPrettyLogger(opts.verbose);
98
+ }
99
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Tracks concurrent inference requests.
3
+ * maxConcurrent of 0 means unlimited.
4
+ */
5
+ export declare class CapacityTracker {
6
+ readonly maxConcurrent: number;
7
+ private _active;
8
+ constructor(maxConcurrent: number);
9
+ get active(): number;
10
+ /** Returns true if a slot was acquired, false if at capacity. */
11
+ tryAcquire(): boolean;
12
+ /** Releases a slot. */
13
+ release(): void;
14
+ }
15
+ //# sourceMappingURL=capacity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../../../src/proxy/capacity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,eAAe;IAEd,QAAQ,CAAC,aAAa,EAAE,MAAM;IAD1C,OAAO,CAAC,OAAO,CAAI;gBACE,aAAa,EAAE,MAAM;IAE1C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,iEAAiE;IACjE,UAAU,IAAI,OAAO;IAQrB,uBAAuB;IACvB,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Tracks concurrent inference requests.
3
+ * maxConcurrent of 0 means unlimited.
4
+ */
5
+ export class CapacityTracker {
6
+ maxConcurrent;
7
+ _active = 0;
8
+ constructor(maxConcurrent) {
9
+ this.maxConcurrent = maxConcurrent;
10
+ }
11
+ get active() {
12
+ return this._active;
13
+ }
14
+ /** Returns true if a slot was acquired, false if at capacity. */
15
+ tryAcquire() {
16
+ if (this.maxConcurrent > 0 && this._active >= this.maxConcurrent) {
17
+ return false;
18
+ }
19
+ this._active++;
20
+ return true;
21
+ }
22
+ /** Releases a slot. */
23
+ release() {
24
+ if (this._active > 0)
25
+ this._active--;
26
+ }
27
+ }
28
+ //# sourceMappingURL=capacity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capacity.js","sourceRoot":"","sources":["../../../src/proxy/capacity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,eAAe;IAEL;IADb,OAAO,GAAG,CAAC,CAAA;IACnB,YAAqB,aAAqB;QAArB,kBAAa,GAAb,aAAa,CAAQ;IAAG,CAAC;IAE9C,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,iEAAiE;IACjE,UAAU;QACR,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACjE,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAED,uBAAuB;IACvB,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC;YAAE,IAAI,CAAC,OAAO,EAAE,CAAA;IACtC,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import type { CapacityTracker } from './capacity.js';
2
+ import type { ModelPricing } from '../config.js';
3
+ import type { Logger } from '../logger.js';
4
+ export interface ProxyDeps {
5
+ upstream: string;
6
+ pricing: ModelPricing;
7
+ capacity: CapacityTracker;
8
+ reconcile: (paymentHash: string, actualCost: number) => {
9
+ adjusted: boolean;
10
+ newBalance: number;
11
+ delta: number;
12
+ };
13
+ maxBodySize: number;
14
+ /** When true, skip token-based reconciliation — a flat per-request fee was charged upfront. */
15
+ flatPricing?: boolean;
16
+ /** Timeout in ms for upstream requests (default: 120_000). */
17
+ upstreamTimeout?: number;
18
+ /** Logger instance — if omitted, errors are silent. */
19
+ logger?: Logger;
20
+ }
21
+ /**
22
+ * Creates the AI proxy handler.
23
+ *
24
+ * @returns A function that proxies a single inference request to the upstream.
25
+ */
26
+ export declare function createProxyHandler(deps: ProxyDeps): (req: Request, paymentHash: string | undefined) => Promise<Response>;
27
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/proxy/handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAK1C,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,eAAe,CAAA;IACzB,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAChH,WAAW,EAAE,MAAM,CAAA;IACnB,+FAA+F;IAC/F,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AASD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,IAE9C,KAAK,OAAO,EACZ,aAAa,MAAM,GAAG,SAAS,KAC9B,OAAO,CAAC,QAAQ,CAAC,CA8LrB"}