# Core library

## Libraries

- [forms](./forms/)

## RXJS operators

`debounceTimeAfter<T>(amount: number, dueTime: number, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction<T>`

Start deboucing values after `amount` emits with `dueTime` delay

`debounceTimeAfterFirst<T>(dueTime: number, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction<T>`

Start deboucing values after first emit with `dueTime` delay

## Angular pipes

`orderBy`

Sorts an array of objects

`values`

Returns an array of object values

## Services

`BaseHttpService`

Base service for managing HTTP/HTTPS calls.

`FileDownloadService`

Download files with a given name and content

## Types

TBD

## Utils

`UUID`

ID generator

`SalesforceIdUtils`

Salesforce ID generator

## Binaries

### Authorization

`vl-auth` executable script is available for local development authorization purposes

The script generates `auth.json` file with the API connection information

<details>
  <summary>Set up instructions</summary>

1. Add the following script to the projects `package.json` file with specified default SF org alias:

```json
"auth": "vl-auth -u my-org"
```

2. Add `local` folder to the project root. To make sure it's always in version control add `.gitkeep` file into the folder:

```
/local
  .gitkeep
```

3. Add `local` folder to the host application assets list (in the `angular.json` file), so the content is available from the browser:

```json
"architect": {
  "build": {
    "options": {
      "assets": [
        {
          "glob": "local",
          "input": "./",
          "output": "/"
        }
      ]
    }
  }
}
```

4. Create `proxy.config.js` in the project root dir with the following content:

```js
const proxyInfo = (() => {
  try {
    return require('./local/auth.json').proxy;
  } catch {
    return {
      '/services/*': 'http://localhost:8083',
    };
  }
})();

const baseConfig = {
  secure: true,
  changeOrigin: true,
  logLevel: 'info', // ['debug', 'info', 'warn', 'error', 'silent']
  headers: {
    Origin: 'https://localhost.force.com',
  },
};

const proxyConfig = Object.keys(proxyInfo).reduce((trunk, key) => {
  return {
    ...trunk,
    [key]: {
      ...baseConfig,
      target: proxyInfo[key],
    },
  };
}, {});

module.exports = proxyConfig;
```

5. Add proxy config to the host application configs (in the `angular.json` file)

```json
"architect": {
  "serve": {
    "options": {
      "proxyConfig": "proxy.conf.js"
    }
  }
}
```

6. Add initialization logic to the application `main.ts` file before bootstrapping angular module:

```ts
import { loadVeloceConfig } from '@veloceapps/core';

loadVeloceConfig(() => {
  platformBrowserDynamic()
    .bootstrapModule(AppModule)
    .catch(err => console.error(err));
});
```

7. Add auto generated files to the `.gitignore` by adding the following: `local/*`.
</details>

To reset auth info just remove `local/auth.json` file.

### External config

When launching runtime from external portal, Veloce config should be providen using `initVeloceConfig` util. See example:

```ts
import { initVeloceConfig } from '@veloceapps/core';

initVeloceConfig(this.configuratorFrame.nativeElement, {
  ADMIN_CONTEXT: false,
  COMPRESSION_METHOD: 'GZIP',
  VELO_API: environment.backendUrl,
  VELO_PUBLIC_PATH: environment.configuratorUrl,
  VELO_KEY: window.VELO_KEY,
  VELO_BACK_FN: (headerId: string) => {
    this.router.navigate([`/${URLS.ACCOUNTS}/${headerId}/${URLS.SUCCESSFUL}`]);
  },
});
```
