## v3.0, TBD

### Highlights

#### Breaking Changes

- `accounts-2fa@get-version`:

  - Some methods are now async. See below:
  - `Accounts._is2faEnabledForUser`
  - `(Meteor Method) - generate2faActivationQrCode`
  - `(Meteor Method) - enableUser2fa`
  - `(Meteor Method) - disableUser2fa`
  - `(Meteor Method) - has2faEnabled`

- `accounts-base@get-version`:

  - `methods.removeOtherTokens` is now async
  - `Accounts.destroyToken` is now async
  - `Accounts.insertUserDoc` is now async
  - `Accounts.updateOrCreateUserFromExternalService` is now async
  - `Accounts.expirePasswordToken` is now async
  - `Accounts.setupUsersCollection` is now async

- `accounts-password@get-version`:

  - Some server methods are now async:
  - `Accounts.sendResetPasswordEmail`
  - `Accounts.sendEnrollmentEmail`
  - `Accounts.sendVerificationEmail`
  - `Accounts.addEmail`
  - `Accounts.removeEmail`
  - `Accounts.verifyEmail`
  - `Accounts.createUserVerifyingEmail`
  - `Accounts.createUser`
  - `Accounts.generateVerificationToken`
  - `Accounts.generateResetToken`
  - `Accounts.forgotPassword`
  - `Accounts.setPassword`
  - `Accounts.changePassword`
  - `Accounts.setUsername`
  - `Accounts.findUserByEmail`
  - `Accounts.findUserByUsername`

- `accounts-passwordless@get-version`:

  - `Accounts.sendLoginTokenEmail` is now async.

- `allow-deny@get-version`:

  - Updated to accept async functions.

- `appcache@get-version`:

  - Updated internal api to use `expressHandlers`

- `autoupdate@get-version`:

  - Updated api to be async, with asyncronous queueing.

- `babel-compiler@get-version`:

  - Removed `Promise.await` default transform.
  - Added top-level-await to packages.

- `boilerplate-generator@get-version`:

  - `toHTML` is no longer available (it was already deprecated). Use `toHTMLStream` instead.
  - Updated to use `expressHandlers`

- `browser-policy-common@get-version`:

  - Updated to use `expressHandlers`

- `browser-policy-content@get-version`:

  - Some methods are now async. See below:
    - `BrowserPolicy.content.setPolicy`
    - `BrowserPolicy.content.allowInlineScripts`
    - `BrowserPolicy.content.disallowInlineScripts`
    - `BrowserPolicy.content.disallowAll`
    - `BrowserPolicy.setDefaultPolicy`

- `browser-policy@get-version`:
  Updated to use async methods from `browser-policy-common` and `browser-policy-content`.

- `caching-compiler@get-version`:

  - `afterLink` is now async.
  - Updated to use now async API.

- `callback-hook@get-version`:

  - Added `forEachAsync` method.

- `check@get-version`:

  - Removed `fibers` related tests.

- `constraint-solver@get-version`:

  - Some methods are now async. See below:

    - `ConstraintSolver.getVersionCostSteps`
    - `ConstraintSolver.analyze`
    - `ConstraintSolver.resolve`

  - Updated tests to be async.
  - Removed a few underscore usage.
  - Added updated to use async methods

- `context@get-version`:

  - Removed `fibers` from package.

- `core-runtime@get-version`:

  - Created package to load packages and the app.
  - This is the pakcages that sets up the Runtime.

- `ddp-client@get-version`:

  - Added `isAsyncCall` method to know if call is being made by a async method.
  - Removed `fibers` from package.
  - Updated tests to use async methods.

- `ddp-common@get-version`:

  - Added `.fence` option.

- `ddp-server@get-version`:

  - Updated to use async methods.
  - Removed `fibers` from package.
  - Updated tests to use async methods.
  - Turned server implementation to async.

`deprecated`:

- `http`:
  - Updated handlers to use `expressHandlers`
- `spiderable`:

  - Updated handlers to use `expressHandlers`
  - removed `fibers` usage if flag is set to `true`

- `ecmascript-runtime@get-version`:

  - Added dependency to `@babel/runtime`.

- `ecmascript@get-version`:

  - Added dependency to `@babel/runtime`.
  - Moved runtime tests.

- `email@get-version`:

  - `Email.send` is no longer available. Use `Email.sendAsync` instead.
  - Updated types to reflext async methods and `Email.send` depracation.

- `facts-base@get-version`:

  - turned unorderd deps on `ddp` to false.

- `id-map@get-version`:

  - Added `forEachAsync` method.

- `logging@get-version`:

  - Added dependency to `@babel/runtime`.

- `logic-solver@get-version`:
  `Logic.disablingAssertions` is now async.
  `minMaxWS` is now async.

- `meteor@get-version`:

  - Async local storage was added to help deal with async methods.
  - Added `promiseEmmiter` to help with async methods.
  - Removed `fibers` from package.

- `minifier-css@get-version`:

  - `minifyCss` is now async.
  - Removed `fibers` from package.

- `minifier-js@get-version`:

  - `minifyJs` is now async.
  - `terserMinify` no longer takes callbacks
  - Removed `fibers` from package.

* `minimongo@get-version`:
  - `cursor.observe` now returns `isReady` and `isReadyPromise` wich indicates
    if the cursor is ready and if the callbacks are have been called.
    If you only use it in the `Client` or as a `LocalCollection` things have not
    changed.

- `modules@get-version`:

  - Updated `reify` version.

- `mongo@get-version`:

  - Updated to unify methods, `update`,`insert`,`remove`, `fetch` are now async, they are
    the same as their `*Async` counterpart.
  - `ensureIndex` and `createIndex` are now async.

- `blaze@3.0.0`:
- TODO

- `mongo-decimal@get-version`:

  - Updated to use `async` methods.

- `oauth`:

  - `_endOfPopupResponseTemplate` and `_endOfRedirectResponseTemplate` are no longer a property but now a function that returns a promise of the same value as before
  - the following server methods are now async:
  - `OAuth._renderOauthResults`
  - `OAuth._endOfLoginResponse`
  - `OAuth.renderEndOfLoginResponse`
  - `OAuth._storePendingCredential`
  - `OAuth._retrievePendingCredential`
  - `ensureConfigured`
  - `_cleanStaleResults`

- `oauth1`:

  - the following server methods are now async:
  - `OAuth._storeRequestToken`
  - `OAuth._retrieveRequestToken`

- `oauth2`:

  - `OAuth._requestHandlers['2']` is now async.

- `ordered-dict@get-version`:

  - Added `forEachAsync` method.

- `promise@get-version`:

  - Removed `fibers` usage

- `reload-safetybelt@get-version`:

  - Added `ecmascript` package to `package.js`

- `server-render@get-version`:

  - Updated usage with `getBoilerplate` that are now `async`.

- `service-configuration@get-version`:

  - Updated to use `createIndexAsync`.

- `shell-server@get-version`:

  - Updated to handle promises results.

- `socket-stream-client@get-version`:

  - Updated tests to handle `async` code.

- `standard-minifier-js@get-version`:

  - `processFilesForBundle` is now `async`.

- `test-helpers@get-version`:

  - Updated to use `async` methods.
  - Removed `fibers` usage.
  - Added possibliy to use `async` tests.

- `test-in-browser@get-version`:

  - Updated css to be in dark mode.

- `test-in-console@get-version`:

  - Updated log identation.

- `tinytest@get-version`:

  - Added `test name` to logs.
  - Removed `fibers` usage.

- `underscore@get-version`:

  - Removed dependency in meteor package.

- `webapp@get-version`:

  - These methods are now async:

    - `WebAppInternals.reloadClientPrograms()`
    - `WebAppInternals.pauseClient()`
    - `WebAppInternals.generateClientProgram()`
    - `WebAppInternals.generateBoilerplate()`
    - `WebAppInternals.setInlineScriptsAllowed()`
    - `WebAppInternals.enableSubresourceIntegrity()`
    - `WebAppInternals.setBundledJsCssUrlRewriteHook()`
    - `WebAppInternals.setBundledJsCssPrefix()`
    - `WebAppInternals.getBoilerplate`

  - Changed engine from connect to express and changed api naming to match express. See below:
  - `WebApp.connectHandlers.use(middleware)` is now `WebApp.expressHandlers.use(middleware)`
  - `WebApp.rawConnectHandlers.use(middleware)` is now `WebApp.rawExpressHandlers.use(middleware)`
  - `WebApp.connectApp` is now `WebApp.expressApp`

#### New Public API

- `accounts-base`: (2.9+)

  - `Meteor.userAsync()`

- `callback-hook`:forEachAsync

  - `forEachAsync`

- `ddp-server`: (2.8+)

  - `Meteor.callAsync()`

- `minifier-css`: (2.9+)

  - `CssTools.minifyCssAsync()`

- `mongo`:

  - `Mongo.Collection`: (2.8+)
    - `createCappedCollectionAsync`
    - `createIndexAsync`
    - `dropCollectionAsync`
    - `dropIndexAsync`
    - `findOneAsync`
    - `insertAsync`
    - `removeAsync`
    - `updateAsync`
    - `upsertAsync`
  - `Collection.Cursor`: (2.8+)
    - `countAsync`
    - `fetchAsync`
    - `forEachAsync`
    - `mapAsync`
    - `[Symbol.asyncIterator]` so this code should work:
      ```js
      for await (const document of collection.find(query, options)) /* ... */
      ```

#### Internal API changes

`accounts-base`:

- `_attemptLogin`
- `_loginMethod`
- `_runLoginHandlers`

#### New Internal API

`accounts-password`:

- `Accounts._checkPasswordAsync`
