@relayfile/adapter-core 0.1.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/README.md +89 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +430 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/docs/change-detector.d.ts +23 -0
- package/dist/src/docs/change-detector.d.ts.map +1 -0
- package/dist/src/docs/change-detector.js +126 -0
- package/dist/src/docs/change-detector.js.map +1 -0
- package/dist/src/docs/crawler.d.ts +22 -0
- package/dist/src/docs/crawler.d.ts.map +1 -0
- package/dist/src/docs/crawler.js +296 -0
- package/dist/src/docs/crawler.js.map +1 -0
- package/dist/src/docs/extractor.d.ts +12 -0
- package/dist/src/docs/extractor.d.ts.map +1 -0
- package/dist/src/docs/extractor.js +549 -0
- package/dist/src/docs/extractor.js.map +1 -0
- package/dist/src/docs/generator.d.ts +14 -0
- package/dist/src/docs/generator.d.ts.map +1 -0
- package/dist/src/docs/generator.js +368 -0
- package/dist/src/docs/generator.js.map +1 -0
- package/dist/src/docs/mapping-generator.d.ts +13 -0
- package/dist/src/docs/mapping-generator.d.ts.map +1 -0
- package/dist/src/docs/mapping-generator.js +104 -0
- package/dist/src/docs/mapping-generator.js.map +1 -0
- package/dist/src/docs/types.d.ts +110 -0
- package/dist/src/docs/types.d.ts.map +1 -0
- package/dist/src/docs/types.js +2 -0
- package/dist/src/docs/types.js.map +1 -0
- package/dist/src/docs/updater.d.ts +11 -0
- package/dist/src/docs/updater.d.ts.map +1 -0
- package/dist/src/docs/updater.js +133 -0
- package/dist/src/docs/updater.js.map +1 -0
- package/dist/src/drift/drift-checker.d.ts +13 -0
- package/dist/src/drift/drift-checker.d.ts.map +1 -0
- package/dist/src/drift/drift-checker.js +200 -0
- package/dist/src/drift/drift-checker.js.map +1 -0
- package/dist/src/generate/adapter-generator.d.ts +4 -0
- package/dist/src/generate/adapter-generator.d.ts.map +1 -0
- package/dist/src/generate/adapter-generator.js +115 -0
- package/dist/src/generate/adapter-generator.js.map +1 -0
- package/dist/src/generate/types-generator.d.ts +3 -0
- package/dist/src/generate/types-generator.d.ts.map +1 -0
- package/dist/src/generate/types-generator.js +105 -0
- package/dist/src/generate/types-generator.js.map +1 -0
- package/dist/src/index.d.ts +22 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/ingest/index.d.ts +4 -0
- package/dist/src/ingest/index.d.ts.map +1 -0
- package/dist/src/ingest/index.js +34 -0
- package/dist/src/ingest/index.js.map +1 -0
- package/dist/src/ingest/openapi.d.ts +8 -0
- package/dist/src/ingest/openapi.d.ts.map +1 -0
- package/dist/src/ingest/openapi.js +187 -0
- package/dist/src/ingest/openapi.js.map +1 -0
- package/dist/src/ingest/postman.d.ts +3 -0
- package/dist/src/ingest/postman.d.ts.map +1 -0
- package/dist/src/ingest/postman.js +14 -0
- package/dist/src/ingest/postman.js.map +1 -0
- package/dist/src/ingest/sample.d.ts +4 -0
- package/dist/src/ingest/sample.d.ts.map +1 -0
- package/dist/src/ingest/sample.js +72 -0
- package/dist/src/ingest/sample.js.map +1 -0
- package/dist/src/ingest/shared.d.ts +6 -0
- package/dist/src/ingest/shared.d.ts.map +1 -0
- package/dist/src/ingest/shared.js +52 -0
- package/dist/src/ingest/shared.js.map +1 -0
- package/dist/src/ingest/types.d.ts +44 -0
- package/dist/src/ingest/types.d.ts.map +1 -0
- package/dist/src/ingest/types.js +2 -0
- package/dist/src/ingest/types.js.map +1 -0
- package/dist/src/runtime/schema-adapter.d.ts +71 -0
- package/dist/src/runtime/schema-adapter.d.ts.map +1 -0
- package/dist/src/runtime/schema-adapter.js +887 -0
- package/dist/src/runtime/schema-adapter.js.map +1 -0
- package/dist/src/spec/parser.d.ts +9 -0
- package/dist/src/spec/parser.d.ts.map +1 -0
- package/dist/src/spec/parser.js +371 -0
- package/dist/src/spec/parser.js.map +1 -0
- package/dist/src/spec/template.d.ts +8 -0
- package/dist/src/spec/template.d.ts.map +1 -0
- package/dist/src/spec/template.js +75 -0
- package/dist/src/spec/template.js.map +1 -0
- package/dist/src/spec/types.d.ts +88 -0
- package/dist/src/spec/types.d.ts.map +1 -0
- package/dist/src/spec/types.js +2 -0
- package/dist/src/spec/types.js.map +1 -0
- package/dist/tests/docs/change-detector.test.d.ts +2 -0
- package/dist/tests/docs/change-detector.test.d.ts.map +1 -0
- package/dist/tests/docs/change-detector.test.js +24 -0
- package/dist/tests/docs/change-detector.test.js.map +1 -0
- package/dist/tests/docs/crawler.test.d.ts +2 -0
- package/dist/tests/docs/crawler.test.d.ts.map +1 -0
- package/dist/tests/docs/crawler.test.js +55 -0
- package/dist/tests/docs/crawler.test.js.map +1 -0
- package/dist/tests/docs/extractor.test.d.ts +2 -0
- package/dist/tests/docs/extractor.test.d.ts.map +1 -0
- package/dist/tests/docs/extractor.test.js +63 -0
- package/dist/tests/docs/extractor.test.js.map +1 -0
- package/dist/tests/docs/generator.test.d.ts +2 -0
- package/dist/tests/docs/generator.test.d.ts.map +1 -0
- package/dist/tests/docs/generator.test.js +46 -0
- package/dist/tests/docs/generator.test.js.map +1 -0
- package/dist/tests/drift/drift-checker.test.d.ts +2 -0
- package/dist/tests/drift/drift-checker.test.d.ts.map +1 -0
- package/dist/tests/drift/drift-checker.test.js +59 -0
- package/dist/tests/drift/drift-checker.test.js.map +1 -0
- package/dist/tests/round-trip/fake-connection.d.ts +29 -0
- package/dist/tests/round-trip/fake-connection.d.ts.map +1 -0
- package/dist/tests/round-trip/fake-connection.js +174 -0
- package/dist/tests/round-trip/fake-connection.js.map +1 -0
- package/dist/tests/round-trip/github-pulls.test.d.ts +2 -0
- package/dist/tests/round-trip/github-pulls.test.d.ts.map +1 -0
- package/dist/tests/round-trip/github-pulls.test.js +12 -0
- package/dist/tests/round-trip/github-pulls.test.js.map +1 -0
- package/dist/tests/round-trip/harness.d.ts +74 -0
- package/dist/tests/round-trip/harness.d.ts.map +1 -0
- package/dist/tests/round-trip/harness.js +323 -0
- package/dist/tests/round-trip/harness.js.map +1 -0
- package/dist/tests/round-trip/vfs-snapshot.d.ts +45 -0
- package/dist/tests/round-trip/vfs-snapshot.d.ts.map +1 -0
- package/dist/tests/round-trip/vfs-snapshot.js +218 -0
- package/dist/tests/round-trip/vfs-snapshot.js.map +1 -0
- package/dist/tests/runtime/schema-adapter.sync.test.d.ts +2 -0
- package/dist/tests/runtime/schema-adapter.sync.test.d.ts.map +1 -0
- package/dist/tests/runtime/schema-adapter.sync.test.js +962 -0
- package/dist/tests/runtime/schema-adapter.sync.test.js.map +1 -0
- package/dist/tests/runtime/schema-adapter.test.d.ts +2 -0
- package/dist/tests/runtime/schema-adapter.test.d.ts.map +1 -0
- package/dist/tests/runtime/schema-adapter.test.js +100 -0
- package/dist/tests/runtime/schema-adapter.test.js.map +1 -0
- package/dist/tests/spec/parser.test.d.ts +2 -0
- package/dist/tests/spec/parser.test.d.ts.map +1 -0
- package/dist/tests/spec/parser.test.js +248 -0
- package/dist/tests/spec/parser.test.js.map +1 -0
- package/mappings/github.mapping.yaml +35 -0
- package/mappings/slack.mapping.yaml +18 -0
- package/package.json +52 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export * from "./spec/types.js";
|
|
2
|
+
export * from "./spec/template.js";
|
|
3
|
+
export * from "./spec/parser.js";
|
|
4
|
+
export * from "./ingest/types.js";
|
|
5
|
+
export * from "./ingest/index.js";
|
|
6
|
+
export * from "./ingest/openapi.js";
|
|
7
|
+
export * from "./ingest/postman.js";
|
|
8
|
+
export * from "./ingest/sample.js";
|
|
9
|
+
export * from "./runtime/schema-adapter.js";
|
|
10
|
+
export * from "./generate/adapter-generator.js";
|
|
11
|
+
export * from "./generate/types-generator.js";
|
|
12
|
+
export * from "./drift/drift-checker.js";
|
|
13
|
+
export * from "./docs/types.js";
|
|
14
|
+
export * from "./docs/crawler.js";
|
|
15
|
+
export * from "./docs/extractor.js";
|
|
16
|
+
export * from "./docs/generator.js";
|
|
17
|
+
export * from "./docs/mapping-generator.js";
|
|
18
|
+
export * from "./docs/change-detector.js";
|
|
19
|
+
export * from "./docs/updater.js";
|
|
20
|
+
export { IntegrationAdapter } from "@relayfile/sdk";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ingest/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAOpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,WAAW,EACjB,GAAG,SAAgB,GAClB,OAAO,CAAC,WAAW,CAAC,CA2BtB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { DocsCrawler } from "../docs/crawler.js";
|
|
2
|
+
import { APIExtractor } from "../docs/extractor.js";
|
|
3
|
+
import { SpecGenerator } from "../docs/generator.js";
|
|
4
|
+
import { loadOpenApiSpec, openApiDocumentToServiceSpec, } from "./openapi.js";
|
|
5
|
+
import { loadPostmanSpec } from "./postman.js";
|
|
6
|
+
import { loadSampleSpec } from "./sample.js";
|
|
7
|
+
export async function loadServiceSpecFromMapping(spec, cwd = process.cwd()) {
|
|
8
|
+
if (spec.adapter.source.openapi) {
|
|
9
|
+
return loadOpenApiSpec(spec.adapter.source.openapi, cwd);
|
|
10
|
+
}
|
|
11
|
+
if (spec.adapter.source.postman) {
|
|
12
|
+
return loadPostmanSpec(spec.adapter.source.postman, cwd);
|
|
13
|
+
}
|
|
14
|
+
if (spec.adapter.source.samples) {
|
|
15
|
+
return loadSampleSpec(spec.adapter.source.samples, cwd);
|
|
16
|
+
}
|
|
17
|
+
if (spec.adapter.source.docs) {
|
|
18
|
+
const pages = await new DocsCrawler(spec.adapter.source.docs).crawl();
|
|
19
|
+
const extracted = await new APIExtractor(spec.adapter.source.llm).extract(pages);
|
|
20
|
+
const document = new SpecGenerator().generateDocument(extracted, {
|
|
21
|
+
apiName: spec.adapter.name,
|
|
22
|
+
apiVersion: spec.adapter.version,
|
|
23
|
+
docsSource: spec.adapter.source.docs,
|
|
24
|
+
sync: spec.adapter.source.sync,
|
|
25
|
+
llm: spec.adapter.source.llm,
|
|
26
|
+
});
|
|
27
|
+
return openApiDocumentToServiceSpec(document, {
|
|
28
|
+
sourceKind: "docs",
|
|
29
|
+
sourceLocation: spec.adapter.source.docs.url,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
throw new Error("Mapping spec does not define a supported source");
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ingest/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EACL,eAAe,EACf,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAiB,EACjB,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACtE,MAAM,SAAS,GAAG,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE;YAC/D,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAC1B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAChC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;YACpC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;YAC9B,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;SAC7B,CAAC,CAAC;QACH,OAAO,4BAA4B,CAAC,QAAQ,EAAE;YAC5C,UAAU,EAAE,MAAM;YAClB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SchemaNode, ServiceSpec } from "./types.js";
|
|
2
|
+
export declare function loadOpenApiSpec(location: string, cwd?: string): Promise<ServiceSpec>;
|
|
3
|
+
export declare function openApiDocumentToServiceSpec(document: Record<string, unknown>, options: {
|
|
4
|
+
sourceKind: ServiceSpec["sourceKind"];
|
|
5
|
+
sourceLocation: string;
|
|
6
|
+
}): ServiceSpec;
|
|
7
|
+
export declare function normalizeSchemaNode(input: unknown): SchemaNode;
|
|
8
|
+
//# sourceMappingURL=openapi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../../src/ingest/openapi.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAIV,UAAU,EACV,WAAW,EACZ,MAAM,YAAY,CAAC;AAIpB,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,GAAG,SAAgB,GAClB,OAAO,CAAC,WAAW,CAAC,CAStB;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE;IACP,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC;CACxB,GACA,WAAW,CAkBb;AAmJD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CA0C9D"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { asRecord, firstJsonContent, parseStructuredText, readSourceText, } from "./shared.js";
|
|
2
|
+
const METHODS = ["DELETE", "GET", "PATCH", "POST", "PUT"];
|
|
3
|
+
export async function loadOpenApiSpec(location, cwd = process.cwd()) {
|
|
4
|
+
const text = await readSourceText(location, cwd);
|
|
5
|
+
const parsed = parseStructuredText(text, location);
|
|
6
|
+
const document = asRecord(parsed, "OpenAPI document");
|
|
7
|
+
return openApiDocumentToServiceSpec(document, {
|
|
8
|
+
sourceKind: "openapi",
|
|
9
|
+
sourceLocation: location,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export function openApiDocumentToServiceSpec(document, options) {
|
|
13
|
+
const info = asOptionalRecord(document.info);
|
|
14
|
+
const title = typeof info?.title === "string" ? info.title : "Unknown API";
|
|
15
|
+
const version = typeof info?.version === "string" ? info.version : "0.0.0";
|
|
16
|
+
const schemas = collectSchemas(document);
|
|
17
|
+
const endpoints = collectEndpoints(document);
|
|
18
|
+
const webhookSchemas = collectWebhookSchemas(document);
|
|
19
|
+
return {
|
|
20
|
+
title,
|
|
21
|
+
version,
|
|
22
|
+
sourceKind: options.sourceKind,
|
|
23
|
+
sourceLocation: options.sourceLocation,
|
|
24
|
+
endpoints,
|
|
25
|
+
schemas,
|
|
26
|
+
webhookSchemas,
|
|
27
|
+
raw: document,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function collectSchemas(document) {
|
|
31
|
+
const components = asOptionalRecord(document.components);
|
|
32
|
+
const schemasValue = asOptionalRecord(components?.schemas);
|
|
33
|
+
const schemas = {};
|
|
34
|
+
if (!schemasValue) {
|
|
35
|
+
return schemas;
|
|
36
|
+
}
|
|
37
|
+
for (const [name, rawSchema] of Object.entries(schemasValue)) {
|
|
38
|
+
schemas[name] = normalizeSchemaNode(rawSchema);
|
|
39
|
+
}
|
|
40
|
+
return schemas;
|
|
41
|
+
}
|
|
42
|
+
function collectEndpoints(document) {
|
|
43
|
+
const pathsValue = asOptionalRecord(document.paths);
|
|
44
|
+
if (!pathsValue) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const endpoints = [];
|
|
48
|
+
for (const [path, pathEntry] of Object.entries(pathsValue)) {
|
|
49
|
+
const pathObject = asOptionalRecord(pathEntry);
|
|
50
|
+
if (!pathObject) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const pathParameters = readParameters(pathObject.parameters);
|
|
54
|
+
for (const method of METHODS) {
|
|
55
|
+
const operationValue = pathObject[method.toLowerCase()];
|
|
56
|
+
const operation = asOptionalRecord(operationValue);
|
|
57
|
+
if (!operation) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const operationId = typeof operation.operationId === "string"
|
|
61
|
+
? operation.operationId
|
|
62
|
+
: `${method}_${path}`.replace(/[^\w]+/g, "_");
|
|
63
|
+
const requestBody = asOptionalRecord(operation.requestBody);
|
|
64
|
+
const requestContent = firstJsonContent(asOptionalRecord(requestBody?.content));
|
|
65
|
+
const responses = asOptionalRecord(operation.responses);
|
|
66
|
+
const responseSchema = readPrimaryResponseSchema(responses);
|
|
67
|
+
endpoints.push({
|
|
68
|
+
key: `${method} ${path}`,
|
|
69
|
+
operationId,
|
|
70
|
+
method,
|
|
71
|
+
path,
|
|
72
|
+
summary: typeof operation.summary === "string" ? operation.summary : undefined,
|
|
73
|
+
requestSchema: requestContent ? normalizeSchemaNode(requestContent.schema) : undefined,
|
|
74
|
+
responseSchema,
|
|
75
|
+
parameters: [...pathParameters, ...readParameters(operation.parameters)],
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return endpoints;
|
|
80
|
+
}
|
|
81
|
+
function collectWebhookSchemas(document) {
|
|
82
|
+
const webhooks = asOptionalRecord(document.webhooks) ??
|
|
83
|
+
asOptionalRecord(document["x-webhooks"]);
|
|
84
|
+
if (!webhooks) {
|
|
85
|
+
return {};
|
|
86
|
+
}
|
|
87
|
+
const output = {};
|
|
88
|
+
for (const [eventName, rawWebhook] of Object.entries(webhooks)) {
|
|
89
|
+
const webhook = asOptionalRecord(rawWebhook);
|
|
90
|
+
if (!webhook) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
for (const method of METHODS) {
|
|
94
|
+
const operation = asOptionalRecord(webhook[method.toLowerCase()]);
|
|
95
|
+
if (!operation) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const requestBody = asOptionalRecord(operation.requestBody);
|
|
99
|
+
const requestContent = firstJsonContent(asOptionalRecord(requestBody?.content));
|
|
100
|
+
if (requestContent?.schema) {
|
|
101
|
+
output[eventName] = normalizeSchemaNode(requestContent.schema);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return output;
|
|
107
|
+
}
|
|
108
|
+
function readParameters(value) {
|
|
109
|
+
if (!Array.isArray(value)) {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
const output = [];
|
|
113
|
+
for (const item of value) {
|
|
114
|
+
const parameter = asOptionalRecord(item);
|
|
115
|
+
if (!parameter || typeof parameter.name !== "string" || typeof parameter.in !== "string") {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
output.push({
|
|
119
|
+
name: parameter.name,
|
|
120
|
+
in: parameter.in,
|
|
121
|
+
required: parameter.required === true,
|
|
122
|
+
schema: parameter.schema ? normalizeSchemaNode(parameter.schema) : undefined,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return output;
|
|
126
|
+
}
|
|
127
|
+
function readPrimaryResponseSchema(responses) {
|
|
128
|
+
if (!responses) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
const preferredKeys = Object.keys(responses).sort((left, right) => {
|
|
132
|
+
const leftScore = left.startsWith("2") ? 0 : 1;
|
|
133
|
+
const rightScore = right.startsWith("2") ? 0 : 1;
|
|
134
|
+
return leftScore - rightScore || left.localeCompare(right);
|
|
135
|
+
});
|
|
136
|
+
for (const key of preferredKeys) {
|
|
137
|
+
const response = asOptionalRecord(responses[key]);
|
|
138
|
+
const content = firstJsonContent(asOptionalRecord(response?.content));
|
|
139
|
+
if (content?.schema) {
|
|
140
|
+
return normalizeSchemaNode(content.schema);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
export function normalizeSchemaNode(input) {
|
|
146
|
+
const value = asOptionalRecord(input);
|
|
147
|
+
if (!value) {
|
|
148
|
+
return { raw: {} };
|
|
149
|
+
}
|
|
150
|
+
if (typeof value.$ref === "string") {
|
|
151
|
+
return {
|
|
152
|
+
ref: value.$ref,
|
|
153
|
+
raw: value,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
const properties = asOptionalRecord(value.properties);
|
|
157
|
+
const additionalProperties = value.additionalProperties;
|
|
158
|
+
return {
|
|
159
|
+
type: typeof value.type === "string" ? value.type : undefined,
|
|
160
|
+
format: typeof value.format === "string" ? value.format : undefined,
|
|
161
|
+
description: typeof value.description === "string" ? value.description : undefined,
|
|
162
|
+
enum: Array.isArray(value.enum) ? [...value.enum] : undefined,
|
|
163
|
+
nullable: value.nullable === true,
|
|
164
|
+
required: Array.isArray(value.required)
|
|
165
|
+
? value.required.filter((item) => typeof item === "string")
|
|
166
|
+
: undefined,
|
|
167
|
+
properties: properties
|
|
168
|
+
? Object.fromEntries(Object.entries(properties).map(([key, property]) => [key, normalizeSchemaNode(property)]))
|
|
169
|
+
: undefined,
|
|
170
|
+
items: value.items ? normalizeSchemaNode(value.items) : undefined,
|
|
171
|
+
anyOf: Array.isArray(value.anyOf) ? value.anyOf.map(normalizeSchemaNode) : undefined,
|
|
172
|
+
oneOf: Array.isArray(value.oneOf) ? value.oneOf.map(normalizeSchemaNode) : undefined,
|
|
173
|
+
allOf: Array.isArray(value.allOf) ? value.allOf.map(normalizeSchemaNode) : undefined,
|
|
174
|
+
additionalProperties: typeof additionalProperties === "boolean"
|
|
175
|
+
? additionalProperties
|
|
176
|
+
: additionalProperties
|
|
177
|
+
? normalizeSchemaNode(additionalProperties)
|
|
178
|
+
: undefined,
|
|
179
|
+
raw: value,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function asOptionalRecord(value) {
|
|
183
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
184
|
+
? value
|
|
185
|
+
: undefined;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=openapi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../../src/ingest/openapi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postman.d.ts","sourceRoot":"","sources":["../../../src/ingest/postman.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,GAAG,SAAgB,GAClB,OAAO,CAAC,WAAW,CAAC,CAUtB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { convert } from "@scalar/postman-to-openapi";
|
|
2
|
+
import { openApiDocumentToServiceSpec } from "./openapi.js";
|
|
3
|
+
import { asRecord, parseStructuredText, readSourceText } from "./shared.js";
|
|
4
|
+
export async function loadPostmanSpec(location, cwd = process.cwd()) {
|
|
5
|
+
const text = await readSourceText(location, cwd);
|
|
6
|
+
const parsed = parseStructuredText(text, location);
|
|
7
|
+
const collection = asRecord(parsed, "Postman collection");
|
|
8
|
+
const document = asRecord(convert(collection), "Converted OpenAPI document");
|
|
9
|
+
return openApiDocumentToServiceSpec(document, {
|
|
10
|
+
sourceKind: "postman",
|
|
11
|
+
sourceLocation: location,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=postman.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postman.js","sourceRoot":"","sources":["../../../src/ingest/postman.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG5E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAiB,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAEpF,OAAO,4BAA4B,CAAC,QAAQ,EAAE;QAC5C,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,QAAQ;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SchemaNode, ServiceSpec } from "./types.js";
|
|
2
|
+
export declare function loadSampleSpec(source: string | string[], cwd?: string): Promise<ServiceSpec>;
|
|
3
|
+
export declare function inferSchemaFromSample(value: unknown): SchemaNode;
|
|
4
|
+
//# sourceMappingURL=sample.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sample.d.ts","sourceRoot":"","sources":["../../../src/ingest/sample.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EACzB,GAAG,SAAgB,GAClB,OAAO,CAAC,WAAW,CAAC,CAoBtB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAoChE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { basename } from "node:path";
|
|
2
|
+
import { normalizeSchemaNode } from "./openapi.js";
|
|
3
|
+
import { readSourceText } from "./shared.js";
|
|
4
|
+
export async function loadSampleSpec(source, cwd = process.cwd()) {
|
|
5
|
+
const samplePaths = Array.isArray(source) ? source : [source];
|
|
6
|
+
const webhookSchemas = {};
|
|
7
|
+
for (const samplePath of samplePaths) {
|
|
8
|
+
const text = await readSourceText(samplePath, cwd);
|
|
9
|
+
const parsed = JSON.parse(text);
|
|
10
|
+
const eventName = inferEventName(parsed, samplePath);
|
|
11
|
+
webhookSchemas[eventName] = inferSchemaFromSample(parsed);
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
title: "Webhook Samples",
|
|
15
|
+
version: "0.0.0",
|
|
16
|
+
sourceKind: "samples",
|
|
17
|
+
sourceLocation: samplePaths.join(","),
|
|
18
|
+
endpoints: [],
|
|
19
|
+
schemas: {},
|
|
20
|
+
webhookSchemas,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function inferSchemaFromSample(value) {
|
|
24
|
+
if (value === null) {
|
|
25
|
+
return { type: "null", raw: { type: "null" } };
|
|
26
|
+
}
|
|
27
|
+
if (Array.isArray(value)) {
|
|
28
|
+
return normalizeSchemaNode({
|
|
29
|
+
type: "array",
|
|
30
|
+
items: value.length > 0 ? inferSchemaFromSample(value[0]).raw ?? {} : {},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (typeof value === "string") {
|
|
34
|
+
return normalizeSchemaNode({ type: "string" });
|
|
35
|
+
}
|
|
36
|
+
if (typeof value === "number") {
|
|
37
|
+
return normalizeSchemaNode({
|
|
38
|
+
type: Number.isInteger(value) ? "integer" : "number",
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (typeof value === "boolean") {
|
|
42
|
+
return normalizeSchemaNode({ type: "boolean" });
|
|
43
|
+
}
|
|
44
|
+
if (typeof value === "object") {
|
|
45
|
+
const properties = Object.fromEntries(Object.entries(value).map(([key, child]) => [
|
|
46
|
+
key,
|
|
47
|
+
inferSchemaFromSample(child).raw ?? {},
|
|
48
|
+
]));
|
|
49
|
+
return normalizeSchemaNode({
|
|
50
|
+
type: "object",
|
|
51
|
+
properties,
|
|
52
|
+
required: Object.keys(value),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return normalizeSchemaNode({});
|
|
56
|
+
}
|
|
57
|
+
function inferEventName(value, samplePath) {
|
|
58
|
+
if (typeof value === "object" && value !== null) {
|
|
59
|
+
const record = value;
|
|
60
|
+
if (typeof record.event === "object" && record.event !== null) {
|
|
61
|
+
const eventType = record.event.type;
|
|
62
|
+
if (typeof eventType === "string" && eventType.trim()) {
|
|
63
|
+
return eventType;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (typeof record.type === "string" && record.type.trim()) {
|
|
67
|
+
return record.type;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return basename(samplePath).replace(/\.(json|ya?ml)$/i, "");
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=sample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sample.js","sourceRoot":"","sources":["../../../src/ingest/sample.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function isHttpUrl(value: string): boolean;
|
|
2
|
+
export declare function readSourceText(location: string, cwd?: string): Promise<string>;
|
|
3
|
+
export declare function parseStructuredText(text: string, location?: string): unknown;
|
|
4
|
+
export declare function asRecord(value: unknown, label: string): Record<string, unknown>;
|
|
5
|
+
export declare function firstJsonContent(content: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
|
|
6
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ingest/shared.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,GAAG,SAAgB,GAClB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAa,GACpB,OAAO,CAWT;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC3C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAiBrC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import YAML from "yaml";
|
|
4
|
+
export function isHttpUrl(value) {
|
|
5
|
+
return /^https?:\/\//i.test(value);
|
|
6
|
+
}
|
|
7
|
+
export async function readSourceText(location, cwd = process.cwd()) {
|
|
8
|
+
if (isHttpUrl(location)) {
|
|
9
|
+
const response = await fetch(location);
|
|
10
|
+
if (!response.ok) {
|
|
11
|
+
throw new Error(`Failed to fetch ${location}: ${response.status} ${response.statusText}`);
|
|
12
|
+
}
|
|
13
|
+
return response.text();
|
|
14
|
+
}
|
|
15
|
+
return readFile(resolve(cwd, location), "utf8");
|
|
16
|
+
}
|
|
17
|
+
export function parseStructuredText(text, location = "<inline>") {
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse(text);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
try {
|
|
23
|
+
return YAML.parse(text);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
27
|
+
throw new Error(`Failed to parse ${location}: ${message}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function asRecord(value, label) {
|
|
32
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
33
|
+
throw new Error(`${label} must be an object`);
|
|
34
|
+
}
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
export function firstJsonContent(content) {
|
|
38
|
+
if (!content) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
const preferred = content["application/json"];
|
|
42
|
+
if (preferred && typeof preferred === "object" && preferred !== null) {
|
|
43
|
+
return preferred;
|
|
44
|
+
}
|
|
45
|
+
for (const value of Object.values(content)) {
|
|
46
|
+
if (typeof value === "object" && value !== null) {
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/ingest/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,QAAQ,GAAG,UAAU;IAErB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,KAAc,EACd,KAAa;IAEb,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAA4C;IAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9C,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACrE,OAAO,SAAoC,CAAC;IAC9C,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,KAAgC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export type HttpMethod = "DELETE" | "GET" | "PATCH" | "POST" | "PUT";
|
|
2
|
+
export interface SchemaNode {
|
|
3
|
+
ref?: string;
|
|
4
|
+
type?: string;
|
|
5
|
+
format?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
enum?: unknown[];
|
|
8
|
+
nullable?: boolean;
|
|
9
|
+
required?: string[];
|
|
10
|
+
properties?: Record<string, SchemaNode>;
|
|
11
|
+
items?: SchemaNode;
|
|
12
|
+
anyOf?: SchemaNode[];
|
|
13
|
+
oneOf?: SchemaNode[];
|
|
14
|
+
allOf?: SchemaNode[];
|
|
15
|
+
additionalProperties?: boolean | SchemaNode;
|
|
16
|
+
raw?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface EndpointParameter {
|
|
19
|
+
name: string;
|
|
20
|
+
in: string;
|
|
21
|
+
required: boolean;
|
|
22
|
+
schema?: SchemaNode;
|
|
23
|
+
}
|
|
24
|
+
export interface EndpointSpec {
|
|
25
|
+
key: string;
|
|
26
|
+
operationId: string;
|
|
27
|
+
method: HttpMethod;
|
|
28
|
+
path: string;
|
|
29
|
+
summary?: string;
|
|
30
|
+
requestSchema?: SchemaNode;
|
|
31
|
+
responseSchema?: SchemaNode;
|
|
32
|
+
parameters: EndpointParameter[];
|
|
33
|
+
}
|
|
34
|
+
export interface ServiceSpec {
|
|
35
|
+
title: string;
|
|
36
|
+
version: string;
|
|
37
|
+
sourceKind: "docs" | "openapi" | "postman" | "samples";
|
|
38
|
+
sourceLocation: string;
|
|
39
|
+
endpoints: EndpointSpec[];
|
|
40
|
+
schemas: Record<string, SchemaNode>;
|
|
41
|
+
webhookSchemas: Record<string, SchemaNode>;
|
|
42
|
+
raw?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ingest/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,KAAK,GACL,OAAO,GACP,MAAM,GACN,KAAK,CAAC;AAEV,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,oBAAoB,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ingest/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { IntegrationAdapter, type ConnectionProvider, type FileSemantics, type ProxyResponse, type RelayFileClient } from "@relayfile/sdk";
|
|
2
|
+
import type { AdapterWebhook, IngestResult, SyncOptions, SyncResult } from "@relayfile/sdk";
|
|
3
|
+
import type { MappingSpec, ResourceMapping, WebhookMapping, WritebackMapping } from "../spec/types.js";
|
|
4
|
+
export interface MatchedWriteback {
|
|
5
|
+
name: string;
|
|
6
|
+
mapping: WritebackMapping;
|
|
7
|
+
method: "DELETE" | "GET" | "PATCH" | "POST" | "PUT";
|
|
8
|
+
endpointPath: string;
|
|
9
|
+
params: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
export interface SchemaAdapterOptions {
|
|
12
|
+
client: RelayFileClient;
|
|
13
|
+
provider: ConnectionProvider;
|
|
14
|
+
spec: MappingSpec;
|
|
15
|
+
defaultConnectionId?: string;
|
|
16
|
+
resolveConnectionId?: (context: {
|
|
17
|
+
workspaceId: string;
|
|
18
|
+
path: string;
|
|
19
|
+
content: string;
|
|
20
|
+
parsedContent?: unknown;
|
|
21
|
+
match: MatchedWriteback;
|
|
22
|
+
}) => Promise<string> | string;
|
|
23
|
+
}
|
|
24
|
+
export interface SchemaSyncOptions extends SyncOptions {
|
|
25
|
+
workspaceId?: string;
|
|
26
|
+
resourceName?: string;
|
|
27
|
+
connectionId?: string;
|
|
28
|
+
resume?: boolean;
|
|
29
|
+
maxPages?: number;
|
|
30
|
+
since?: string;
|
|
31
|
+
watermark?: string;
|
|
32
|
+
sinceParamName?: string;
|
|
33
|
+
watermarkParamName?: string;
|
|
34
|
+
input?: Record<string, unknown>;
|
|
35
|
+
params?: Record<string, unknown>;
|
|
36
|
+
query?: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
export interface SchemaResourceSyncOptions extends SchemaSyncOptions {
|
|
39
|
+
workspaceId: string;
|
|
40
|
+
}
|
|
41
|
+
export { IntegrationAdapter } from "@relayfile/sdk";
|
|
42
|
+
export type { AdapterWebhook, AdapterWebhookMetadata, IngestError, IngestResult, } from "@relayfile/sdk";
|
|
43
|
+
export declare class SchemaAdapter extends IntegrationAdapter {
|
|
44
|
+
readonly name: string;
|
|
45
|
+
readonly version: string;
|
|
46
|
+
private readonly spec;
|
|
47
|
+
private readonly defaultConnectionId?;
|
|
48
|
+
private readonly resolveConnectionIdFn?;
|
|
49
|
+
constructor(options: SchemaAdapterOptions);
|
|
50
|
+
computePath(objectType: string, objectId: string): string;
|
|
51
|
+
computeWebhookPath(event: AdapterWebhook): string;
|
|
52
|
+
computeResourcePath(resourceName: string, input: Record<string, unknown>): string;
|
|
53
|
+
normalizePayload(event: AdapterWebhook, mapping?: WebhookMapping | ResourceMapping): Record<string, unknown>;
|
|
54
|
+
computeSemantics(objectType: string, objectId: string, payload: Record<string, unknown>): FileSemantics;
|
|
55
|
+
supportedEvents(): string[];
|
|
56
|
+
sync(resourceName: string, options: SchemaResourceSyncOptions): Promise<SyncResult>;
|
|
57
|
+
sync(workspaceId: string, options?: SchemaSyncOptions): Promise<SyncResult>;
|
|
58
|
+
sync(workspaceId: string, resourceName: string, options?: SchemaSyncOptions): Promise<SyncResult>;
|
|
59
|
+
ingestWebhook(workspaceId: string, event: AdapterWebhook): Promise<IngestResult>;
|
|
60
|
+
matchWriteback(path: string): MatchedWriteback | null;
|
|
61
|
+
handleWriteback(workspaceId: string, path: string, content: string): Promise<ProxyResponse>;
|
|
62
|
+
writeBack(workspaceId: string, path: string, content: string): Promise<void>;
|
|
63
|
+
private resolveWebhookMapping;
|
|
64
|
+
private resolveConnectionId;
|
|
65
|
+
private resolveSyncInvocation;
|
|
66
|
+
private resolveSyncConnectionId;
|
|
67
|
+
private readSyncCheckpoint;
|
|
68
|
+
private writeSyncCheckpoint;
|
|
69
|
+
private resolveBaseRevision;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=schema-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-adapter.d.ts","sourceRoot":"","sources":["../../../src/runtime/schema-adapter.ts"],"names":[],"mappings":"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"}
|