@quatrain/auth-github 1.2.10 → 1.2.11-pr25.1642
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.
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -45,7 +12,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
45
12
|
exports.GithubAuthAdapter = void 0;
|
|
46
13
|
const auth_1 = require("@quatrain/auth");
|
|
47
14
|
const GithubAuthApi_1 = require("./GithubAuthApi");
|
|
48
|
-
const nativeFetch = __importStar(require("node-fetch-native"));
|
|
49
15
|
/**
|
|
50
16
|
* Authentication adapter for GitHub OAuth 2.0 Web Application Flow.
|
|
51
17
|
* Handles profiles, repository existence checks, and repository creation.
|
|
@@ -76,7 +42,7 @@ class GithubAuthAdapter extends auth_1.AbstractOAuthAdapter {
|
|
|
76
42
|
*/
|
|
77
43
|
getAuthToken(accessToken) {
|
|
78
44
|
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
-
const response = yield
|
|
45
|
+
const response = yield fetch(this._userProfileEndpoint, {
|
|
80
46
|
headers: {
|
|
81
47
|
'Authorization': `Bearer ${accessToken}`,
|
|
82
48
|
'Accept': 'application/json',
|
|
@@ -94,7 +60,7 @@ class GithubAuthAdapter extends auth_1.AbstractOAuthAdapter {
|
|
|
94
60
|
*/
|
|
95
61
|
checkRepositoryExists(accessToken, owner, name) {
|
|
96
62
|
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
-
const response = yield
|
|
63
|
+
const response = yield fetch(`https://api.github.com/repos/${owner}/${name}`, {
|
|
98
64
|
headers: {
|
|
99
65
|
'Authorization': `Bearer ${accessToken}`,
|
|
100
66
|
'Accept': 'application/json',
|
|
@@ -109,7 +75,7 @@ class GithubAuthAdapter extends auth_1.AbstractOAuthAdapter {
|
|
|
109
75
|
*/
|
|
110
76
|
createRepository(accessToken_1, name_1) {
|
|
111
77
|
return __awaiter(this, arguments, void 0, function* (accessToken, name, options = {}) {
|
|
112
|
-
const response = yield
|
|
78
|
+
const response = yield fetch('https://api.github.com/user/repos', {
|
|
113
79
|
method: 'POST',
|
|
114
80
|
headers: {
|
|
115
81
|
'Authorization': `Bearer ${accessToken}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GithubAuthAdapter.js","sourceRoot":"","sources":["../src/GithubAuthAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GithubAuthAdapter.js","sourceRoot":"","sources":["../src/GithubAuthAdapter.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAqD;AACrD,mDAA+C;AAE/C;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,2BAAoB;IAA3D;;QACa,2BAAsB,GAAG,0CAA0C,CAAA;QACnE,mBAAc,GAAG,6CAA6C,CAAA;QAC9D,yBAAoB,GAAG,6BAA6B,CAAA;IA6EjE,CAAC;IA3EE;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAW;QACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE,OAAO,IAAI,CAAA;QACzD,OAAO,IAAI,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED;;OAEG;IACa,kBAAkB;QAC/B,OAAO,6BAAa,CAAA;IACvB,CAAC;IAED;;OAEG;IACG,YAAY,CAAC,WAAmB;;YACnC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBACrD,OAAO,EAAE;oBACN,eAAe,EAAE,UAAU,WAAW,EAAE;oBACxC,QAAQ,EAAE,kBAAkB;oBAC5B,YAAY,EAAE,sBAAsB;iBACtC;aACH,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;YACjF,CAAC;YAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC/B,CAAC;KAAA;IAED;;OAEG;IACG,qBAAqB,CAAC,WAAmB,EAAE,KAAa,EAAE,IAAY;;YACzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gCAAgC,KAAK,IAAI,IAAI,EAAE,EAAE;gBAC3E,OAAO,EAAE;oBACN,eAAe,EAAE,UAAU,WAAW,EAAE;oBACxC,QAAQ,EAAE,kBAAkB;oBAC5B,YAAY,EAAE,sBAAsB;iBACtC;aACH,CAAC,CAAA;YACF,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAA;QACjC,CAAC;KAAA;IAED;;OAEG;IACG,gBAAgB;6DAAC,WAAmB,EAAE,IAAY,EAAE,UAA2E,EAAE;YACpI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,mCAAmC,EAAE;gBAC/D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACN,eAAe,EAAE,UAAU,WAAW,EAAE;oBACxC,cAAc,EAAE,kBAAkB;oBAClC,QAAQ,EAAE,kBAAkB;oBAC5B,YAAY,EAAE,sBAAsB;iBACtC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBAClB,IAAI;oBACJ,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,KAAK;oBAClC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,uCAAuC;oBAC3E,SAAS,EAAE,OAAO,CAAC,QAAQ,KAAK,KAAK;iBACvC,CAAC;aACJ,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvD,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;YAC5F,CAAC;YAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC/B,CAAC;KAAA;CACH;AAhFD,8CAgFC"}
|
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -43,12 +10,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
43
10
|
};
|
|
44
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
12
|
const GithubAuthAdapter_1 = require("./GithubAuthAdapter");
|
|
46
|
-
const nativeFetch = __importStar(require("node-fetch-native"));
|
|
47
|
-
jest.mock('node-fetch-native');
|
|
48
13
|
describe('GithubAuthAdapter', () => {
|
|
49
14
|
let adapter;
|
|
50
15
|
beforeEach(() => {
|
|
51
16
|
jest.clearAllMocks();
|
|
17
|
+
global.fetch = jest.fn();
|
|
52
18
|
adapter = new GithubAuthAdapter_1.GithubAuthAdapter({
|
|
53
19
|
config: {
|
|
54
20
|
clientId: 'test-client-id',
|
|
@@ -86,10 +52,10 @@ describe('GithubAuthAdapter', () => {
|
|
|
86
52
|
scope: 'repo',
|
|
87
53
|
}),
|
|
88
54
|
};
|
|
89
|
-
|
|
55
|
+
global.fetch.mockResolvedValue(mockResponse);
|
|
90
56
|
const result = yield adapter.exchangeCodeForToken('code-123', 'http://callback');
|
|
91
57
|
expect(result.access_token).toBe('github-access-token-123');
|
|
92
|
-
expect(
|
|
58
|
+
expect(global.fetch).toHaveBeenCalledWith('https://github.com/login/oauth/access_token', expect.objectContaining({
|
|
93
59
|
method: 'POST',
|
|
94
60
|
body: JSON.stringify({
|
|
95
61
|
client_id: 'test-client-id',
|
|
@@ -105,7 +71,7 @@ describe('GithubAuthAdapter', () => {
|
|
|
105
71
|
ok: false,
|
|
106
72
|
statusText: 'Bad Request',
|
|
107
73
|
};
|
|
108
|
-
|
|
74
|
+
global.fetch.mockResolvedValue(mockResponse);
|
|
109
75
|
yield expect(adapter.exchangeCodeForToken('code-123')).rejects.toThrow('OAuth token exchange failed: Bad Request');
|
|
110
76
|
}));
|
|
111
77
|
});
|
|
@@ -119,10 +85,10 @@ describe('GithubAuthAdapter', () => {
|
|
|
119
85
|
name: 'The Octocat',
|
|
120
86
|
}),
|
|
121
87
|
};
|
|
122
|
-
|
|
88
|
+
global.fetch.mockResolvedValue(mockResponse);
|
|
123
89
|
const result = yield adapter.getAuthToken('token-123');
|
|
124
90
|
expect(result.login).toBe('octocat');
|
|
125
|
-
expect(
|
|
91
|
+
expect(global.fetch).toHaveBeenCalledWith('https://api.github.com/user', expect.objectContaining({
|
|
126
92
|
headers: {
|
|
127
93
|
'Authorization': 'Bearer token-123',
|
|
128
94
|
'Accept': 'application/json',
|
|
@@ -134,14 +100,14 @@ describe('GithubAuthAdapter', () => {
|
|
|
134
100
|
describe('checkRepositoryExists()', () => {
|
|
135
101
|
it('should return true if repo exists', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
136
102
|
const mockResponse = { status: 200 };
|
|
137
|
-
|
|
103
|
+
global.fetch.mockResolvedValue(mockResponse);
|
|
138
104
|
const exists = yield adapter.checkRepositoryExists('token-123', 'owner', 'repo');
|
|
139
105
|
expect(exists).toBe(true);
|
|
140
|
-
expect(
|
|
106
|
+
expect(global.fetch).toHaveBeenCalledWith('https://api.github.com/repos/owner/repo', expect.any(Object));
|
|
141
107
|
}));
|
|
142
108
|
it('should return false if repo does not exist', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
143
109
|
const mockResponse = { status: 404 };
|
|
144
|
-
|
|
110
|
+
global.fetch.mockResolvedValue(mockResponse);
|
|
145
111
|
const exists = yield adapter.checkRepositoryExists('token-123', 'owner', 'repo');
|
|
146
112
|
expect(exists).toBe(false);
|
|
147
113
|
}));
|
|
@@ -156,13 +122,13 @@ describe('GithubAuthAdapter', () => {
|
|
|
156
122
|
full_name: 'octocat/new-repo',
|
|
157
123
|
}),
|
|
158
124
|
};
|
|
159
|
-
|
|
125
|
+
global.fetch.mockResolvedValue(mockResponse);
|
|
160
126
|
const result = yield adapter.createRepository('token-123', 'new-repo', {
|
|
161
127
|
private: true,
|
|
162
128
|
description: 'My new repo',
|
|
163
129
|
});
|
|
164
130
|
expect(result.name).toBe('new-repo');
|
|
165
|
-
expect(
|
|
131
|
+
expect(global.fetch).toHaveBeenCalledWith('https://api.github.com/user/repos', expect.objectContaining({
|
|
166
132
|
method: 'POST',
|
|
167
133
|
body: JSON.stringify({
|
|
168
134
|
name: 'new-repo',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GithubAuthAdapter.test.js","sourceRoot":"","sources":["../src/GithubAuthAdapter.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GithubAuthAdapter.test.js","sourceRoot":"","sources":["../src/GithubAuthAdapter.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quatrain/auth-github",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.11-pr25.1642",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -19,9 +19,8 @@
|
|
|
19
19
|
"author": "Quatrain Développement SAS <developers@quatrain.com>",
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@quatrain/api": "^1.1.7",
|
|
22
|
-
"@quatrain/auth": "^1.2.
|
|
23
|
-
"@quatrain/backend": "^1.2.17"
|
|
24
|
-
"node-fetch-native": "^1.6.4"
|
|
22
|
+
"@quatrain/auth": "^1.2.11",
|
|
23
|
+
"@quatrain/backend": "^1.2.17"
|
|
25
24
|
},
|
|
26
25
|
"devDependencies": {
|
|
27
26
|
"@tsconfig/recommended": "^1.0.1",
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { GithubAuthAdapter } from './GithubAuthAdapter'
|
|
2
|
-
import * as nativeFetch from 'node-fetch-native'
|
|
3
|
-
|
|
4
|
-
jest.mock('node-fetch-native')
|
|
5
2
|
|
|
6
3
|
describe('GithubAuthAdapter', () => {
|
|
7
4
|
let adapter: GithubAuthAdapter
|
|
8
5
|
|
|
9
6
|
beforeEach(() => {
|
|
10
7
|
jest.clearAllMocks()
|
|
8
|
+
global.fetch = jest.fn()
|
|
11
9
|
|
|
12
10
|
adapter = new GithubAuthAdapter({
|
|
13
11
|
config: {
|
|
@@ -56,11 +54,11 @@ describe('GithubAuthAdapter', () => {
|
|
|
56
54
|
scope: 'repo',
|
|
57
55
|
}),
|
|
58
56
|
}
|
|
59
|
-
;(
|
|
57
|
+
;(global.fetch as jest.Mock).mockResolvedValue(mockResponse)
|
|
60
58
|
|
|
61
59
|
const result = await adapter.exchangeCodeForToken('code-123', 'http://callback')
|
|
62
60
|
expect(result.access_token).toBe('github-access-token-123')
|
|
63
|
-
expect(
|
|
61
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
64
62
|
'https://github.com/login/oauth/access_token',
|
|
65
63
|
expect.objectContaining({
|
|
66
64
|
method: 'POST',
|
|
@@ -80,7 +78,7 @@ describe('GithubAuthAdapter', () => {
|
|
|
80
78
|
ok: false,
|
|
81
79
|
statusText: 'Bad Request',
|
|
82
80
|
}
|
|
83
|
-
;(
|
|
81
|
+
;(global.fetch as jest.Mock).mockResolvedValue(mockResponse)
|
|
84
82
|
|
|
85
83
|
await expect(
|
|
86
84
|
adapter.exchangeCodeForToken('code-123')
|
|
@@ -98,11 +96,11 @@ describe('GithubAuthAdapter', () => {
|
|
|
98
96
|
name: 'The Octocat',
|
|
99
97
|
}),
|
|
100
98
|
}
|
|
101
|
-
;(
|
|
99
|
+
;(global.fetch as jest.Mock).mockResolvedValue(mockResponse)
|
|
102
100
|
|
|
103
101
|
const result = await adapter.getAuthToken('token-123')
|
|
104
102
|
expect(result.login).toBe('octocat')
|
|
105
|
-
expect(
|
|
103
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
106
104
|
'https://api.github.com/user',
|
|
107
105
|
expect.objectContaining({
|
|
108
106
|
headers: {
|
|
@@ -118,11 +116,11 @@ describe('GithubAuthAdapter', () => {
|
|
|
118
116
|
describe('checkRepositoryExists()', () => {
|
|
119
117
|
it('should return true if repo exists', async () => {
|
|
120
118
|
const mockResponse = { status: 200 }
|
|
121
|
-
;(
|
|
119
|
+
;(global.fetch as jest.Mock).mockResolvedValue(mockResponse)
|
|
122
120
|
|
|
123
121
|
const exists = await adapter.checkRepositoryExists('token-123', 'owner', 'repo')
|
|
124
122
|
expect(exists).toBe(true)
|
|
125
|
-
expect(
|
|
123
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
126
124
|
'https://api.github.com/repos/owner/repo',
|
|
127
125
|
expect.any(Object)
|
|
128
126
|
)
|
|
@@ -130,7 +128,7 @@ describe('GithubAuthAdapter', () => {
|
|
|
130
128
|
|
|
131
129
|
it('should return false if repo does not exist', async () => {
|
|
132
130
|
const mockResponse = { status: 404 }
|
|
133
|
-
;(
|
|
131
|
+
;(global.fetch as jest.Mock).mockResolvedValue(mockResponse)
|
|
134
132
|
|
|
135
133
|
const exists = await adapter.checkRepositoryExists('token-123', 'owner', 'repo')
|
|
136
134
|
expect(exists).toBe(false)
|
|
@@ -147,7 +145,7 @@ describe('GithubAuthAdapter', () => {
|
|
|
147
145
|
full_name: 'octocat/new-repo',
|
|
148
146
|
}),
|
|
149
147
|
}
|
|
150
|
-
;(
|
|
148
|
+
;(global.fetch as jest.Mock).mockResolvedValue(mockResponse)
|
|
151
149
|
|
|
152
150
|
const result = await adapter.createRepository('token-123', 'new-repo', {
|
|
153
151
|
private: true,
|
|
@@ -155,7 +153,7 @@ describe('GithubAuthAdapter', () => {
|
|
|
155
153
|
})
|
|
156
154
|
|
|
157
155
|
expect(result.name).toBe('new-repo')
|
|
158
|
-
expect(
|
|
156
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
159
157
|
'https://api.github.com/user/repos',
|
|
160
158
|
expect.objectContaining({
|
|
161
159
|
method: 'POST',
|
package/src/GithubAuthAdapter.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { AbstractOAuthAdapter } from '@quatrain/auth'
|
|
2
2
|
import { GithubAuthApi } from './GithubAuthApi'
|
|
3
|
-
import * as nativeFetch from 'node-fetch-native'
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Authentication adapter for GitHub OAuth 2.0 Web Application Flow.
|
|
@@ -30,7 +29,7 @@ export class GithubAuthAdapter extends AbstractOAuthAdapter {
|
|
|
30
29
|
* Returns user details from GitHub by validating the access token.
|
|
31
30
|
*/
|
|
32
31
|
async getAuthToken(accessToken: string): Promise<any> {
|
|
33
|
-
const response = await
|
|
32
|
+
const response = await fetch(this._userProfileEndpoint, {
|
|
34
33
|
headers: {
|
|
35
34
|
'Authorization': `Bearer ${accessToken}`,
|
|
36
35
|
'Accept': 'application/json',
|
|
@@ -49,7 +48,7 @@ export class GithubAuthAdapter extends AbstractOAuthAdapter {
|
|
|
49
48
|
* Custom GitHub API call to check repository existence.
|
|
50
49
|
*/
|
|
51
50
|
async checkRepositoryExists(accessToken: string, owner: string, name: string): Promise<boolean> {
|
|
52
|
-
const response = await
|
|
51
|
+
const response = await fetch(`https://api.github.com/repos/${owner}/${name}`, {
|
|
53
52
|
headers: {
|
|
54
53
|
'Authorization': `Bearer ${accessToken}`,
|
|
55
54
|
'Accept': 'application/json',
|
|
@@ -63,7 +62,7 @@ export class GithubAuthAdapter extends AbstractOAuthAdapter {
|
|
|
63
62
|
* Custom GitHub API call to create a repository.
|
|
64
63
|
*/
|
|
65
64
|
async createRepository(accessToken: string, name: string, options: { private?: boolean; description?: string; autoInit?: boolean } = {}): Promise<any> {
|
|
66
|
-
const response = await
|
|
65
|
+
const response = await fetch('https://api.github.com/user/repos', {
|
|
67
66
|
method: 'POST',
|
|
68
67
|
headers: {
|
|
69
68
|
'Authorization': `Bearer ${accessToken}`,
|