|
1 | 1 | import { getUserAgent } from "universal-user-agent"; |
2 | 2 | import fetchMock from "fetch-mock"; |
3 | 3 | import { Headers, RequestInit } from "node-fetch"; |
| 4 | +import { createAppAuth } from "@octokit/auth-app"; |
| 5 | +import lolex from "lolex"; |
4 | 6 |
|
5 | 7 | import { request } from "../src"; |
6 | 8 | import { |
@@ -62,6 +64,98 @@ describe("request()", () => { |
62 | 64 | }); |
63 | 65 | }); |
64 | 66 |
|
| 67 | + it("README authentication example", async () => { |
| 68 | + const clock = lolex.install({ |
| 69 | + now: 0, |
| 70 | + toFake: ["Date"] |
| 71 | + }); |
| 72 | + const APP_ID = 1; |
| 73 | + const PRIVATE_KEY = `-----BEGIN RSA PRIVATE KEY----- |
| 74 | +MIIEpAIBAAKCAQEA1c7+9z5Pad7OejecsQ0bu3aozN3tihPmljnnudb9G3HECdnH |
| 75 | +lWu2/a1gB9JW5TBQ+AVpum9Okx7KfqkfBKL9mcHgSL0yWMdjMfNOqNtrQqKlN4kE |
| 76 | +p6RD++7sGbzbfZ9arwrlD/HSDAWGdGGJTSOBM6pHehyLmSC3DJoR/CTu0vTGTWXQ |
| 77 | +rO64Z8tyXQPtVPb/YXrcUhbBp8i72b9Xky0fD6PkEebOy0Ip58XVAn2UPNlNOSPS |
| 78 | +ye+Qjtius0Md4Nie4+X8kwVI2Qjk3dSm0sw/720KJkdVDmrayeljtKBx6AtNQsSX |
| 79 | +gzQbeMmiqFFkwrG1+zx6E7H7jqIQ9B6bvWKXGwIDAQABAoIBAD8kBBPL6PPhAqUB |
| 80 | +K1r1/gycfDkUCQRP4DbZHt+458JlFHm8QL6VstKzkrp8mYDRhffY0WJnYJL98tr4 |
| 81 | +4tohsDbqFGwmw2mIaHjl24LuWXyyP4xpAGDpl9IcusjXBxLQLp2m4AKXbWpzb0OL |
| 82 | +Ulrfc1ZooPck2uz7xlMIZOtLlOPjLz2DuejVe24JcwwHzrQWKOfA11R/9e50DVse |
| 83 | +hnSH/w46Q763y4I0E3BIoUMsolEKzh2ydAAyzkgabGQBUuamZotNfvJoDXeCi1LD |
| 84 | +8yNCWyTlYpJZJDDXooBU5EAsCvhN1sSRoaXWrlMSDB7r/E+aQyKua4KONqvmoJuC |
| 85 | +21vSKeECgYEA7yW6wBkVoNhgXnk8XSZv3W+Q0xtdVpidJeNGBWnczlZrummt4xw3 |
| 86 | +xs6zV+rGUDy59yDkKwBKjMMa42Mni7T9Fx8+EKUuhVK3PVQyajoyQqFwT1GORJNz |
| 87 | +c/eYQ6VYOCSC8OyZmsBM2p+0D4FF2/abwSPMmy0NgyFLCUFVc3OECpkCgYEA5OAm |
| 88 | +I3wt5s+clg18qS7BKR2DuOFWrzNVcHYXhjx8vOSWV033Oy3yvdUBAhu9A1LUqpwy |
| 89 | +Ma+unIgxmvmUMQEdyHQMcgBsVs10dR/g2xGjMLcwj6kn+xr3JVIZnbRT50YuPhf+ |
| 90 | +ns1ScdhP6upo9I0/sRsIuN96Gb65JJx94gQ4k9MCgYBO5V6gA2aMQvZAFLUicgzT |
| 91 | +u/vGea+oYv7tQfaW0J8E/6PYwwaX93Y7Q3QNXCoCzJX5fsNnoFf36mIThGHGiHY6 |
| 92 | +y5bZPPWFDI3hUMa1Hu/35XS85kYOP6sGJjf4kTLyirEcNKJUWH7CXY+00cwvTkOC |
| 93 | +S4Iz64Aas8AilIhRZ1m3eQKBgQCUW1s9azQRxgeZGFrzC3R340LL530aCeta/6FW |
| 94 | +CQVOJ9nv84DLYohTVqvVowdNDTb+9Epw/JDxtDJ7Y0YU0cVtdxPOHcocJgdUGHrX |
| 95 | +ZcJjRIt8w8g/s4X6MhKasBYm9s3owALzCuJjGzUKcDHiO2DKu1xXAb0SzRcTzUCn |
| 96 | +7daCswKBgQDOYPZ2JGmhibqKjjLFm0qzpcQ6RPvPK1/7g0NInmjPMebP0K6eSPx0 |
| 97 | +9/49J6WTD++EajN7FhktUSYxukdWaCocAQJTDNYP0K88G4rtC2IYy5JFn9SWz5oh |
| 98 | +x//0u+zd/R/QRUzLOw4N72/Hu+UG6MNt5iDZFCtapRaKt6OvSBwy8w== |
| 99 | +-----END RSA PRIVATE KEY-----`; |
| 100 | + // see https://runkit.com/gr2m/reproducable-jwt |
| 101 | + const BEARER = |
| 102 | + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOi0zMCwiZXhwIjo1NzAsImlzcyI6MX0.q3foRa78U3WegM5PrWLEh5N0bH1SD62OqW66ZYzArp95JBNiCbo8KAlGtiRENCIfBZT9ibDUWy82cI4g3F09mdTq3bD1xLavIfmTksIQCz5EymTWR5v6gL14LSmQdWY9lSqkgUG0XCFljWUglEP39H4yeHbFgdjvAYg3ifDS12z9oQz2ACdSpvxPiTuCC804HkPVw8Qoy0OSXvCkFU70l7VXCVUxnuhHnk8-oCGcKUspmeP6UdDnXk-Aus-eGwDfJbU2WritxxaXw6B4a3flTPojkYLSkPBr6Pi0H2-mBsW_Nvs0aLPVLKobQd4gqTkosX3967DoAG8luUMhrnxe8Q"; |
| 103 | + const mock = fetchMock |
| 104 | + .sandbox() |
| 105 | + .postOnce("https://api.github.com/app/installations/123/access_tokens", { |
| 106 | + token: "secret123", |
| 107 | + expires_at: "1970-01-01T01:00:00.000Z", |
| 108 | + permissions: { |
| 109 | + metadata: "read" |
| 110 | + }, |
| 111 | + repository_selection: "all" |
| 112 | + }) |
| 113 | + .getOnce( |
| 114 | + "https://api.github.com/app", |
| 115 | + { id: 123 }, |
| 116 | + { |
| 117 | + headers: { |
| 118 | + accept: "application/vnd.github.machine-man-preview+json", |
| 119 | + "user-agent": userAgent, |
| 120 | + authorization: `bearer ${BEARER}` |
| 121 | + } |
| 122 | + } |
| 123 | + ) |
| 124 | + .postOnce( |
| 125 | + "https://api.github.com/repos/octocat/hello-world/issues", |
| 126 | + { id: 456 }, |
| 127 | + { |
| 128 | + headers: { |
| 129 | + accept: "application/vnd.github.machine-man-preview+json", |
| 130 | + "user-agent": userAgent, |
| 131 | + authorization: `token secret123` |
| 132 | + } |
| 133 | + } |
| 134 | + ); |
| 135 | + const auth = createAppAuth({ |
| 136 | + id: APP_ID, |
| 137 | + privateKey: PRIVATE_KEY, |
| 138 | + installationId: 123 |
| 139 | + }); |
| 140 | + const requestWithAuth = request.defaults({ |
| 141 | + mediaType: { |
| 142 | + previews: ["machine-man"] |
| 143 | + }, |
| 144 | + request: { |
| 145 | + fetch: mock, |
| 146 | + hook: auth.hook |
| 147 | + } |
| 148 | + }); |
| 149 | + await requestWithAuth("GET /app"); |
| 150 | + await requestWithAuth("POST /repos/:owner/:repo/issues", { |
| 151 | + owner: "octocat", |
| 152 | + repo: "hello-world", |
| 153 | + title: "Hello from the engine room" |
| 154 | + }); |
| 155 | + expect(mock.done()).toBe(true); |
| 156 | + clock.reset(); |
| 157 | + }); |
| 158 | + |
65 | 159 | it("Request with body", () => { |
66 | 160 | const mock = fetchMock |
67 | 161 | .sandbox() |
|
0 commit comments