@next-core/easyops-runtime 0.15.3 → 0.15.4

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.
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.getArgsOfFlowApi = getArgsOfFlowApi;
8
8
  exports.isFlowApiProvider = isFlowApiProvider;
9
9
  var _jsYaml = _interopRequireDefault(require("js-yaml"));
10
- var _apiGatewaySdk = require("@next-api-sdk/api-gateway-sdk");
10
+ var _nextBuilderSdk = require("@next-api-sdk/next-builder-sdk");
11
11
  var _general = require("@next-core/utils/general");
12
12
  var _CollectContracts = require("./CollectContracts.js");
13
13
  const remoteContractCache = new Map();
@@ -188,18 +188,30 @@ async function fetchFlowApiDefinition(provider) {
188
188
  return promise;
189
189
  }
190
190
  async function fetchFlowApiDefinitionFromRemote(namespace, name, version) {
191
- var _contractData$namespa;
192
- const {
193
- contractData
194
- } = await (0, _apiGatewaySdk.ContractApi_searchSingleContract)({
195
- contractName: `${namespace}.${name}`,
196
- version
197
- });
198
-
199
- // return undefined if don't found contract
200
- return contractData ? {
191
+ let contractData;
192
+ const fullContractName = `${namespace}@${name}`;
193
+ let error;
194
+ try {
195
+ const {
196
+ list: contractList
197
+ } = await (0, _nextBuilderSdk.ContractCenterApi_batchSearchContract)({
198
+ contract: [{
199
+ fullContractName,
200
+ version
201
+ }]
202
+ });
203
+ contractData = contractList[0];
204
+ } catch (e) {
205
+ error = e;
206
+ }
207
+ if (!contractData) {
208
+ // eslint-disable-next-line no-console
209
+ console.error(`Failed to fetch Flow API definition for "${fullContractName}:${version}"`, error ?? "Contract not found");
210
+ return null;
211
+ }
212
+ return {
201
213
  name: contractData.name,
202
- namespace: (_contractData$namespa = contractData.namespace) === null || _contractData$namespa === void 0 || (_contractData$namespa = _contractData$namespa[0]) === null || _contractData$namespa === void 0 ? void 0 : _contractData$namespa.name,
214
+ namespace: contractData.namespaceId,
203
215
  serviceName: contractData.serviceName,
204
216
  version: contractData.version,
205
217
  contract: {
@@ -207,7 +219,7 @@ async function fetchFlowApiDefinitionFromRemote(namespace, name, version) {
207
219
  response: contractData.response,
208
220
  request: contractData.request
209
221
  }
210
- } : null;
222
+ };
211
223
  }
212
224
  class FlowApiNotFoundError extends Error {
213
225
  constructor(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"FlowApi.js","names":["_jsYaml","_interopRequireDefault","require","_apiGatewaySdk","_general","_CollectContracts","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","stream","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","api","uri","apiMethod","ext_fields","responseWrapper","isFileType","request","isDownload","filename","fixedArgs","Array","isArray","slice","shift","url","args","getTransformedUriAndRestArgs","originalUri","name","namespace","serviceName","version","prefix","startsWith","transformedUri","restArgs","replace","restParams","params","_","key","hasOwnProperty","value","isSimpleRequest","toLowerCase","_uri$match","_request$fields","noParams","type","match","length","fields","push","bodyField","find","item","source","body","queryField","query","options","_contract$response","contract","yaml","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","namespaceName","nameWithVersion","split","getContract","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","_contractData$namespa","contractData","ContractApi_searchSingleContract","contractName","constructor","message","captureStackTrace"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport type {\n ContractResponse,\n ExtField,\n ContractRequest,\n UseProviderContractConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { getContract } from \"./CollectContracts.js\";\n\nexport type MinimalContractRequest = Pick<ContractRequest, \"type\"> & {\n fields?: MinimalContractField[];\n};\nexport type MinimalContractField =\n | {\n type: string;\n fields?: MinimalContractField[];\n }\n | {\n ref: string;\n };\nexport type MinimalContractResponse = Pick<\n ContractResponse,\n \"type\" | \"wrapper\"\n>;\n\nconst remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new FlowApiNotFoundError(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);\n}\n\nfunction getApiArgsFromApiProfile(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): unknown[] {\n const {\n uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n isFileType,\n request,\n } = api;\n // `saveAs` requires the first argument to be the filename.\n const isDownload = method === \"saveAs\";\n let filename: string | undefined;\n let fixedArgs = originalArgs;\n if (isDownload) {\n if (Array.isArray(originalArgs)) {\n fixedArgs = originalArgs.slice();\n filename = fixedArgs.shift() as string;\n } else {\n filename = originalArgs.filename;\n }\n }\n\n const { url, args } = getTransformedUriAndRestArgs(api, fixedArgs);\n\n return [\n ...(isDownload ? [filename] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n stream,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf\n): { url: string; args: unknown[] } {\n const {\n uri,\n name,\n namespace,\n serviceName,\n version,\n method = \"GET\",\n request,\n ext_fields,\n } = api;\n\n const prefix = version\n ? serviceName === \"logic.api.gateway\" ||\n serviceName?.startsWith(\"logic.api.gateway.\")\n ? \"\"\n : serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n\n let transformedUri: string;\n let restArgs: unknown[] = [];\n if (Array.isArray(originalArgs)) {\n restArgs = originalArgs.slice();\n transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift() as string);\n } else {\n const restParams = { ...originalArgs.params };\n transformedUri = uri.replace(/:([^/]+)/g, (_, key) => {\n if (hasOwnProperty(restParams, key)) {\n const value = restParams[key] as string;\n delete restParams[key];\n return value;\n }\n throw new Error(`Missing required param: \"${key}\"`);\n });\n\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n if (isSimpleRequest) {\n const noParams =\n request?.type === \"object\" &&\n (uri.match(/:([^/]+)/g)?.length ?? 0) === (request.fields?.length ?? 0);\n if (!noParams) {\n restArgs.push(restParams);\n }\n } else {\n const bodyField = ext_fields?.find((item) => item.source === \"body\");\n if (bodyField) {\n let body: Record<string, unknown> | undefined;\n if (bodyField.name && hasOwnProperty(restParams, bodyField.name)) {\n body = restParams[bodyField.name] as Record<string, unknown>;\n delete restParams[bodyField.name];\n }\n restArgs.push(body);\n }\n\n const queryField = ext_fields?.find((item) => item.source === \"query\");\n if (queryField) {\n let query: Record<string, unknown> | undefined;\n if (queryField.name && hasOwnProperty(restParams, queryField.name)) {\n query = restParams[queryField.name] as Record<string, unknown>;\n delete restParams[queryField.name];\n }\n\n restArgs.push(query);\n }\n\n if (!bodyField && !queryField) {\n restArgs.push(restParams);\n }\n }\n\n if (originalArgs.options) {\n restArgs.push(originalArgs.options);\n }\n }\n return {\n url: prefix ? prefix + transformedUri : transformedUri.replace(/^\\//, \"\"),\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespace}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n return contractData\n ? {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n }\n : null;\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: MinimalContractRequest;\n response?: MinimalContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n}\n\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FlowApi.js","names":["_jsYaml","_interopRequireDefault","require","_nextBuilderSdk","_general","_CollectContracts","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","stream","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","api","uri","apiMethod","ext_fields","responseWrapper","isFileType","request","isDownload","filename","fixedArgs","Array","isArray","slice","shift","url","args","getTransformedUriAndRestArgs","originalUri","name","namespace","serviceName","version","prefix","startsWith","transformedUri","restArgs","replace","restParams","params","_","key","hasOwnProperty","value","isSimpleRequest","toLowerCase","_uri$match","_request$fields","noParams","type","match","length","fields","push","bodyField","find","item","source","body","queryField","query","options","_contract$response","contract","yaml","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","namespaceName","nameWithVersion","split","getContract","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","contractData","fullContractName","error","list","contractList","ContractCenterApi_batchSearchContract","e","console","constructor","message","captureStackTrace"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport {\n ContractCenterApi_batchSearchContract,\n type ContractCenterApi_BatchSearchContractResponseBody_list_item,\n} from \"@next-api-sdk/next-builder-sdk\";\nimport type {\n ContractResponse,\n ExtField,\n ContractRequest,\n UseProviderContractConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { getContract } from \"./CollectContracts.js\";\n\nexport type MinimalContractRequest = Pick<ContractRequest, \"type\"> & {\n fields?: MinimalContractField[];\n};\nexport type MinimalContractField =\n | {\n type: string;\n fields?: MinimalContractField[];\n }\n | {\n ref: string;\n };\nexport type MinimalContractResponse = Pick<\n ContractResponse,\n \"type\" | \"wrapper\"\n>;\n\nconst remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new FlowApiNotFoundError(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);\n}\n\nfunction getApiArgsFromApiProfile(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): unknown[] {\n const {\n uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n isFileType,\n request,\n } = api;\n // `saveAs` requires the first argument to be the filename.\n const isDownload = method === \"saveAs\";\n let filename: string | undefined;\n let fixedArgs = originalArgs;\n if (isDownload) {\n if (Array.isArray(originalArgs)) {\n fixedArgs = originalArgs.slice();\n filename = fixedArgs.shift() as string;\n } else {\n filename = originalArgs.filename;\n }\n }\n\n const { url, args } = getTransformedUriAndRestArgs(api, fixedArgs);\n\n return [\n ...(isDownload ? [filename] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n stream,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf\n): { url: string; args: unknown[] } {\n const {\n uri,\n name,\n namespace,\n serviceName,\n version,\n method = \"GET\",\n request,\n ext_fields,\n } = api;\n\n const prefix = version\n ? serviceName === \"logic.api.gateway\" ||\n serviceName?.startsWith(\"logic.api.gateway.\")\n ? \"\"\n : serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n\n let transformedUri: string;\n let restArgs: unknown[] = [];\n if (Array.isArray(originalArgs)) {\n restArgs = originalArgs.slice();\n transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift() as string);\n } else {\n const restParams = { ...originalArgs.params };\n transformedUri = uri.replace(/:([^/]+)/g, (_, key) => {\n if (hasOwnProperty(restParams, key)) {\n const value = restParams[key] as string;\n delete restParams[key];\n return value;\n }\n throw new Error(`Missing required param: \"${key}\"`);\n });\n\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n if (isSimpleRequest) {\n const noParams =\n request?.type === \"object\" &&\n (uri.match(/:([^/]+)/g)?.length ?? 0) === (request.fields?.length ?? 0);\n if (!noParams) {\n restArgs.push(restParams);\n }\n } else {\n const bodyField = ext_fields?.find((item) => item.source === \"body\");\n if (bodyField) {\n let body: Record<string, unknown> | undefined;\n if (bodyField.name && hasOwnProperty(restParams, bodyField.name)) {\n body = restParams[bodyField.name] as Record<string, unknown>;\n delete restParams[bodyField.name];\n }\n restArgs.push(body);\n }\n\n const queryField = ext_fields?.find((item) => item.source === \"query\");\n if (queryField) {\n let query: Record<string, unknown> | undefined;\n if (queryField.name && hasOwnProperty(restParams, queryField.name)) {\n query = restParams[queryField.name] as Record<string, unknown>;\n delete restParams[queryField.name];\n }\n\n restArgs.push(query);\n }\n\n if (!bodyField && !queryField) {\n restArgs.push(restParams);\n }\n }\n\n if (originalArgs.options) {\n restArgs.push(originalArgs.options);\n }\n }\n return {\n url: prefix ? prefix + transformedUri : transformedUri.replace(/^\\//, \"\"),\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n let contractData:\n | ContractCenterApi_BatchSearchContractResponseBody_list_item\n | undefined;\n const fullContractName = `${namespace}@${name}`;\n let error: unknown;\n\n try {\n const { list: contractList } = await ContractCenterApi_batchSearchContract({\n contract: [\n {\n fullContractName,\n version,\n },\n ],\n });\n contractData = contractList![0];\n } catch (e) {\n error = e;\n }\n\n if (!contractData) {\n // eslint-disable-next-line no-console\n console.error(\n `Failed to fetch Flow API definition for \"${fullContractName}:${version}\"`,\n error ?? \"Contract not found\"\n );\n return null;\n }\n\n return {\n name: contractData.name,\n namespace: contractData.namespaceId,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n } as CustomApiDefinition;\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: MinimalContractRequest;\n response?: MinimalContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n}\n\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAUA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AAkBA,MAAMI,mBAAmB,GAAG,IAAIC,GAAG,CAGjC,CAAC;;AAEH;AACA;AACO,SAASC,iBAAiBA,CAACC,QAAgB,EAAW;EAC3D,OAAOA,QAAQ,CAACC,QAAQ,CAAC,GAAG,CAAC;AAC/B;AAEO,eAAeC,gBAAgBA,CACpCF,QAAgB,EAChBG,YAAiD,EACjDC,MAAe,EACfC,MAAgB,EACI;EACpB,IAAI,CAACL,QAAQ,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIK,KAAK,CACb,mCAAmCN,QAAQ,uDAC7C,CAAC;EACH;EAEA,MAAMO,aAAa,GAAG,MAAMC,sBAAsB,CAACR,QAAQ,CAAC;EAE5D,IAAI,CAACO,aAAa,EAAE;IAClB,MAAM,IAAIE,oBAAoB,CAAC,wBAAwBT,QAAQ,GAAG,CAAC;EACrE;EAEA,MAAMU,UAAU,GAAGC,8BAA8B,CAACX,QAAQ,EAAEO,aAAa,CAAC;EAE1E,OAAOK,wBAAwB,CAACF,UAAU,EAAEP,YAAY,EAAEC,MAAM,EAAEC,MAAM,CAAC;AAC3E;AAEA,SAASO,wBAAwBA,CAC/BC,GAAqB,EACrBV,YAAiD,EACjDC,MAAe,EACfC,MAAgB,EACL;EACX,MAAM;IACJS,GAAG;IACHV,MAAM,EAAEW,SAAS;IACjBC,UAAU;IACVC,eAAe;IACfC,UAAU;IACVC;EACF,CAAC,GAAGN,GAAG;EACP;EACA,MAAMO,UAAU,GAAGhB,MAAM,KAAK,QAAQ;EACtC,IAAIiB,QAA4B;EAChC,IAAIC,SAAS,GAAGnB,YAAY;EAC5B,IAAIiB,UAAU,EAAE;IACd,IAAIG,KAAK,CAACC,OAAO,CAACrB,YAAY,CAAC,EAAE;MAC/BmB,SAAS,GAAGnB,YAAY,CAACsB,KAAK,CAAC,CAAC;MAChCJ,QAAQ,GAAGC,SAAS,CAACI,KAAK,CAAC,CAAW;IACxC,CAAC,MAAM;MACLL,QAAQ,GAAGlB,YAAY,CAACkB,QAAQ;IAClC;EACF;EAEA,MAAM;IAAEM,GAAG;IAAEC;EAAK,CAAC,GAAGC,4BAA4B,CAAChB,GAAG,EAAES,SAAS,CAAC;EAElE,OAAO,CACL,IAAIF,UAAU,GAAG,CAACC,QAAQ,CAAC,GAAG,EAAE,CAAC,EACjC;IACEM,GAAG;IACHG,WAAW,EAAEhB,GAAG;IAChBV,MAAM,EAAEW,SAAS;IACjBC,UAAU;IACVC,eAAe;IACfE,OAAO;IACPD,UAAU;IACVb;EACF,CAAC,EACD,GAAGuB,IAAI,CACR;AACH;AAEA,SAASC,4BAA4BA,CACnChB,GAAqB,EACrBV,YAAiD,EACf;EAClC,MAAM;IACJW,GAAG;IACHiB,IAAI;IACJC,SAAS;IACTC,WAAW;IACXC,OAAO;IACP9B,MAAM,GAAG,KAAK;IACde,OAAO;IACPH;EACF,CAAC,GAAGH,GAAG;EAEP,MAAMsB,MAAM,GAAGD,OAAO,GAClBD,WAAW,KAAK,mBAAmB,IACnCA,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEG,UAAU,CAAC,oBAAoB,CAAC,GAC3C,EAAE,GACFH,WAAW,GACT,eAAeA,WAAW,EAAE,GAC5B,eAAeD,SAAS,IAAID,IAAI,IAAIG,OAAO,EAAE,GACjD,2BAA2BF,SAAS,IAAID,IAAI,EAAE;EAElD,IAAIM,cAAsB;EAC1B,IAAIC,QAAmB,GAAG,EAAE;EAC5B,IAAIf,KAAK,CAACC,OAAO,CAACrB,YAAY,CAAC,EAAE;IAC/BmC,QAAQ,GAAGnC,YAAY,CAACsB,KAAK,CAAC,CAAC;IAC/BY,cAAc,GAAGvB,GAAG,CAACyB,OAAO,CAAC,WAAW,EAAE,MAAMD,QAAQ,CAACZ,KAAK,CAAC,CAAW,CAAC;EAC7E,CAAC,MAAM;IACL,MAAMc,UAAU,GAAG;MAAE,GAAGrC,YAAY,CAACsC;IAAO,CAAC;IAC7CJ,cAAc,GAAGvB,GAAG,CAACyB,OAAO,CAAC,WAAW,EAAE,CAACG,CAAC,EAAEC,GAAG,KAAK;MACpD,IAAI,IAAAC,uBAAc,EAACJ,UAAU,EAAEG,GAAG,CAAC,EAAE;QACnC,MAAME,KAAK,GAAGL,UAAU,CAACG,GAAG,CAAW;QACvC,OAAOH,UAAU,CAACG,GAAG,CAAC;QACtB,OAAOE,KAAK;MACd;MACA,MAAM,IAAIvC,KAAK,CAAC,4BAA4BqC,GAAG,GAAG,CAAC;IACrD,CAAC,CAAC;IAEF,MAAMG,eAAe,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC7C,QAAQ,CACxDG,MAAM,CAAC2C,WAAW,CAAC,CACrB,CAAC;IACD,IAAID,eAAe,EAAE;MAAA,IAAAE,UAAA,EAAAC,eAAA;MACnB,MAAMC,QAAQ,GACZ,CAAA/B,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEgC,IAAI,MAAK,QAAQ,IAC1B,CAAC,EAAAH,UAAA,GAAAlC,GAAG,CAACsC,KAAK,CAAC,WAAW,CAAC,cAAAJ,UAAA,uBAAtBA,UAAA,CAAwBK,MAAM,KAAI,CAAC,OAAO,EAAAJ,eAAA,GAAA9B,OAAO,CAACmC,MAAM,cAAAL,eAAA,uBAAdA,eAAA,CAAgBI,MAAM,KAAI,CAAC,CAAC;MACzE,IAAI,CAACH,QAAQ,EAAE;QACbZ,QAAQ,CAACiB,IAAI,CAACf,UAAU,CAAC;MAC3B;IACF,CAAC,MAAM;MACL,MAAMgB,SAAS,GAAGxC,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEyC,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAACC,MAAM,KAAK,MAAM,CAAC;MACpE,IAAIH,SAAS,EAAE;QACb,IAAII,IAAyC;QAC7C,IAAIJ,SAAS,CAACzB,IAAI,IAAI,IAAAa,uBAAc,EAACJ,UAAU,EAAEgB,SAAS,CAACzB,IAAI,CAAC,EAAE;UAChE6B,IAAI,GAAGpB,UAAU,CAACgB,SAAS,CAACzB,IAAI,CAA4B;UAC5D,OAAOS,UAAU,CAACgB,SAAS,CAACzB,IAAI,CAAC;QACnC;QACAO,QAAQ,CAACiB,IAAI,CAACK,IAAI,CAAC;MACrB;MAEA,MAAMC,UAAU,GAAG7C,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEyC,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAACC,MAAM,KAAK,OAAO,CAAC;MACtE,IAAIE,UAAU,EAAE;QACd,IAAIC,KAA0C;QAC9C,IAAID,UAAU,CAAC9B,IAAI,IAAI,IAAAa,uBAAc,EAACJ,UAAU,EAAEqB,UAAU,CAAC9B,IAAI,CAAC,EAAE;UAClE+B,KAAK,GAAGtB,UAAU,CAACqB,UAAU,CAAC9B,IAAI,CAA4B;UAC9D,OAAOS,UAAU,CAACqB,UAAU,CAAC9B,IAAI,CAAC;QACpC;QAEAO,QAAQ,CAACiB,IAAI,CAACO,KAAK,CAAC;MACtB;MAEA,IAAI,CAACN,SAAS,IAAI,CAACK,UAAU,EAAE;QAC7BvB,QAAQ,CAACiB,IAAI,CAACf,UAAU,CAAC;MAC3B;IACF;IAEA,IAAIrC,YAAY,CAAC4D,OAAO,EAAE;MACxBzB,QAAQ,CAACiB,IAAI,CAACpD,YAAY,CAAC4D,OAAO,CAAC;IACrC;EACF;EACA,OAAO;IACLpC,GAAG,EAAEQ,MAAM,GAAGA,MAAM,GAAGE,cAAc,GAAGA,cAAc,CAACE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IACzEX,IAAI,EAAEU;EACR,CAAC;AACH;AAEA,SAAS3B,8BAA8BA,CACrCX,QAAgB,EAChBa,GAAwB,EACN;EAAA,IAAAmD,kBAAA;EAClB,MAAMC,QAAyC,GAC7C,OAAOpD,GAAG,CAACoD,QAAQ,KAAK,QAAQ,GAC3BC,eAAI,CAACC,QAAQ,CAACtD,GAAG,CAACoD,QAAQ,EAAE;IAC3BG,MAAM,EAAEF,eAAI,CAACG,WAAW;IACxBC,IAAI,EAAE;EACR,CAAC,CAAC,GACFzD,GAAG,CAACoD,QAAQ;EAClB,MAAM;IAAEnD,GAAG;IAAEV,MAAM,GAAG,KAAK;IAAEY;EAAW,CAAC,GAAG,CAAAiD,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEM,QAAQ,KAAI,CAAC,CAAC;EACpE,MAAMtD,eAAe,GAAGgD,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEO,QAAQ,GACtCP,QAAQ,CAACO,QAAQ,CAACC,OAAO,KAAK,KAAK,GACnC,KAAK;EACT,IAAI,CAAC3D,GAAG,EAAE;IACR,MAAM,IAAIR,KAAK,CACb,iDAAiDN,QAAQ,GAC3D,CAAC;EACH;EACA,OAAO;IACLc,GAAG;IACHV,MAAM,EAAEA,MAAM,CAAC2C,WAAW,CAAC,CAAC,KAAK,MAAM,GAAG,KAAK,GAAG3C,MAAM;IACxDY,UAAU;IACVe,IAAI,EAAElB,GAAG,CAACkB,IAAI;IACdC,SAAS,EAAEnB,GAAG,CAACmB,SAAS;IACxBC,WAAW,EAAEpB,GAAG,CAACoB,WAAW;IAC5BC,OAAO,EAAErB,GAAG,CAACqB,OAAO;IACpBhB,UAAU,EAAE,CAAA+C,QAAQ,aAARA,QAAQ,gBAAAD,kBAAA,GAARC,QAAQ,CAAEO,QAAQ,cAAAR,kBAAA,uBAAlBA,kBAAA,CAAoBb,IAAI,MAAK,MAAM;IAC/ClC,eAAe;IACfE,OAAO,EAAE8C,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAE9C;EACrB,CAAC;AACH;AAEA,eAAeX,sBAAsBA,CACnCR,QAAgB,EACqB;EACrC,MAAM,CAAC0E,aAAa,EAAEC,eAAe,CAAC,GAAG3E,QAAQ,CAAC4E,KAAK,CAAC,GAAG,CAAC;EAC5D,MAAM,CAAC7C,IAAI,EAAEG,OAAO,CAAC,GAAGyC,eAAe,CAACC,KAAK,CAAC,GAAG,CAAC;;EAElD;EACA;EACA,MAAMX,QAAQ,GAAG,IAAAY,6BAAW,EAAC,GAAGH,aAAa,IAAI3C,IAAI,EAAE,CAAC;EACxD,IAAIkC,QAAQ,EAAE;IACZ,OAAO;MACLlC,IAAI,EAAEkC,QAAQ,CAAClC,IAAI;MACnBC,SAAS,EAAEiC,QAAQ,CAACa,WAAW;MAC/B7C,WAAW,EAAEgC,QAAQ,CAAChC,WAAW;MACjCC,OAAO,EAAE+B,QAAQ,CAAC/B,OAAO;MACzB+B,QAAQ,EAAE;QACRM,QAAQ,EAAEN,QAAQ,CAACM,QAAQ;QAC3BC,QAAQ,EAAEP,QAAQ,CAACO,QAAQ;QAC3BrD,OAAO,EAAE8C,QAAQ,CAAC9C;MACpB;IACF,CAAC;EACH;EACA,IAAI4D,OAAO,GAAGlF,mBAAmB,CAACmF,GAAG,CAAChF,QAAQ,CAAC;EAC/C,IAAI,CAAC+E,OAAO,EAAE;IACZA,OAAO,GAAGE,gCAAgC,CAACP,aAAa,EAAE3C,IAAI,EAAEG,OAAO,CAAC;IACxErC,mBAAmB,CAACqF,GAAG,CAAClF,QAAQ,EAAE+E,OAAO,CAAC;EAC5C;EACA,OAAOA,OAAO;AAChB;AAEA,eAAeE,gCAAgCA,CAC7CjD,SAAiB,EACjBD,IAAY,EACZG,OAAe,EACsB;EACrC,IAAIiD,YAES;EACb,MAAMC,gBAAgB,GAAG,GAAGpD,SAAS,IAAID,IAAI,EAAE;EAC/C,IAAIsD,KAAc;EAElB,IAAI;IACF,MAAM;MAAEC,IAAI,EAAEC;IAAa,CAAC,GAAG,MAAM,IAAAC,qDAAqC,EAAC;MACzEvB,QAAQ,EAAE,CACR;QACEmB,gBAAgB;QAChBlD;MACF,CAAC;IAEL,CAAC,CAAC;IACFiD,YAAY,GAAGI,YAAY,CAAE,CAAC,CAAC;EACjC,CAAC,CAAC,OAAOE,CAAC,EAAE;IACVJ,KAAK,GAAGI,CAAC;EACX;EAEA,IAAI,CAACN,YAAY,EAAE;IACjB;IACAO,OAAO,CAACL,KAAK,CACX,4CAA4CD,gBAAgB,IAAIlD,OAAO,GAAG,EAC1EmD,KAAK,IAAI,oBACX,CAAC;IACD,OAAO,IAAI;EACb;EAEA,OAAO;IACLtD,IAAI,EAAEoD,YAAY,CAACpD,IAAI;IACvBC,SAAS,EAAEmD,YAAY,CAACL,WAAW;IACnC7C,WAAW,EAAEkD,YAAY,CAAClD,WAAW;IACrCC,OAAO,EAAEiD,YAAY,CAACjD,OAAO;IAC7B+B,QAAQ,EAAE;MACRM,QAAQ,EAAEY,YAAY,CAACZ,QAAQ;MAC/BC,QAAQ,EAAEW,YAAY,CAACX,QAAQ;MAC/BrD,OAAO,EAAEgE,YAAY,CAAChE;IACxB;EACF,CAAC;AACH;AA6CA,MAAMV,oBAAoB,SAASH,KAAK,CAAC;EACvCqF,WAAWA,CAACC,OAAe,EAAE;IAC3B;IACA,KAAK,CAACA,OAAO,CAAC;IAEd,IAAI,CAAC7D,IAAI,GAAG,sBAAsB;;IAElC;IACA;IACA,IAAIzB,KAAK,CAACuF,iBAAiB,EAAE;MAC3BvF,KAAK,CAACuF,iBAAiB,CAAC,IAAI,EAAEpF,oBAAoB,CAAC;IACrD;EACF;AACF","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import yaml from "js-yaml";
2
- import { ContractApi_searchSingleContract } from "@next-api-sdk/api-gateway-sdk";
2
+ import { ContractCenterApi_batchSearchContract } from "@next-api-sdk/next-builder-sdk";
3
3
  import { hasOwnProperty } from "@next-core/utils/general";
4
4
  import { getContract } from "./CollectContracts.js";
5
5
  const remoteContractCache = new Map();
@@ -180,18 +180,30 @@ async function fetchFlowApiDefinition(provider) {
180
180
  return promise;
181
181
  }
182
182
  async function fetchFlowApiDefinitionFromRemote(namespace, name, version) {
183
- var _contractData$namespa;
184
- const {
185
- contractData
186
- } = await ContractApi_searchSingleContract({
187
- contractName: `${namespace}.${name}`,
188
- version
189
- });
190
-
191
- // return undefined if don't found contract
192
- return contractData ? {
183
+ let contractData;
184
+ const fullContractName = `${namespace}@${name}`;
185
+ let error;
186
+ try {
187
+ const {
188
+ list: contractList
189
+ } = await ContractCenterApi_batchSearchContract({
190
+ contract: [{
191
+ fullContractName,
192
+ version
193
+ }]
194
+ });
195
+ contractData = contractList[0];
196
+ } catch (e) {
197
+ error = e;
198
+ }
199
+ if (!contractData) {
200
+ // eslint-disable-next-line no-console
201
+ console.error(`Failed to fetch Flow API definition for "${fullContractName}:${version}"`, error !== null && error !== void 0 ? error : "Contract not found");
202
+ return null;
203
+ }
204
+ return {
193
205
  name: contractData.name,
194
- namespace: (_contractData$namespa = contractData.namespace) === null || _contractData$namespa === void 0 || (_contractData$namespa = _contractData$namespa[0]) === null || _contractData$namespa === void 0 ? void 0 : _contractData$namespa.name,
206
+ namespace: contractData.namespaceId,
195
207
  serviceName: contractData.serviceName,
196
208
  version: contractData.version,
197
209
  contract: {
@@ -199,7 +211,7 @@ async function fetchFlowApiDefinitionFromRemote(namespace, name, version) {
199
211
  response: contractData.response,
200
212
  request: contractData.request
201
213
  }
202
- } : null;
214
+ };
203
215
  }
204
216
  class FlowApiNotFoundError extends Error {
205
217
  constructor(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"FlowApi.js","names":["yaml","ContractApi_searchSingleContract","hasOwnProperty","getContract","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","stream","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","api","uri","apiMethod","ext_fields","responseWrapper","isFileType","request","isDownload","filename","fixedArgs","Array","isArray","slice","shift","url","args","getTransformedUriAndRestArgs","originalUri","name","namespace","serviceName","version","prefix","startsWith","transformedUri","restArgs","replace","restParams","params","_","key","value","isSimpleRequest","toLowerCase","_uri$match$length","_uri$match","_request$fields$lengt","_request$fields","noParams","type","match","length","fields","push","bodyField","find","item","source","body","queryField","query","options","_contract$endpoint","_contract$response","contract","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","namespaceName","nameWithVersion","split","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","_contractData$namespa","contractData","contractName","constructor","message","captureStackTrace"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport type {\n ContractResponse,\n ExtField,\n ContractRequest,\n UseProviderContractConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { getContract } from \"./CollectContracts.js\";\n\nexport type MinimalContractRequest = Pick<ContractRequest, \"type\"> & {\n fields?: MinimalContractField[];\n};\nexport type MinimalContractField =\n | {\n type: string;\n fields?: MinimalContractField[];\n }\n | {\n ref: string;\n };\nexport type MinimalContractResponse = Pick<\n ContractResponse,\n \"type\" | \"wrapper\"\n>;\n\nconst remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new FlowApiNotFoundError(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);\n}\n\nfunction getApiArgsFromApiProfile(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): unknown[] {\n const {\n uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n isFileType,\n request,\n } = api;\n // `saveAs` requires the first argument to be the filename.\n const isDownload = method === \"saveAs\";\n let filename: string | undefined;\n let fixedArgs = originalArgs;\n if (isDownload) {\n if (Array.isArray(originalArgs)) {\n fixedArgs = originalArgs.slice();\n filename = fixedArgs.shift() as string;\n } else {\n filename = originalArgs.filename;\n }\n }\n\n const { url, args } = getTransformedUriAndRestArgs(api, fixedArgs);\n\n return [\n ...(isDownload ? [filename] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n stream,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf\n): { url: string; args: unknown[] } {\n const {\n uri,\n name,\n namespace,\n serviceName,\n version,\n method = \"GET\",\n request,\n ext_fields,\n } = api;\n\n const prefix = version\n ? serviceName === \"logic.api.gateway\" ||\n serviceName?.startsWith(\"logic.api.gateway.\")\n ? \"\"\n : serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n\n let transformedUri: string;\n let restArgs: unknown[] = [];\n if (Array.isArray(originalArgs)) {\n restArgs = originalArgs.slice();\n transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift() as string);\n } else {\n const restParams = { ...originalArgs.params };\n transformedUri = uri.replace(/:([^/]+)/g, (_, key) => {\n if (hasOwnProperty(restParams, key)) {\n const value = restParams[key] as string;\n delete restParams[key];\n return value;\n }\n throw new Error(`Missing required param: \"${key}\"`);\n });\n\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n if (isSimpleRequest) {\n const noParams =\n request?.type === \"object\" &&\n (uri.match(/:([^/]+)/g)?.length ?? 0) === (request.fields?.length ?? 0);\n if (!noParams) {\n restArgs.push(restParams);\n }\n } else {\n const bodyField = ext_fields?.find((item) => item.source === \"body\");\n if (bodyField) {\n let body: Record<string, unknown> | undefined;\n if (bodyField.name && hasOwnProperty(restParams, bodyField.name)) {\n body = restParams[bodyField.name] as Record<string, unknown>;\n delete restParams[bodyField.name];\n }\n restArgs.push(body);\n }\n\n const queryField = ext_fields?.find((item) => item.source === \"query\");\n if (queryField) {\n let query: Record<string, unknown> | undefined;\n if (queryField.name && hasOwnProperty(restParams, queryField.name)) {\n query = restParams[queryField.name] as Record<string, unknown>;\n delete restParams[queryField.name];\n }\n\n restArgs.push(query);\n }\n\n if (!bodyField && !queryField) {\n restArgs.push(restParams);\n }\n }\n\n if (originalArgs.options) {\n restArgs.push(originalArgs.options);\n }\n }\n return {\n url: prefix ? prefix + transformedUri : transformedUri.replace(/^\\//, \"\"),\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespace}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n return contractData\n ? {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n }\n : null;\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: MinimalContractRequest;\n response?: MinimalContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n}\n\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FlowApi.js","names":["yaml","ContractCenterApi_batchSearchContract","hasOwnProperty","getContract","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","stream","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","api","uri","apiMethod","ext_fields","responseWrapper","isFileType","request","isDownload","filename","fixedArgs","Array","isArray","slice","shift","url","args","getTransformedUriAndRestArgs","originalUri","name","namespace","serviceName","version","prefix","startsWith","transformedUri","restArgs","replace","restParams","params","_","key","value","isSimpleRequest","toLowerCase","_uri$match$length","_uri$match","_request$fields$lengt","_request$fields","noParams","type","match","length","fields","push","bodyField","find","item","source","body","queryField","query","options","_contract$endpoint","_contract$response","contract","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","namespaceName","nameWithVersion","split","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","contractData","fullContractName","error","list","contractList","e","console","constructor","message","captureStackTrace"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport {\n ContractCenterApi_batchSearchContract,\n type ContractCenterApi_BatchSearchContractResponseBody_list_item,\n} from \"@next-api-sdk/next-builder-sdk\";\nimport type {\n ContractResponse,\n ExtField,\n ContractRequest,\n UseProviderContractConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { getContract } from \"./CollectContracts.js\";\n\nexport type MinimalContractRequest = Pick<ContractRequest, \"type\"> & {\n fields?: MinimalContractField[];\n};\nexport type MinimalContractField =\n | {\n type: string;\n fields?: MinimalContractField[];\n }\n | {\n ref: string;\n };\nexport type MinimalContractResponse = Pick<\n ContractResponse,\n \"type\" | \"wrapper\"\n>;\n\nconst remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new FlowApiNotFoundError(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);\n}\n\nfunction getApiArgsFromApiProfile(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n): unknown[] {\n const {\n uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n isFileType,\n request,\n } = api;\n // `saveAs` requires the first argument to be the filename.\n const isDownload = method === \"saveAs\";\n let filename: string | undefined;\n let fixedArgs = originalArgs;\n if (isDownload) {\n if (Array.isArray(originalArgs)) {\n fixedArgs = originalArgs.slice();\n filename = fixedArgs.shift() as string;\n } else {\n filename = originalArgs.filename;\n }\n }\n\n const { url, args } = getTransformedUriAndRestArgs(api, fixedArgs);\n\n return [\n ...(isDownload ? [filename] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n stream,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n api: CustomApiProfile,\n originalArgs: unknown[] | UseProviderContractConf\n): { url: string; args: unknown[] } {\n const {\n uri,\n name,\n namespace,\n serviceName,\n version,\n method = \"GET\",\n request,\n ext_fields,\n } = api;\n\n const prefix = version\n ? serviceName === \"logic.api.gateway\" ||\n serviceName?.startsWith(\"logic.api.gateway.\")\n ? \"\"\n : serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n\n let transformedUri: string;\n let restArgs: unknown[] = [];\n if (Array.isArray(originalArgs)) {\n restArgs = originalArgs.slice();\n transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift() as string);\n } else {\n const restParams = { ...originalArgs.params };\n transformedUri = uri.replace(/:([^/]+)/g, (_, key) => {\n if (hasOwnProperty(restParams, key)) {\n const value = restParams[key] as string;\n delete restParams[key];\n return value;\n }\n throw new Error(`Missing required param: \"${key}\"`);\n });\n\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n if (isSimpleRequest) {\n const noParams =\n request?.type === \"object\" &&\n (uri.match(/:([^/]+)/g)?.length ?? 0) === (request.fields?.length ?? 0);\n if (!noParams) {\n restArgs.push(restParams);\n }\n } else {\n const bodyField = ext_fields?.find((item) => item.source === \"body\");\n if (bodyField) {\n let body: Record<string, unknown> | undefined;\n if (bodyField.name && hasOwnProperty(restParams, bodyField.name)) {\n body = restParams[bodyField.name] as Record<string, unknown>;\n delete restParams[bodyField.name];\n }\n restArgs.push(body);\n }\n\n const queryField = ext_fields?.find((item) => item.source === \"query\");\n if (queryField) {\n let query: Record<string, unknown> | undefined;\n if (queryField.name && hasOwnProperty(restParams, queryField.name)) {\n query = restParams[queryField.name] as Record<string, unknown>;\n delete restParams[queryField.name];\n }\n\n restArgs.push(query);\n }\n\n if (!bodyField && !queryField) {\n restArgs.push(restParams);\n }\n }\n\n if (originalArgs.options) {\n restArgs.push(originalArgs.options);\n }\n }\n return {\n url: prefix ? prefix + transformedUri : transformedUri.replace(/^\\//, \"\"),\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n let contractData:\n | ContractCenterApi_BatchSearchContractResponseBody_list_item\n | undefined;\n const fullContractName = `${namespace}@${name}`;\n let error: unknown;\n\n try {\n const { list: contractList } = await ContractCenterApi_batchSearchContract({\n contract: [\n {\n fullContractName,\n version,\n },\n ],\n });\n contractData = contractList![0];\n } catch (e) {\n error = e;\n }\n\n if (!contractData) {\n // eslint-disable-next-line no-console\n console.error(\n `Failed to fetch Flow API definition for \"${fullContractName}:${version}\"`,\n error ?? \"Contract not found\"\n );\n return null;\n }\n\n return {\n name: contractData.name,\n namespace: contractData.namespaceId,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n } as CustomApiDefinition;\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: MinimalContractRequest;\n response?: MinimalContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: MinimalContractRequest;\n}\n\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/easyops-runtime",
3
- "version": "0.15.3",
3
+ "version": "0.15.4",
4
4
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/easyops-runtime",
5
5
  "license": "GPL-3.0",
6
6
  "repository": {
@@ -45,6 +45,7 @@
45
45
  "@next-api-sdk/cmdb-sdk": "^1.1.0",
46
46
  "@next-api-sdk/micro-app-sdk": "^1.2.1",
47
47
  "@next-api-sdk/micro-app-standalone-sdk": "^1.1.0",
48
+ "@next-api-sdk/next-builder-sdk": "^1.2.2",
48
49
  "@next-core/cook": "^2.5.9",
49
50
  "@next-core/http": "^1.2.13",
50
51
  "@next-core/pipes": "^2.0.33",
@@ -60,5 +61,5 @@
60
61
  "jest-websocket-mock": "^2.5.0",
61
62
  "whatwg-fetch": "^3.6.20"
62
63
  },
63
- "gitHead": "f4fc20ddcd4ad23ed1ee6cbedff500f04455c725"
64
+ "gitHead": "4506eb5c63bddb73f6df01036d2ff25386e3475b"
64
65
  }