From a6826fbf7a793bcc5ac6cfcbd8577d9b66186055 Mon Sep 17 00:00:00 2001 From: Nikola Irinchev Date: Tue, 19 Nov 2024 01:37:42 +0100 Subject: [PATCH 1/5] fix: always send a nonce in the auth request MONGOSH-1905 (#195) --- package-lock.json | 15 ++--- package.json | 2 +- src/api.ts | 8 +++ src/plugin.spec.ts | 113 ++++++++++++++++++++++++++----------- src/plugin.ts | 6 ++ test/oidc-test-provider.ts | 11 ++-- 6 files changed, 109 insertions(+), 46 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1e7b1d9..937f7a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@mongodb-js/eslint-config-devtools": "^0.9.9", "@mongodb-js/mocha-config-devtools": "^1.0.0", "@mongodb-js/monorepo-tools": "^1.1.4", - "@mongodb-js/oidc-mock-provider": "^0.8.0", + "@mongodb-js/oidc-mock-provider": "^0.10.2", "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-devtools": "^1.0.0", "@types/chai": "^4.2.21", @@ -2853,10 +2853,11 @@ "dev": true }, "node_modules/@mongodb-js/oidc-mock-provider": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-mock-provider/-/oidc-mock-provider-0.8.0.tgz", - "integrity": "sha512-5CrrdD07AmsRVHmq5bGPmJabGa5YWX/B1GJNlI/oXiYQzmBdPQ0XklpjPGnCEEgkcG7OsEgrRjcDnuofBkdNPg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-mock-provider/-/oidc-mock-provider-0.10.2.tgz", + "integrity": "sha512-mH9tpgqYvF2ZRBbFKta+ziN48V+t/+NPLQoe7nZ8bYbWsGfXY79QKMIElaXlU8HnemnqUbOqBSYuizgs62OxfQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "yargs": "17.7.2" }, @@ -18603,9 +18604,9 @@ } }, "@mongodb-js/oidc-mock-provider": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-mock-provider/-/oidc-mock-provider-0.8.0.tgz", - "integrity": "sha512-5CrrdD07AmsRVHmq5bGPmJabGa5YWX/B1GJNlI/oXiYQzmBdPQ0XklpjPGnCEEgkcG7OsEgrRjcDnuofBkdNPg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-mock-provider/-/oidc-mock-provider-0.10.2.tgz", + "integrity": "sha512-mH9tpgqYvF2ZRBbFKta+ziN48V+t/+NPLQoe7nZ8bYbWsGfXY79QKMIElaXlU8HnemnqUbOqBSYuizgs62OxfQ==", "dev": true, "requires": { "yargs": "17.7.2" diff --git a/package.json b/package.json index f14f140..4c0e0c7 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@mongodb-js/eslint-config-devtools": "^0.9.9", "@mongodb-js/mocha-config-devtools": "^1.0.0", "@mongodb-js/monorepo-tools": "^1.1.4", - "@mongodb-js/oidc-mock-provider": "^0.8.0", + "@mongodb-js/oidc-mock-provider": "^0.10.2", "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-devtools": "^1.0.0", "@types/chai": "^4.2.21", diff --git a/src/api.ts b/src/api.ts index 6aefeff..464b8e1 100644 --- a/src/api.ts +++ b/src/api.ts @@ -197,6 +197,14 @@ export interface MongoDBOIDCPluginOptions { * broken identity providers. */ passIdTokenAsAccessToken?: boolean; + + /** + * Skip the nonce parameter in the Authorization Code request. This could + * be used to work with providers that don't support the nonce parameter. + * + * Default is `false`. + */ + skipNonceInAuthCodeRequest?: boolean; } /** @public */ diff --git a/src/plugin.spec.ts b/src/plugin.spec.ts index 19b7df9..5b28358 100644 --- a/src/plugin.spec.ts +++ b/src/plugin.spec.ts @@ -77,6 +77,19 @@ async function delay(ms: number) { return await new Promise((resolve) => setTimeout(resolve, ms)); } +function testAuthCodeFlow( + fn: (opts: Partial) => Mocha.Func +): void { + for (const skipNonceInAuthCodeRequest of [true, false]) { + describe(`with skipNonceInAuthCodeRequest: ${skipNonceInAuthCodeRequest.toString()}`, function () { + it( + 'can successfully authenticate with auth code flow', + fn({ skipNonceInAuthCodeRequest }) + ); + }); + } +} + describe('OIDC plugin (local OIDC provider)', function () { this.timeout(90_000); @@ -138,18 +151,42 @@ describe('OIDC plugin (local OIDC provider)', function () { plugin = createMongoDBOIDCPlugin(pluginOptions); }); - it('can request tokens through the browser', async function () { - const result = await requestToken( - plugin, - provider.getMongodbOIDCDBInfo() - ); - const accessTokenContents = getJWTContents(result.accessToken); - expect(accessTokenContents.sub).to.equal('testuser'); - expect(accessTokenContents.client_id).to.equal( - provider.getMongodbOIDCDBInfo().clientId - ); - verifySuccessfulAuthCodeFlowLog(await readLog()); - }); + testAuthCodeFlow( + (opts) => + async function () { + pluginOptions = { + ...pluginOptions, + ...opts, + }; + plugin = createMongoDBOIDCPlugin(pluginOptions); + let idToken: string | undefined; + plugin.logger.once('mongodb-oidc-plugin:auth-succeeded', (event) => { + idToken = event.tokens.idToken; + }); + + const result = await requestToken( + plugin, + provider.getMongodbOIDCDBInfo() + ); + const accessTokenContents = getJWTContents(result.accessToken); + expect(accessTokenContents.sub).to.equal('testuser'); + expect(accessTokenContents.client_id).to.equal( + provider.getMongodbOIDCDBInfo().clientId + ); + + verifySuccessfulAuthCodeFlowLog(await readLog()); + + expect(idToken).to.not.be.undefined; + + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- we know it's non-null from the above check + const idTokenContents = getJWTContents(idToken!); + if (opts.skipNonceInAuthCodeRequest) { + expect(idTokenContents.nonce).to.be.undefined; + } else { + expect(idTokenContents.nonce).to.not.be.undefined; + } + } + ); it('will re-use tokens while they are valid if no username was provided', async function () { const skipAuthAttemptEvent = once( @@ -1017,18 +1054,22 @@ describe('OIDC plugin (local OIDC provider)', function () { }; }); - it('can successfully authenticate with Okta using auth code flow', async function () { - plugin = createMongoDBOIDCPlugin({ - ...defaultOpts, - allowedFlows: ['auth-code'], - openBrowser: (opts) => - oktaBrowserAuthCodeFlow({ ...opts, username, password }), - }); - const result = await requestToken(plugin, metadata); + testAuthCodeFlow( + (opts) => + async function () { + plugin = createMongoDBOIDCPlugin({ + ...defaultOpts, + allowedFlows: ['auth-code'], + openBrowser: (opts) => + oktaBrowserAuthCodeFlow({ ...opts, username, password }), + ...opts, + }); + const result = await requestToken(plugin, metadata); - validateToken(getJWTContents(result.accessToken)); - verifySuccessfulAuthCodeFlowLog(await readLog()); - }); + validateToken(getJWTContents(result.accessToken)); + verifySuccessfulAuthCodeFlowLog(await readLog()); + } + ); it('can successfully authenticate with Okta using device auth flow', async function () { plugin = createMongoDBOIDCPlugin({ @@ -1087,18 +1128,22 @@ describe('OIDC plugin (local OIDC provider)', function () { }; }); - it('can successfully authenticate with Azure using auth code flow', async function () { - plugin = createMongoDBOIDCPlugin({ - ...defaultOpts, - allowedFlows: ['auth-code'], - openBrowser: (opts) => - azureBrowserAuthCodeFlow({ ...opts, username, password }), - }); - const result = await requestToken(plugin, metadata); + testAuthCodeFlow( + (opts) => + async function () { + plugin = createMongoDBOIDCPlugin({ + ...defaultOpts, + allowedFlows: ['auth-code'], + openBrowser: (opts) => + azureBrowserAuthCodeFlow({ ...opts, username, password }), + ...opts, + }); + const result = await requestToken(plugin, metadata); - validateToken(getJWTContents(result.accessToken)); - verifySuccessfulAuthCodeFlowLog(await readLog()); - }); + validateToken(getJWTContents(result.accessToken)); + verifySuccessfulAuthCodeFlowLog(await readLog()); + } + ); it('can successfully authenticate with Azure using device auth flow', async function () { plugin = createMongoDBOIDCPlugin({ diff --git a/src/plugin.ts b/src/plugin.ts index 659d701..279f713 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -657,6 +657,10 @@ export class MongoDBOIDCPluginImpl implements MongoDBOIDCPlugin { let client!: BaseClient; let actualRedirectURI!: string; + const nonce = this.options.skipNonceInAuthCodeRequest + ? undefined + : generators.nonce(); + try { await withAbortCheck(signal, async ({ signalCheck, signalPromise }) => { // We mark the operations that we want to allow to result in a fallback @@ -680,6 +684,7 @@ export class MongoDBOIDCPluginImpl implements MongoDBOIDCPlugin { code_challenge: codeChallenge, code_challenge_method: 'S256', state: oidcStateParam, + nonce, }); validateSecureHTTPUrl(authCodeFlowUrl, 'authCodeFlowUrl'); const { localUrl, onAccessed: onLocalUrlAccessed } = @@ -760,6 +765,7 @@ export class MongoDBOIDCPluginImpl implements MongoDBOIDCPlugin { const tokenSet = await client.callback(actualRedirectURI, params, { code_verifier: codeVerifier, state: oidcStateParam, + nonce, }); this.updateStateWithTokenSet(state, tokenSet); } diff --git a/test/oidc-test-provider.ts b/test/oidc-test-provider.ts index 8e7a6f7..115eefd 100644 --- a/test/oidc-test-provider.ts +++ b/test/oidc-test-provider.ts @@ -282,10 +282,13 @@ async function waitForTitle( ): Promise { await browser.waitUntil(async () => { const actual = (await browser.$(selector).getText()).trim(); - let matches; - if (typeof expected === 'string') + let matches: boolean; + if (typeof expected === 'string') { matches = actual.toLowerCase() === expected.toLowerCase(); - else matches = expected.test(actual); + } else { + matches = expected.test(actual); + } + if (!matches) { throw new Error(`Wanted title "${String(expected)}", saw "${actual}"`); } @@ -481,7 +484,7 @@ export async function azureBrowserDeviceAuthFlow({ try { const normalizeUserCode = (str: string) => str.replace(/-/g, ''); browser = await spawnBrowser(verificationUrl, true); - await waitForTitle(browser, 'Enter code', 'div[role="heading"]'); + await waitForTitle(browser, /Enter code/, 'div[role="heading"]'); await ensureValue( browser, 'input[name="otc"]', From 6d44d9c69388ded61a4d0899fa3261ce029eebf1 Mon Sep 17 00:00:00 2001 From: Nikola Irinchev Date: Tue, 19 Nov 2024 15:50:20 +0100 Subject: [PATCH 2/5] chore(ci): bump workflow actions to their latest version (#196) --- .github/workflows/nodejs.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 29bed38..3796cc4 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -18,9 +18,9 @@ jobs: node-version: [16.x, 18.x, 20.x] runs-on: ${{matrix.os}} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} # the oidc-provider package we use doesn't list Node.js 20 as supported @@ -37,13 +37,11 @@ jobs: node-version: [18.x] runs-on: ${{matrix.os}} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - - name: Install npm@8 for Node.js 14 - run: node -e 'process.exitCode = +process.version.startsWith("v14")' || npm install -g npm@8 - name: Install Dependencies run: npm ci --ignore-engines - name: Compile From 39bbf9b87c5695ac998b73d4333fc6abf0579f05 Mon Sep 17 00:00:00 2001 From: Nikola Irinchev Date: Tue, 19 Nov 2024 22:13:39 +0100 Subject: [PATCH 3/5] chore: create a release workflow (#197) Co-authored-by: Anna Henningsen --- .github/workflows/nodejs.yml | 27 +++++++++++++ .github/workflows/prepare-release.yml | 37 ++++++++++++++++++ .github/workflows/publish-release.yml | 56 +++++++++++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 .github/workflows/prepare-release.yml create mode 100644 .github/workflows/publish-release.yml diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 3796cc4..8b0a91a 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -48,3 +48,30 @@ jobs: run: npm run compile - name: Check run: npm run check + + package: + name: Package for publishing + runs-on: ubuntu-latest + if: ${{ startsWith(github.head_ref, 'release/') }} + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + + - name: Install Dependencies + run: npm ci --ignore-engines + + - name: Compile + run: npm run compile + + - name: Pack + run: npm pack + + - name: Archive artifact + uses: actions/upload-artifact@v4 + with: + name: package + path: mongodb-js-oidc-plugin-*.tgz diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml new file mode 100644 index 0000000..c6546e2 --- /dev/null +++ b/.github/workflows/prepare-release.yml @@ -0,0 +1,37 @@ +name: Prepare Release + +on: + workflow_dispatch: + inputs: + version_update_type: + description: What type of version bump should be done + type: choice + options: + - patch + - minor + - major + +jobs: + prepare: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + + - name: Bump version + run: | + echo "new-version=$(npm version ${{ github.event.inputs.version_update_type }} --no-git-tag-version)" >> $GITHUB_OUTPUT + id: version + + - name: Create Release PR + uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # 7.0.5 + with: + branch: release/${{ steps.version.outputs.new-version }} + title: Prepare for ${{ steps.version.outputs.new-version }} + draft: false + body: An automated PR for next release. + commit-message: Prepare for ${{ steps.version.outputs.new-version }} diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml new file mode 100644 index 0000000..fdd0a9f --- /dev/null +++ b/.github/workflows/publish-release.yml @@ -0,0 +1,56 @@ +name: Publish Release + +on: + workflow_dispatch: + +jobs: + publish: + name: Publish Release + runs-on: ubuntu-latest + environment: Production + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + + - name: Install Dependencies + run: npm ci --ignore-engines + + - name: Compile + run: npm run compile + + - name: Publish + run: npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Read Version + id: get-version + run: | + echo "package_version=$(cat package.json | jq -r '.version')" >> $GITHUB_OUTPUT + + - name: Find Release PR + id: find-pull-request + uses: juliangruber/find-pull-request-action@48b6133aa6c826f267ebd33aa2d29470f9d9e7d0 # 1.9.0 + with: + branch: ${{ github.ref }} + + - name: Merge Pull Request + uses: juliangruber/merge-pull-request-action@9234b8714dda9a08f3d1df5b2a6a3abd7b695353 # 1.3.1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + number: ${{ steps.find-pull-request.outputs.number }} + method: squash + + - name: Publish Github Release + uses: ncipollo/release-action@2c591bcc8ecdcd2db72b97d6147f871fcd833ba5 # 1.14.0 + with: + generateReleaseNotes: true + name: ${{ steps.get-version.outputs.package_version }} + commit: main + tag: ${{ steps.get-version.outputs.package_version }} + token: ${{ secrets.GITHUB_TOKEN }} + draft: false From 6b726148dc6b6f773149ebd1c64a416cd71533ac Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 19 Nov 2024 23:10:37 +0100 Subject: [PATCH 4/5] chore: improve logging around local HTTP server listening MONGOSH-1917 (#198) --- src/log-hook.ts | 12 +++++++++ src/rfc-8252-http-server.ts | 38 +++++++++++++++++++-------- src/types.ts | 18 ++++++++++--- test/log-hook-verification-helpers.ts | 9 +++++-- 4 files changed, 61 insertions(+), 16 deletions(-) diff --git a/src/log-hook.ts b/src/log-hook.ts index 19999f3..1d000c7 100644 --- a/src/log-hook.ts +++ b/src/log-hook.ts @@ -92,6 +92,18 @@ export function hookLoggerToMongoLogWriter( ); }); + emitter.on('mongodb-oidc-plugin:local-listen-resolved-hostname', (ev) => { + log.info( + 'OIDC-PLUGIN', + mongoLogId(1_002_000_028), + `${contextPrefix}-oidc`, + 'Resolved hostnames for local server', + { + ...ev, + } + ); + }); + emitter.on('mongodb-oidc-plugin:local-listen-failed', (ev) => { log.error( 'OIDC-PLUGIN', diff --git a/src/rfc-8252-http-server.ts b/src/rfc-8252-http-server.ts index d6b04f4..d937367 100644 --- a/src/rfc-8252-http-server.ts +++ b/src/rfc-8252-http-server.ts @@ -300,14 +300,18 @@ export class RFC8252HTTPServer { */ public get listeningPort(): number | undefined { if (this.servers.length === 0) return undefined; - const ports = new Set( - this.servers.map((srv) => (srv.address() as AddressInfo)?.port) + const addresses: AddressInfo[] = this.servers.map( + (srv) => srv.address() as AddressInfo ); + const ports = new Set(addresses.map((addr) => addr.port)); const port = ports.size === 1 && [...ports][0]; if (typeof port !== 'number') { + const addressesDebugInfo = addresses + .map((addr) => JSON.stringify(addr)) + .join(','); // Should never happen throw new MongoDBOIDCError( - `Server is listening in inconsistent state: ${[...ports].join(',')}` + `Server is listening in inconsistent state: ${addressesDebugInfo}` ); } return port; @@ -343,8 +347,11 @@ export class RFC8252HTTPServer { ); } + const urlPort = this.redirectUrl.port === '' ? 80 : +this.redirectUrl.port; + this.logger.emit('mongodb-oidc-plugin:local-listen-started', { url: this.redirectUrl.toString(), + urlPort, }); // https://www.rfc-editor.org/rfc/rfc8252#section-7.3 states: @@ -363,9 +370,18 @@ export class RFC8252HTTPServer { let hostname = this.redirectUrl.hostname; if (hostname.startsWith('[') && hostname.endsWith(']')) hostname = hostname.slice(1, -1); - const dnsResults = await dns.lookup(hostname, { - all: true, - hints: ADDRCONFIG, + const dnsResults = ( + await dns.lookup(hostname, { + all: true, + hints: ADDRCONFIG, + }) + ).map(({ address, family }) => ({ address, family })); + + this.logger.emit('mongodb-oidc-plugin:local-listen-resolved-hostname', { + url: this.redirectUrl.toString(), + urlPort, + hostname, + interfaces: dnsResults, }); if (dnsResults.length === 0) { @@ -375,9 +391,6 @@ export class RFC8252HTTPServer { } try { - const urlPort = - this.redirectUrl.port === '' ? 80 : +this.redirectUrl.port; - // Two scenarios: Either we are listening on an arbitrary port here, // or listening on a specific port. Using an arbitrary port has the // advantage that the OS will allocate a free one for us, while a @@ -406,7 +419,7 @@ export class RFC8252HTTPServer { if (typeof port !== 'number') { // Should never happen throw new MongoDBOIDCError( - `Listening on ${dnsResults[0].address} did not return a port` + `Listening on ${dnsResults[0].address} (family = ${dnsResults[0].family}) did not return a port` ); } } @@ -429,13 +442,16 @@ export class RFC8252HTTPServer { await this.close(); this.logger.emit('mongodb-oidc-plugin:local-listen-failed', { url: this.redirectUrl.toString(), + error: String( + err && typeof err === 'object' && 'message' in err ? err.message : err + ), }); throw err; } this.logger.emit('mongodb-oidc-plugin:local-listen-succeeded', { url: this.listeningRedirectUrl || '', - interfaces: dnsResults.map((dnsResult) => dnsResult.address), + interfaces: dnsResults, }); } diff --git a/src/types.ts b/src/types.ts index f130b72..af20bd7 100644 --- a/src/types.ts +++ b/src/types.ts @@ -25,11 +25,23 @@ export interface MongoDBOIDCLogEventsMap { method: string; path: string; }) => void; - 'mongodb-oidc-plugin:local-listen-started': (event: { url: string }) => void; - 'mongodb-oidc-plugin:local-listen-failed': (event: { url: string }) => void; + 'mongodb-oidc-plugin:local-listen-started': (event: { + url: string; + urlPort: number; + }) => void; + 'mongodb-oidc-plugin:local-listen-resolved-hostname': (event: { + url: string; + urlPort: number; + hostname: string; + interfaces: { family: number; address: string }[]; + }) => void; + 'mongodb-oidc-plugin:local-listen-failed': (event: { + url: string; + error: string; + }) => void; 'mongodb-oidc-plugin:local-listen-succeeded': (event: { url: string; - interfaces: string[]; + interfaces: { family: number; address: string }[]; }) => void; 'mongodb-oidc-plugin:local-server-close': (event: { url: string }) => void; 'mongodb-oidc-plugin:open-browser': (event: { diff --git a/test/log-hook-verification-helpers.ts b/test/log-hook-verification-helpers.ts index 17348da..add2ece 100644 --- a/test/log-hook-verification-helpers.ts +++ b/test/log-hook-verification-helpers.ts @@ -33,8 +33,13 @@ export function verifySuccessfulAuthCodeFlowLog(entries: any[]): void { expect(attr.url).to.match(/http:\/\/localhost.*\/redirect/); expect(attr.interfaces).to.be.an('array'); expect(attr.interfaces).to.have.lengthOf.greaterThanOrEqual(1); - for (const item of attr.interfaces as unknown[]) - expect(item).to.be.a('string'); + for (const item of attr.interfaces as { + address: string; + family: number; + }[]) { + expect(item.address).to.be.a('string'); + expect(item.family).to.be.a('number'); + } }, }, { From 8892cc8bb594729d855f546c26cf59f9b7f1d6b7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:31:35 +0000 Subject: [PATCH 5/5] Prepare for v1.1.2 (#199) * Prepare for v1.1.2 * Add registry-url --------- Co-authored-by: nirinchev <2315687+nirinchev@users.noreply.github.com> Co-authored-by: Nikola Irinchev --- .github/workflows/publish-release.yml | 1 + package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index fdd0a9f..5ce07b7 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -15,6 +15,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: 20.x + registry-url: 'https://registry.npmjs.org' - name: Install Dependencies run: npm ci --ignore-engines diff --git a/package-lock.json b/package-lock.json index 937f7a4..8f5e9bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@mongodb-js/oidc-plugin", - "version": "1.1.1", + "version": "1.1.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@mongodb-js/oidc-plugin", - "version": "1.1.1", + "version": "1.1.2", "license": "Apache-2.0", "dependencies": { "express": "^4.18.2", diff --git a/package.json b/package.json index 4c0e0c7..e572078 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/oidc-plugin", - "version": "1.1.1", + "version": "1.1.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/oidc-plugin.git"