interceptr 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +287 -0
  2. package/dist/app.d.ts +3 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +30 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +35 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config/store.d.ts +65 -0
  11. package/dist/config/store.d.ts.map +1 -0
  12. package/dist/config/store.js +448 -0
  13. package/dist/config/store.js.map +1 -0
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +18 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/logging/ring-buffer.d.ts +15 -0
  19. package/dist/logging/ring-buffer.d.ts.map +1 -0
  20. package/dist/logging/ring-buffer.js +64 -0
  21. package/dist/logging/ring-buffer.js.map +1 -0
  22. package/dist/logging/sse.d.ts +11 -0
  23. package/dist/logging/sse.d.ts.map +1 -0
  24. package/dist/logging/sse.js +23 -0
  25. package/dist/logging/sse.js.map +1 -0
  26. package/dist/openapi/parser.d.ts +7 -0
  27. package/dist/openapi/parser.d.ts.map +1 -0
  28. package/dist/openapi/parser.js +97 -0
  29. package/dist/openapi/parser.js.map +1 -0
  30. package/dist/proxy/handler.d.ts +2 -0
  31. package/dist/proxy/handler.d.ts.map +1 -0
  32. package/dist/proxy/handler.js +115 -0
  33. package/dist/proxy/handler.js.map +1 -0
  34. package/dist/proxy/lifecycle.d.ts +9 -0
  35. package/dist/proxy/lifecycle.d.ts.map +1 -0
  36. package/dist/proxy/lifecycle.js +53 -0
  37. package/dist/proxy/lifecycle.js.map +1 -0
  38. package/dist/proxy/matcher.d.ts +9 -0
  39. package/dist/proxy/matcher.d.ts.map +1 -0
  40. package/dist/proxy/matcher.js +59 -0
  41. package/dist/proxy/matcher.js.map +1 -0
  42. package/dist/proxy.d.ts +3 -0
  43. package/dist/proxy.d.ts.map +1 -0
  44. package/dist/proxy.js +8 -0
  45. package/dist/proxy.js.map +1 -0
  46. package/dist/public/assets/favicon-16x16-DulSRrIm.png +0 -0
  47. package/dist/public/assets/favicon-32x32-BBwAW6Wa.png +0 -0
  48. package/dist/public/assets/index-BRKg43V6.js +29 -0
  49. package/dist/public/assets/index-IdN9Napd.css +1 -0
  50. package/dist/public/assets/logo-full-DJtzE5xc.png +0 -0
  51. package/dist/public/index.html +19 -0
  52. package/dist/routes/config.d.ts +4 -0
  53. package/dist/routes/config.d.ts.map +1 -0
  54. package/dist/routes/config.js +29 -0
  55. package/dist/routes/config.js.map +1 -0
  56. package/dist/routes/endpoints.d.ts +4 -0
  57. package/dist/routes/endpoints.d.ts.map +1 -0
  58. package/dist/routes/endpoints.js +29 -0
  59. package/dist/routes/endpoints.js.map +1 -0
  60. package/dist/routes/helpers.d.ts +2 -0
  61. package/dist/routes/helpers.d.ts.map +1 -0
  62. package/dist/routes/helpers.js +7 -0
  63. package/dist/routes/helpers.js.map +1 -0
  64. package/dist/routes/logs.d.ts +4 -0
  65. package/dist/routes/logs.d.ts.map +1 -0
  66. package/dist/routes/logs.js +32 -0
  67. package/dist/routes/logs.js.map +1 -0
  68. package/dist/routes/presets.d.ts +4 -0
  69. package/dist/routes/presets.d.ts.map +1 -0
  70. package/dist/routes/presets.js +33 -0
  71. package/dist/routes/presets.js.map +1 -0
  72. package/dist/routes/projects.d.ts +4 -0
  73. package/dist/routes/projects.d.ts.map +1 -0
  74. package/dist/routes/projects.js +47 -0
  75. package/dist/routes/projects.js.map +1 -0
  76. package/dist/routes/proxy.d.ts +4 -0
  77. package/dist/routes/proxy.d.ts.map +1 -0
  78. package/dist/routes/proxy.js +28 -0
  79. package/dist/routes/proxy.js.map +1 -0
  80. package/dist/routes/specs.d.ts +4 -0
  81. package/dist/routes/specs.d.ts.map +1 -0
  82. package/dist/routes/specs.js +190 -0
  83. package/dist/routes/specs.js.map +1 -0
  84. package/dist/version.d.ts +2 -0
  85. package/dist/version.d.ts.map +1 -0
  86. package/dist/version.js +7 -0
  87. package/dist/version.js.map +1 -0
  88. package/package.json +61 -0
@@ -0,0 +1,190 @@
1
+ import { Hono } from 'hono';
2
+ import { nanoid } from 'nanoid';
3
+ import yaml from 'js-yaml';
4
+ import { store } from '../config/store.js';
5
+ import { parseOpenAPISpec } from '../openapi/parser.js';
6
+ import { recompileRoutes } from './helpers.js';
7
+ const specs = new Hono();
8
+ // List all specs in active project
9
+ specs.get('/', (c) => {
10
+ return c.json({ data: store.getSpecs() });
11
+ });
12
+ // Upload spec from JSON body
13
+ specs.post('/', async (c) => {
14
+ try {
15
+ const { spec, name, upstreamUrl } = await c.req.json();
16
+ if (!name?.trim())
17
+ return c.json({ error: 'Spec name is required' }, 400);
18
+ const { metadata, endpoints } = await parseOpenAPISpec(spec);
19
+ const specId = nanoid();
20
+ const projectSpec = {
21
+ id: specId,
22
+ name: name.trim(),
23
+ upstreamUrl: upstreamUrl?.trim() || 'http://localhost:8080',
24
+ active: true,
25
+ metadata,
26
+ };
27
+ const endpointsWithSpec = endpoints.map((ep) => ({
28
+ ...ep,
29
+ id: `${specId}:${ep.id}`,
30
+ specId,
31
+ }));
32
+ store.addSpec(projectSpec, endpointsWithSpec);
33
+ recompileRoutes();
34
+ return c.json({ data: { spec: projectSpec, endpointCount: endpoints.length } });
35
+ }
36
+ catch (err) {
37
+ const message = err instanceof Error ? err.message : 'Failed to parse spec';
38
+ return c.json({ error: message }, 400);
39
+ }
40
+ });
41
+ // Import spec from URL
42
+ specs.post('/url', async (c) => {
43
+ try {
44
+ const { url, name } = await c.req.json();
45
+ if (!name?.trim())
46
+ return c.json({ error: 'Spec name is required' }, 400);
47
+ if (!url || !/^https?:\/\//i.test(url)) {
48
+ return c.json({ error: 'A valid http or https URL is required' }, 400);
49
+ }
50
+ const res = await fetch(url, {
51
+ signal: AbortSignal.timeout(15_000),
52
+ headers: { Accept: 'application/json, application/x-yaml, text/yaml, */*' },
53
+ });
54
+ if (!res.ok) {
55
+ return c.json({ error: `Failed to fetch spec: ${res.status} ${res.statusText}` }, 400);
56
+ }
57
+ const text = await res.text();
58
+ const contentType = res.headers.get('content-type') ?? '';
59
+ const isYaml = contentType.includes('yaml') || /\.ya?ml(\?|$)/i.test(url);
60
+ let specBody;
61
+ if (isYaml) {
62
+ specBody = yaml.load(text);
63
+ }
64
+ else {
65
+ try {
66
+ specBody = JSON.parse(text);
67
+ }
68
+ catch {
69
+ specBody = yaml.load(text);
70
+ }
71
+ }
72
+ const { metadata, endpoints } = await parseOpenAPISpec(specBody);
73
+ metadata.sourceUrl = url;
74
+ // Auto-derive upstream URL from spec URL origin
75
+ const derivedUpstream = new URL(url).origin;
76
+ const specId = nanoid();
77
+ const projectSpec = {
78
+ id: specId,
79
+ name: name.trim(),
80
+ upstreamUrl: derivedUpstream,
81
+ active: true,
82
+ metadata,
83
+ };
84
+ const endpointsWithSpec = endpoints.map((ep) => ({
85
+ ...ep,
86
+ id: `${specId}:${ep.id}`,
87
+ specId,
88
+ }));
89
+ store.addSpec(projectSpec, endpointsWithSpec);
90
+ recompileRoutes();
91
+ return c.json({ data: { spec: projectSpec, endpointCount: endpoints.length } });
92
+ }
93
+ catch (err) {
94
+ const message = err instanceof Error ? err.message : 'Failed to load spec from URL';
95
+ return c.json({ error: message }, 400);
96
+ }
97
+ });
98
+ // Reimport spec — re-fetch from sourceUrl or accept a new body
99
+ specs.post('/:specId/reimport', async (c) => {
100
+ const specId = c.req.param('specId');
101
+ const existing = store.getSpec(specId);
102
+ if (!existing)
103
+ return c.json({ error: 'Spec not found' }, 404);
104
+ try {
105
+ let specBody;
106
+ // Check if a body was provided (file reimport)
107
+ const contentType = c.req.header('content-type') ?? '';
108
+ if (contentType.includes('application/json')) {
109
+ const body = await c.req.json().catch(() => ({ spec: undefined }));
110
+ if (body.spec) {
111
+ specBody = body.spec;
112
+ }
113
+ }
114
+ // If no body, try to re-fetch from sourceUrl
115
+ if (!specBody) {
116
+ const sourceUrl = existing.metadata.sourceUrl;
117
+ if (!sourceUrl) {
118
+ return c.json({ error: 'No source URL — upload a spec file instead' }, 400);
119
+ }
120
+ const res = await fetch(sourceUrl, {
121
+ signal: AbortSignal.timeout(15_000),
122
+ headers: { Accept: 'application/json, application/x-yaml, text/yaml, */*' },
123
+ });
124
+ if (!res.ok) {
125
+ return c.json({ error: `Failed to fetch spec: ${res.status} ${res.statusText}` }, 400);
126
+ }
127
+ const text = await res.text();
128
+ const ct = res.headers.get('content-type') ?? '';
129
+ const isYaml = ct.includes('yaml') || /\.ya?ml(\?|$)/i.test(sourceUrl);
130
+ if (isYaml) {
131
+ specBody = yaml.load(text);
132
+ }
133
+ else {
134
+ try {
135
+ specBody = JSON.parse(text);
136
+ }
137
+ catch {
138
+ specBody = yaml.load(text);
139
+ }
140
+ }
141
+ }
142
+ const { metadata, endpoints } = await parseOpenAPISpec(specBody);
143
+ if (existing.metadata.sourceUrl) {
144
+ metadata.sourceUrl = existing.metadata.sourceUrl;
145
+ }
146
+ const endpointsWithSpec = endpoints.map((ep) => ({
147
+ ...ep,
148
+ id: `${specId}:${ep.id}`,
149
+ specId,
150
+ }));
151
+ store.reimportSpec(specId, metadata, endpointsWithSpec);
152
+ recompileRoutes();
153
+ return c.json({ data: { spec: store.getSpec(specId), endpointCount: endpoints.length } });
154
+ }
155
+ catch (err) {
156
+ const message = err instanceof Error ? err.message : 'Failed to reimport spec';
157
+ return c.json({ error: message }, 400);
158
+ }
159
+ });
160
+ // Update spec (name, upstreamUrl, active)
161
+ specs.put('/:specId', async (c) => {
162
+ const specId = c.req.param('specId');
163
+ const body = await c.req.json();
164
+ const updated = store.updateSpec(specId, body);
165
+ if (!updated)
166
+ return c.json({ error: 'Spec not found' }, 404);
167
+ recompileRoutes();
168
+ return c.json({ data: updated });
169
+ });
170
+ // Toggle spec active state
171
+ specs.put('/:specId/toggle', async (c) => {
172
+ const specId = c.req.param('specId');
173
+ const spec = store.getSpec(specId);
174
+ if (!spec)
175
+ return c.json({ error: 'Spec not found' }, 404);
176
+ const updated = store.updateSpec(specId, { active: !spec.active });
177
+ recompileRoutes();
178
+ return c.json({ data: updated });
179
+ });
180
+ // Delete spec and its endpoints
181
+ specs.delete('/:specId', (c) => {
182
+ const specId = c.req.param('specId');
183
+ const deleted = store.removeSpec(specId);
184
+ if (!deleted)
185
+ return c.json({ error: 'Spec not found' }, 404);
186
+ recompileRoutes();
187
+ return c.json({ data: { message: 'Spec deleted' } });
188
+ });
189
+ export default specs;
190
+ //# sourceMappingURL=specs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specs.js","sourceRoot":"","sources":["../../src/routes/specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AAEzB,mCAAmC;AACnC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;IACnB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,6BAA6B;AAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC1B,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAIhD,CAAC;QAEL,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,GAAG,CAAC,CAAC;QAE1E,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QAExB,MAAM,WAAW,GAAG;YAClB,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,uBAAuB;YAC3D,MAAM,EAAE,IAAI;YACZ,QAAQ;SACT,CAAC;QAEF,MAAM,iBAAiB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/C,GAAG,EAAE;YACL,EAAE,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC,EAAE,EAAE;YACxB,MAAM;SACP,CAAC,CAAC,CAAC;QAEJ,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAC9C,eAAe,EAAE,CAAC;QAElB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;QAC5E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,uBAAuB;AACvB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC7B,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAiC,CAAC;QAExE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1E,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uCAAuC,EAAE,EAAE,GAAG,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;YACnC,OAAO,EAAE,EAAE,MAAM,EAAE,sDAAsD,EAAE;SAC5E,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE1E,IAAI,QAAiB,CAAC;QACtB,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CAAC,QAAkB,CAAC,CAAC;QAC3E,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;QAEzB,gDAAgD;QAChD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QAExB,MAAM,WAAW,GAAG;YAClB,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,WAAW,EAAE,eAAe;YAC5B,MAAM,EAAE,IAAI;YACZ,QAAQ;SACT,CAAC;QAEF,MAAM,iBAAiB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/C,GAAG,EAAE;YACL,EAAE,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC,EAAE,EAAE;YACxB,MAAM;SACP,CAAC,CAAC,CAAC;QAEJ,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAC9C,eAAe,EAAE,CAAC;QAElB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC;QACpF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,+DAA+D;AAC/D,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC1C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;IAE/D,IAAI,CAAC;QACH,IAAI,QAA4B,CAAC;QAEjC,+CAA+C;QAC/C,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YACtF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4CAA4C,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;gBACjC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;gBACnC,OAAO,EAAE,EAAE,MAAM,EAAE,sDAAsD,EAAE;aAC5E,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACzF,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEvE,IAAI,MAAM,EAAE,CAAC;gBACX,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAW,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC;oBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC;oBACP,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAW,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CAAC,QAAS,CAAC,CAAC;QAClE,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAChC,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnD,CAAC;QAED,MAAM,iBAAiB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/C,GAAG,EAAE;YACL,EAAE,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC,EAAE,EAAE;YACxB,MAAM;SACP,CAAC,CAAC,CAAC;QAEJ,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxD,eAAe,EAAE,CAAC;QAElB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC;QAC/E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,0CAA0C;AAC1C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAA6D,CAAC;IAC3F,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9D,eAAe,EAAE,CAAC;IAClB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,2BAA2B;AAC3B,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,eAAe,EAAE,CAAC;IAClB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,gCAAgC;AAChC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;IAC7B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9D,eAAe,EAAE,CAAC;IAClB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AAEH,eAAe,KAAK,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const version: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { join, dirname } from 'node:path';
4
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ const pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
6
+ export const version = pkg.version;
7
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAClF,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "interceptr",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "Local API mocking and interception tool for developers",
6
+ "author": "Patrick Hieber",
7
+ "license": "MIT",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/pckhib/interceptr.git"
11
+ },
12
+ "homepage": "https://github.com/pckhib/interceptr",
13
+ "bugs": {
14
+ "url": "https://github.com/pckhib/interceptr/issues"
15
+ },
16
+ "keywords": [
17
+ "api",
18
+ "mock",
19
+ "proxy",
20
+ "interceptor",
21
+ "developer-tools",
22
+ "cli"
23
+ ],
24
+ "bin": {
25
+ "interceptr": "./dist/cli.js"
26
+ },
27
+ "files": [
28
+ "dist/",
29
+ "README.md",
30
+ "LICENSE"
31
+ ],
32
+ "engines": {
33
+ "node": ">=22"
34
+ },
35
+ "scripts": {
36
+ "prepack": "cp ../../README.md README.md",
37
+ "dev": "tsx watch src/index.ts",
38
+ "build": "tsc",
39
+ "start": "node dist/cli.js",
40
+ "lint": "eslint src",
41
+ "test": "vitest run",
42
+ "test:coverage": "vitest run --coverage"
43
+ },
44
+ "dependencies": {
45
+ "@hono/node-server": "^1.13.0",
46
+ "@interceptr/shared": "workspace:*",
47
+ "@readme/openapi-parser": "^4.1.0",
48
+ "hono": "^4.7.0",
49
+ "js-yaml": "^4.1.1",
50
+ "nanoid": "^5.0.9",
51
+ "path-to-regexp": "^8.2.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/js-yaml": "^4.0.9",
55
+ "@types/node": "^22.0.0",
56
+ "@vitest/coverage-v8": "^4.0.18",
57
+ "tsx": "^4.19.0",
58
+ "typescript": "^5.7.0",
59
+ "vitest": "^4.0.18"
60
+ }
61
+ }