guards.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.isMultiProjectConfig = exports.isProjectConfig = exports.isIntegrationName = exports.isSecurityProfileResponse = exports.isSecurityProfile = exports.isSSHKeyResponse = exports.isSSHKeyListResponse = exports.isSSHKey = exports.isUserResponse = exports.isUser = exports.isAuthConnectionResponse = exports.isAuthConnection = exports.isLoginResponse = exports.isLogin = exports.isSnapshotListResponse = exports.isSnapshotResponse = exports.isSnapshot = exports.isOpenIDTokenExchangeResponse = exports.isOpenIDToken = exports.isOAuthLoginResponse = exports.isOAuthLogin = exports.isAppsResponse = exports.isAppResponse = exports.isApp = exports.isAzureDevopsRepoAssociation = exports.isBitbucketServerRepoAssociation = exports.isBitbucketCloudRepoAssociation = exports.isGitlabEnterpriseRepoAssociation = exports.isGitlabRepoAssociation = exports.isGithubRepoAssociation = exports.isAppAssociationResponse = exports.isAppAssociation = exports.isGithubBranchListResponse = exports.isGithubRepoListResponse = exports.isGithubBranch = exports.isGithubRepo = exports.isOrg = exports.isAPIResponseError = exports.isAPIResponseSuccess = exports.isSuperAgentError = exports.isExitCodeException = exports.isAndroidBuildOutputFile = exports.isLegacyAndroidBuildOutputFile = exports.isCordovaPackageJson = exports.isStarterManifest = exports.isCommandPreRun = exports.isCommand = exports.INTEGRATION_NAMES = void 0;
  4. exports.INTEGRATION_NAMES = ['capacitor', 'cordova', 'enterprise'];
  5. function isCommand(cmd) {
  6. return cmd && typeof cmd.run === 'function';
  7. }
  8. exports.isCommand = isCommand;
  9. function isCommandPreRun(cmd) {
  10. return cmd && typeof cmd.preRun === 'function';
  11. }
  12. exports.isCommandPreRun = isCommandPreRun;
  13. function isStarterManifest(obj) {
  14. return obj &&
  15. typeof obj.name === 'string' &&
  16. typeof obj.baseref === 'string';
  17. }
  18. exports.isStarterManifest = isStarterManifest;
  19. function isCordovaPackageJson(obj) {
  20. return obj &&
  21. typeof obj.name === 'string' &&
  22. typeof obj.cordova === 'object' &&
  23. Array.isArray(obj.cordova.platforms) &&
  24. typeof obj.cordova.plugins === 'object';
  25. }
  26. exports.isCordovaPackageJson = isCordovaPackageJson;
  27. function isLegacyAndroidBuildOutputFile(obj) {
  28. if (!Array.isArray(obj)) {
  29. return false;
  30. }
  31. if (obj.length === 0) {
  32. return true;
  33. }
  34. return obj[0]
  35. && typeof obj[0].path === 'string'
  36. && typeof obj[0].outputType === 'object'
  37. && typeof obj[0].outputType.type === 'string';
  38. }
  39. exports.isLegacyAndroidBuildOutputFile = isLegacyAndroidBuildOutputFile;
  40. function isAndroidBuildOutputFile(obj) {
  41. return obj &&
  42. typeof obj.artifactType === 'object' &&
  43. typeof obj.artifactType.type === 'string' &&
  44. Array.isArray(obj.elements);
  45. }
  46. exports.isAndroidBuildOutputFile = isAndroidBuildOutputFile;
  47. function isExitCodeException(err) {
  48. return err && typeof err.exitCode === 'number' && err.exitCode >= 0 && err.exitCode <= 255;
  49. }
  50. exports.isExitCodeException = isExitCodeException;
  51. function isSuperAgentError(err) {
  52. return err && err.response && typeof err.response === 'object';
  53. }
  54. exports.isSuperAgentError = isSuperAgentError;
  55. function isAPIResponseSuccess(res) {
  56. return res && (typeof res.data === 'object' || typeof res.data === 'string');
  57. }
  58. exports.isAPIResponseSuccess = isAPIResponseSuccess;
  59. function isAPIResponseError(res) {
  60. return res && typeof res.error === 'object';
  61. }
  62. exports.isAPIResponseError = isAPIResponseError;
  63. function isOrg(org) {
  64. return org && typeof org.name === 'string';
  65. }
  66. exports.isOrg = isOrg;
  67. function isGithubRepo(repo) {
  68. return repo
  69. && typeof repo.full_name === 'string'
  70. && typeof repo.id === 'number';
  71. }
  72. exports.isGithubRepo = isGithubRepo;
  73. function isGithubBranch(branch) {
  74. return branch && typeof branch.name === 'string';
  75. }
  76. exports.isGithubBranch = isGithubBranch;
  77. function isGithubRepoListResponse(res) {
  78. if (!isAPIResponseSuccess(res) || !Array.isArray(res.data)) {
  79. return false;
  80. }
  81. if (res.data.length === 0) {
  82. return true;
  83. }
  84. return isGithubRepo(res.data[0]);
  85. }
  86. exports.isGithubRepoListResponse = isGithubRepoListResponse;
  87. function isGithubBranchListResponse(res) {
  88. if (!isAPIResponseSuccess(res) || !Array.isArray(res.data)) {
  89. return false;
  90. }
  91. if (res.data.length === 0) {
  92. return true;
  93. }
  94. return isGithubBranch(res.data[0]);
  95. }
  96. exports.isGithubBranchListResponse = isGithubBranchListResponse;
  97. function isAppAssociation(association) {
  98. return (association &&
  99. typeof association.repository === 'object' &&
  100. typeof association.repository.html_url === 'string' &&
  101. (isGithubRepoAssociation(association.repository) ||
  102. isBitbucketCloudRepoAssociation(association.repository) ||
  103. isBitbucketServerRepoAssociation(association.repository) ||
  104. isGitlabRepoAssociation(association.repository) ||
  105. isGitlabEnterpriseRepoAssociation(association.repository) ||
  106. isAzureDevopsRepoAssociation(association.repository)));
  107. }
  108. exports.isAppAssociation = isAppAssociation;
  109. function isAppAssociationResponse(res) {
  110. return isAPIResponseSuccess(res)
  111. && typeof res.data === 'object'
  112. && isAppAssociation(res.data);
  113. }
  114. exports.isAppAssociationResponse = isAppAssociationResponse;
  115. function isGithubRepoAssociation(association) {
  116. return association
  117. && association.type === 'github'
  118. && typeof association.id === 'number';
  119. }
  120. exports.isGithubRepoAssociation = isGithubRepoAssociation;
  121. function isGitlabRepoAssociation(association) {
  122. return association
  123. && association.type === 'gitlab'
  124. && typeof association.id === 'number';
  125. }
  126. exports.isGitlabRepoAssociation = isGitlabRepoAssociation;
  127. function isGitlabEnterpriseRepoAssociation(association) {
  128. return association
  129. && association.type === 'gitlab_enterprise'
  130. && typeof association.id === 'number';
  131. }
  132. exports.isGitlabEnterpriseRepoAssociation = isGitlabEnterpriseRepoAssociation;
  133. function isBitbucketCloudRepoAssociation(association) {
  134. return association
  135. && association.type === 'bitbucket_cloud'
  136. && typeof association.id === 'string';
  137. }
  138. exports.isBitbucketCloudRepoAssociation = isBitbucketCloudRepoAssociation;
  139. function isBitbucketServerRepoAssociation(association) {
  140. return association
  141. && association.type === 'bitbucket_server'
  142. && typeof association.id === 'number';
  143. }
  144. exports.isBitbucketServerRepoAssociation = isBitbucketServerRepoAssociation;
  145. function isAzureDevopsRepoAssociation(association) {
  146. return association
  147. && association.type === 'azure_devops'
  148. && typeof association.id === 'string';
  149. }
  150. exports.isAzureDevopsRepoAssociation = isAzureDevopsRepoAssociation;
  151. function isApp(app) {
  152. return app
  153. && typeof app === 'object'
  154. && typeof app.id === 'string'
  155. && typeof app.name === 'string'
  156. && typeof app.slug === 'string'
  157. && (!app.org || isOrg(app.org))
  158. && (!app.association || isAppAssociation(app.association));
  159. }
  160. exports.isApp = isApp;
  161. function isAppResponse(res) {
  162. return isAPIResponseSuccess(res)
  163. && typeof res.data === 'object'
  164. && isApp(res.data);
  165. }
  166. exports.isAppResponse = isAppResponse;
  167. function isAppsResponse(res) {
  168. if (!isAPIResponseSuccess(res) || !Array.isArray(res.data)) {
  169. return false;
  170. }
  171. if (res.data.length === 0) {
  172. return true;
  173. }
  174. return isApp(res.data[0]);
  175. }
  176. exports.isAppsResponse = isAppsResponse;
  177. function isOAuthLogin(login) {
  178. return login && typeof login.redirect_url === 'string';
  179. }
  180. exports.isOAuthLogin = isOAuthLogin;
  181. function isOAuthLoginResponse(res) {
  182. return isAPIResponseSuccess(res) && isOAuthLogin(res.data);
  183. }
  184. exports.isOAuthLoginResponse = isOAuthLoginResponse;
  185. function isOpenIDToken(tokenObj) {
  186. return tokenObj
  187. && typeof tokenObj.access_token === 'string'
  188. && typeof tokenObj.expires_in === 'number'
  189. && (tokenObj.id_token ? typeof tokenObj.id_token === 'string' : true)
  190. && (tokenObj.refresh_token ? typeof tokenObj.refresh_token === 'string' : true)
  191. && tokenObj.scope === 'openid profile email offline_access'
  192. && tokenObj.token_type === 'Bearer';
  193. }
  194. exports.isOpenIDToken = isOpenIDToken;
  195. function isOpenIDTokenExchangeResponse(res) {
  196. return res && typeof res.body === 'object' && isOpenIDToken(res.body);
  197. }
  198. exports.isOpenIDTokenExchangeResponse = isOpenIDTokenExchangeResponse;
  199. function isSnapshot(snapshot) {
  200. return snapshot
  201. && typeof snapshot.id === 'string'
  202. && typeof snapshot.sha === 'string'
  203. && typeof snapshot.ref === 'string'
  204. && typeof snapshot.state === 'string'
  205. && typeof snapshot.created === 'string'
  206. && typeof snapshot.note === 'string';
  207. }
  208. exports.isSnapshot = isSnapshot;
  209. function isSnapshotResponse(res) {
  210. return isAPIResponseSuccess(res) && isSnapshot(res.data);
  211. }
  212. exports.isSnapshotResponse = isSnapshotResponse;
  213. function isSnapshotListResponse(res) {
  214. if (!isAPIResponseSuccess(res) || !Array.isArray(res.data)) {
  215. return false;
  216. }
  217. if (res.data.length === 0) {
  218. return true;
  219. }
  220. return isSnapshot(res.data[0]);
  221. }
  222. exports.isSnapshotListResponse = isSnapshotListResponse;
  223. function isLogin(login) {
  224. return login
  225. && isUser(login.user)
  226. && typeof login.token === 'string';
  227. }
  228. exports.isLogin = isLogin;
  229. function isLoginResponse(res) {
  230. return isAPIResponseSuccess(res) && isLogin(res.data);
  231. }
  232. exports.isLoginResponse = isLoginResponse;
  233. function isAuthConnection(connection) {
  234. return connection && typeof connection.uuid === 'string';
  235. }
  236. exports.isAuthConnection = isAuthConnection;
  237. function isAuthConnectionResponse(res) {
  238. return isAPIResponseSuccess(res) && isAuthConnection(res.data);
  239. }
  240. exports.isAuthConnectionResponse = isAuthConnectionResponse;
  241. function isUser(user) {
  242. return user
  243. && typeof user.id === 'number'
  244. && typeof user.email === 'string';
  245. }
  246. exports.isUser = isUser;
  247. function isUserResponse(res) {
  248. return isAPIResponseSuccess(res) && isUser(res.data);
  249. }
  250. exports.isUserResponse = isUserResponse;
  251. function isSSHKey(key) {
  252. return key
  253. && typeof key.id === 'string'
  254. && typeof key.pubkey === 'string'
  255. && typeof key.fingerprint === 'string'
  256. && typeof key.annotation === 'string'
  257. && typeof key.name === 'string'
  258. && typeof key.created === 'string'
  259. && typeof key.updated === 'string';
  260. }
  261. exports.isSSHKey = isSSHKey;
  262. function isSSHKeyListResponse(res) {
  263. if (!isAPIResponseSuccess(res) || !Array.isArray(res.data)) {
  264. return false;
  265. }
  266. if (res.data.length === 0) {
  267. return true;
  268. }
  269. return isSSHKey(res.data[0]);
  270. }
  271. exports.isSSHKeyListResponse = isSSHKeyListResponse;
  272. function isSSHKeyResponse(res) {
  273. return isAPIResponseSuccess(res) && isSSHKey(res.data);
  274. }
  275. exports.isSSHKeyResponse = isSSHKeyResponse;
  276. function isSecurityProfile(obj) {
  277. return obj
  278. && typeof obj.name === 'string'
  279. && typeof obj.tag === 'string'
  280. && typeof obj.type === 'string'
  281. && typeof obj.created === 'string'
  282. && typeof obj.credentials === 'object';
  283. }
  284. exports.isSecurityProfile = isSecurityProfile;
  285. function isSecurityProfileResponse(r) {
  286. const res = r;
  287. return isAPIResponseSuccess(res) && isSecurityProfile(res.data);
  288. }
  289. exports.isSecurityProfileResponse = isSecurityProfileResponse;
  290. function isIntegrationName(name) {
  291. return exports.INTEGRATION_NAMES.includes(name);
  292. }
  293. exports.isIntegrationName = isIntegrationName;
  294. function isProjectConfig(configFile) {
  295. return configFile
  296. && typeof configFile.name === 'string'
  297. && typeof configFile.projects === 'undefined';
  298. }
  299. exports.isProjectConfig = isProjectConfig;
  300. function isMultiProjectConfig(configFile) {
  301. return configFile
  302. && typeof configFile.name === 'undefined'
  303. && typeof configFile.projects === 'object';
  304. }
  305. exports.isMultiProjectConfig = isMultiProjectConfig;