Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

common: Predefine configuration objects for Compute Engine, App Engine and service account users #46

Closed
rakyll opened this issue Jul 29, 2014 · 12 comments
Assignees
Labels
core 🚨 This issue needs some love. triage me I really want to be triaged.
Milestone

Comments

@rakyll
Copy link
Contributor

rakyll commented Jul 29, 2014

We should provide a config module to allow developers to explicitly set the connection options.

var gcloud = require('gcloud'),
      datastore = gcloud.datastore,
      config = gcloud.config;

// on app engine, it should also discover if running locally
// if process.env.SERVER_SOFTWARE === 'Development'
datastore.dataset(config.appengine());

// compute engine
datastore.dataset(config.compute());

// service account, credentials file is the new developer console file
// that contains private key + service account email.
datastore.dataset(config(credentialsFilename));
@rakyll rakyll added this to the M1: core, datastore & storage milestone Jul 29, 2014
@rakyll
Copy link
Contributor Author

rakyll commented Jul 29, 2014

On App Engine and Compute Engine, a request is required to fetch the project/app name. It will make the existing codebase complicated to maintain if we do this lazily before request time.

Two options:

  • emit a 'ready' event:

     var ds = datastore.dataset(config.appengine(context));
     ds.on('ready', function() { /* do stuff here */ });
  • make config creation async:

    config.appengine(function(conf) {
      var ds = datastore.dataset(conf);
    });

I'd prefer we follow the first option for all. Any ideas?

@silvolu
Copy link
Contributor

silvolu commented Jul 29, 2014

+1 for first option

@rakyll rakyll changed the title Predefine configuration objects for Compute Engine, App Engine and service account users common: Predefine configuration objects for Compute Engine, App Engine and service account users Jul 31, 2014
@rakyll
Copy link
Contributor Author

rakyll commented Aug 5, 2014

First looks good, but not useful. You basically want to get done with configuration for once and reuse it for multiple services.

config.compute(function() {
    // start server and don't care about config anymore
    gcloud.datastore.dataset.get(...)
});

This approach is not ideal if you want to authorise for multiple accounts/projects within a single process. We need to avoid global vars and need to pass some configuration object to service constructors which is likely to confuse a user.

config.compute(function(err, conf) {
    gcloud.datastore.dataset(conf).get(...);
});

IMHO, requiring multiple account support is not edgy. For cases where user is migrating data from one project to another, or for running backup jobs, it's a necessity.

@jgeewax
Copy link
Contributor

jgeewax commented Aug 6, 2014

Just so I can get my head around this, can we update to show a "before and after" type view?

It seems that something like config.compute(...) would lead to different code depending on the environment (correct me if I'm misunderstanding...). I'd like to avoid that if possible.

Using an example, let's say I wanted to get something from GCD. The code I'd like to write is something along the lines of...

var gcloud = require('gcloud'),
      datastore = gcloud.datastore;

gcloud.authenticate();

entity = datastore.get(...);

That authentication line would ideally do a few things:

  1. Since we know this is running server-side, we should focus on service accounts (I don't think 3-party auth will be very common).
  2. If the user is explicit, try what they intended, raise an exception otherwise:
    1. Specific configuration passed in as code (ie, gcloud.authenticate(<something here>))
    2. Environment variables overridden (ie, DATASTORE_AUTH_JSON or something)
  3. If the user is not explicit, look at the environment, and try our best to authenticate. Raise an exception only after none of the options work.
    1. Try GCE with the appropriate scopes (userinfo and datastore in this case)
    2. Try GAE production
    3. Try GAE local dev_appserver
    4. Raise an exception with the log of all things not working.
  4. Regardless of whether the user is explicit or implicit, I'd like to have introspection methods to see how exactly we're authenticating. That is:
    1. gcloud.get_authentication_method()
    2. Logging when we first authenticate of what we tried, what failed, and why.

@rakyll
Copy link
Contributor Author

rakyll commented Aug 6, 2014

It seems that something like config.compute(...) would lead to different code depending on the environment (correct me if I'm misunderstanding...). I'd like to avoid that if possible.

True, but only for the configuration step. It's not ideal but falling back to other options (GCE and GAE) confuses people who has never heard of GCE's metadata server. The final fallback option returns the final error message (DNS error for http://metadata). Therefore, I thought user should be explicit about the environment if they are a GCE or GAE user.

Auth layer should also resolve the project ID if it's running on GCE, that's why we can't have gcloud.authenticate() synchronous. It has to look like:

gcloud.authenticate(opt_explicitConf, function(err) {
  // start writing code here
  entity = datastore.get(...);
});

(We can't lazily retrieve project ID during request time. If we do, codebase becomes unnecessarily complicated.)

The flow should be very similar to what you've said above. I'm adding a few other details to the 3rd step.

GAE local server is detectable by an env flag. We will be able to determine if it's local GAE.

i. If GAE local flag is set, use local server and don't authenticate.
ii. Else, try GCE with scopes (GAE prod = GCE).
iii. Return error if nothing has worked.

@stephenplusplus
Copy link
Contributor

I've read through this a few times, and I'm still trying to understand the wires between our code and the various engines, but I thought I'd make a suggestion that hopefully isn't entirely useless, using @jgeewax's code example as a basis.

While you're still considering APIs to go with, I just wanted to mention the Promise system can sometimes ease the pain of having "this before this before this" conditions.

The object passed to gcloud.authenticate can include or omit various properties that are relevant for the intended environment, which would define an implicit connection type that authenticate can use however it needs. The chained success and error functions are only executed after gcloud.authenticate has triggered them, based on the results of the operations, handing them whatever bits of data it wants.

Here would be an example of creating a server that listens for a ping to api/users/:id, which then responds with the json object dump from the datastore.

./index.js

var gcloud = require('gcloud');
var createServer = require('./server');

gcloud
  .authenticate({ /* ... */ })
  .then(createServer, function handleError() { /* ... */ });

./server.js

var http = require('http');
var dataset;

module.exports = function (gcloud) {
  dataset = new gcloud.datastore.dataset({ projectId: 'MyApp' });
  createServer();
};

function createServer() {
  http.createServer(function (req, res) {
    if (req.url.indexOf('/api/user') === 0) {
      getUser(req.params.id, res);
      return;
    }
  });
}

function getUser(id, res) {
  dataset.get(['Users', id], function (err, res) {
    res.end(JSON.stringify(res.data));
  });
}

This is obviously a made-up scenario, but if we can integrate promises in a similar way, the consumer gets the benefit of DI -- so their server.js (or whatever makes sense for their use) module doesn't have to care about striking a connection, and can just proceed knowing it has everything it needs. Just a nice perk 👍

Hopefully this applies at least in some small way. If you see that I'm not grasping something, please let me know!

@jgeewax
Copy link
Contributor

jgeewax commented Aug 7, 2014

I am hugely in favor of something like this...

gcloud.authenticate({...}).then(function() {
  ...
})

would be really nice.

@stephenplusplus
Copy link
Contributor

Updated to use then 👍

@rakyll
Copy link
Contributor Author

rakyll commented Aug 7, 2014

We don't support promises, I see no reason why we should support promises during auth.

gcloud.authenticate({ /* ... */ }, createServer);

is much slicker and not giving a bad impression that gcloud has promises support.

@stephenplusplus
Copy link
Contributor

gcloud.authenticate({ /* ... */ }, createServer); works just as well for me.

@rakyll
Copy link
Contributor Author

rakyll commented Aug 7, 2014

I've slept over this issue and decided to close it (for a while). We should always require users to set a project ID regardless of which context they run gcloud (at least, in the scope of M1 release). Use a JSON key file for service account authorization, otherwise we'll fallback to metadata server to retrieve an access token if no key file is set.

There is no significant value added if we resolve their project IDs, yet users will need to handle gcloud.authenticate.

Currently, this is how we do auth:

// works everywhere
var ds = gcloud.datastore.dataset({
  projectId: 'bamboo-45-lol',
  keyFilename: '/path/to/keyfile.json'
});
ds.get(...)

// works on GCE
var ds = gcloud.datastore.dataset({
  projectId: 'bamboo-45-lol'
});
ds.get(...)

// works on GAE
var ds = glcoud.datastore.dataset({
  projectId: <appEngineAppName>
});
ds.get(...)

// i may add GAE local server support
// if process.env.SERVER_SOFTWARE === 'Development'

I want to focus on GAE's Node runtime this week to see if we have any problems. Maybe we should include gcloud in their runtime module and doesn't require GAE specific bits in this one.

// cc @rrch

@rakyll rakyll closed this as completed Aug 7, 2014
@rakyll
Copy link
Contributor Author

rakyll commented Aug 9, 2014

App Engine exposes project ID as GAE_LONG_APP_ID env variable. We can go from there, we don't need to ask metadata server.

@jgeewax jgeewax added the core label Feb 2, 2015
@jgeewax jgeewax modified the milestones: M1: core, datastore & storage, Core Stable Feb 2, 2015
@yoshi-automation yoshi-automation added 🚨 This issue needs some love. triage me I really want to be triaged. labels Apr 6, 2020
chingor13 pushed a commit that referenced this issue Sep 12, 2022
[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [sinon](https://sinonjs.org/) ([source](https://github.com/sinonjs/sinon)) | [`^10.0.0` -> `^11.0.0`](https://renovatebot.com/diffs/npm/sinon/10.0.0/11.1.0) | [![age](https://badges.renovateapi.com/packages/npm/sinon/11.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/sinon/11.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/sinon/11.1.0/compatibility-slim/10.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/sinon/11.1.0/confidence-slim/10.0.0)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>sinonjs/sinon</summary>

### [`v11.1.0`](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md#&#8203;1110--2021-05-25)

[Compare Source](https://github.com/sinonjs/sinon/compare/v11.0.0...31be9a5d5a4762ef01cb195f29024616dfee9ce8)

\==================

-   Add sinon.promise() implementation ([#&#8203;2369](https://github.com/sinonjs/sinon/issues/2369))
-   Set wrappedMethod on getters/setters ([#&#8203;2378](https://github.com/sinonjs/sinon/issues/2378))
-   \[Docs] Update fake-server usage & descriptions ([#&#8203;2365](https://github.com/sinonjs/sinon/issues/2365))
-   Fake docs improvement ([#&#8203;2360](https://github.com/sinonjs/sinon/issues/2360))
-   Update nise to 5.1.0 (fixed [#&#8203;2318](https://github.com/sinonjs/sinon/issues/2318))

### [`v11.0.0`](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md#&#8203;1100--2021-05-24)

[Compare Source](https://github.com/sinonjs/sinon/compare/v10.0.1...v11.0.0)

\==================

-   Explicitly use samsam 6.0.2 with fix for [#&#8203;2345](https://github.com/sinonjs/sinon/issues/2345)
-   Update most packages ([#&#8203;2371](https://github.com/sinonjs/sinon/issues/2371))
-   Update compatibility docs ([#&#8203;2366](https://github.com/sinonjs/sinon/issues/2366))
-   Update packages (includes breaking fake-timers change, see [#&#8203;2352](https://github.com/sinonjs/sinon/issues/2352))
-   Warn of potential memory leaks ([#&#8203;2357](https://github.com/sinonjs/sinon/issues/2357))
-   Fix clock test errors

### [`v10.0.1`](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md#&#8203;1001--2021-04-08)

[Compare Source](https://github.com/sinonjs/sinon/compare/v10.0.0...v10.0.1)

\==================

-   Upgrade sinon components (bumps y18n to 4.0.1)
-   Bump y18n from 4.0.0 to 4.0.1

</details>

---

### Configuration

📅 **Schedule**: "after 9am and before 3pm" (UTC).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻️ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/nodejs-artifact-registry).
sofisl pushed a commit that referenced this issue Nov 11, 2022
…e in region tag (#46)

* docs(samples): add auto-generated samples for Node with api short name in region tag

PiperOrigin-RevId: 399287285

Source-Link: googleapis/googleapis@1575986

Source-Link: googleapis/googleapis-gen@b27fff6
Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYjI3ZmZmNjIzYTVkOGQ1ODZiNzAzYjVlNDkxOTg1NmFiZTdjMmViMyJ9

* 🦉 Updates from OwlBot

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
sofisl pushed a commit that referenced this issue Nov 11, 2022
…ript generator. (#46)

Also removing the explicit generator tag for the IAMPolicy mixin for the kms and pubsub APIS as the generator will now read it from the .yaml file.

PiperOrigin-RevId: 385101839

Source-Link: googleapis/googleapis@80f4042

Source-Link: googleapis/googleapis-gen@d3509d2
sofisl pushed a commit that referenced this issue Nov 16, 2022
gcr.io/repo-automation-bots/owlbot-nodejs:latest@sha256:f93bb861d6f12574437bb9aee426b71eafd63b419669ff0ed029f4b7e7162e3f
sofisl pushed a commit that referenced this issue Nov 16, 2022
[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [sinon](https://sinonjs.org/) ([source](https://github.com/sinonjs/sinon)) | [`^10.0.0` -> `^11.0.0`](https://renovatebot.com/diffs/npm/sinon/10.0.0/11.1.0) | [![age](https://badges.renovateapi.com/packages/npm/sinon/11.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/sinon/11.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/sinon/11.1.0/compatibility-slim/10.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/sinon/11.1.0/confidence-slim/10.0.0)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>sinonjs/sinon</summary>

### [`v11.1.0`](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md#&#8203;1110--2021-05-25)

[Compare Source](https://github.com/sinonjs/sinon/compare/v11.0.0...31be9a5d5a4762ef01cb195f29024616dfee9ce8)

\==================

-   Add sinon.promise() implementation ([#&#8203;2369](https://github.com/sinonjs/sinon/issues/2369))
-   Set wrappedMethod on getters/setters ([#&#8203;2378](https://github.com/sinonjs/sinon/issues/2378))
-   \[Docs] Update fake-server usage & descriptions ([#&#8203;2365](https://github.com/sinonjs/sinon/issues/2365))
-   Fake docs improvement ([#&#8203;2360](https://github.com/sinonjs/sinon/issues/2360))
-   Update nise to 5.1.0 (fixed [#&#8203;2318](https://github.com/sinonjs/sinon/issues/2318))

### [`v11.0.0`](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md#&#8203;1100--2021-05-24)

[Compare Source](https://github.com/sinonjs/sinon/compare/v10.0.1...v11.0.0)

\==================

-   Explicitly use samsam 6.0.2 with fix for [#&#8203;2345](https://github.com/sinonjs/sinon/issues/2345)
-   Update most packages ([#&#8203;2371](https://github.com/sinonjs/sinon/issues/2371))
-   Update compatibility docs ([#&#8203;2366](https://github.com/sinonjs/sinon/issues/2366))
-   Update packages (includes breaking fake-timers change, see [#&#8203;2352](https://github.com/sinonjs/sinon/issues/2352))
-   Warn of potential memory leaks ([#&#8203;2357](https://github.com/sinonjs/sinon/issues/2357))
-   Fix clock test errors

### [`v10.0.1`](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md#&#8203;1001--2021-04-08)

[Compare Source](https://github.com/sinonjs/sinon/compare/v10.0.0...v10.0.1)

\==================

-   Upgrade sinon components (bumps y18n to 4.0.1)
-   Bump y18n from 4.0.0 to 4.0.1

</details>

---

### Configuration

📅 **Schedule**: "after 9am and before 3pm" (UTC).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻️ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/nodejs-network-connectivity).
sofisl added a commit that referenced this issue Nov 16, 2022
* build!: Update library to use Node 12

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
sofisl pushed a commit that referenced this issue Nov 16, 2022
🤖 I have created a release *beep* *boop*
---


## 1.0.0 (2022-05-18)


### ⚠ BREAKING CHANGES

* update library to use Node 12 (#374)
* rename parent to project in SearchRelatedAccountGroupMembershipsRequest (#370)
* remove key management API (#366)
* Remove RecaptchaEnterpriseServiceV1Beta1Client.
* The library now supports Node.js v10+. The last version to support Node.js v8 is tagged legacy-8 on NPM.
* upgrade engines field to >=8.10.0 (#2)

### Features

* add crud support for keys ([#84](googleapis/nodejs-recaptcha-enterprise#84)) ([adfc3f9](googleapis/nodejs-recaptcha-enterprise@adfc3f9))
* add GetMetrics and MigrateKey methods to reCAPTCHA enterprise API ([#318](googleapis/nodejs-recaptcha-enterprise#318)) ([55b1adc](googleapis/nodejs-recaptcha-enterprise@55b1adc))
* add new reCAPTCHA Enterprise fraud annotations ([#334](googleapis/nodejs-recaptcha-enterprise#334)) ([24fdff1](googleapis/nodejs-recaptcha-enterprise@24fdff1))
* add plural and singular resource descriptor ([#78](googleapis/nodejs-recaptcha-enterprise#78)) ([a67ffa7](googleapis/nodejs-recaptcha-enterprise@a67ffa7))
* add reCAPTCHA Enterprise account defender API methods ([#328](googleapis/nodejs-recaptcha-enterprise#328)) ([2099c50](googleapis/nodejs-recaptcha-enterprise@2099c50))
* Add support for Password Check through the private_password_leak_verification field in the reCAPTCHA Assessment ([#376](googleapis/nodejs-recaptcha-enterprise#376)) ([7c1583c](googleapis/nodejs-recaptcha-enterprise@7c1583c))
* add the v1 API surface ([#141](googleapis/nodejs-recaptcha-enterprise#141)) ([bb1bd33](googleapis/nodejs-recaptcha-enterprise@bb1bd33))
* deferred client initialization ([#128](googleapis/nodejs-recaptcha-enterprise#128)) ([3de999e](googleapis/nodejs-recaptcha-enterprise@3de999e))
* drop node8 support, support for async iterators ([#145](googleapis/nodejs-recaptcha-enterprise#145)) ([cc4cc51](googleapis/nodejs-recaptcha-enterprise@cc4cc51))
* export protos in src/index.ts ([ffd77ca](googleapis/nodejs-recaptcha-enterprise@ffd77ca))
* introduces style enumeration ([#234](googleapis/nodejs-recaptcha-enterprise#234)) ([35f1bb6](googleapis/nodejs-recaptcha-enterprise@35f1bb6))
* load protos from JSON, grpc-fallback support ([7a4b2a6](googleapis/nodejs-recaptcha-enterprise@7a4b2a6))
* move to typescript code generation ([#87](googleapis/nodejs-recaptcha-enterprise#87)) ([11051db](googleapis/nodejs-recaptcha-enterprise@11051db))
* support apiEndpoint override in client constructor ([#30](googleapis/nodejs-recaptcha-enterprise#30)) ([1192afd](googleapis/nodejs-recaptcha-enterprise@1192afd))
* turns on self-signed JWT feature flag ([#311](googleapis/nodejs-recaptcha-enterprise#311)) ([c12da34](googleapis/nodejs-recaptcha-enterprise@c12da34))
* update scopes and classifications ([#60](googleapis/nodejs-recaptcha-enterprise#60)) ([b216630](googleapis/nodejs-recaptcha-enterprise@b216630))


### Bug Fixes

* allow calls with no request, add JSON proto ([ab643f8](googleapis/nodejs-recaptcha-enterprise@ab643f8))
* **browser:** check for fetch on window ([#226](googleapis/nodejs-recaptcha-enterprise#226)) ([8eb79dd](googleapis/nodejs-recaptcha-enterprise@8eb79dd))
* **build:** switch primary branch to main ([#315](googleapis/nodejs-recaptcha-enterprise#315)) ([2fc99ad](googleapis/nodejs-recaptcha-enterprise@2fc99ad))
* DEADLINE_EXCEEDED retry code is idempotent ([#10](googleapis/nodejs-recaptcha-enterprise#10)) ([746151c](googleapis/nodejs-recaptcha-enterprise@746151c))
* **deps:** bump google-gax to 1.7.5 ([#68](googleapis/nodejs-recaptcha-enterprise#68)) ([0605bb8](googleapis/nodejs-recaptcha-enterprise@0605bb8))
* **deps:** google-gax v2.17.0 with mTLS ([#294](googleapis/nodejs-recaptcha-enterprise#294)) ([45c12e5](googleapis/nodejs-recaptcha-enterprise@45c12e5))
* **deps:** google-gax v2.17.1 ([#297](googleapis/nodejs-recaptcha-enterprise#297)) ([15640f1](googleapis/nodejs-recaptcha-enterprise@15640f1))
* **deps:** google-gax v2.24.1 ([#309](googleapis/nodejs-recaptcha-enterprise#309)) ([de80090](googleapis/nodejs-recaptcha-enterprise@de80090))
* **deps:** pin TypeScript below 3.7.0 ([0e96508](googleapis/nodejs-recaptcha-enterprise@0e96508))
* **deps:** require google-gax v2.12.0 ([#270](googleapis/nodejs-recaptcha-enterprise#270)) ([ab16a25](googleapis/nodejs-recaptcha-enterprise@ab16a25))
* **deps:** update dependency google-gax to v1 ([#17](googleapis/nodejs-recaptcha-enterprise#17)) ([0f9e159](googleapis/nodejs-recaptcha-enterprise@0f9e159))
* do not modify options object, use defaultScopes ([#222](googleapis/nodejs-recaptcha-enterprise#222)) ([807b692](googleapis/nodejs-recaptcha-enterprise@807b692))
* do not retry request on DEADLINE_EXCEEDED ([a6e9f4a](googleapis/nodejs-recaptcha-enterprise@a6e9f4a))
* **docs:** bump the release level to beta ([#76](googleapis/nodejs-recaptcha-enterprise#76)) ([8a2e2c0](googleapis/nodejs-recaptcha-enterprise@8a2e2c0))
* **docs:** link to reference docs section on googleapis.dev ([#35](googleapis/nodejs-recaptcha-enterprise#35)) ([14ada6b](googleapis/nodejs-recaptcha-enterprise@14ada6b))
* **docs:** move to new client docs URL ([#32](googleapis/nodejs-recaptcha-enterprise#32)) ([6a95276](googleapis/nodejs-recaptcha-enterprise@6a95276))
* **docs:** snippets are now replaced in jsdoc comments ([#74](googleapis/nodejs-recaptcha-enterprise#74)) ([b3c31fc](googleapis/nodejs-recaptcha-enterprise@b3c31fc))
* enum, bytes, and Long types now accept strings ([394cfd8](googleapis/nodejs-recaptcha-enterprise@394cfd8))
* export explicit version from protos.js ([#150](googleapis/nodejs-recaptcha-enterprise#150)) ([0bfb3c7](googleapis/nodejs-recaptcha-enterprise@0bfb3c7))
* GoogleAdsError missing using generator version after 1.3.0 ([#279](googleapis/nodejs-recaptcha-enterprise#279)) ([6dc35a7](googleapis/nodejs-recaptcha-enterprise@6dc35a7))
* include the correct version of node in a header ([#46](googleapis/nodejs-recaptcha-enterprise#46)) ([2cc8099](googleapis/nodejs-recaptcha-enterprise@2cc8099))
* make request optional in all cases ([#290](googleapis/nodejs-recaptcha-enterprise#290)) ([e18a1d1](googleapis/nodejs-recaptcha-enterprise@e18a1d1))
* pass x-goog-request-params header for streaming calls ([983411e](googleapis/nodejs-recaptcha-enterprise@983411e))
* proper fallback option handling ([#180](googleapis/nodejs-recaptcha-enterprise#180)) ([52fe53d](googleapis/nodejs-recaptcha-enterprise@52fe53d))
* proper routing headers ([4d1b1d3](googleapis/nodejs-recaptcha-enterprise@4d1b1d3))
* regen protos and tests, formatting ([#169](googleapis/nodejs-recaptcha-enterprise#169)) ([731fe3b](googleapis/nodejs-recaptcha-enterprise@731fe3b))
* remove eslint, update gax, fix generated protos, run the generator ([#155](googleapis/nodejs-recaptcha-enterprise#155)) ([21b09f5](googleapis/nodejs-recaptcha-enterprise@21b09f5))
* remove key management API ([#366](googleapis/nodejs-recaptcha-enterprise#366)) ([44a5a4b](googleapis/nodejs-recaptcha-enterprise@44a5a4b))
* rename parent to project in SearchRelatedAccountGroupMembershipsRequest ([#370](googleapis/nodejs-recaptcha-enterprise#370)) ([aad0883](googleapis/nodejs-recaptcha-enterprise@aad0883))
* synth.py clean up for multiple version ([#172](googleapis/nodejs-recaptcha-enterprise#172)) ([ee1c250](googleapis/nodejs-recaptcha-enterprise@ee1c250))
* Updating WORKSPACE files to use the newest version of the Typescript generator. ([#299](googleapis/nodejs-recaptcha-enterprise#299)) ([6787e23](googleapis/nodejs-recaptcha-enterprise@6787e23))
* use compatible version of google-gax ([dfb174a](googleapis/nodejs-recaptcha-enterprise@dfb174a))
* use require() to load JSON protos ([#273](googleapis/nodejs-recaptcha-enterprise#273)) ([fdbc0fe](googleapis/nodejs-recaptcha-enterprise@fdbc0fe))


### Build System

* update library to use Node 12 ([#374](googleapis/nodejs-recaptcha-enterprise#374)) ([4042ae2](googleapis/nodejs-recaptcha-enterprise@4042ae2))
* upgrade engines field to >=8.10.0 ([#2](googleapis/nodejs-recaptcha-enterprise#2)) ([94d6a49](googleapis/nodejs-recaptcha-enterprise@94d6a49))

---
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
sofisl pushed a commit that referenced this issue Nov 16, 2022
sofisl pushed a commit that referenced this issue Jan 10, 2023
sofisl added a commit that referenced this issue Sep 13, 2023
* fix: fix typings for IAM methods
docs: fixed links in the generated Markdown documentation

PiperOrigin-RevId: 551610576

Source-Link: googleapis/googleapis@73b1313

Source-Link: googleapis/googleapis-gen@8bec066
Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiOGJlYzA2NjQ5MmE2ZGEyODU1YjFiOGNlNTYyNjY0YzBhNmIzMGIwMSJ9

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* test: disable retry-request for streaming tests

PiperOrigin-RevId: 554648220

Source-Link: googleapis/googleapis@53cd9ad

Source-Link: googleapis/googleapis-gen@7e8867e
Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiN2U4ODY3ZWZiZWQ3ZGJmZTVlZjZlYzNjMmM5MmE0YmNlNDI4MGY3YSJ9

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

---------

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
Co-authored-by: sofisl <55454395+sofisl@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
core 🚨 This issue needs some love. triage me I really want to be triaged.
Projects
None yet
Development

No branches or pull requests

5 participants