metadata.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. const axios_1 = __importDefault(require("axios"));
  7. exports.kMetadataBaseUrl = 'http://metadata.tencentyun.com';
  8. var kMetadataVersions;
  9. (function (kMetadataVersions) {
  10. kMetadataVersions["v20170919"] = "2017-09-19";
  11. kMetadataVersions["v1.0"] = "1.0";
  12. kMetadataVersions["latest"] = "latest";
  13. })(kMetadataVersions = exports.kMetadataVersions || (exports.kMetadataVersions = {}));
  14. function isAppId(appIdStr) {
  15. return /^[1-9][0-9]{4,64}$/gim.test(appIdStr);
  16. }
  17. exports.isAppId = isAppId;
  18. async function lookup(path, options = {}) {
  19. const url = `${exports.kMetadataBaseUrl}/${kMetadataVersions.latest}/${path}`;
  20. const resp = await axios_1.default.get(url, options);
  21. if (resp.status === 200) {
  22. return resp.data;
  23. }
  24. else {
  25. throw new Error(`[ERROR] GET ${url} status: ${resp.status}`);
  26. }
  27. }
  28. exports.lookup = lookup;
  29. const metadataCache = {
  30. appId: undefined
  31. };
  32. /**
  33. * lookupAppId - 该方法主要用于判断是否在云上环境
  34. * @returns
  35. */
  36. async function lookupAppId() {
  37. if (metadataCache.appId === undefined) {
  38. metadataCache.appId = '';
  39. try {
  40. // 只有首次会请求且要求快速返回,超时时间很短,DNS无法解析将会超时返回
  41. // 在云环境中,这个时间通常在 10ms 内,部分耗时长(30+ms)的情况是 DNS 解析耗时长(27+ms)
  42. const appId = await lookup('meta-data/app-id', { timeout: 30 });
  43. if (isAppId(appId)) {
  44. metadataCache.appId = appId;
  45. }
  46. }
  47. catch (e) {
  48. // ignore
  49. }
  50. }
  51. return metadataCache.appId || '';
  52. }
  53. exports.lookupAppId = lookupAppId;