mnehmos.trace.mcp 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.
- package/LICENSE +21 -0
- package/README.md +1662 -0
- package/dist/adapters/bootstrap.d.ts +29 -0
- package/dist/adapters/bootstrap.d.ts.map +1 -0
- package/dist/adapters/bootstrap.js +46 -0
- package/dist/adapters/bootstrap.js.map +1 -0
- package/dist/adapters/errors.d.ts +94 -0
- package/dist/adapters/errors.d.ts.map +1 -0
- package/dist/adapters/errors.js +107 -0
- package/dist/adapters/errors.js.map +1 -0
- package/dist/adapters/graphql/index.d.ts +9 -0
- package/dist/adapters/graphql/index.d.ts.map +1 -0
- package/dist/adapters/graphql/index.js +9 -0
- package/dist/adapters/graphql/index.js.map +1 -0
- package/dist/adapters/graphql/sdl-parser.d.ts +74 -0
- package/dist/adapters/graphql/sdl-parser.d.ts.map +1 -0
- package/dist/adapters/graphql/sdl-parser.js +559 -0
- package/dist/adapters/graphql/sdl-parser.js.map +1 -0
- package/dist/adapters/grpc/adapter.d.ts +76 -0
- package/dist/adapters/grpc/adapter.d.ts.map +1 -0
- package/dist/adapters/grpc/adapter.js +362 -0
- package/dist/adapters/grpc/adapter.js.map +1 -0
- package/dist/adapters/grpc/index.d.ts +10 -0
- package/dist/adapters/grpc/index.d.ts.map +1 -0
- package/dist/adapters/grpc/index.js +12 -0
- package/dist/adapters/grpc/index.js.map +1 -0
- package/dist/adapters/grpc/proto-parser.d.ts +76 -0
- package/dist/adapters/grpc/proto-parser.d.ts.map +1 -0
- package/dist/adapters/grpc/proto-parser.js +523 -0
- package/dist/adapters/grpc/proto-parser.js.map +1 -0
- package/dist/adapters/grpc/type-converter.d.ts +43 -0
- package/dist/adapters/grpc/type-converter.d.ts.map +1 -0
- package/dist/adapters/grpc/type-converter.js +270 -0
- package/dist/adapters/grpc/type-converter.js.map +1 -0
- package/dist/adapters/grpc/types.d.ts +85 -0
- package/dist/adapters/grpc/types.d.ts.map +1 -0
- package/dist/adapters/grpc/types.js +7 -0
- package/dist/adapters/grpc/types.js.map +1 -0
- package/dist/adapters/index.d.ts +39 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +50 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mcp.d.ts +23 -0
- package/dist/adapters/mcp.d.ts.map +1 -0
- package/dist/adapters/mcp.js +293 -0
- package/dist/adapters/mcp.js.map +1 -0
- package/dist/adapters/openapi/adapter.d.ts +213 -0
- package/dist/adapters/openapi/adapter.d.ts.map +1 -0
- package/dist/adapters/openapi/adapter.js +557 -0
- package/dist/adapters/openapi/adapter.js.map +1 -0
- package/dist/adapters/openapi/convert.d.ts +120 -0
- package/dist/adapters/openapi/convert.d.ts.map +1 -0
- package/dist/adapters/openapi/convert.js +363 -0
- package/dist/adapters/openapi/convert.js.map +1 -0
- package/dist/adapters/openapi/index.d.ts +39 -0
- package/dist/adapters/openapi/index.d.ts.map +1 -0
- package/dist/adapters/openapi/index.js +48 -0
- package/dist/adapters/openapi/index.js.map +1 -0
- package/dist/adapters/openapi/parser.d.ts +95 -0
- package/dist/adapters/openapi/parser.d.ts.map +1 -0
- package/dist/adapters/openapi/parser.js +171 -0
- package/dist/adapters/openapi/parser.js.map +1 -0
- package/dist/adapters/registry.d.ts +116 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +246 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/trpc/adapter.d.ts +159 -0
- package/dist/adapters/trpc/adapter.d.ts.map +1 -0
- package/dist/adapters/trpc/adapter.js +223 -0
- package/dist/adapters/trpc/adapter.js.map +1 -0
- package/dist/adapters/trpc/extractor.d.ts +218 -0
- package/dist/adapters/trpc/extractor.d.ts.map +1 -0
- package/dist/adapters/trpc/extractor.js +708 -0
- package/dist/adapters/trpc/extractor.js.map +1 -0
- package/dist/adapters/trpc/index.d.ts +31 -0
- package/dist/adapters/trpc/index.d.ts.map +1 -0
- package/dist/adapters/trpc/index.js +40 -0
- package/dist/adapters/trpc/index.js.map +1 -0
- package/dist/adapters/trpc/parser.d.ts +119 -0
- package/dist/adapters/trpc/parser.d.ts.map +1 -0
- package/dist/adapters/trpc/parser.js +128 -0
- package/dist/adapters/trpc/parser.js.map +1 -0
- package/dist/compare/index.d.ts +33 -0
- package/dist/compare/index.d.ts.map +1 -0
- package/dist/compare/index.js +261 -0
- package/dist/compare/index.js.map +1 -0
- package/dist/core/types.d.ts +188 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/extract/index.d.ts +26 -0
- package/dist/extract/index.d.ts.map +1 -0
- package/dist/extract/index.js +44 -0
- package/dist/extract/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +674 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/base.d.ts +57 -0
- package/dist/languages/base.d.ts.map +1 -0
- package/dist/languages/base.js +6 -0
- package/dist/languages/base.js.map +1 -0
- package/dist/languages/bootstrap.d.ts +10 -0
- package/dist/languages/bootstrap.d.ts.map +1 -0
- package/dist/languages/bootstrap.js +25 -0
- package/dist/languages/bootstrap.js.map +1 -0
- package/dist/languages/go/handlers/chi.d.ts +24 -0
- package/dist/languages/go/handlers/chi.d.ts.map +1 -0
- package/dist/languages/go/handlers/chi.js +205 -0
- package/dist/languages/go/handlers/chi.js.map +1 -0
- package/dist/languages/go/handlers/gin.d.ts +24 -0
- package/dist/languages/go/handlers/gin.d.ts.map +1 -0
- package/dist/languages/go/handlers/gin.js +156 -0
- package/dist/languages/go/handlers/gin.js.map +1 -0
- package/dist/languages/go/handlers/stdlib.d.ts +19 -0
- package/dist/languages/go/handlers/stdlib.d.ts.map +1 -0
- package/dist/languages/go/handlers/stdlib.js +112 -0
- package/dist/languages/go/handlers/stdlib.js.map +1 -0
- package/dist/languages/go/index.d.ts +18 -0
- package/dist/languages/go/index.d.ts.map +1 -0
- package/dist/languages/go/index.js +20 -0
- package/dist/languages/go/index.js.map +1 -0
- package/dist/languages/go/parser.d.ts +33 -0
- package/dist/languages/go/parser.d.ts.map +1 -0
- package/dist/languages/go/parser.js +95 -0
- package/dist/languages/go/parser.js.map +1 -0
- package/dist/languages/go/struct-extractor.d.ts +59 -0
- package/dist/languages/go/struct-extractor.d.ts.map +1 -0
- package/dist/languages/go/struct-extractor.js +483 -0
- package/dist/languages/go/struct-extractor.js.map +1 -0
- package/dist/languages/go/tag-parser.d.ts +62 -0
- package/dist/languages/go/tag-parser.d.ts.map +1 -0
- package/dist/languages/go/tag-parser.js +108 -0
- package/dist/languages/go/tag-parser.js.map +1 -0
- package/dist/languages/go/type-converter.d.ts +32 -0
- package/dist/languages/go/type-converter.d.ts.map +1 -0
- package/dist/languages/go/type-converter.js +226 -0
- package/dist/languages/go/type-converter.js.map +1 -0
- package/dist/languages/go/types.d.ts +153 -0
- package/dist/languages/go/types.d.ts.map +1 -0
- package/dist/languages/go/types.js +6 -0
- package/dist/languages/go/types.js.map +1 -0
- package/dist/languages/import-resolver.d.ts +645 -0
- package/dist/languages/import-resolver.d.ts.map +1 -0
- package/dist/languages/import-resolver.js +1278 -0
- package/dist/languages/import-resolver.js.map +1 -0
- package/dist/languages/index.d.ts +34 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +93 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/json-schema.d.ts +40 -0
- package/dist/languages/json-schema.d.ts.map +1 -0
- package/dist/languages/json-schema.js +188 -0
- package/dist/languages/json-schema.js.map +1 -0
- package/dist/languages/python-ast/index.d.ts +8 -0
- package/dist/languages/python-ast/index.d.ts.map +1 -0
- package/dist/languages/python-ast/index.js +7 -0
- package/dist/languages/python-ast/index.js.map +1 -0
- package/dist/languages/python-ast/parser.d.ts +174 -0
- package/dist/languages/python-ast/parser.d.ts.map +1 -0
- package/dist/languages/python-ast/parser.js +1205 -0
- package/dist/languages/python-ast/parser.js.map +1 -0
- package/dist/languages/python-ast/type-resolver.d.ts +75 -0
- package/dist/languages/python-ast/type-resolver.d.ts.map +1 -0
- package/dist/languages/python-ast/type-resolver.js +421 -0
- package/dist/languages/python-ast/type-resolver.js.map +1 -0
- package/dist/languages/python-ast/types.d.ts +216 -0
- package/dist/languages/python-ast/types.d.ts.map +1 -0
- package/dist/languages/python-ast/types.js +6 -0
- package/dist/languages/python-ast/types.js.map +1 -0
- package/dist/languages/python.d.ts +55 -0
- package/dist/languages/python.d.ts.map +1 -0
- package/dist/languages/python.js +311 -0
- package/dist/languages/python.js.map +1 -0
- package/dist/languages/typescript.d.ts +272 -0
- package/dist/languages/typescript.d.ts.map +1 -0
- package/dist/languages/typescript.js +1381 -0
- package/dist/languages/typescript.js.map +1 -0
- package/dist/patterns/base.d.ts +146 -0
- package/dist/patterns/base.d.ts.map +1 -0
- package/dist/patterns/base.js +89 -0
- package/dist/patterns/base.js.map +1 -0
- package/dist/patterns/errors.d.ts +172 -0
- package/dist/patterns/errors.d.ts.map +1 -0
- package/dist/patterns/errors.js +185 -0
- package/dist/patterns/errors.js.map +1 -0
- package/dist/patterns/extractors.d.ts +170 -0
- package/dist/patterns/extractors.d.ts.map +1 -0
- package/dist/patterns/extractors.js +305 -0
- package/dist/patterns/extractors.js.map +1 -0
- package/dist/patterns/graphql/apollo-client.d.ts +80 -0
- package/dist/patterns/graphql/apollo-client.d.ts.map +1 -0
- package/dist/patterns/graphql/apollo-client.js +800 -0
- package/dist/patterns/graphql/apollo-client.js.map +1 -0
- package/dist/patterns/graphql/apollo-server.d.ts +55 -0
- package/dist/patterns/graphql/apollo-server.d.ts.map +1 -0
- package/dist/patterns/graphql/apollo-server.js +523 -0
- package/dist/patterns/graphql/apollo-server.js.map +1 -0
- package/dist/patterns/graphql/index.d.ts +11 -0
- package/dist/patterns/graphql/index.d.ts.map +1 -0
- package/dist/patterns/graphql/index.js +12 -0
- package/dist/patterns/graphql/index.js.map +1 -0
- package/dist/patterns/graphql/types.d.ts +213 -0
- package/dist/patterns/graphql/types.d.ts.map +1 -0
- package/dist/patterns/graphql/types.js +16 -0
- package/dist/patterns/graphql/types.js.map +1 -0
- package/dist/patterns/http-clients/axios.d.ts +148 -0
- package/dist/patterns/http-clients/axios.d.ts.map +1 -0
- package/dist/patterns/http-clients/axios.js +652 -0
- package/dist/patterns/http-clients/axios.js.map +1 -0
- package/dist/patterns/http-clients/fetch.d.ts +88 -0
- package/dist/patterns/http-clients/fetch.d.ts.map +1 -0
- package/dist/patterns/http-clients/fetch.js +364 -0
- package/dist/patterns/http-clients/fetch.js.map +1 -0
- package/dist/patterns/http-clients/index.d.ts +36 -0
- package/dist/patterns/http-clients/index.d.ts.map +1 -0
- package/dist/patterns/http-clients/index.js +50 -0
- package/dist/patterns/http-clients/index.js.map +1 -0
- package/dist/patterns/http-clients/property-access.d.ts +46 -0
- package/dist/patterns/http-clients/property-access.d.ts.map +1 -0
- package/dist/patterns/http-clients/property-access.js +818 -0
- package/dist/patterns/http-clients/property-access.js.map +1 -0
- package/dist/patterns/http-clients/type-inference.d.ts +48 -0
- package/dist/patterns/http-clients/type-inference.d.ts.map +1 -0
- package/dist/patterns/http-clients/type-inference.js +293 -0
- package/dist/patterns/http-clients/type-inference.js.map +1 -0
- package/dist/patterns/http-clients/types.d.ts +168 -0
- package/dist/patterns/http-clients/types.d.ts.map +1 -0
- package/dist/patterns/http-clients/types.js +10 -0
- package/dist/patterns/http-clients/types.js.map +1 -0
- package/dist/patterns/http-clients/url-extractor.d.ts +53 -0
- package/dist/patterns/http-clients/url-extractor.d.ts.map +1 -0
- package/dist/patterns/http-clients/url-extractor.js +338 -0
- package/dist/patterns/http-clients/url-extractor.js.map +1 -0
- package/dist/patterns/index.d.ts +44 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +49 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/python/aiohttp.d.ts +21 -0
- package/dist/patterns/python/aiohttp.d.ts.map +1 -0
- package/dist/patterns/python/aiohttp.js +188 -0
- package/dist/patterns/python/aiohttp.js.map +1 -0
- package/dist/patterns/python/httpx.d.ts +20 -0
- package/dist/patterns/python/httpx.d.ts.map +1 -0
- package/dist/patterns/python/httpx.js +183 -0
- package/dist/patterns/python/httpx.js.map +1 -0
- package/dist/patterns/python/index.d.ts +32 -0
- package/dist/patterns/python/index.d.ts.map +1 -0
- package/dist/patterns/python/index.js +63 -0
- package/dist/patterns/python/index.js.map +1 -0
- package/dist/patterns/python/property-access.d.ts +27 -0
- package/dist/patterns/python/property-access.d.ts.map +1 -0
- package/dist/patterns/python/property-access.js +132 -0
- package/dist/patterns/python/property-access.js.map +1 -0
- package/dist/patterns/python/requests.d.ts +19 -0
- package/dist/patterns/python/requests.d.ts.map +1 -0
- package/dist/patterns/python/requests.js +239 -0
- package/dist/patterns/python/requests.js.map +1 -0
- package/dist/patterns/python/types.d.ts +95 -0
- package/dist/patterns/python/types.d.ts.map +1 -0
- package/dist/patterns/python/types.js +43 -0
- package/dist/patterns/python/types.js.map +1 -0
- package/dist/patterns/registry.d.ts +181 -0
- package/dist/patterns/registry.d.ts.map +1 -0
- package/dist/patterns/registry.js +304 -0
- package/dist/patterns/registry.js.map +1 -0
- package/dist/patterns/rest/express.d.ts +78 -0
- package/dist/patterns/rest/express.d.ts.map +1 -0
- package/dist/patterns/rest/express.js +289 -0
- package/dist/patterns/rest/express.js.map +1 -0
- package/dist/patterns/rest/fastify.d.ts +93 -0
- package/dist/patterns/rest/fastify.d.ts.map +1 -0
- package/dist/patterns/rest/fastify.js +420 -0
- package/dist/patterns/rest/fastify.js.map +1 -0
- package/dist/patterns/rest/index.d.ts +31 -0
- package/dist/patterns/rest/index.d.ts.map +1 -0
- package/dist/patterns/rest/index.js +45 -0
- package/dist/patterns/rest/index.js.map +1 -0
- package/dist/patterns/rest/middleware.d.ts +25 -0
- package/dist/patterns/rest/middleware.d.ts.map +1 -0
- package/dist/patterns/rest/middleware.js +219 -0
- package/dist/patterns/rest/middleware.js.map +1 -0
- package/dist/patterns/rest/path-parser.d.ts +50 -0
- package/dist/patterns/rest/path-parser.d.ts.map +1 -0
- package/dist/patterns/rest/path-parser.js +137 -0
- package/dist/patterns/rest/path-parser.js.map +1 -0
- package/dist/patterns/rest/response-inference.d.ts +44 -0
- package/dist/patterns/rest/response-inference.d.ts.map +1 -0
- package/dist/patterns/rest/response-inference.js +218 -0
- package/dist/patterns/rest/response-inference.js.map +1 -0
- package/dist/patterns/rest/types.d.ts +102 -0
- package/dist/patterns/rest/types.d.ts.map +1 -0
- package/dist/patterns/rest/types.js +10 -0
- package/dist/patterns/rest/types.js.map +1 -0
- package/dist/patterns/types.d.ts +105 -0
- package/dist/patterns/types.d.ts.map +1 -0
- package/dist/patterns/types.js +11 -0
- package/dist/patterns/types.js.map +1 -0
- package/dist/report/index.d.ts +11 -0
- package/dist/report/index.d.ts.map +1 -0
- package/dist/report/index.js +55 -0
- package/dist/report/index.js.map +1 -0
- package/dist/tools/contract-comments.d.ts +48 -0
- package/dist/tools/contract-comments.d.ts.map +1 -0
- package/dist/tools/contract-comments.js +130 -0
- package/dist/tools/contract-comments.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/scaffold.d.ts +38 -0
- package/dist/tools/scaffold.d.ts.map +1 -0
- package/dist/tools/scaffold.js +373 -0
- package/dist/tools/scaffold.js.map +1 -0
- package/dist/trace/index.d.ts +28 -0
- package/dist/trace/index.d.ts.map +1 -0
- package/dist/trace/index.js +45 -0
- package/dist/trace/index.js.map +1 -0
- package/dist/types.d.ts +135 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/dist/watch/cache.d.ts +41 -0
- package/dist/watch/cache.d.ts.map +1 -0
- package/dist/watch/cache.js +230 -0
- package/dist/watch/cache.js.map +1 -0
- package/dist/watch/index.d.ts +9 -0
- package/dist/watch/index.d.ts.map +1 -0
- package/dist/watch/index.js +7 -0
- package/dist/watch/index.js.map +1 -0
- package/dist/watch/project.d.ts +128 -0
- package/dist/watch/project.d.ts.map +1 -0
- package/dist/watch/project.js +152 -0
- package/dist/watch/project.js.map +1 -0
- package/dist/watch/watcher.d.ts +76 -0
- package/dist/watch/watcher.d.ts.map +1 -0
- package/dist/watch/watcher.js +235 -0
- package/dist/watch/watcher.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiohttp.js","sourceRoot":"","sources":["../../../src/patterns/python/aiohttp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python httpx library HTTP client detection
|
|
3
|
+
*
|
|
4
|
+
* Detects calls to the httpx library:
|
|
5
|
+
* - httpx.get(), httpx.post(), etc. (sync)
|
|
6
|
+
* - client.get(), client.post() with Client instances
|
|
7
|
+
* - AsyncClient for async operations
|
|
8
|
+
*
|
|
9
|
+
* @see .context/TASK_MAP_P3.md - Task P3-4
|
|
10
|
+
*/
|
|
11
|
+
import type { PythonHttpCall } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Detect HTTP calls from the httpx library in Python source code
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectHttpxCalls(content: string): PythonHttpCall[];
|
|
16
|
+
/**
|
|
17
|
+
* Get the response properties that httpx library supports
|
|
18
|
+
*/
|
|
19
|
+
export declare function getHttpxResponseProperties(): string[];
|
|
20
|
+
//# sourceMappingURL=httpx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpx.d.ts","sourceRoot":"","sources":["../../../src/patterns/python/httpx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,YAAY,CAAC;AAUpB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CA2FlE;AAsGD;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAErD"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python httpx library HTTP client detection
|
|
3
|
+
*
|
|
4
|
+
* Detects calls to the httpx library:
|
|
5
|
+
* - httpx.get(), httpx.post(), etc. (sync)
|
|
6
|
+
* - client.get(), client.post() with Client instances
|
|
7
|
+
* - AsyncClient for async operations
|
|
8
|
+
*
|
|
9
|
+
* @see .context/TASK_MAP_P3.md - Task P3-4
|
|
10
|
+
*/
|
|
11
|
+
import { HTTP_CLIENT_PATTERNS, normalizeHttpMethod } from './types.js';
|
|
12
|
+
const HTTPX_PATTERN = HTTP_CLIENT_PATTERNS.httpx;
|
|
13
|
+
/**
|
|
14
|
+
* Track known client variable names
|
|
15
|
+
*/
|
|
16
|
+
const clientVars = new Map();
|
|
17
|
+
/**
|
|
18
|
+
* Detect HTTP calls from the httpx library in Python source code
|
|
19
|
+
*/
|
|
20
|
+
export function detectHttpxCalls(content) {
|
|
21
|
+
const calls = [];
|
|
22
|
+
const lines = content.split('\n');
|
|
23
|
+
// First pass: detect imports
|
|
24
|
+
const hasHttpxImport = /^\s*import\s+httpx\b/m.test(content) ||
|
|
25
|
+
/^\s*from\s+httpx\s+import\s+/.test(content);
|
|
26
|
+
if (!hasHttpxImport) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
// Second pass: find client variables
|
|
30
|
+
clientVars.clear();
|
|
31
|
+
// Match: client = httpx.Client()
|
|
32
|
+
const clientCreateRegex = /\b(\w+)\s*=\s*(?:httpx\.)?Client\s*\(/g;
|
|
33
|
+
let match;
|
|
34
|
+
while ((match = clientCreateRegex.exec(content)) !== null) {
|
|
35
|
+
clientVars.set(match[1], { isAsync: false });
|
|
36
|
+
}
|
|
37
|
+
// Match: client = httpx.AsyncClient()
|
|
38
|
+
const asyncClientCreateRegex = /\b(\w+)\s*=\s*(?:httpx\.)?AsyncClient\s*\(/g;
|
|
39
|
+
while ((match = asyncClientCreateRegex.exec(content)) !== null) {
|
|
40
|
+
clientVars.set(match[1], { isAsync: true });
|
|
41
|
+
}
|
|
42
|
+
// Match: with httpx.Client() as client:
|
|
43
|
+
const withClientRegex = /with\s+(?:httpx\.)?Client\s*\([^)]*\)\s+as\s+(\w+)/g;
|
|
44
|
+
while ((match = withClientRegex.exec(content)) !== null) {
|
|
45
|
+
clientVars.set(match[1], { isAsync: false });
|
|
46
|
+
}
|
|
47
|
+
// Match: async with httpx.AsyncClient() as client:
|
|
48
|
+
const asyncWithClientRegex = /async\s+with\s+(?:httpx\.)?AsyncClient\s*\([^)]*\)\s+as\s+(\w+)/g;
|
|
49
|
+
while ((match = asyncWithClientRegex.exec(content)) !== null) {
|
|
50
|
+
clientVars.set(match[1], { isAsync: true });
|
|
51
|
+
}
|
|
52
|
+
// Third pass: detect HTTP calls line by line
|
|
53
|
+
for (let i = 0; i < lines.length; i++) {
|
|
54
|
+
const line = lines[i];
|
|
55
|
+
const lineNum = i + 1;
|
|
56
|
+
// Detect direct httpx.method() calls
|
|
57
|
+
const directCallRegex = /\bhttpx\.(get|post|put|patch|delete|head|options|request)\s*\(/gi;
|
|
58
|
+
while ((match = directCallRegex.exec(line)) !== null) {
|
|
59
|
+
const method = normalizeHttpMethod(match[1]);
|
|
60
|
+
if (method) {
|
|
61
|
+
const call = createHttpCall(method, 'httpx', line, lineNum, match.index);
|
|
62
|
+
call.isClient = false;
|
|
63
|
+
call.isAsyncClient = false;
|
|
64
|
+
call.isAsync = false;
|
|
65
|
+
calls.push(call);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Detect await httpx.AsyncClient().method() inline calls
|
|
69
|
+
const inlineAsyncRegex = /await\s+httpx\.AsyncClient\s*\(\s*\)\s*\.(get|post|put|patch|delete|head|options|request)\s*\(/gi;
|
|
70
|
+
while ((match = inlineAsyncRegex.exec(line)) !== null) {
|
|
71
|
+
const method = normalizeHttpMethod(match[1]);
|
|
72
|
+
if (method) {
|
|
73
|
+
const call = createHttpCall(method, 'httpx', line, lineNum, match.index);
|
|
74
|
+
call.isClient = false;
|
|
75
|
+
call.isAsyncClient = true;
|
|
76
|
+
call.isAsync = true;
|
|
77
|
+
calls.push(call);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Detect client.method() calls
|
|
81
|
+
for (const [clientVar, info] of clientVars) {
|
|
82
|
+
const clientCallRegex = new RegExp(`(?:await\\s+)?\\b${escapeRegex(clientVar)}\\.(get|post|put|patch|delete|head|options|request)\\s*\\(`, 'gi');
|
|
83
|
+
while ((match = clientCallRegex.exec(line)) !== null) {
|
|
84
|
+
const method = normalizeHttpMethod(match[1]);
|
|
85
|
+
if (method) {
|
|
86
|
+
const call = createHttpCall(method, 'httpx', line, lineNum, match.index);
|
|
87
|
+
call.isClient = !info.isAsync;
|
|
88
|
+
call.isAsyncClient = info.isAsync;
|
|
89
|
+
call.isAsync = info.isAsync || line.includes('await');
|
|
90
|
+
calls.push(call);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return calls;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Create a PythonHttpCall from a detected call
|
|
99
|
+
*/
|
|
100
|
+
function createHttpCall(method, library, line, lineNum, column) {
|
|
101
|
+
const call = {
|
|
102
|
+
method,
|
|
103
|
+
library,
|
|
104
|
+
line: lineNum,
|
|
105
|
+
column
|
|
106
|
+
};
|
|
107
|
+
// Extract URL
|
|
108
|
+
const urlInfo = extractUrl(line);
|
|
109
|
+
if (urlInfo) {
|
|
110
|
+
call.url = urlInfo.url;
|
|
111
|
+
call.isDynamicUrl = urlInfo.isDynamic;
|
|
112
|
+
call.pathParams = urlInfo.pathParams;
|
|
113
|
+
}
|
|
114
|
+
// Detect query params
|
|
115
|
+
if (/\bparams\s*=/.test(line)) {
|
|
116
|
+
call.hasQueryParams = true;
|
|
117
|
+
}
|
|
118
|
+
// URL with query string
|
|
119
|
+
if (call.url?.includes('?')) {
|
|
120
|
+
call.hasQueryParams = true;
|
|
121
|
+
}
|
|
122
|
+
// Detect headers
|
|
123
|
+
if (/\bheaders\s*=/.test(line)) {
|
|
124
|
+
call.hasHeaders = true;
|
|
125
|
+
}
|
|
126
|
+
// Detect body
|
|
127
|
+
if (/\bjson\s*=/.test(line) || /\bdata\s*=/.test(line) || /\bcontent\s*=/.test(line)) {
|
|
128
|
+
call.hasBody = true;
|
|
129
|
+
}
|
|
130
|
+
// Extract response variable
|
|
131
|
+
const assignMatch = line.match(/^\s*(\w+)\s*=/);
|
|
132
|
+
if (assignMatch) {
|
|
133
|
+
call.responseVariable = assignMatch[1];
|
|
134
|
+
}
|
|
135
|
+
// Also check for async response assignment
|
|
136
|
+
const asyncAssignMatch = line.match(/^\s*(\w+)\s*=\s*await\b/);
|
|
137
|
+
if (asyncAssignMatch) {
|
|
138
|
+
call.responseVariable = asyncAssignMatch[1];
|
|
139
|
+
call.isAsync = true;
|
|
140
|
+
}
|
|
141
|
+
return call;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Extract URL from a call line
|
|
145
|
+
*/
|
|
146
|
+
function extractUrl(line) {
|
|
147
|
+
// Match f-strings first
|
|
148
|
+
const fstringMatch = line.match(/f["']([^"']+)["']/);
|
|
149
|
+
if (fstringMatch) {
|
|
150
|
+
const url = fstringMatch[1];
|
|
151
|
+
const pathParams = [];
|
|
152
|
+
let paramMatch;
|
|
153
|
+
const paramRegex = /\{(\w+)\}/g;
|
|
154
|
+
while ((paramMatch = paramRegex.exec(url)) !== null) {
|
|
155
|
+
pathParams.push(paramMatch[1]);
|
|
156
|
+
}
|
|
157
|
+
return { url, isDynamic: true, pathParams };
|
|
158
|
+
}
|
|
159
|
+
// Match regular strings - look for method call with string arg
|
|
160
|
+
const stringMatch = line.match(/\.(get|post|put|patch|delete|head|options|request)\s*\(\s*["']([^"']+)["']/i);
|
|
161
|
+
if (stringMatch) {
|
|
162
|
+
return { url: stringMatch[2], isDynamic: false, pathParams: [] };
|
|
163
|
+
}
|
|
164
|
+
// Generic string match
|
|
165
|
+
const genericMatch = line.match(/\(\s*["']([^"']+)["']/);
|
|
166
|
+
if (genericMatch) {
|
|
167
|
+
return { url: genericMatch[1], isDynamic: false, pathParams: [] };
|
|
168
|
+
}
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Escape special regex characters in a string
|
|
173
|
+
*/
|
|
174
|
+
function escapeRegex(str) {
|
|
175
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get the response properties that httpx library supports
|
|
179
|
+
*/
|
|
180
|
+
export function getHttpxResponseProperties() {
|
|
181
|
+
return HTTPX_PATTERN.responseAccess;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=httpx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpx.js","sourceRoot":"","sources":["../../../src/patterns/python/httpx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python HTTP Client Pattern Detection
|
|
3
|
+
*
|
|
4
|
+
* Re-exports for Python HTTP client detection modules.
|
|
5
|
+
* Supports: requests, httpx, aiohttp
|
|
6
|
+
*
|
|
7
|
+
* @see .context/TASK_MAP_P3.md - Task P3-4
|
|
8
|
+
*/
|
|
9
|
+
export type { PythonHttpLibrary, HttpMethod, PythonHttpCall, PythonPropertyAccess, PythonHttpCallResult, HttpClientPattern } from './types.js';
|
|
10
|
+
export { HTTP_CLIENT_PATTERNS, normalizeHttpMethod } from './types.js';
|
|
11
|
+
export { detectRequestsCalls, getRequestsResponseProperties } from './requests.js';
|
|
12
|
+
export { detectHttpxCalls, getHttpxResponseProperties } from './httpx.js';
|
|
13
|
+
export { detectAiohttpCalls, getAiohttpResponseProperties } from './aiohttp.js';
|
|
14
|
+
export { detectPropertyAccess, correlatePropertyAccess, getLibraryResponseProperties, isValidResponseProperty } from './property-access.js';
|
|
15
|
+
import type { PythonHttpCallResult } from './types.js';
|
|
16
|
+
/**
|
|
17
|
+
* Detect all HTTP client calls from Python source code
|
|
18
|
+
*
|
|
19
|
+
* Supports:
|
|
20
|
+
* - requests library
|
|
21
|
+
* - httpx library
|
|
22
|
+
* - aiohttp library
|
|
23
|
+
*
|
|
24
|
+
* @param content Python source code content
|
|
25
|
+
* @returns Array of HTTP calls with correlated response property access
|
|
26
|
+
*/
|
|
27
|
+
export declare function detectAllHttpCalls(content: string): PythonHttpCallResult[];
|
|
28
|
+
/**
|
|
29
|
+
* Get supported libraries
|
|
30
|
+
*/
|
|
31
|
+
export declare function getSupportedLibraries(): string[];
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/patterns/python/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAGhF,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,KAAK,EAAkB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAMvE;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,CA+B1E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python HTTP Client Pattern Detection
|
|
3
|
+
*
|
|
4
|
+
* Re-exports for Python HTTP client detection modules.
|
|
5
|
+
* Supports: requests, httpx, aiohttp
|
|
6
|
+
*
|
|
7
|
+
* @see .context/TASK_MAP_P3.md - Task P3-4
|
|
8
|
+
*/
|
|
9
|
+
export { HTTP_CLIENT_PATTERNS, normalizeHttpMethod } from './types.js';
|
|
10
|
+
// Library-specific detectors
|
|
11
|
+
export { detectRequestsCalls, getRequestsResponseProperties } from './requests.js';
|
|
12
|
+
export { detectHttpxCalls, getHttpxResponseProperties } from './httpx.js';
|
|
13
|
+
export { detectAiohttpCalls, getAiohttpResponseProperties } from './aiohttp.js';
|
|
14
|
+
// Property access tracking
|
|
15
|
+
export { detectPropertyAccess, correlatePropertyAccess, getLibraryResponseProperties, isValidResponseProperty } from './property-access.js';
|
|
16
|
+
import { detectRequestsCalls } from './requests.js';
|
|
17
|
+
import { detectHttpxCalls } from './httpx.js';
|
|
18
|
+
import { detectAiohttpCalls } from './aiohttp.js';
|
|
19
|
+
import { correlatePropertyAccess } from './property-access.js';
|
|
20
|
+
/**
|
|
21
|
+
* Detect all HTTP client calls from Python source code
|
|
22
|
+
*
|
|
23
|
+
* Supports:
|
|
24
|
+
* - requests library
|
|
25
|
+
* - httpx library
|
|
26
|
+
* - aiohttp library
|
|
27
|
+
*
|
|
28
|
+
* @param content Python source code content
|
|
29
|
+
* @returns Array of HTTP calls with correlated response property access
|
|
30
|
+
*/
|
|
31
|
+
export function detectAllHttpCalls(content) {
|
|
32
|
+
const results = [];
|
|
33
|
+
// Detect from each library
|
|
34
|
+
const requestsCalls = detectRequestsCalls(content);
|
|
35
|
+
const httpxCalls = detectHttpxCalls(content);
|
|
36
|
+
const aiohttpCalls = detectAiohttpCalls(content);
|
|
37
|
+
// Combine all calls
|
|
38
|
+
const allCalls = [
|
|
39
|
+
...requestsCalls,
|
|
40
|
+
...httpxCalls,
|
|
41
|
+
...aiohttpCalls
|
|
42
|
+
];
|
|
43
|
+
// Correlate property access
|
|
44
|
+
const propertyMap = correlatePropertyAccess(allCalls, content);
|
|
45
|
+
// Build results
|
|
46
|
+
for (const call of allCalls) {
|
|
47
|
+
const properties = propertyMap.get(call) || [];
|
|
48
|
+
results.push({
|
|
49
|
+
...call,
|
|
50
|
+
responseProperties: properties
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// Sort by line number
|
|
54
|
+
results.sort((a, b) => a.line - b.line);
|
|
55
|
+
return results;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get supported libraries
|
|
59
|
+
*/
|
|
60
|
+
export function getSupportedLibraries() {
|
|
61
|
+
return ['requests', 'httpx', 'aiohttp'];
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/patterns/python/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,6BAA6B;AAC7B,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAEhF,2BAA2B;AAC3B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,2BAA2B;IAC3B,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEjD,oBAAoB;IACpB,MAAM,QAAQ,GAAqB;QACjC,GAAG,aAAa;QAChB,GAAG,UAAU;QACb,GAAG,YAAY;KAChB,CAAC;IAEF,4BAA4B;IAC5B,MAAM,WAAW,GAAG,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE/D,gBAAgB;IAChB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,IAAI;YACP,kBAAkB,EAAE,UAAU;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAExC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Response Property Access Detection
|
|
3
|
+
*
|
|
4
|
+
* Tracks property access on HTTP response objects:
|
|
5
|
+
* - response.json(), response.text, response.status_code
|
|
6
|
+
* - Correlates with response variable names from HTTP calls
|
|
7
|
+
*
|
|
8
|
+
* @see .context/TASK_MAP_P3.md - Task P3-4
|
|
9
|
+
*/
|
|
10
|
+
import type { PythonPropertyAccess, PythonHttpCall, PythonHttpLibrary } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Detect property access on response variables in Python source code
|
|
13
|
+
*/
|
|
14
|
+
export declare function detectPropertyAccess(content: string, responseVariables: Set<string>): PythonPropertyAccess[];
|
|
15
|
+
/**
|
|
16
|
+
* Map property access back to HTTP calls based on variable names
|
|
17
|
+
*/
|
|
18
|
+
export declare function correlatePropertyAccess(calls: PythonHttpCall[], content: string): Map<PythonHttpCall, string[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Get response properties specific to a library
|
|
21
|
+
*/
|
|
22
|
+
export declare function getLibraryResponseProperties(library: PythonHttpLibrary): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Check if a property is valid for a given library
|
|
25
|
+
*/
|
|
26
|
+
export declare function isValidResponseProperty(property: string, library: PythonHttpLibrary): boolean;
|
|
27
|
+
//# sourceMappingURL=property-access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-access.d.ts","sourceRoot":"","sources":["../../../src/patterns/python/property-access.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAiBpB;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,oBAAoB,EAAE,CAkExB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,MAAM,GACd,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,CAkC/B;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAEjF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAE7F"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Response Property Access Detection
|
|
3
|
+
*
|
|
4
|
+
* Tracks property access on HTTP response objects:
|
|
5
|
+
* - response.json(), response.text, response.status_code
|
|
6
|
+
* - Correlates with response variable names from HTTP calls
|
|
7
|
+
*
|
|
8
|
+
* @see .context/TASK_MAP_P3.md - Task P3-4
|
|
9
|
+
*/
|
|
10
|
+
import { HTTP_CLIENT_PATTERNS } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* All known response properties/methods across libraries
|
|
13
|
+
*/
|
|
14
|
+
const ALL_RESPONSE_PROPERTIES = new Set([
|
|
15
|
+
// Common
|
|
16
|
+
'json', 'text', 'content', 'headers', 'cookies', 'url', 'encoding',
|
|
17
|
+
// requests
|
|
18
|
+
'status_code', 'ok', 'reason',
|
|
19
|
+
// httpx
|
|
20
|
+
'is_success', 'is_error', 'is_redirect',
|
|
21
|
+
// aiohttp
|
|
22
|
+
'status', 'read', 'content_type'
|
|
23
|
+
]);
|
|
24
|
+
/**
|
|
25
|
+
* Detect property access on response variables in Python source code
|
|
26
|
+
*/
|
|
27
|
+
export function detectPropertyAccess(content, responseVariables) {
|
|
28
|
+
const accesses = [];
|
|
29
|
+
const lines = content.split('\n');
|
|
30
|
+
for (let i = 0; i < lines.length; i++) {
|
|
31
|
+
const line = lines[i];
|
|
32
|
+
const lineNum = i + 1;
|
|
33
|
+
// Check each known response variable
|
|
34
|
+
for (const varName of responseVariables) {
|
|
35
|
+
// Method call: response.json()
|
|
36
|
+
const methodCallRegex = new RegExp(`\\b${escapeRegex(varName)}\\.(\\w+)\\s*\\(`, 'g');
|
|
37
|
+
let match;
|
|
38
|
+
while ((match = methodCallRegex.exec(line)) !== null) {
|
|
39
|
+
const prop = match[1];
|
|
40
|
+
if (ALL_RESPONSE_PROPERTIES.has(prop)) {
|
|
41
|
+
accesses.push({
|
|
42
|
+
variable: varName,
|
|
43
|
+
property: prop,
|
|
44
|
+
isMethodCall: true,
|
|
45
|
+
line: lineNum
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Property access: response.text, response.status_code
|
|
50
|
+
// Avoid matching method calls by checking what comes after
|
|
51
|
+
const propertyAccessRegex = new RegExp(`\\b${escapeRegex(varName)}\\.(\\w+)(?!\\s*\\()`, 'g');
|
|
52
|
+
while ((match = propertyAccessRegex.exec(line)) !== null) {
|
|
53
|
+
const prop = match[1];
|
|
54
|
+
if (ALL_RESPONSE_PROPERTIES.has(prop)) {
|
|
55
|
+
accesses.push({
|
|
56
|
+
variable: varName,
|
|
57
|
+
property: prop,
|
|
58
|
+
isMethodCall: false,
|
|
59
|
+
line: lineNum
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Await method calls: await response.json()
|
|
64
|
+
const awaitMethodRegex = new RegExp(`await\\s+${escapeRegex(varName)}\\.(\\w+)\\s*\\(`, 'g');
|
|
65
|
+
while ((match = awaitMethodRegex.exec(line)) !== null) {
|
|
66
|
+
const prop = match[1];
|
|
67
|
+
if (ALL_RESPONSE_PROPERTIES.has(prop)) {
|
|
68
|
+
accesses.push({
|
|
69
|
+
variable: varName,
|
|
70
|
+
property: prop,
|
|
71
|
+
isMethodCall: true,
|
|
72
|
+
line: lineNum
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return accesses;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Map property access back to HTTP calls based on variable names
|
|
82
|
+
*/
|
|
83
|
+
export function correlatePropertyAccess(calls, content) {
|
|
84
|
+
const result = new Map();
|
|
85
|
+
// Collect all response variables
|
|
86
|
+
const responseVars = new Set();
|
|
87
|
+
for (const call of calls) {
|
|
88
|
+
if (call.responseVariable) {
|
|
89
|
+
responseVars.add(call.responseVariable);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Detect property accesses
|
|
93
|
+
const accesses = detectPropertyAccess(content, responseVars);
|
|
94
|
+
// Group accesses by variable name
|
|
95
|
+
const accessByVar = new Map();
|
|
96
|
+
for (const access of accesses) {
|
|
97
|
+
if (!accessByVar.has(access.variable)) {
|
|
98
|
+
accessByVar.set(access.variable, new Set());
|
|
99
|
+
}
|
|
100
|
+
accessByVar.get(access.variable).add(access.property);
|
|
101
|
+
}
|
|
102
|
+
// Correlate with HTTP calls
|
|
103
|
+
for (const call of calls) {
|
|
104
|
+
const varName = call.responseVariable;
|
|
105
|
+
if (varName && accessByVar.has(varName)) {
|
|
106
|
+
result.set(call, Array.from(accessByVar.get(varName)));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
result.set(call, []);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get response properties specific to a library
|
|
116
|
+
*/
|
|
117
|
+
export function getLibraryResponseProperties(library) {
|
|
118
|
+
return HTTP_CLIENT_PATTERNS[library].responseAccess;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Check if a property is valid for a given library
|
|
122
|
+
*/
|
|
123
|
+
export function isValidResponseProperty(property, library) {
|
|
124
|
+
return HTTP_CLIENT_PATTERNS[library].responseAccess.includes(property);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Escape special regex characters in a string
|
|
128
|
+
*/
|
|
129
|
+
function escapeRegex(str) {
|
|
130
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=property-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-access.js","sourceRoot":"","sources":["../../../src/patterns/python/property-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python requests library HTTP client detection
|
|
3
|
+
*
|
|
4
|
+
* Detects calls to the requests library:
|
|
5
|
+
* - requests.get(), requests.post(), etc.
|
|
6
|
+
* - session.get(), session.post() with Session instances
|
|
7
|
+
*
|
|
8
|
+
* @see .context/TASK_MAP_P3.md - Task P3-4
|
|
9
|
+
*/
|
|
10
|
+
import type { PythonHttpCall } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Detect HTTP calls from the requests library in Python source code
|
|
13
|
+
*/
|
|
14
|
+
export declare function detectRequestsCalls(content: string): PythonHttpCall[];
|
|
15
|
+
/**
|
|
16
|
+
* Get the response properties that requests library supports
|
|
17
|
+
*/
|
|
18
|
+
export declare function getRequestsResponseProperties(): string[];
|
|
19
|
+
//# sourceMappingURL=requests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../../src/patterns/python/requests.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,YAAY,CAAC;AAiDpB;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAsErE;AA2JD;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,EAAE,CAExD"}
|