@capitalos/angular 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  import { Injectable, inject } from '@angular/core';
2
- import { BehaviorSubject, combineLatest, map } from 'rxjs';
2
+ import { BehaviorSubject, combineLatest } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
3
4
  import { TokenType, TokenParamKey, TokenParamLocation, createLogger } from '@capitalos/core';
4
5
  import { TokenExchangeService } from './token-exchange.service';
5
6
  import { CAPITALOS_CONFIG } from './provide-capitalos';
@@ -49,12 +50,15 @@ export class CapitalOsAuthService {
49
50
  this.isLoading$ = this._isLoading$.asObservable();
50
51
  this.error$ = this._error$.asObservable();
51
52
  this.authState$ = combineLatest([this._isLoading$, this._error$, this.tokenData$]).pipe(map(([isLoading, error, tokenData]) => {
52
- if (isLoading)
53
+ if (isLoading) {
53
54
  return 'loading';
54
- if (error)
55
+ }
56
+ if (error) {
55
57
  return 'error';
56
- if (tokenData)
58
+ }
59
+ if (tokenData) {
57
60
  return 'authenticated';
61
+ }
58
62
  return 'idle';
59
63
  }));
60
64
  this.isDestroyed = false;
@@ -131,4 +135,4 @@ CapitalOsAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0",
131
135
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CapitalOsAuthService, decorators: [{
132
136
  type: Injectable
133
137
  }], ctorParameters: function () { return []; } });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwaXRhbG9zLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9saWIvY2FwaXRhbG9zLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFjLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDdEUsT0FBTyxFQUFhLFNBQVMsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDdkcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUE7O0FBRXREOztHQUVHO0FBQ0gsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUU7UUFDMUIsT0FBTyxLQUFLLENBQUE7S0FDYjtJQUNELE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDakMsQ0FBQztBQU9EOzs7Ozs7Ozs7R0FTRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUEwQy9CO1FBekNpQixXQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDakMseUJBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFFcEUsOENBQThDO1FBQzdCLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFxQixTQUFTLENBQUMsQ0FBQTtRQUNyRSxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQXFCLFNBQVMsQ0FBQyxDQUFBO1FBQzlELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENB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QUssQ0FBQyxDQUFBO2FBQzdCO1NBQ0Y7SUFDSCxDQUFDOztpSEF0SFUsb0JBQW9CO3FIQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgbWFwIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IFRva2VuRGF0YSwgVG9rZW5UeXBlLCBUb2tlblBhcmFtS2V5LCBUb2tlblBhcmFtTG9jYXRpb24sIGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BjYXBpdGFsb3MvY29yZSdcbmltcG9ydCB7IFRva2VuRXhjaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi90b2tlbi1leGNoYW5nZS5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ0FQSVRBTE9TX0NPTkZJRyB9IGZyb20gJy4vcHJvdmlkZS1jYXBpdGFsb3MnXG5cbi8qKlxuICogQ29udmVydHMgYW4gdW5rbm93biBlcnJvciB0byBhbiBFcnJvciBvYmplY3RcbiAqL1xuZnVuY3Rpb24gdG9FcnJvcihlcnJvcjogdW5rbm93bik6IEVycm9yIHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3JcbiAgfVxuICByZXR1cm4gbmV3IEVycm9yKFN0cmluZyhlcnJvcikpXG59XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24gc3RhdGUgZW51bVxuICovXG5leHBvcnQgdHlwZSBBdXRoU3RhdGUgPSAnaWRsZScgfCAnbG9hZGluZycgfCAnYXV0aGVudGljYXRlZCcgfCAnZXJyb3InXG5cbi8qKlxuICogU2VydmljZSB0aGF0IG1hbmFnZXMgQ2FwaXRhbE9TIGF1dGhlbnRpY2F0aW9uIHN0YXRlLlxuICogVGhpcyBpcyB0aGUgQW5ndWxhciBlcXVpdmFsZW50IG9mIFJlYWN0J3MgQ2FwaXRhbE9zQXV0aGVudGljYXRpb25Qcm92aWRlci5cbiAqXG4gKiBJdCBoYW5kbGVzOlxuICogLSBGZXRjaGluZyBvbmUtdGltZSB0b2tlbnMgdmlhIHRoZSBwcm92aWRlZCBnZXRUb2tlbiBjYWxsYmFja1xuICogLSBFeGNoYW5naW5nIG9uZS10aW1lIHRva2VucyBmb3IgbG9uZy1saXZlZCBKV1RzXG4gKiAtIE1hbmFnaW5nIHRva2VuIHN0YXRlIHZpYSBvYnNlcnZhYmxlc1xuICogLSBBdXRvLXJlZnJlc2hpbmcgdG9rZW5zIHdoZW4gdGhleSBleHBpcmVcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhcGl0YWxPc0F1dGhTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3QoQ0FQSVRBTE9TX0NPTkZJRylcbiAgcHJpdmF0ZSByZWFkb25seSB0b2tlbkV4Y2hhbmdlU2VydmljZSA9IGluamVjdChUb2tlbkV4Y2hhbmdlU2VydmljZSlcblxuICAvLyBQcml2YXRlIEJlaGF2aW9yU3ViamVjdHMgZm9yIGludGVybmFsIHN0YXRlXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvbmdMaXZlZFRva2VuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Jhc2VVcmwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Vycm9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXJyb3IgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICAvLyBQdWJsaWMgb2JzZXJ2YWJsZSBmb3IgdG9rZW4gZGF0YVxuICByZWFkb25seSB0b2tlbkRhdGEkOiBPYnNlcnZhYmxlPFRva2VuRGF0YSB8IHVuZGVmaW5lZD4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9sb25nTGl2ZWRUb2tlbiQsIHRoaXMuX2Jhc2VVcmwkXSkucGlwZShcbiAgICBtYXAoKFt0b2tlbiwgYmFzZVVybF0pID0+IHtcbiAgICAgIGlmICghdG9rZW4gfHwgIWJhc2VVcmwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbixcbiAgICAgICAgdG9rZW5UeXBlOiBUb2tlblR5cGUubG9uZ0xpdmVkLFxuICAgICAgICBiYXNlVXJsLFxuICAgICAgICBwYXJhbUtleTogVG9rZW5QYXJhbUtleS5hY2Nlc3NUb2tlbixcbiAgICAgICAgcGFyYW1Mb2NhdGlvbjogVG9rZW5QYXJhbUxvY2F0aW9uLmhhc2gsXG4gICAgICB9XG4gICAgfSlcbiAgKVxuXG4gIC8vIFB1YmxpYyBvYnNlcnZhYmxlcyBmb3IgVUkgc3RhdGVcbiAgcmVhZG9ubHkgaXNMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2lzTG9hZGluZyQuYXNPYnNlcnZhYmxlKClcbiAgcmVhZG9ubHkgZXJyb3IkOiBPYnNlcnZhYmxlPEVycm9yIHwgdW5kZWZpbmVkPiA9IHRoaXMuX2Vycm9yJC5hc09ic2VydmFibGUoKVxuICByZWFkb25seSBhdXRoU3RhdGUkOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZT4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9pc0xvYWRpbmckLCB0aGlzLl9lcnJvciQsIHRoaXMudG9rZW5EYXRhJF0pLnBpcGUoXG4gICAgbWFwKChbaXNMb2FkaW5nLCBlcnJvciwgdG9rZW5EYXRhXSkgPT4ge1xuICAgICAgaWYgKGlzTG9hZGluZykgcmV0dXJuICdsb2FkaW5nJ1xuICAgICAgaWYgKGVycm9yKSByZXR1cm4gJ2Vycm9yJ1xuICAgICAgaWYgKHRva2VuRGF0YSkgcmV0dXJuICdhdXRoZW50aWNhdGVkJ1xuICAgICAgcmV0dXJuICdpZGxlJ1xuICAgIH0pXG4gIClcblxuICBwcml2YXRlIGlzRGVzdHJveWVkID0gZmFsc2VcbiAgcHJpdmF0ZSBsb2dnZXI6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUxvZ2dlcj5cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmxvZ2dlciA9IGNyZWF0ZUxvZ2dlcih0aGlzLmNvbmZpZy5lbmFibGVMb2dnaW5nLCB0aGlzLmNvbmZpZy5sb2dnZXIpXG5cbiAgICAvLyBTdGFydCBhdXRoZW50aWNhdGlvbiBmbG93IGVhZ2VybHkgb24gY29uc3RydWN0aW9uLlxuICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWw6IGF1dGggYmVnaW5zIGFzIHNvb24gYXMgdGhlIGFwcCBib290cyBzbyB0aGUgdG9rZW5cbiAgICAvLyBpcyByZWFkeSB3aGVuIENhcmRzQXBwQ29tcG9uZW50IHJlbmRlcnMsIHJlZHVjaW5nIHBlcmNlaXZlZCBsb2FkIHRpbWUuXG4gICAgdGhpcy5yZWZyZXNoVG9rZW4oKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZhbGlkYXRlcyB0aGUgY3VycmVudCB0b2tlbiwgdHJpZ2dlcmluZyBhIHJlZnJlc2guXG4gICAqIENhbGxlZCB3aGVuIHRoZSBpZnJhbWUgc2lnbmFscyB0aGF0IHRoZSB0b2tlbiBoYXMgZXhwaXJlZC5cbiAgICovXG4gIGludmFsaWRhdGVUb2tlbigpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5sb2coJ0NhcGl0YWxPc0F1dGhTZXJ2aWNlOiBJbnZhbGlkYXRpbmcgdG9rZW4nKVxuICAgIHRoaXMuX2xvbmdMaXZlZFRva2VuJC5uZXh0KHVuZGVmaW5lZClcbiAgICB0aGlzLl9iYXNlVXJsJC5uZXh0KHVuZGVmaW5lZClcbiAgICB0aGlzLl9lcnJvciQubmV4dCh1bmRlZmluZWQpXG4gICAgdGhpcy5yZWZyZXNoVG9rZW4oKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgdG9rZW4gYnkgZmV0Y2hpbmcgYSBuZXcgb25lLXRpbWUgdG9rZW4gYW5kIGV4Y2hhbmdpbmcgaXQuXG4gICAqL1xuICBhc3luYyByZWZyZXNoVG9rZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFByZXZlbnQgY29uY3VycmVudCByZWZyZXNoIGNhbGxzIC0gaWYgYWxyZWFkeSBsb2FkaW5nLCBza2lwXG4gICAgaWYgKHRoaXMuX2lzTG9hZGluZyQudmFsdWUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmxvZygnQ2FwaXRhbE9zQXV0aFNlcnZpY2U6IFRva2VuIHJlZnJlc2ggYWxyZWFkeSBpbiBwcm9ncmVzcywgc2tpcHBpbmcnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIubG9nKCdDYXBpdGFsT3NBdXRoU2VydmljZTogU3RhcnRpbmcgdG9rZW4gcmVmcmVzaCcpXG4gICAgdGhpcy5faXNMb2FkaW5nJC5uZXh0KHRydWUpXG4gICAgdGhpcy5fZXJyb3IkLm5leHQodW5kZWZpbmVkKVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBvbmUtdGltZSB0b2tlbiBmcm9tIHBsYXRmb3JtXG4gICAgICBjb25zdCBvbmVUaW1lVG9rZW4gPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRUb2tlbigpXG4gICAgICB0aGlzLmxvZ2dlci5sb2coJ0NhcGl0YWxPc0F1dGhTZXJ2aWNlOiBSZWNlaXZlZCBvbmUtdGltZSB0b2tlbicpXG5cbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBFeGNoYW5nZSBmb3IgbG9uZy1saXZlZCB0b2tlblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50b2tlbkV4Y2hhbmdlU2VydmljZS5leGNoYW5nZShvbmVUaW1lVG9rZW4sIHtcbiAgICAgICAgZW5hYmxlTG9nZ2luZzogdGhpcy5jb25maWcuZW5hYmxlTG9nZ2luZyxcbiAgICAgIH0pXG5cbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb25nTGl2ZWRUb2tlbiQubmV4dChyZXN1bHQubG9uZ0xpdmVkVG9rZW4pXG4gICAgICB0aGlzLl9iYXNlVXJsJC5uZXh0KHJlc3VsdC5iYXNlVXJsKVxuICAgICAgdGhpcy5fZXJyb3IkLm5leHQodW5kZWZpbmVkKVxuICAgICAgdGhpcy5sb2dnZXIubG9nKCdDYXBpdGFsT3NBdXRoU2VydmljZTogVG9rZW4gZXhjaGFuZ2UgY29tcGxldGUnKVxuICAgIH0gY2F0Y2ggKHJhd0Vycm9yKSB7XG4gICAgICBpZiAoIXRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0b0Vycm9yKHJhd0Vycm9yKVxuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQ2FwaXRhbE9zQXV0aFNlcnZpY2U6IFRva2VuIHJlZnJlc2ggZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICAgICAgdGhpcy5fZXJyb3IkLm5leHQoZXJyb3IpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLl9pc0xvYWRpbmckLm5leHQoZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwaXRhbG9zLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9saWIvY2FwaXRhbG9zLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEMsT0FBTyxFQUFhLFNBQVMsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDdkcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUE7O0FBRXREOztHQUVHO0FBQ0gsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUU7UUFDMUIsT0FBTyxLQUFLLENBQUE7S0FDYjtJQUNELE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDakMsQ0FBQztBQU9EOzs7Ozs7Ozs7R0FTRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFnRC9CO1FBL0NpQixXQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDakMseUJBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFFcEUsOENBQThDO1FBQzdCLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFxQixTQUFTLENBQUMsQ0FBQTtRQUNyRSxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQXFCLFNBQVMsQ0FBQyxDQUFBO1FBQzlELGdCQUFX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QUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7YUFDN0I7U0FDRjtJQUNILENBQUM7O2lIQTVIVSxvQkFBb0I7cUhBQXBCLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgVG9rZW5EYXRhLCBUb2tlblR5cGUsIFRva2VuUGFyYW1LZXksIFRva2VuUGFyYW1Mb2NhdGlvbiwgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQGNhcGl0YWxvcy9jb3JlJ1xuaW1wb3J0IHsgVG9rZW5FeGNoYW5nZVNlcnZpY2UgfSBmcm9tICcuL3Rva2VuLWV4Y2hhbmdlLnNlcnZpY2UnXG5pbXBvcnQgeyBDQVBJVEFMT1NfQ09ORklHIH0gZnJvbSAnLi9wcm92aWRlLWNhcGl0YWxvcydcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiB1bmtub3duIGVycm9yIHRvIGFuIEVycm9yIG9iamVjdFxuICovXG5mdW5jdGlvbiB0b0Vycm9yKGVycm9yOiB1bmtub3duKTogRXJyb3Ige1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHJldHVybiBlcnJvclxuICB9XG4gIHJldHVybiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSlcbn1cblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBzdGF0ZSBlbnVtXG4gKi9cbmV4cG9ydCB0eXBlIEF1dGhTdGF0ZSA9ICdpZGxlJyB8ICdsb2FkaW5nJyB8ICdhdXRoZW50aWNhdGVkJyB8ICdlcnJvcidcblxuLyoqXG4gKiBTZXJ2aWNlIHRoYXQgbWFuYWdlcyBDYXBpdGFsT1MgYXV0aGVudGljYXRpb24gc3RhdGUuXG4gKiBUaGlzIGlzIHRoZSBBbmd1bGFyIGVxdWl2YWxlbnQgb2YgUmVhY3QncyBDYXBpdGFsT3NBdXRoZW50aWNhdGlvblByb3ZpZGVyLlxuICpcbiAqIEl0IGhhbmRsZXM6XG4gKiAtIEZldGNoaW5nIG9uZS10aW1lIHRva2VucyB2aWEgdGhlIHByb3ZpZGVkIGdldFRva2VuIGNhbGxiYWNrXG4gKiAtIEV4Y2hhbmdpbmcgb25lLXRpbWUgdG9rZW5zIGZvciBsb25nLWxpdmVkIEpXVHNcbiAqIC0gTWFuYWdpbmcgdG9rZW4gc3RhdGUgdmlhIG9ic2VydmFibGVzXG4gKiAtIEF1dG8tcmVmcmVzaGluZyB0b2tlbnMgd2hlbiB0aGV5IGV4cGlyZVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2FwaXRhbE9zQXV0aFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChDQVBJVEFMT1NfQ09ORklHKVxuICBwcml2YXRlIHJlYWRvbmx5IHRva2VuRXhjaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KFRva2VuRXhjaGFuZ2VTZXJ2aWNlKVxuXG4gIC8vIFByaXZhdGUgQmVoYXZpb3JTdWJqZWN0cyBmb3IgaW50ZXJuYWwgc3RhdGVcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9uZ0xpdmVkVG9rZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgcHJpdmF0ZSByZWFkb25seSBfYmFzZVVybCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBwcml2YXRlIHJlYWRvbmx5IF9pc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSlcbiAgcHJpdmF0ZSByZWFkb25seSBfZXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFcnJvciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG4gIC8vIFB1YmxpYyBvYnNlcnZhYmxlIGZvciB0b2tlbiBkYXRhXG4gIHJlYWRvbmx5IHRva2VuRGF0YSQ6IE9ic2VydmFibGU8VG9rZW5EYXRhIHwgdW5kZWZpbmVkPiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2xvbmdMaXZlZFRva2VuJCwgdGhpcy5fYmFzZVVybCRdKS5waXBlKFxuICAgIG1hcCgoW3Rva2VuLCBiYXNlVXJsXSkgPT4ge1xuICAgICAgaWYgKCF0b2tlbiB8fCAhYmFzZVVybCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuLFxuICAgICAgICB0b2tlblR5cGU6IFRva2VuVHlwZS5sb25nTGl2ZWQsXG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIHBhcmFtS2V5OiBUb2tlblBhcmFtS2V5LmFjY2Vzc1Rva2VuLFxuICAgICAgICBwYXJhbUxvY2F0aW9uOiBUb2tlblBhcmFtTG9jYXRpb24uaGFzaCxcbiAgICAgIH1cbiAgICB9KVxuICApXG5cbiAgLy8gUHVibGljIG9ic2VydmFibGVzIGZvciBVSSBzdGF0ZVxuICByZWFkb25seSBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5faXNMb2FkaW5nJC5hc09ic2VydmFibGUoKVxuICByZWFkb25seSBlcnJvciQ6IE9ic2VydmFibGU8RXJyb3IgfCB1bmRlZmluZWQ+ID0gdGhpcy5fZXJyb3IkLmFzT2JzZXJ2YWJsZSgpXG4gIHJlYWRvbmx5IGF1dGhTdGF0ZSQ6IE9ic2VydmFibGU8QXV0aFN0YXRlPiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2lzTG9hZGluZyQsIHRoaXMuX2Vycm9yJCwgdGhpcy50b2tlbkRhdGEkXSkucGlwZShcbiAgICBtYXAoKFtpc0xvYWRpbmcsIGVycm9yLCB0b2tlbkRhdGFdKSA9PiB7XG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiAnbG9hZGluZydcbiAgICAgIH1cbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZXR1cm4gJ2Vycm9yJ1xuICAgICAgfVxuICAgICAgaWYgKHRva2VuRGF0YSkge1xuICAgICAgICByZXR1cm4gJ2F1dGhlbnRpY2F0ZWQnXG4gICAgICB9XG4gICAgICByZXR1cm4gJ2lkbGUnXG4gICAgfSlcbiAgKVxuXG4gIHByaXZhdGUgaXNEZXN0cm95ZWQgPSBmYWxzZVxuICBwcml2YXRlIGxvZ2dlcjogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlTG9nZ2VyPlxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubG9nZ2VyID0gY3JlYXRlTG9nZ2VyKHRoaXMuY29uZmlnLmVuYWJsZUxvZ2dpbmcsIHRoaXMuY29uZmlnLmxvZ2dlcilcblxuICAgIC8vIFN0YXJ0IGF1dGhlbnRpY2F0aW9uIGZsb3cgZWFnZXJseSBvbiBjb25zdHJ1Y3Rpb24uXG4gICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbDogYXV0aCBiZWdpbnMgYXMgc29vbiBhcyB0aGUgYXBwIGJvb3RzIHNvIHRoZSB0b2tlblxuICAgIC8vIGlzIHJlYWR5IHdoZW4gQ2FyZHNBcHBDb21wb25lbnQgcmVuZGVycywgcmVkdWNpbmcgcGVyY2VpdmVkIGxvYWQgdGltZS5cbiAgICB0aGlzLnJlZnJlc2hUb2tlbigpXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEludmFsaWRhdGVzIHRoZSBjdXJyZW50IHRva2VuLCB0cmlnZ2VyaW5nIGEgcmVmcmVzaC5cbiAgICogQ2FsbGVkIHdoZW4gdGhlIGlmcmFtZSBzaWduYWxzIHRoYXQgdGhlIHRva2VuIGhhcyBleHBpcmVkLlxuICAgKi9cbiAgaW52YWxpZGF0ZVRva2VuKCk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmxvZygnQ2FwaXRhbE9zQXV0aFNlcnZpY2U6IEludmFsaWRhdGluZyB0b2tlbicpXG4gICAgdGhpcy5fbG9uZ0xpdmVkVG9rZW4kLm5leHQodW5kZWZpbmVkKVxuICAgIHRoaXMuX2Jhc2VVcmwkLm5leHQodW5kZWZpbmVkKVxuICAgIHRoaXMuX2Vycm9yJC5uZXh0KHVuZGVmaW5lZClcbiAgICB0aGlzLnJlZnJlc2hUb2tlbigpXG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSB0b2tlbiBieSBmZXRjaGluZyBhIG5ldyBvbmUtdGltZSB0b2tlbiBhbmQgZXhjaGFuZ2luZyBpdC5cbiAgICovXG4gIGFzeW5jIHJlZnJlc2hUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gUHJldmVudCBjb25jdXJyZW50IHJlZnJlc2ggY2FsbHMgLSBpZiBhbHJlYWR5IGxvYWRpbmcsIHNraXBcbiAgICBpZiAodGhpcy5faXNMb2FkaW5nJC52YWx1ZSkge1xuICAgICAgdGhpcy5sb2dnZXIubG9nKCdDYXBpdGFsT3NBdXRoU2VydmljZTogVG9rZW4gcmVmcmVzaCBhbHJlYWR5IGluIHByb2dyZXNzLCBza2lwcGluZycpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlci5sb2coJ0NhcGl0YWxPc0F1dGhTZXJ2aWNlOiBTdGFydGluZyB0b2tlbiByZWZyZXNoJylcbiAgICB0aGlzLl9pc0xvYWRpbmckLm5leHQodHJ1ZSlcbiAgICB0aGlzLl9lcnJvciQubmV4dCh1bmRlZmluZWQpXG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IG9uZS10aW1lIHRva2VuIGZyb20gcGxhdGZvcm1cbiAgICAgIGNvbnN0IG9uZVRpbWVUb2tlbiA9IGF3YWl0IHRoaXMuY29uZmlnLmdldFRva2VuKClcbiAgICAgIHRoaXMubG9nZ2VyLmxvZygnQ2FwaXRhbE9zQXV0aFNlcnZpY2U6IFJlY2VpdmVkIG9uZS10aW1lIHRva2VuJylcblxuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEV4Y2hhbmdlIGZvciBsb25nLWxpdmVkIHRva2VuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnRva2VuRXhjaGFuZ2VTZXJ2aWNlLmV4Y2hhbmdlKG9uZVRpbWVUb2tlbiwge1xuICAgICAgICBlbmFibGVMb2dnaW5nOiB0aGlzLmNvbmZpZy5lbmFibGVMb2dnaW5nLFxuICAgICAgfSlcblxuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvbmdMaXZlZFRva2VuJC5uZXh0KHJlc3VsdC5sb25nTGl2ZWRUb2tlbilcbiAgICAgIHRoaXMuX2Jhc2VVcmwkLm5leHQocmVzdWx0LmJhc2VVcmwpXG4gICAgICB0aGlzLl9lcnJvciQubmV4dCh1bmRlZmluZWQpXG4gICAgICB0aGlzLmxvZ2dlci5sb2coJ0NhcGl0YWxPc0F1dGhTZXJ2aWNlOiBUb2tlbiBleGNoYW5nZSBjb21wbGV0ZScpXG4gICAgfSBjYXRjaCAocmF3RXJyb3IpIHtcbiAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHRvRXJyb3IocmF3RXJyb3IpXG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBDYXBpdGFsT3NBdXRoU2VydmljZTogVG9rZW4gcmVmcmVzaCBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgICAgICB0aGlzLl9lcnJvciQubmV4dChlcnJvcilcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgIHRoaXMuX2lzTG9hZGluZyQubmV4dChmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -31,6 +31,7 @@ export class OnboardingComponent extends BaseIframeComponent {
31
31
  onboardingEntryPoint: this.entryPoint,
32
32
  onboardingExitPoint: this.exitPoint,
33
33
  allowExitOnNonApproved: this.allowExitOnNonApproved,
34
+ product: this.product,
34
35
  copy: this.doneButtonText
35
36
  ? {
36
37
  'onboarding.doneButton': this.doneButtonText,
@@ -51,7 +52,7 @@ export class OnboardingComponent extends BaseIframeComponent {
51
52
  }
52
53
  }
53
54
  OnboardingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OnboardingComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
54
- OnboardingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OnboardingComponent, isStandalone: true, selector: "capitalos-onboarding", inputs: { entryPoint: "entryPoint", exitPoint: "exitPoint", allowExitOnNonApproved: "allowExitOnNonApproved", doneButtonText: "doneButtonText" }, outputs: { done: "done" }, usesInheritance: true, ngImport: i0, template: "<div #iframeContainer class=\"capitalos-iframe-container\"></div>", isInline: true, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] });
55
+ OnboardingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OnboardingComponent, isStandalone: true, selector: "capitalos-onboarding", inputs: { entryPoint: "entryPoint", exitPoint: "exitPoint", allowExitOnNonApproved: "allowExitOnNonApproved", product: "product", doneButtonText: "doneButtonText" }, outputs: { done: "done" }, usesInheritance: true, ngImport: i0, template: "<div #iframeContainer class=\"capitalos-iframe-container\"></div>", isInline: true, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] });
55
56
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OnboardingComponent, decorators: [{
56
57
  type: Component,
57
58
  args: [{ selector: 'capitalos-onboarding', standalone: true, template: IFRAME_COMPONENT_TEMPLATE, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] }]
@@ -61,9 +62,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
61
62
  type: Input
62
63
  }], allowExitOnNonApproved: [{
63
64
  type: Input
65
+ }], product: [{
66
+ type: Input
64
67
  }], doneButtonText: [{
65
68
  type: Input
66
69
  }], done: [{
67
70
  type: Output
68
71
  }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ib2FyZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jYXBpdGFsb3MtYW5ndWxhci9zcmMvbGliL29uYm9hcmRpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFdEUsT0FBTyxFQUNMLG1CQUFtQixFQUVuQix5QkFBeUIsRUFDekIsdUJBQXVCLEdBQ3hCLE1BQU0seUJBQXlCLENBQUE7O0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQU9ILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxtQkFBbUI7SUFONUQ7O1FBY0UsOEJBQThCO1FBQ3BCLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFBO0tBMkI3QztJQXpCVyxtQkFBbUI7UUFDM0IsT0FBTztZQUNMLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3JDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ25DLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7WUFDbkQsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUN2QixDQUFDLENBQUU7b0JBQ0MsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGNBQWM7b0JBQzVDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxjQUFjO29CQUNoRCwwQkFBMEIsRUFBRSxJQUFJLENBQUMsY0FBYztpQkFDOUI7Z0JBQ3JCLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQTtJQUNILENBQUM7SUFFa0IscUJBQXFCO1FBQ3RDLE9BQU87WUFDTCxVQUFVLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLENBQUMsT0FBZ0IsRUFBRSxFQUFFO29CQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDekIsQ0FBQzthQUNGO1NBQ0YsQ0FBQTtJQUNILENBQUM7O2dIQW5DVSxtQkFBbUI7b0dBQW5CLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFlBQ04seUJBQXlCOzhCQUsxQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0ksSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgUmVuZGVyaW5nQ29udGV4dCwgQWNjb3VudCwgT25ib2FyZGluZ0VudHJ5UG9pbnQsIE9uYm9hcmRpbmdFeGl0UG9pbnQsIENvcHlPdmVycmlkZXMgfSBmcm9tICdAY2FwaXRhbG9zL2NvcmUnXG5pbXBvcnQge1xuICBCYXNlSWZyYW1lQ29tcG9uZW50LFxuICBDb21wb25lbnRDYWxsYmFja3MsXG4gIElGUkFNRV9DT01QT05FTlRfVEVNUExBVEUsXG4gIElGUkFNRV9DT01QT05FTlRfU1RZTEVTLFxufSBmcm9tICcuL2Jhc2UtaWZyYW1lLmNvbXBvbmVudCdcblxuLyoqXG4gKiBPbmJvYXJkaW5nIGNvbXBvbmVudCB0aGF0IHJlbmRlcnMgdGhlIENhcGl0YWxPUyBvbmJvYXJkaW5nIGZsb3cgaW4gYW4gaWZyYW1lLlxuICpcbiAqIFRoZSBjb21wb25lbnQgZW1pdHMgZXZlbnRzIGZvciBsb2FkaW5nIHN0YXRlIGFuZCBjb21wbGV0aW9uIC0gY29uc3VtZXJzIHNob3VsZCBoYW5kbGUgdGhlaXIgb3duIGxvYWRpbmcgVUk6XG4gKlxuICogYGBgaHRtbFxuICogPGRpdiAqbmdJZj1cIiFvbmJvYXJkaW5nTG9hZGVkXCI+XG4gKiAgIDxteS1sb2FkaW5nLXNwaW5uZXI+PC9teS1sb2FkaW5nLXNwaW5uZXI+XG4gKiA8L2Rpdj5cbiAqIDxjYXBpdGFsb3Mtb25ib2FyZGluZ1xuICogICBbZW50cnlQb2ludF09XCInd2VsY29tZSdcIlxuICogICBbZXhpdFBvaW50XT1cIidhY3RpdmF0aW9uJ1wiXG4gKiAgIChsb2FkZWQpPVwib25ib2FyZGluZ0xvYWRlZCA9IHRydWVcIlxuICogICAoZXJyb3IpPVwib25PbmJvYXJkaW5nRXJyb3IoJGV2ZW50KVwiXG4gKiAgIChkb25lKT1cIm9uT25ib2FyZGluZ0NvbXBsZXRlKCRldmVudClcIlxuICogPjwvY2FwaXRhbG9zLW9uYm9hcmRpbmc+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2FwaXRhbG9zLW9uYm9hcmRpbmcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogSUZSQU1FX0NPTVBPTkVOVF9URU1QTEFURSxcbiAgc3R5bGVzOiBJRlJBTUVfQ09NUE9ORU5UX1NUWUxFUyxcbn0pXG5leHBvcnQgY2xhc3MgT25ib2FyZGluZ0NvbXBvbmVudCBleHRlbmRzIEJhc2VJZnJhbWVDb21wb25lbnQge1xuICAvLyBPbmJvYXJkaW5nLXNwZWNpZmljIGlucHV0c1xuICBASW5wdXQoKSBlbnRyeVBvaW50PzogT25ib2FyZGluZ0VudHJ5UG9pbnRcbiAgQElucHV0KCkgZXhpdFBvaW50PzogT25ib2FyZGluZ0V4aXRQb2ludFxuICBASW5wdXQoKSBhbGxvd0V4aXRPbk5vbkFwcHJvdmVkPzogYm9vbGVhblxuICAvKiogQ3VzdG9tIHRleHQgZm9yIHRoZSBmaW5hbCBcImRvbmVcIiBidXR0b24gc2hvd24gYXQgdGhlIGVuZCBvZiB0aGUgb25ib2FyZGluZyBmbG93LiAqL1xuICBASW5wdXQoKSBkb25lQnV0dG9uVGV4dD86IHN0cmluZ1xuXG4gIC8vIE9uYm9hcmRpbmctc3BlY2lmaWMgb3V0cHV0c1xuICBAT3V0cHV0KCkgZG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWNjb3VudD4oKVxuXG4gIHByb3RlY3RlZCBnZXRSZW5kZXJpbmdDb250ZXh0KCk6IFJlbmRlcmluZ0NvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyeVBvaW50OiAnb25ib2FyZGluZycsXG4gICAgICBvbmJvYXJkaW5nRW50cnlQb2ludDogdGhpcy5lbnRyeVBvaW50LFxuICAgICAgb25ib2FyZGluZ0V4aXRQb2ludDogdGhpcy5leGl0UG9pbnQsXG4gICAgICBhbGxvd0V4aXRPbk5vbkFwcHJvdmVkOiB0aGlzLmFsbG93RXhpdE9uTm9uQXBwcm92ZWQsXG4gICAgICBjb3B5OiB0aGlzLmRvbmVCdXR0b25UZXh0XG4gICAgICAgID8gKHtcbiAgICAgICAgICAgICdvbmJvYXJkaW5nLmRvbmVCdXR0b24nOiB0aGlzLmRvbmVCdXR0b25UZXh0LFxuICAgICAgICAgICAgJ29uYm9hcmRpbmcuY29udGludWVCdXR0b24nOiB0aGlzLmRvbmVCdXR0b25UZXh0LFxuICAgICAgICAgICAgJ2FjdGl2YXRpb24uc3VjY2Vzc0J1dHRvbic6IHRoaXMuZG9uZUJ1dHRvblRleHQsXG4gICAgICAgICAgfSBhcyBDb3B5T3ZlcnJpZGVzKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0Q29tcG9uZW50Q2FsbGJhY2tzKCk6IENvbXBvbmVudENhbGxiYWNrcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9uYm9hcmRpbmc6IHtcbiAgICAgICAgb25Eb25lOiAoYWNjb3VudDogQWNjb3VudCkgPT4ge1xuICAgICAgICAgIHRoaXMuZG9uZS5lbWl0KGFjY291bnQpXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgfVxufVxuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ib2FyZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jYXBpdGFsb3MtYW5ndWxhci9zcmMvbGliL29uYm9hcmRpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFdEUsT0FBTyxFQUNMLG1CQUFtQixFQUVuQix5QkFBeUIsRUFDekIsdUJBQXVCLEdBQ3hCLE1BQU0seUJBQXlCLENBQUE7O0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQU9ILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxtQkFBbUI7SUFONUQ7O1FBZ0JFLDhCQUE4QjtRQUNwQixTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQTtLQTRCN0M7SUExQlcsbUJBQW1CO1FBQzNCLE9BQU87WUFDTCxVQUFVLEVBQUUsWUFBWTtZQUN4QixvQkFBb0IsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUNyQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsU0FBUztZQUNuQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCO1lBQ25ELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ3ZCLENBQUMsQ0FBRTtvQkFDQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsY0FBYztvQkFDNUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLGNBQWM7b0JBQ2hELDBCQUEwQixFQUFFLElBQUksQ0FBQyxjQUFjO2lCQUM5QjtnQkFDckIsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFBO0lBQ0gsQ0FBQztJQUVrQixxQkFBcUI7UUFDdEMsT0FBTztZQUNMLFVBQVUsRUFBRTtnQkFDVixNQUFNLEVBQUUsQ0FBQyxPQUFnQixFQUFFLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUN6QixDQUFDO2FBQ0Y7U0FDRixDQUFBO0lBQ0gsQ0FBQzs7Z0hBdENVLG1CQUFtQjtvR0FBbkIsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksWUFDTix5QkFBeUI7OEJBSzFCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0ksSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgUmVuZGVyaW5nQ29udGV4dCwgQWNjb3VudCwgT25ib2FyZGluZ0VudHJ5UG9pbnQsIE9uYm9hcmRpbmdFeGl0UG9pbnQsIENvcHlPdmVycmlkZXMgfSBmcm9tICdAY2FwaXRhbG9zL2NvcmUnXG5pbXBvcnQge1xuICBCYXNlSWZyYW1lQ29tcG9uZW50LFxuICBDb21wb25lbnRDYWxsYmFja3MsXG4gIElGUkFNRV9DT01QT05FTlRfVEVNUExBVEUsXG4gIElGUkFNRV9DT01QT05FTlRfU1RZTEVTLFxufSBmcm9tICcuL2Jhc2UtaWZyYW1lLmNvbXBvbmVudCdcblxuLyoqXG4gKiBPbmJvYXJkaW5nIGNvbXBvbmVudCB0aGF0IHJlbmRlcnMgdGhlIENhcGl0YWxPUyBvbmJvYXJkaW5nIGZsb3cgaW4gYW4gaWZyYW1lLlxuICpcbiAqIFRoZSBjb21wb25lbnQgZW1pdHMgZXZlbnRzIGZvciBsb2FkaW5nIHN0YXRlIGFuZCBjb21wbGV0aW9uIC0gY29uc3VtZXJzIHNob3VsZCBoYW5kbGUgdGhlaXIgb3duIGxvYWRpbmcgVUk6XG4gKlxuICogYGBgaHRtbFxuICogPGRpdiAqbmdJZj1cIiFvbmJvYXJkaW5nTG9hZGVkXCI+XG4gKiAgIDxteS1sb2FkaW5nLXNwaW5uZXI+PC9teS1sb2FkaW5nLXNwaW5uZXI+XG4gKiA8L2Rpdj5cbiAqIDxjYXBpdGFsb3Mtb25ib2FyZGluZ1xuICogICBbZW50cnlQb2ludF09XCInd2VsY29tZSdcIlxuICogICBbZXhpdFBvaW50XT1cIidhY3RpdmF0aW9uJ1wiXG4gKiAgIChsb2FkZWQpPVwib25ib2FyZGluZ0xvYWRlZCA9IHRydWVcIlxuICogICAoZXJyb3IpPVwib25PbmJvYXJkaW5nRXJyb3IoJGV2ZW50KVwiXG4gKiAgIChkb25lKT1cIm9uT25ib2FyZGluZ0NvbXBsZXRlKCRldmVudClcIlxuICogPjwvY2FwaXRhbG9zLW9uYm9hcmRpbmc+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2FwaXRhbG9zLW9uYm9hcmRpbmcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogSUZSQU1FX0NPTVBPTkVOVF9URU1QTEFURSxcbiAgc3R5bGVzOiBJRlJBTUVfQ09NUE9ORU5UX1NUWUxFUyxcbn0pXG5leHBvcnQgY2xhc3MgT25ib2FyZGluZ0NvbXBvbmVudCBleHRlbmRzIEJhc2VJZnJhbWVDb21wb25lbnQge1xuICAvLyBPbmJvYXJkaW5nLXNwZWNpZmljIGlucHV0c1xuICBASW5wdXQoKSBlbnRyeVBvaW50PzogT25ib2FyZGluZ0VudHJ5UG9pbnRcbiAgQElucHV0KCkgZXhpdFBvaW50PzogT25ib2FyZGluZ0V4aXRQb2ludFxuICBASW5wdXQoKSBhbGxvd0V4aXRPbk5vbkFwcHJvdmVkPzogYm9vbGVhblxuICAvKiogSWRlbnRpZmllcyB0aGUgb25ib2FyZGluZyBwcm9kdWN0IGNvbnRleHQuIERlZmF1bHRzIHRvIGAnY2FyZCdgIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqL1xuICBASW5wdXQoKSBwcm9kdWN0PzogJ2JpbGxQYXknIHwgJ2NhcmQnXG4gIC8qKiBDdXN0b20gdGV4dCBmb3IgdGhlIGZpbmFsIFwiZG9uZVwiIGJ1dHRvbiBzaG93biBhdCB0aGUgZW5kIG9mIHRoZSBvbmJvYXJkaW5nIGZsb3cuICovXG4gIEBJbnB1dCgpIGRvbmVCdXR0b25UZXh0Pzogc3RyaW5nXG5cbiAgLy8gT25ib2FyZGluZy1zcGVjaWZpYyBvdXRwdXRzXG4gIEBPdXRwdXQoKSBkb25lID0gbmV3IEV2ZW50RW1pdHRlcjxBY2NvdW50PigpXG5cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmluZ0NvbnRleHQoKTogUmVuZGVyaW5nQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJ5UG9pbnQ6ICdvbmJvYXJkaW5nJyxcbiAgICAgIG9uYm9hcmRpbmdFbnRyeVBvaW50OiB0aGlzLmVudHJ5UG9pbnQsXG4gICAgICBvbmJvYXJkaW5nRXhpdFBvaW50OiB0aGlzLmV4aXRQb2ludCxcbiAgICAgIGFsbG93RXhpdE9uTm9uQXBwcm92ZWQ6IHRoaXMuYWxsb3dFeGl0T25Ob25BcHByb3ZlZCxcbiAgICAgIHByb2R1Y3Q6IHRoaXMucHJvZHVjdCxcbiAgICAgIGNvcHk6IHRoaXMuZG9uZUJ1dHRvblRleHRcbiAgICAgICAgPyAoe1xuICAgICAgICAgICAgJ29uYm9hcmRpbmcuZG9uZUJ1dHRvbic6IHRoaXMuZG9uZUJ1dHRvblRleHQsXG4gICAgICAgICAgICAnb25ib2FyZGluZy5jb250aW51ZUJ1dHRvbic6IHRoaXMuZG9uZUJ1dHRvblRleHQsXG4gICAgICAgICAgICAnYWN0aXZhdGlvbi5zdWNjZXNzQnV0dG9uJzogdGhpcy5kb25lQnV0dG9uVGV4dCxcbiAgICAgICAgICB9IGFzIENvcHlPdmVycmlkZXMpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXRDb21wb25lbnRDYWxsYmFja3MoKTogQ29tcG9uZW50Q2FsbGJhY2tzIHtcbiAgICByZXR1cm4ge1xuICAgICAgb25ib2FyZGluZzoge1xuICAgICAgICBvbkRvbmU6IChhY2NvdW50OiBBY2NvdW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5kb25lLmVtaXQoYWNjb3VudClcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  // AUTO-GENERATED FILE - DO NOT EDIT
2
2
  // Generated by: scripts/generate-version.js
3
3
  // Source: projects/capitalos-angular/package.json
4
- export const SDK_VERSION = '0.2.1';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFDcEMsNENBQTRDO0FBQzVDLGtEQUFrRDtBQUVsRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQVVUTy1HRU5FUkFURUQgRklMRSAtIERPIE5PVCBFRElUXG4vLyBHZW5lcmF0ZWQgYnk6IHNjcmlwdHMvZ2VuZXJhdGUtdmVyc2lvbi5qc1xuLy8gU291cmNlOiBwcm9qZWN0cy9jYXBpdGFsb3MtYW5ndWxhci9wYWNrYWdlLmpzb25cblxuZXhwb3J0IGNvbnN0IFNES19WRVJTSU9OID0gJzAuMi4xJ1xuIl19
4
+ export const SDK_VERSION = '0.3.0';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFDcEMsNENBQTRDO0FBQzVDLGtEQUFrRDtBQUVsRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQVVUTy1HRU5FUkFURUQgRklMRSAtIERPIE5PVCBFRElUXG4vLyBHZW5lcmF0ZWQgYnk6IHNjcmlwdHMvZ2VuZXJhdGUtdmVyc2lvbi5qc1xuLy8gU291cmNlOiBwcm9qZWN0cy9jYXBpdGFsb3MtYW5ndWxhci9wYWNrYWdlLmpzb25cblxuZXhwb3J0IGNvbnN0IFNES19WRVJTSU9OID0gJzAuMy4wJ1xuIl19
@@ -3,7 +3,8 @@ import { InjectionToken, inject, Injectable, EventEmitter, Directive, Input, Out
3
3
  import { exchangeOneTimeToken, TokenType, TokenParamKey, TokenParamLocation, createLogger, IframeManager, CapitalOSError } from '@capitalos/core';
4
4
  export { CapitalOSError, ErrorCode } from '@capitalos/core';
5
5
  import { __awaiter } from 'tslib';
6
- import { BehaviorSubject, combineLatest, map } from 'rxjs';
6
+ import { BehaviorSubject, combineLatest } from 'rxjs';
7
+ import { map } from 'rxjs/operators';
7
8
 
8
9
  /**
9
10
  * Injection token for CapitalOS configuration
@@ -140,12 +141,15 @@ class CapitalOsAuthService {
140
141
  this.isLoading$ = this._isLoading$.asObservable();
141
142
  this.error$ = this._error$.asObservable();
142
143
  this.authState$ = combineLatest([this._isLoading$, this._error$, this.tokenData$]).pipe(map(([isLoading, error, tokenData]) => {
143
- if (isLoading)
144
+ if (isLoading) {
144
145
  return 'loading';
145
- if (error)
146
+ }
147
+ if (error) {
146
148
  return 'error';
147
- if (tokenData)
149
+ }
150
+ if (tokenData) {
148
151
  return 'authenticated';
152
+ }
149
153
  return 'idle';
150
154
  }));
151
155
  this.isDestroyed = false;
@@ -228,7 +232,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
228
232
  // AUTO-GENERATED FILE - DO NOT EDIT
229
233
  // Generated by: scripts/generate-version.js
230
234
  // Source: projects/capitalos-angular/package.json
231
- const SDK_VERSION = '0.2.1';
235
+ const SDK_VERSION = '0.3.0';
232
236
 
233
237
  /**
234
238
  * Common template for all iframe components.
@@ -444,6 +448,7 @@ class OnboardingComponent extends BaseIframeComponent {
444
448
  onboardingEntryPoint: this.entryPoint,
445
449
  onboardingExitPoint: this.exitPoint,
446
450
  allowExitOnNonApproved: this.allowExitOnNonApproved,
451
+ product: this.product,
447
452
  copy: this.doneButtonText
448
453
  ? {
449
454
  'onboarding.doneButton': this.doneButtonText,
@@ -464,7 +469,7 @@ class OnboardingComponent extends BaseIframeComponent {
464
469
  }
465
470
  }
466
471
  OnboardingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OnboardingComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
467
- OnboardingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OnboardingComponent, isStandalone: true, selector: "capitalos-onboarding", inputs: { entryPoint: "entryPoint", exitPoint: "exitPoint", allowExitOnNonApproved: "allowExitOnNonApproved", doneButtonText: "doneButtonText" }, outputs: { done: "done" }, usesInheritance: true, ngImport: i0, template: "<div #iframeContainer class=\"capitalos-iframe-container\"></div>", isInline: true, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] });
472
+ OnboardingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OnboardingComponent, isStandalone: true, selector: "capitalos-onboarding", inputs: { entryPoint: "entryPoint", exitPoint: "exitPoint", allowExitOnNonApproved: "allowExitOnNonApproved", product: "product", doneButtonText: "doneButtonText" }, outputs: { done: "done" }, usesInheritance: true, ngImport: i0, template: "<div #iframeContainer class=\"capitalos-iframe-container\"></div>", isInline: true, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] });
468
473
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OnboardingComponent, decorators: [{
469
474
  type: Component,
470
475
  args: [{ selector: 'capitalos-onboarding', standalone: true, template: IFRAME_COMPONENT_TEMPLATE, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] }]
@@ -474,6 +479,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
474
479
  type: Input
475
480
  }], allowExitOnNonApproved: [{
476
481
  type: Input
482
+ }], product: [{
483
+ type: Input
477
484
  }], doneButtonText: [{
478
485
  type: Input
479
486
  }], done: [{
@@ -1 +1 @@
1
- {"version":3,"file":"capitalos-angular.mjs","sources":["../../../projects/capitalos-angular/src/lib/provide-capitalos.ts","../../../projects/capitalos-angular/src/lib/token-exchange.service.ts","../../../projects/capitalos-angular/src/lib/capitalos-auth.service.ts","../../../projects/capitalos-angular/src/lib/version.ts","../../../projects/capitalos-angular/src/lib/base-iframe.component.ts","../../../projects/capitalos-angular/src/lib/cards-app.component.ts","../../../projects/capitalos-angular/src/lib/billpay-app.component.ts","../../../projects/capitalos-angular/src/lib/onboarding.component.ts","../../../projects/capitalos-angular/src/lib/capitalos.module.ts","../../../projects/capitalos-angular/src/public-api.ts","../../../projects/capitalos-angular/src/capitalos-angular.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core'\nimport { Logger, ThemeColorScheme } from '@capitalos/core'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { TokenExchangeService } from './token-exchange.service'\n\n/**\n * Configuration for CapitalOS SDK\n */\nexport interface CapitalOsConfig {\n /**\n * Function that returns a promise resolving to a one-time token.\n * This is typically a call to your backend that initiates a CapitalOS login.\n */\n getToken: () => Promise<string>\n\n /**\n * Whether to enable logging for debugging purposes.\n */\n enableLogging?: boolean\n\n /**\n * Optional custom logger for capturing SDK logs.\n */\n logger?: Logger\n\n /**\n * Theme color scheme for the SDK components.\n */\n theme?: ThemeColorScheme\n}\n\n/**\n * Injection token for CapitalOS configuration\n */\nexport const CAPITALOS_CONFIG = new InjectionToken<CapitalOsConfig>('CAPITALOS_CONFIG')\n\n/**\n * Provides the CapitalOS SDK with the specified configuration.\n *\n * Usage in app.config.ts (standalone):\n * ```typescript\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideCapitalOs({\n * getToken: async () => {\n * const response = await fetch('/api/capitalos/token');\n * const data = await response.json();\n * return data.token;\n * },\n * enableLogging: true,\n * }),\n * ],\n * });\n * ```\n *\n * For NgModule-based apps, use CapitalOsModule.forRoot() instead.\n */\nexport function provideCapitalOs(config: CapitalOsConfig): Provider[] {\n return [\n {\n provide: CAPITALOS_CONFIG,\n useValue: config,\n },\n TokenExchangeService,\n CapitalOsAuthService,\n ]\n}\n","import { Injectable, inject, OnDestroy } from '@angular/core'\nimport { exchangeOneTimeToken } from '@capitalos/core'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\n\nconst TOKEN_EXCHANGE_TIMEOUT_MS = 10_000\n\nexport interface TokenExchangeResult {\n longLivedToken: string\n baseUrl: string\n}\n\n/**\n * Service responsible for exchanging one-time tokens for long-lived JWTs.\n * Creates a hidden iframe to perform the token exchange securely.\n */\n@Injectable()\nexport class TokenExchangeService implements OnDestroy {\n private readonly config = inject(CAPITALOS_CONFIG)\n private isDestroyed = false\n private activeAbortController: AbortController | null = null\n\n ngOnDestroy(): void {\n this.isDestroyed = true\n this.activeAbortController?.abort()\n this.activeAbortController = null\n }\n\n /**\n * Exchanges a one-time token for a long-lived JWT.\n * Delegates to @capitalos/core (browser-only) which handles iframe + Penpal lifecycle.\n */\n async exchange(oneTimeToken: string, options: { enableLogging?: boolean } = {}): Promise<TokenExchangeResult> {\n if (this.isDestroyed) {\n throw new Error('TokenExchangeService was destroyed')\n }\n\n // Abort any in-flight exchange when a new one begins.\n this.activeAbortController?.abort()\n\n const abortController = new AbortController()\n this.activeAbortController = abortController\n\n try {\n return await exchangeOneTimeToken({\n oneTimeToken,\n enableLogging: options.enableLogging,\n logger: this.config.logger,\n timeoutMs: TOKEN_EXCHANGE_TIMEOUT_MS,\n signal: abortController.signal,\n })\n } finally {\n if (this.activeAbortController === abortController) {\n this.activeAbortController = null\n }\n }\n }\n}\n","import { Injectable, inject, OnDestroy } from '@angular/core'\nimport { BehaviorSubject, Observable, combineLatest, map } from 'rxjs'\nimport { TokenData, TokenType, TokenParamKey, TokenParamLocation, createLogger } from '@capitalos/core'\nimport { TokenExchangeService } from './token-exchange.service'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\n\n/**\n * Converts an unknown error to an Error object\n */\nfunction toError(error: unknown): Error {\n if (error instanceof Error) {\n return error\n }\n return new Error(String(error))\n}\n\n/**\n * Authentication state enum\n */\nexport type AuthState = 'idle' | 'loading' | 'authenticated' | 'error'\n\n/**\n * Service that manages CapitalOS authentication state.\n * This is the Angular equivalent of React's CapitalOsAuthenticationProvider.\n *\n * It handles:\n * - Fetching one-time tokens via the provided getToken callback\n * - Exchanging one-time tokens for long-lived JWTs\n * - Managing token state via observables\n * - Auto-refreshing tokens when they expire\n */\n@Injectable()\nexport class CapitalOsAuthService implements OnDestroy {\n private readonly config = inject(CAPITALOS_CONFIG)\n private readonly tokenExchangeService = inject(TokenExchangeService)\n\n // Private BehaviorSubjects for internal state\n private readonly _longLivedToken$ = new BehaviorSubject<string | undefined>(undefined)\n private readonly _baseUrl$ = new BehaviorSubject<string | undefined>(undefined)\n private readonly _isLoading$ = new BehaviorSubject(false)\n private readonly _error$ = new BehaviorSubject<Error | undefined>(undefined)\n\n // Public observable for token data\n readonly tokenData$: Observable<TokenData | undefined> = combineLatest([this._longLivedToken$, this._baseUrl$]).pipe(\n map(([token, baseUrl]) => {\n if (!token || !baseUrl) {\n return undefined\n }\n\n return {\n token,\n tokenType: TokenType.longLived,\n baseUrl,\n paramKey: TokenParamKey.accessToken,\n paramLocation: TokenParamLocation.hash,\n }\n })\n )\n\n // Public observables for UI state\n readonly isLoading$: Observable<boolean> = this._isLoading$.asObservable()\n readonly error$: Observable<Error | undefined> = this._error$.asObservable()\n readonly authState$: Observable<AuthState> = combineLatest([this._isLoading$, this._error$, this.tokenData$]).pipe(\n map(([isLoading, error, tokenData]) => {\n if (isLoading) return 'loading'\n if (error) return 'error'\n if (tokenData) return 'authenticated'\n return 'idle'\n })\n )\n\n private isDestroyed = false\n private logger: ReturnType<typeof createLogger>\n\n constructor() {\n this.logger = createLogger(this.config.enableLogging, this.config.logger)\n\n // Start authentication flow eagerly on construction.\n // This is intentional: auth begins as soon as the app boots so the token\n // is ready when CardsAppComponent renders, reducing perceived load time.\n this.refreshToken()\n }\n\n ngOnDestroy(): void {\n this.isDestroyed = true\n }\n\n /**\n * Invalidates the current token, triggering a refresh.\n * Called when the iframe signals that the token has expired.\n */\n invalidateToken(): void {\n this.logger.log('CapitalOsAuthService: Invalidating token')\n this._longLivedToken$.next(undefined)\n this._baseUrl$.next(undefined)\n this._error$.next(undefined)\n this.refreshToken()\n }\n\n /**\n * Refreshes the token by fetching a new one-time token and exchanging it.\n */\n async refreshToken(): Promise<void> {\n if (this.isDestroyed) {\n return\n }\n\n // Prevent concurrent refresh calls - if already loading, skip\n if (this._isLoading$.value) {\n this.logger.log('CapitalOsAuthService: Token refresh already in progress, skipping')\n return\n }\n\n this.logger.log('CapitalOsAuthService: Starting token refresh')\n this._isLoading$.next(true)\n this._error$.next(undefined)\n\n try {\n // Get one-time token from platform\n const oneTimeToken = await this.config.getToken()\n this.logger.log('CapitalOsAuthService: Received one-time token')\n\n if (this.isDestroyed) {\n return\n }\n\n // Exchange for long-lived token\n const result = await this.tokenExchangeService.exchange(oneTimeToken, {\n enableLogging: this.config.enableLogging,\n })\n\n if (this.isDestroyed) {\n return\n }\n\n this._longLivedToken$.next(result.longLivedToken)\n this._baseUrl$.next(result.baseUrl)\n this._error$.next(undefined)\n this.logger.log('CapitalOsAuthService: Token exchange complete')\n } catch (rawError) {\n if (!this.isDestroyed) {\n const error = toError(rawError)\n this.logger.error(`CapitalOsAuthService: Token refresh failed: ${error.message}`)\n this._error$.next(error)\n }\n } finally {\n if (!this.isDestroyed) {\n this._isLoading$.next(false)\n }\n }\n }\n}\n","// AUTO-GENERATED FILE - DO NOT EDIT\n// Generated by: scripts/generate-version.js\n// Source: projects/capitalos-angular/package.json\n\nexport const SDK_VERSION = '0.2.1'\n","import {\n inject,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n AfterViewInit,\n OnDestroy,\n Directive,\n} from '@angular/core'\nimport { Subscription } from 'rxjs'\nimport {\n IframeManager,\n CapitalOSError,\n TokenData,\n RawErrorDetails,\n ThemeColorScheme,\n RenderingContext,\n IframeManagerConfig,\n} from '@capitalos/core'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\nimport { SDK_VERSION } from './version'\n\n/**\n * Common template for all iframe components.\n * Angular doesn't support inheriting templates, so subclasses must use this constant.\n */\nexport const IFRAME_COMPONENT_TEMPLATE = `<div #iframeContainer class=\"capitalos-iframe-container\"></div>`\n\n/**\n * Common styles for all iframe components.\n * Angular doesn't support inheriting styles, so subclasses must use this constant.\n *\n * Why Angular needs these styles (unlike React/Vue):\n * Angular component selectors (e.g., <capitalos-cards-app>) remain in the DOM as real elements.\n * Without :host styling, the component element may collapse or not fill its container.\n * In React/Vue, component tags are replaced by rendered content, so no wrapper styling is needed.\n */\nexport const IFRAME_COMPONENT_STYLES = [\n `\n :host {\n display: block;\n width: 100%;\n }\n\n .capitalos-iframe-container {\n width: 100%;\n }\n `,\n]\n\n/**\n * Component-specific callbacks to pass to IframeManager.\n * Excludes common callbacks (onLoad, onError, onTokenExpired) which the base class handles.\n */\nexport type ComponentCallbacks = Omit<IframeManagerConfig['callbacks'], 'onLoad' | 'onError' | 'onTokenExpired'>\n\n/**\n * Abstract base class for CapitalOS iframe components.\n *\n * Handles common functionality:\n * - Token subscription and iframe initialization\n * - Common inputs (theme, heightOffsetPx, enableLogging)\n * - Common outputs (loaded, error)\n * - Lifecycle management (cleanup on destroy)\n *\n * Subclasses must implement:\n * - `getRenderingContext()` - returns the component-specific rendering context\n *\n * Subclasses may override:\n * - `getComponentCallbacks()` - returns component-specific Penpal callbacks\n *\n * Note: Rendering context inputs (e.g., entryPoint, exitPoint for Onboarding) are read once\n * at iframe initialization. Changes to these inputs after the iframe loads will NOT trigger\n * re-initialization. This matches the behavior of the React SDK.\n *\n * @example\n * ```typescript\n * @Component({ selector: 'my-component', ... })\n * export class MyComponent extends BaseIframeComponent {\n * protected getRenderingContext(): RenderingContext {\n * return { entryPoint: 'myComponent' }\n * }\n * }\n * ```\n */\n@Directive()\nexport abstract class BaseIframeComponent implements AfterViewInit, OnDestroy {\n // Injected services\n protected readonly authService = inject(CapitalOsAuthService)\n protected readonly config = inject(CAPITALOS_CONFIG)\n\n // Common inputs\n @Input() theme?: ThemeColorScheme\n @Input() heightOffsetPx = 12\n @Input() enableLogging?: boolean\n\n // Common outputs\n @Output() loaded = new EventEmitter<void>()\n @Output() error = new EventEmitter<CapitalOSError>()\n\n // View children\n @ViewChild('iframeContainer') iframeContainer?: ElementRef<HTMLDivElement>\n\n // Internal state\n private iframeManager?: IframeManager\n private tokenDataSubscription?: Subscription\n\n ngAfterViewInit(): void {\n // Subscribe to tokenData$ and initialize iframe when ready\n this.tokenDataSubscription = this.authService.tokenData$.subscribe((tokenData) => {\n if (tokenData && this.iframeContainer) {\n this.initializeIframe(tokenData, this.iframeContainer.nativeElement)\n }\n })\n }\n\n ngOnDestroy(): void {\n this.tokenDataSubscription?.unsubscribe()\n this.iframeManager?.destroy()\n }\n\n /**\n * Returns the rendering context for this component.\n * Must be implemented by subclasses.\n */\n protected abstract getRenderingContext(): RenderingContext\n\n /**\n * Returns component-specific Penpal callbacks.\n * Override in subclasses that need callbacks (e.g., Onboarding, TokenExchange).\n */\n protected getComponentCallbacks(): ComponentCallbacks {\n return {}\n }\n\n private initializeIframe(tokenData: TokenData, container: HTMLElement): void {\n // Destroy previous iframe if exists\n this.iframeManager?.destroy()\n\n const resolvedEnableLogging = this.enableLogging ?? this.config.enableLogging ?? false\n const resolvedTheme = this.theme ?? this.config.theme\n\n this.iframeManager = new IframeManager({\n container,\n tokenData,\n renderingContext: this.getRenderingContext(),\n theme: resolvedTheme,\n enableLogging: resolvedEnableLogging,\n logger: this.config.logger,\n sdkVersion: SDK_VERSION,\n heightOffsetPx: this.heightOffsetPx,\n callbacks: {\n onLoad: () => {\n this.loaded.emit()\n },\n onError: (rawError: RawErrorDetails) => {\n const capitalOsError = new CapitalOSError(rawError)\n this.error.emit(capitalOsError)\n },\n onTokenExpired: () => {\n this.authService.invalidateToken()\n },\n ...this.getComponentCallbacks(),\n },\n })\n }\n}\n","import { Component } from '@angular/core'\nimport { RenderingContext } from '@capitalos/core'\nimport { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES } from './base-iframe.component'\n\n/**\n * CardsApp component that renders the CapitalOS cards interface in an iframe.\n *\n * The component emits events for loading state - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!cardsLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-cards-app\n * (loaded)=\"cardsLoaded = true\"\n * (error)=\"onCardsError($event)\"\n * ></capitalos-cards-app>\n * ```\n */\n@Component({\n selector: 'capitalos-cards-app',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class CardsAppComponent extends BaseIframeComponent {\n protected getRenderingContext(): RenderingContext {\n return { entryPoint: 'cardsApp' }\n }\n}\n","import { Component } from '@angular/core'\nimport { RenderingContext } from '@capitalos/core'\nimport { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES } from './base-iframe.component'\n\n/**\n * BillPayApp component that renders the CapitalOS bill payment interface in an iframe.\n *\n * The component emits events for loading state - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!billPayLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-billpay-app\n * (loaded)=\"billPayLoaded = true\"\n * (error)=\"onBillPayError($event)\"\n * ></capitalos-billpay-app>\n * ```\n */\n@Component({\n selector: 'capitalos-billpay-app',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class BillPayAppComponent extends BaseIframeComponent {\n protected getRenderingContext(): RenderingContext {\n return { entryPoint: 'billPayApp' }\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core'\nimport { RenderingContext, Account, OnboardingEntryPoint, OnboardingExitPoint, CopyOverrides } from '@capitalos/core'\nimport {\n BaseIframeComponent,\n ComponentCallbacks,\n IFRAME_COMPONENT_TEMPLATE,\n IFRAME_COMPONENT_STYLES,\n} from './base-iframe.component'\n\n/**\n * Onboarding component that renders the CapitalOS onboarding flow in an iframe.\n *\n * The component emits events for loading state and completion - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!onboardingLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-onboarding\n * [entryPoint]=\"'welcome'\"\n * [exitPoint]=\"'activation'\"\n * (loaded)=\"onboardingLoaded = true\"\n * (error)=\"onOnboardingError($event)\"\n * (done)=\"onOnboardingComplete($event)\"\n * ></capitalos-onboarding>\n * ```\n */\n@Component({\n selector: 'capitalos-onboarding',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class OnboardingComponent extends BaseIframeComponent {\n // Onboarding-specific inputs\n @Input() entryPoint?: OnboardingEntryPoint\n @Input() exitPoint?: OnboardingExitPoint\n @Input() allowExitOnNonApproved?: boolean\n /** Custom text for the final \"done\" button shown at the end of the onboarding flow. */\n @Input() doneButtonText?: string\n\n // Onboarding-specific outputs\n @Output() done = new EventEmitter<Account>()\n\n protected getRenderingContext(): RenderingContext {\n return {\n entryPoint: 'onboarding',\n onboardingEntryPoint: this.entryPoint,\n onboardingExitPoint: this.exitPoint,\n allowExitOnNonApproved: this.allowExitOnNonApproved,\n copy: this.doneButtonText\n ? ({\n 'onboarding.doneButton': this.doneButtonText,\n 'onboarding.continueButton': this.doneButtonText,\n 'activation.successButton': this.doneButtonText,\n } as CopyOverrides)\n : undefined,\n }\n }\n\n protected override getComponentCallbacks(): ComponentCallbacks {\n return {\n onboarding: {\n onDone: (account: Account) => {\n this.done.emit(account)\n },\n },\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core'\nimport { CardsAppComponent } from './cards-app.component'\nimport { BillPayAppComponent } from './billpay-app.component'\nimport { OnboardingComponent } from './onboarding.component'\nimport { CapitalOsConfig, CAPITALOS_CONFIG } from './provide-capitalos'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { TokenExchangeService } from './token-exchange.service'\n\n/**\n * NgModule for CapitalOS SDK.\n *\n * Use this module for NgModule-based Angular applications.\n * For standalone applications, use provideCapitalOs() instead.\n *\n * Usage:\n * ```typescript\n * @NgModule({\n * imports: [\n * CapitalOsModule.forRoot({\n * getToken: async () => {\n * const response = await fetch('/api/capitalos/token');\n * const data = await response.json();\n * return data.token;\n * },\n * enableLogging: true,\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n */\n@NgModule({\n imports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent],\n exports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent],\n})\nexport class CapitalOsModule {\n static forRoot(config: CapitalOsConfig): ModuleWithProviders<CapitalOsModule> {\n return {\n ngModule: CapitalOsModule,\n providers: [{ provide: CAPITALOS_CONFIG, useValue: config }, TokenExchangeService, CapitalOsAuthService],\n }\n }\n}\n","/*\n * Public API Surface of @capitalos/angular\n */\n\n// Components\nexport { CardsAppComponent } from './lib/cards-app.component'\nexport { BillPayAppComponent } from './lib/billpay-app.component'\nexport { OnboardingComponent } from './lib/onboarding.component'\n\n// Services\nexport { CapitalOsAuthService } from './lib/capitalos-auth.service'\nexport type { AuthState } from './lib/capitalos-auth.service'\n\n// Provider (standalone)\nexport { provideCapitalOs, CAPITALOS_CONFIG } from './lib/provide-capitalos'\nexport type { CapitalOsConfig } from './lib/provide-capitalos'\n\n// Module (NgModule-based apps)\nexport { CapitalOsModule } from './lib/capitalos.module'\n\n// Re-export commonly used types from core\nexport type { ThemeColorScheme, Logger, TokenData, RawErrorDetails, Account, AccountStatus } from '@capitalos/core'\n\nexport { CapitalOSError, ErrorCode } from '@capitalos/core'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capitalos-angular.mjs","sources":["../../../projects/capitalos-angular/src/lib/provide-capitalos.ts","../../../projects/capitalos-angular/src/lib/token-exchange.service.ts","../../../projects/capitalos-angular/src/lib/capitalos-auth.service.ts","../../../projects/capitalos-angular/src/lib/version.ts","../../../projects/capitalos-angular/src/lib/base-iframe.component.ts","../../../projects/capitalos-angular/src/lib/cards-app.component.ts","../../../projects/capitalos-angular/src/lib/billpay-app.component.ts","../../../projects/capitalos-angular/src/lib/onboarding.component.ts","../../../projects/capitalos-angular/src/lib/capitalos.module.ts","../../../projects/capitalos-angular/src/public-api.ts","../../../projects/capitalos-angular/src/capitalos-angular.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core'\nimport { Logger, ThemeColorScheme } from '@capitalos/core'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { TokenExchangeService } from './token-exchange.service'\n\n/**\n * Configuration for CapitalOS SDK\n */\nexport interface CapitalOsConfig {\n /**\n * Function that returns a promise resolving to a one-time token.\n * This is typically a call to your backend that initiates a CapitalOS login.\n */\n getToken: () => Promise<string>\n\n /**\n * Whether to enable logging for debugging purposes.\n */\n enableLogging?: boolean\n\n /**\n * Optional custom logger for capturing SDK logs.\n */\n logger?: Logger\n\n /**\n * Theme color scheme for the SDK components.\n */\n theme?: ThemeColorScheme\n}\n\n/**\n * Injection token for CapitalOS configuration\n */\nexport const CAPITALOS_CONFIG = new InjectionToken<CapitalOsConfig>('CAPITALOS_CONFIG')\n\n/**\n * Provides the CapitalOS SDK with the specified configuration.\n *\n * Usage in app.config.ts (standalone):\n * ```typescript\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideCapitalOs({\n * getToken: async () => {\n * const response = await fetch('/api/capitalos/token');\n * const data = await response.json();\n * return data.token;\n * },\n * enableLogging: true,\n * }),\n * ],\n * });\n * ```\n *\n * For NgModule-based apps, use CapitalOsModule.forRoot() instead.\n */\nexport function provideCapitalOs(config: CapitalOsConfig): Provider[] {\n return [\n {\n provide: CAPITALOS_CONFIG,\n useValue: config,\n },\n TokenExchangeService,\n CapitalOsAuthService,\n ]\n}\n","import { Injectable, inject, OnDestroy } from '@angular/core'\nimport { exchangeOneTimeToken } from '@capitalos/core'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\n\nconst TOKEN_EXCHANGE_TIMEOUT_MS = 10_000\n\nexport interface TokenExchangeResult {\n longLivedToken: string\n baseUrl: string\n}\n\n/**\n * Service responsible for exchanging one-time tokens for long-lived JWTs.\n * Creates a hidden iframe to perform the token exchange securely.\n */\n@Injectable()\nexport class TokenExchangeService implements OnDestroy {\n private readonly config = inject(CAPITALOS_CONFIG)\n private isDestroyed = false\n private activeAbortController: AbortController | null = null\n\n ngOnDestroy(): void {\n this.isDestroyed = true\n this.activeAbortController?.abort()\n this.activeAbortController = null\n }\n\n /**\n * Exchanges a one-time token for a long-lived JWT.\n * Delegates to @capitalos/core (browser-only) which handles iframe + Penpal lifecycle.\n */\n async exchange(oneTimeToken: string, options: { enableLogging?: boolean } = {}): Promise<TokenExchangeResult> {\n if (this.isDestroyed) {\n throw new Error('TokenExchangeService was destroyed')\n }\n\n // Abort any in-flight exchange when a new one begins.\n this.activeAbortController?.abort()\n\n const abortController = new AbortController()\n this.activeAbortController = abortController\n\n try {\n return await exchangeOneTimeToken({\n oneTimeToken,\n enableLogging: options.enableLogging,\n logger: this.config.logger,\n timeoutMs: TOKEN_EXCHANGE_TIMEOUT_MS,\n signal: abortController.signal,\n })\n } finally {\n if (this.activeAbortController === abortController) {\n this.activeAbortController = null\n }\n }\n }\n}\n","import { Injectable, inject, OnDestroy } from '@angular/core'\nimport { BehaviorSubject, Observable, combineLatest } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { TokenData, TokenType, TokenParamKey, TokenParamLocation, createLogger } from '@capitalos/core'\nimport { TokenExchangeService } from './token-exchange.service'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\n\n/**\n * Converts an unknown error to an Error object\n */\nfunction toError(error: unknown): Error {\n if (error instanceof Error) {\n return error\n }\n return new Error(String(error))\n}\n\n/**\n * Authentication state enum\n */\nexport type AuthState = 'idle' | 'loading' | 'authenticated' | 'error'\n\n/**\n * Service that manages CapitalOS authentication state.\n * This is the Angular equivalent of React's CapitalOsAuthenticationProvider.\n *\n * It handles:\n * - Fetching one-time tokens via the provided getToken callback\n * - Exchanging one-time tokens for long-lived JWTs\n * - Managing token state via observables\n * - Auto-refreshing tokens when they expire\n */\n@Injectable()\nexport class CapitalOsAuthService implements OnDestroy {\n private readonly config = inject(CAPITALOS_CONFIG)\n private readonly tokenExchangeService = inject(TokenExchangeService)\n\n // Private BehaviorSubjects for internal state\n private readonly _longLivedToken$ = new BehaviorSubject<string | undefined>(undefined)\n private readonly _baseUrl$ = new BehaviorSubject<string | undefined>(undefined)\n private readonly _isLoading$ = new BehaviorSubject(false)\n private readonly _error$ = new BehaviorSubject<Error | undefined>(undefined)\n\n // Public observable for token data\n readonly tokenData$: Observable<TokenData | undefined> = combineLatest([this._longLivedToken$, this._baseUrl$]).pipe(\n map(([token, baseUrl]) => {\n if (!token || !baseUrl) {\n return undefined\n }\n\n return {\n token,\n tokenType: TokenType.longLived,\n baseUrl,\n paramKey: TokenParamKey.accessToken,\n paramLocation: TokenParamLocation.hash,\n }\n })\n )\n\n // Public observables for UI state\n readonly isLoading$: Observable<boolean> = this._isLoading$.asObservable()\n readonly error$: Observable<Error | undefined> = this._error$.asObservable()\n readonly authState$: Observable<AuthState> = combineLatest([this._isLoading$, this._error$, this.tokenData$]).pipe(\n map(([isLoading, error, tokenData]) => {\n if (isLoading) {\n return 'loading'\n }\n if (error) {\n return 'error'\n }\n if (tokenData) {\n return 'authenticated'\n }\n return 'idle'\n })\n )\n\n private isDestroyed = false\n private logger: ReturnType<typeof createLogger>\n\n constructor() {\n this.logger = createLogger(this.config.enableLogging, this.config.logger)\n\n // Start authentication flow eagerly on construction.\n // This is intentional: auth begins as soon as the app boots so the token\n // is ready when CardsAppComponent renders, reducing perceived load time.\n this.refreshToken()\n }\n\n ngOnDestroy(): void {\n this.isDestroyed = true\n }\n\n /**\n * Invalidates the current token, triggering a refresh.\n * Called when the iframe signals that the token has expired.\n */\n invalidateToken(): void {\n this.logger.log('CapitalOsAuthService: Invalidating token')\n this._longLivedToken$.next(undefined)\n this._baseUrl$.next(undefined)\n this._error$.next(undefined)\n this.refreshToken()\n }\n\n /**\n * Refreshes the token by fetching a new one-time token and exchanging it.\n */\n async refreshToken(): Promise<void> {\n if (this.isDestroyed) {\n return\n }\n\n // Prevent concurrent refresh calls - if already loading, skip\n if (this._isLoading$.value) {\n this.logger.log('CapitalOsAuthService: Token refresh already in progress, skipping')\n return\n }\n\n this.logger.log('CapitalOsAuthService: Starting token refresh')\n this._isLoading$.next(true)\n this._error$.next(undefined)\n\n try {\n // Get one-time token from platform\n const oneTimeToken = await this.config.getToken()\n this.logger.log('CapitalOsAuthService: Received one-time token')\n\n if (this.isDestroyed) {\n return\n }\n\n // Exchange for long-lived token\n const result = await this.tokenExchangeService.exchange(oneTimeToken, {\n enableLogging: this.config.enableLogging,\n })\n\n if (this.isDestroyed) {\n return\n }\n\n this._longLivedToken$.next(result.longLivedToken)\n this._baseUrl$.next(result.baseUrl)\n this._error$.next(undefined)\n this.logger.log('CapitalOsAuthService: Token exchange complete')\n } catch (rawError) {\n if (!this.isDestroyed) {\n const error = toError(rawError)\n this.logger.error(`CapitalOsAuthService: Token refresh failed: ${error.message}`)\n this._error$.next(error)\n }\n } finally {\n if (!this.isDestroyed) {\n this._isLoading$.next(false)\n }\n }\n }\n}\n","// AUTO-GENERATED FILE - DO NOT EDIT\n// Generated by: scripts/generate-version.js\n// Source: projects/capitalos-angular/package.json\n\nexport const SDK_VERSION = '0.3.0'\n","import {\n inject,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n AfterViewInit,\n OnDestroy,\n Directive,\n} from '@angular/core'\nimport { Subscription } from 'rxjs'\nimport {\n IframeManager,\n CapitalOSError,\n TokenData,\n RawErrorDetails,\n ThemeColorScheme,\n RenderingContext,\n IframeManagerConfig,\n} from '@capitalos/core'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\nimport { SDK_VERSION } from './version'\n\n/**\n * Common template for all iframe components.\n * Angular doesn't support inheriting templates, so subclasses must use this constant.\n */\nexport const IFRAME_COMPONENT_TEMPLATE = `<div #iframeContainer class=\"capitalos-iframe-container\"></div>`\n\n/**\n * Common styles for all iframe components.\n * Angular doesn't support inheriting styles, so subclasses must use this constant.\n *\n * Why Angular needs these styles (unlike React/Vue):\n * Angular component selectors (e.g., <capitalos-cards-app>) remain in the DOM as real elements.\n * Without :host styling, the component element may collapse or not fill its container.\n * In React/Vue, component tags are replaced by rendered content, so no wrapper styling is needed.\n */\nexport const IFRAME_COMPONENT_STYLES = [\n `\n :host {\n display: block;\n width: 100%;\n }\n\n .capitalos-iframe-container {\n width: 100%;\n }\n `,\n]\n\n/**\n * Component-specific callbacks to pass to IframeManager.\n * Excludes common callbacks (onLoad, onError, onTokenExpired) which the base class handles.\n */\nexport type ComponentCallbacks = Omit<IframeManagerConfig['callbacks'], 'onLoad' | 'onError' | 'onTokenExpired'>\n\n/**\n * Abstract base class for CapitalOS iframe components.\n *\n * Handles common functionality:\n * - Token subscription and iframe initialization\n * - Common inputs (theme, heightOffsetPx, enableLogging)\n * - Common outputs (loaded, error)\n * - Lifecycle management (cleanup on destroy)\n *\n * Subclasses must implement:\n * - `getRenderingContext()` - returns the component-specific rendering context\n *\n * Subclasses may override:\n * - `getComponentCallbacks()` - returns component-specific Penpal callbacks\n *\n * Note: Rendering context inputs (e.g., entryPoint, exitPoint for Onboarding) are read once\n * at iframe initialization. Changes to these inputs after the iframe loads will NOT trigger\n * re-initialization. This matches the behavior of the React SDK.\n *\n * @example\n * ```typescript\n * @Component({ selector: 'my-component', ... })\n * export class MyComponent extends BaseIframeComponent {\n * protected getRenderingContext(): RenderingContext {\n * return { entryPoint: 'myComponent' }\n * }\n * }\n * ```\n */\n@Directive()\nexport abstract class BaseIframeComponent implements AfterViewInit, OnDestroy {\n // Injected services\n protected readonly authService = inject(CapitalOsAuthService)\n protected readonly config = inject(CAPITALOS_CONFIG)\n\n // Common inputs\n @Input() theme?: ThemeColorScheme\n @Input() heightOffsetPx = 12\n @Input() enableLogging?: boolean\n\n // Common outputs\n @Output() loaded = new EventEmitter<void>()\n @Output() error = new EventEmitter<CapitalOSError>()\n\n // View children\n @ViewChild('iframeContainer') iframeContainer?: ElementRef<HTMLDivElement>\n\n // Internal state\n private iframeManager?: IframeManager\n private tokenDataSubscription?: Subscription\n\n ngAfterViewInit(): void {\n // Subscribe to tokenData$ and initialize iframe when ready\n this.tokenDataSubscription = this.authService.tokenData$.subscribe((tokenData) => {\n if (tokenData && this.iframeContainer) {\n this.initializeIframe(tokenData, this.iframeContainer.nativeElement)\n }\n })\n }\n\n ngOnDestroy(): void {\n this.tokenDataSubscription?.unsubscribe()\n this.iframeManager?.destroy()\n }\n\n /**\n * Returns the rendering context for this component.\n * Must be implemented by subclasses.\n */\n protected abstract getRenderingContext(): RenderingContext\n\n /**\n * Returns component-specific Penpal callbacks.\n * Override in subclasses that need callbacks (e.g., Onboarding, TokenExchange).\n */\n protected getComponentCallbacks(): ComponentCallbacks {\n return {}\n }\n\n private initializeIframe(tokenData: TokenData, container: HTMLElement): void {\n // Destroy previous iframe if exists\n this.iframeManager?.destroy()\n\n const resolvedEnableLogging = this.enableLogging ?? this.config.enableLogging ?? false\n const resolvedTheme = this.theme ?? this.config.theme\n\n this.iframeManager = new IframeManager({\n container,\n tokenData,\n renderingContext: this.getRenderingContext(),\n theme: resolvedTheme,\n enableLogging: resolvedEnableLogging,\n logger: this.config.logger,\n sdkVersion: SDK_VERSION,\n heightOffsetPx: this.heightOffsetPx,\n callbacks: {\n onLoad: () => {\n this.loaded.emit()\n },\n onError: (rawError: RawErrorDetails) => {\n const capitalOsError = new CapitalOSError(rawError)\n this.error.emit(capitalOsError)\n },\n onTokenExpired: () => {\n this.authService.invalidateToken()\n },\n ...this.getComponentCallbacks(),\n },\n })\n }\n}\n","import { Component } from '@angular/core'\nimport { RenderingContext } from '@capitalos/core'\nimport { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES } from './base-iframe.component'\n\n/**\n * CardsApp component that renders the CapitalOS cards interface in an iframe.\n *\n * The component emits events for loading state - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!cardsLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-cards-app\n * (loaded)=\"cardsLoaded = true\"\n * (error)=\"onCardsError($event)\"\n * ></capitalos-cards-app>\n * ```\n */\n@Component({\n selector: 'capitalos-cards-app',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class CardsAppComponent extends BaseIframeComponent {\n protected getRenderingContext(): RenderingContext {\n return { entryPoint: 'cardsApp' }\n }\n}\n","import { Component } from '@angular/core'\nimport { RenderingContext } from '@capitalos/core'\nimport { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES } from './base-iframe.component'\n\n/**\n * BillPayApp component that renders the CapitalOS bill payment interface in an iframe.\n *\n * The component emits events for loading state - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!billPayLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-billpay-app\n * (loaded)=\"billPayLoaded = true\"\n * (error)=\"onBillPayError($event)\"\n * ></capitalos-billpay-app>\n * ```\n */\n@Component({\n selector: 'capitalos-billpay-app',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class BillPayAppComponent extends BaseIframeComponent {\n protected getRenderingContext(): RenderingContext {\n return { entryPoint: 'billPayApp' }\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core'\nimport { RenderingContext, Account, OnboardingEntryPoint, OnboardingExitPoint, CopyOverrides } from '@capitalos/core'\nimport {\n BaseIframeComponent,\n ComponentCallbacks,\n IFRAME_COMPONENT_TEMPLATE,\n IFRAME_COMPONENT_STYLES,\n} from './base-iframe.component'\n\n/**\n * Onboarding component that renders the CapitalOS onboarding flow in an iframe.\n *\n * The component emits events for loading state and completion - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!onboardingLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-onboarding\n * [entryPoint]=\"'welcome'\"\n * [exitPoint]=\"'activation'\"\n * (loaded)=\"onboardingLoaded = true\"\n * (error)=\"onOnboardingError($event)\"\n * (done)=\"onOnboardingComplete($event)\"\n * ></capitalos-onboarding>\n * ```\n */\n@Component({\n selector: 'capitalos-onboarding',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class OnboardingComponent extends BaseIframeComponent {\n // Onboarding-specific inputs\n @Input() entryPoint?: OnboardingEntryPoint\n @Input() exitPoint?: OnboardingExitPoint\n @Input() allowExitOnNonApproved?: boolean\n /** Identifies the onboarding product context. Defaults to `'card'` for backward compatibility. */\n @Input() product?: 'billPay' | 'card'\n /** Custom text for the final \"done\" button shown at the end of the onboarding flow. */\n @Input() doneButtonText?: string\n\n // Onboarding-specific outputs\n @Output() done = new EventEmitter<Account>()\n\n protected getRenderingContext(): RenderingContext {\n return {\n entryPoint: 'onboarding',\n onboardingEntryPoint: this.entryPoint,\n onboardingExitPoint: this.exitPoint,\n allowExitOnNonApproved: this.allowExitOnNonApproved,\n product: this.product,\n copy: this.doneButtonText\n ? ({\n 'onboarding.doneButton': this.doneButtonText,\n 'onboarding.continueButton': this.doneButtonText,\n 'activation.successButton': this.doneButtonText,\n } as CopyOverrides)\n : undefined,\n }\n }\n\n protected override getComponentCallbacks(): ComponentCallbacks {\n return {\n onboarding: {\n onDone: (account: Account) => {\n this.done.emit(account)\n },\n },\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core'\nimport { CardsAppComponent } from './cards-app.component'\nimport { BillPayAppComponent } from './billpay-app.component'\nimport { OnboardingComponent } from './onboarding.component'\nimport { CapitalOsConfig, CAPITALOS_CONFIG } from './provide-capitalos'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { TokenExchangeService } from './token-exchange.service'\n\n/**\n * NgModule for CapitalOS SDK.\n *\n * Use this module for NgModule-based Angular applications.\n * For standalone applications, use provideCapitalOs() instead.\n *\n * Usage:\n * ```typescript\n * @NgModule({\n * imports: [\n * CapitalOsModule.forRoot({\n * getToken: async () => {\n * const response = await fetch('/api/capitalos/token');\n * const data = await response.json();\n * return data.token;\n * },\n * enableLogging: true,\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n */\n@NgModule({\n imports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent],\n exports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent],\n})\nexport class CapitalOsModule {\n static forRoot(config: CapitalOsConfig): ModuleWithProviders<CapitalOsModule> {\n return {\n ngModule: CapitalOsModule,\n providers: [{ provide: CAPITALOS_CONFIG, useValue: config }, TokenExchangeService, CapitalOsAuthService],\n }\n }\n}\n","/*\n * Public API Surface of @capitalos/angular\n */\n\n// Components\nexport { CardsAppComponent } from './lib/cards-app.component'\nexport { BillPayAppComponent } from './lib/billpay-app.component'\nexport { OnboardingComponent } from './lib/onboarding.component'\n\n// Services\nexport { CapitalOsAuthService } from './lib/capitalos-auth.service'\nexport type { AuthState } from './lib/capitalos-auth.service'\n\n// Provider (standalone)\nexport { provideCapitalOs, CAPITALOS_CONFIG } from './lib/provide-capitalos'\nexport type { CapitalOsConfig } from './lib/provide-capitalos'\n\n// Module (NgModule-based apps)\nexport { CapitalOsModule } from './lib/capitalos.module'\n\n// Re-export commonly used types from core\nexport type { ThemeColorScheme, Logger, TokenData, RawErrorDetails, Account, AccountStatus } from '@capitalos/core'\n\nexport { CapitalOSError, ErrorCode } from '@capitalos/core'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, inject, Injectable, EventEmitter, Directive, Input, Output, ViewChild, Component, NgModule } from '@angular/core';
3
3
  import { exchangeOneTimeToken, TokenType, TokenParamKey, TokenParamLocation, createLogger, IframeManager, CapitalOSError } from '@capitalos/core';
4
4
  export { CapitalOSError, ErrorCode } from '@capitalos/core';
5
- import { BehaviorSubject, combineLatest, map } from 'rxjs';
5
+ import { BehaviorSubject, combineLatest } from 'rxjs';
6
+ import { map } from 'rxjs/operators';
6
7
 
7
8
  /**
8
9
  * Injection token for CapitalOS configuration
@@ -135,12 +136,15 @@ class CapitalOsAuthService {
135
136
  this.isLoading$ = this._isLoading$.asObservable();
136
137
  this.error$ = this._error$.asObservable();
137
138
  this.authState$ = combineLatest([this._isLoading$, this._error$, this.tokenData$]).pipe(map(([isLoading, error, tokenData]) => {
138
- if (isLoading)
139
+ if (isLoading) {
139
140
  return 'loading';
140
- if (error)
141
+ }
142
+ if (error) {
141
143
  return 'error';
142
- if (tokenData)
144
+ }
145
+ if (tokenData) {
143
146
  return 'authenticated';
147
+ }
144
148
  return 'idle';
145
149
  }));
146
150
  this.isDestroyed = false;
@@ -221,7 +225,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
221
225
  // AUTO-GENERATED FILE - DO NOT EDIT
222
226
  // Generated by: scripts/generate-version.js
223
227
  // Source: projects/capitalos-angular/package.json
224
- const SDK_VERSION = '0.2.1';
228
+ const SDK_VERSION = '0.3.0';
225
229
 
226
230
  /**
227
231
  * Common template for all iframe components.
@@ -440,6 +444,7 @@ class OnboardingComponent extends BaseIframeComponent {
440
444
  onboardingEntryPoint: this.entryPoint,
441
445
  onboardingExitPoint: this.exitPoint,
442
446
  allowExitOnNonApproved: this.allowExitOnNonApproved,
447
+ product: this.product,
443
448
  copy: this.doneButtonText
444
449
  ? {
445
450
  'onboarding.doneButton': this.doneButtonText,
@@ -460,7 +465,7 @@ class OnboardingComponent extends BaseIframeComponent {
460
465
  }
461
466
  }
462
467
  OnboardingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OnboardingComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
463
- OnboardingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OnboardingComponent, isStandalone: true, selector: "capitalos-onboarding", inputs: { entryPoint: "entryPoint", exitPoint: "exitPoint", allowExitOnNonApproved: "allowExitOnNonApproved", doneButtonText: "doneButtonText" }, outputs: { done: "done" }, usesInheritance: true, ngImport: i0, template: "<div #iframeContainer class=\"capitalos-iframe-container\"></div>", isInline: true, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] });
468
+ OnboardingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OnboardingComponent, isStandalone: true, selector: "capitalos-onboarding", inputs: { entryPoint: "entryPoint", exitPoint: "exitPoint", allowExitOnNonApproved: "allowExitOnNonApproved", product: "product", doneButtonText: "doneButtonText" }, outputs: { done: "done" }, usesInheritance: true, ngImport: i0, template: "<div #iframeContainer class=\"capitalos-iframe-container\"></div>", isInline: true, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] });
464
469
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OnboardingComponent, decorators: [{
465
470
  type: Component,
466
471
  args: [{ selector: 'capitalos-onboarding', standalone: true, template: IFRAME_COMPONENT_TEMPLATE, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] }]
@@ -470,6 +475,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
470
475
  type: Input
471
476
  }], allowExitOnNonApproved: [{
472
477
  type: Input
478
+ }], product: [{
479
+ type: Input
473
480
  }], doneButtonText: [{
474
481
  type: Input
475
482
  }], done: [{
@@ -1 +1 @@
1
- {"version":3,"file":"capitalos-angular.mjs","sources":["../../../projects/capitalos-angular/src/lib/provide-capitalos.ts","../../../projects/capitalos-angular/src/lib/token-exchange.service.ts","../../../projects/capitalos-angular/src/lib/capitalos-auth.service.ts","../../../projects/capitalos-angular/src/lib/version.ts","../../../projects/capitalos-angular/src/lib/base-iframe.component.ts","../../../projects/capitalos-angular/src/lib/cards-app.component.ts","../../../projects/capitalos-angular/src/lib/billpay-app.component.ts","../../../projects/capitalos-angular/src/lib/onboarding.component.ts","../../../projects/capitalos-angular/src/lib/capitalos.module.ts","../../../projects/capitalos-angular/src/public-api.ts","../../../projects/capitalos-angular/src/capitalos-angular.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core'\nimport { Logger, ThemeColorScheme } from '@capitalos/core'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { TokenExchangeService } from './token-exchange.service'\n\n/**\n * Configuration for CapitalOS SDK\n */\nexport interface CapitalOsConfig {\n /**\n * Function that returns a promise resolving to a one-time token.\n * This is typically a call to your backend that initiates a CapitalOS login.\n */\n getToken: () => Promise<string>\n\n /**\n * Whether to enable logging for debugging purposes.\n */\n enableLogging?: boolean\n\n /**\n * Optional custom logger for capturing SDK logs.\n */\n logger?: Logger\n\n /**\n * Theme color scheme for the SDK components.\n */\n theme?: ThemeColorScheme\n}\n\n/**\n * Injection token for CapitalOS configuration\n */\nexport const CAPITALOS_CONFIG = new InjectionToken<CapitalOsConfig>('CAPITALOS_CONFIG')\n\n/**\n * Provides the CapitalOS SDK with the specified configuration.\n *\n * Usage in app.config.ts (standalone):\n * ```typescript\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideCapitalOs({\n * getToken: async () => {\n * const response = await fetch('/api/capitalos/token');\n * const data = await response.json();\n * return data.token;\n * },\n * enableLogging: true,\n * }),\n * ],\n * });\n * ```\n *\n * For NgModule-based apps, use CapitalOsModule.forRoot() instead.\n */\nexport function provideCapitalOs(config: CapitalOsConfig): Provider[] {\n return [\n {\n provide: CAPITALOS_CONFIG,\n useValue: config,\n },\n TokenExchangeService,\n CapitalOsAuthService,\n ]\n}\n","import { Injectable, inject, OnDestroy } from '@angular/core'\nimport { exchangeOneTimeToken } from '@capitalos/core'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\n\nconst TOKEN_EXCHANGE_TIMEOUT_MS = 10_000\n\nexport interface TokenExchangeResult {\n longLivedToken: string\n baseUrl: string\n}\n\n/**\n * Service responsible for exchanging one-time tokens for long-lived JWTs.\n * Creates a hidden iframe to perform the token exchange securely.\n */\n@Injectable()\nexport class TokenExchangeService implements OnDestroy {\n private readonly config = inject(CAPITALOS_CONFIG)\n private isDestroyed = false\n private activeAbortController: AbortController | null = null\n\n ngOnDestroy(): void {\n this.isDestroyed = true\n this.activeAbortController?.abort()\n this.activeAbortController = null\n }\n\n /**\n * Exchanges a one-time token for a long-lived JWT.\n * Delegates to @capitalos/core (browser-only) which handles iframe + Penpal lifecycle.\n */\n async exchange(oneTimeToken: string, options: { enableLogging?: boolean } = {}): Promise<TokenExchangeResult> {\n if (this.isDestroyed) {\n throw new Error('TokenExchangeService was destroyed')\n }\n\n // Abort any in-flight exchange when a new one begins.\n this.activeAbortController?.abort()\n\n const abortController = new AbortController()\n this.activeAbortController = abortController\n\n try {\n return await exchangeOneTimeToken({\n oneTimeToken,\n enableLogging: options.enableLogging,\n logger: this.config.logger,\n timeoutMs: TOKEN_EXCHANGE_TIMEOUT_MS,\n signal: abortController.signal,\n })\n } finally {\n if (this.activeAbortController === abortController) {\n this.activeAbortController = null\n }\n }\n }\n}\n","import { Injectable, inject, OnDestroy } from '@angular/core'\nimport { BehaviorSubject, Observable, combineLatest, map } from 'rxjs'\nimport { TokenData, TokenType, TokenParamKey, TokenParamLocation, createLogger } from '@capitalos/core'\nimport { TokenExchangeService } from './token-exchange.service'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\n\n/**\n * Converts an unknown error to an Error object\n */\nfunction toError(error: unknown): Error {\n if (error instanceof Error) {\n return error\n }\n return new Error(String(error))\n}\n\n/**\n * Authentication state enum\n */\nexport type AuthState = 'idle' | 'loading' | 'authenticated' | 'error'\n\n/**\n * Service that manages CapitalOS authentication state.\n * This is the Angular equivalent of React's CapitalOsAuthenticationProvider.\n *\n * It handles:\n * - Fetching one-time tokens via the provided getToken callback\n * - Exchanging one-time tokens for long-lived JWTs\n * - Managing token state via observables\n * - Auto-refreshing tokens when they expire\n */\n@Injectable()\nexport class CapitalOsAuthService implements OnDestroy {\n private readonly config = inject(CAPITALOS_CONFIG)\n private readonly tokenExchangeService = inject(TokenExchangeService)\n\n // Private BehaviorSubjects for internal state\n private readonly _longLivedToken$ = new BehaviorSubject<string | undefined>(undefined)\n private readonly _baseUrl$ = new BehaviorSubject<string | undefined>(undefined)\n private readonly _isLoading$ = new BehaviorSubject(false)\n private readonly _error$ = new BehaviorSubject<Error | undefined>(undefined)\n\n // Public observable for token data\n readonly tokenData$: Observable<TokenData | undefined> = combineLatest([this._longLivedToken$, this._baseUrl$]).pipe(\n map(([token, baseUrl]) => {\n if (!token || !baseUrl) {\n return undefined\n }\n\n return {\n token,\n tokenType: TokenType.longLived,\n baseUrl,\n paramKey: TokenParamKey.accessToken,\n paramLocation: TokenParamLocation.hash,\n }\n })\n )\n\n // Public observables for UI state\n readonly isLoading$: Observable<boolean> = this._isLoading$.asObservable()\n readonly error$: Observable<Error | undefined> = this._error$.asObservable()\n readonly authState$: Observable<AuthState> = combineLatest([this._isLoading$, this._error$, this.tokenData$]).pipe(\n map(([isLoading, error, tokenData]) => {\n if (isLoading) return 'loading'\n if (error) return 'error'\n if (tokenData) return 'authenticated'\n return 'idle'\n })\n )\n\n private isDestroyed = false\n private logger: ReturnType<typeof createLogger>\n\n constructor() {\n this.logger = createLogger(this.config.enableLogging, this.config.logger)\n\n // Start authentication flow eagerly on construction.\n // This is intentional: auth begins as soon as the app boots so the token\n // is ready when CardsAppComponent renders, reducing perceived load time.\n this.refreshToken()\n }\n\n ngOnDestroy(): void {\n this.isDestroyed = true\n }\n\n /**\n * Invalidates the current token, triggering a refresh.\n * Called when the iframe signals that the token has expired.\n */\n invalidateToken(): void {\n this.logger.log('CapitalOsAuthService: Invalidating token')\n this._longLivedToken$.next(undefined)\n this._baseUrl$.next(undefined)\n this._error$.next(undefined)\n this.refreshToken()\n }\n\n /**\n * Refreshes the token by fetching a new one-time token and exchanging it.\n */\n async refreshToken(): Promise<void> {\n if (this.isDestroyed) {\n return\n }\n\n // Prevent concurrent refresh calls - if already loading, skip\n if (this._isLoading$.value) {\n this.logger.log('CapitalOsAuthService: Token refresh already in progress, skipping')\n return\n }\n\n this.logger.log('CapitalOsAuthService: Starting token refresh')\n this._isLoading$.next(true)\n this._error$.next(undefined)\n\n try {\n // Get one-time token from platform\n const oneTimeToken = await this.config.getToken()\n this.logger.log('CapitalOsAuthService: Received one-time token')\n\n if (this.isDestroyed) {\n return\n }\n\n // Exchange for long-lived token\n const result = await this.tokenExchangeService.exchange(oneTimeToken, {\n enableLogging: this.config.enableLogging,\n })\n\n if (this.isDestroyed) {\n return\n }\n\n this._longLivedToken$.next(result.longLivedToken)\n this._baseUrl$.next(result.baseUrl)\n this._error$.next(undefined)\n this.logger.log('CapitalOsAuthService: Token exchange complete')\n } catch (rawError) {\n if (!this.isDestroyed) {\n const error = toError(rawError)\n this.logger.error(`CapitalOsAuthService: Token refresh failed: ${error.message}`)\n this._error$.next(error)\n }\n } finally {\n if (!this.isDestroyed) {\n this._isLoading$.next(false)\n }\n }\n }\n}\n","// AUTO-GENERATED FILE - DO NOT EDIT\n// Generated by: scripts/generate-version.js\n// Source: projects/capitalos-angular/package.json\n\nexport const SDK_VERSION = '0.2.1'\n","import {\n inject,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n AfterViewInit,\n OnDestroy,\n Directive,\n} from '@angular/core'\nimport { Subscription } from 'rxjs'\nimport {\n IframeManager,\n CapitalOSError,\n TokenData,\n RawErrorDetails,\n ThemeColorScheme,\n RenderingContext,\n IframeManagerConfig,\n} from '@capitalos/core'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\nimport { SDK_VERSION } from './version'\n\n/**\n * Common template for all iframe components.\n * Angular doesn't support inheriting templates, so subclasses must use this constant.\n */\nexport const IFRAME_COMPONENT_TEMPLATE = `<div #iframeContainer class=\"capitalos-iframe-container\"></div>`\n\n/**\n * Common styles for all iframe components.\n * Angular doesn't support inheriting styles, so subclasses must use this constant.\n *\n * Why Angular needs these styles (unlike React/Vue):\n * Angular component selectors (e.g., <capitalos-cards-app>) remain in the DOM as real elements.\n * Without :host styling, the component element may collapse or not fill its container.\n * In React/Vue, component tags are replaced by rendered content, so no wrapper styling is needed.\n */\nexport const IFRAME_COMPONENT_STYLES = [\n `\n :host {\n display: block;\n width: 100%;\n }\n\n .capitalos-iframe-container {\n width: 100%;\n }\n `,\n]\n\n/**\n * Component-specific callbacks to pass to IframeManager.\n * Excludes common callbacks (onLoad, onError, onTokenExpired) which the base class handles.\n */\nexport type ComponentCallbacks = Omit<IframeManagerConfig['callbacks'], 'onLoad' | 'onError' | 'onTokenExpired'>\n\n/**\n * Abstract base class for CapitalOS iframe components.\n *\n * Handles common functionality:\n * - Token subscription and iframe initialization\n * - Common inputs (theme, heightOffsetPx, enableLogging)\n * - Common outputs (loaded, error)\n * - Lifecycle management (cleanup on destroy)\n *\n * Subclasses must implement:\n * - `getRenderingContext()` - returns the component-specific rendering context\n *\n * Subclasses may override:\n * - `getComponentCallbacks()` - returns component-specific Penpal callbacks\n *\n * Note: Rendering context inputs (e.g., entryPoint, exitPoint for Onboarding) are read once\n * at iframe initialization. Changes to these inputs after the iframe loads will NOT trigger\n * re-initialization. This matches the behavior of the React SDK.\n *\n * @example\n * ```typescript\n * @Component({ selector: 'my-component', ... })\n * export class MyComponent extends BaseIframeComponent {\n * protected getRenderingContext(): RenderingContext {\n * return { entryPoint: 'myComponent' }\n * }\n * }\n * ```\n */\n@Directive()\nexport abstract class BaseIframeComponent implements AfterViewInit, OnDestroy {\n // Injected services\n protected readonly authService = inject(CapitalOsAuthService)\n protected readonly config = inject(CAPITALOS_CONFIG)\n\n // Common inputs\n @Input() theme?: ThemeColorScheme\n @Input() heightOffsetPx = 12\n @Input() enableLogging?: boolean\n\n // Common outputs\n @Output() loaded = new EventEmitter<void>()\n @Output() error = new EventEmitter<CapitalOSError>()\n\n // View children\n @ViewChild('iframeContainer') iframeContainer?: ElementRef<HTMLDivElement>\n\n // Internal state\n private iframeManager?: IframeManager\n private tokenDataSubscription?: Subscription\n\n ngAfterViewInit(): void {\n // Subscribe to tokenData$ and initialize iframe when ready\n this.tokenDataSubscription = this.authService.tokenData$.subscribe((tokenData) => {\n if (tokenData && this.iframeContainer) {\n this.initializeIframe(tokenData, this.iframeContainer.nativeElement)\n }\n })\n }\n\n ngOnDestroy(): void {\n this.tokenDataSubscription?.unsubscribe()\n this.iframeManager?.destroy()\n }\n\n /**\n * Returns the rendering context for this component.\n * Must be implemented by subclasses.\n */\n protected abstract getRenderingContext(): RenderingContext\n\n /**\n * Returns component-specific Penpal callbacks.\n * Override in subclasses that need callbacks (e.g., Onboarding, TokenExchange).\n */\n protected getComponentCallbacks(): ComponentCallbacks {\n return {}\n }\n\n private initializeIframe(tokenData: TokenData, container: HTMLElement): void {\n // Destroy previous iframe if exists\n this.iframeManager?.destroy()\n\n const resolvedEnableLogging = this.enableLogging ?? this.config.enableLogging ?? false\n const resolvedTheme = this.theme ?? this.config.theme\n\n this.iframeManager = new IframeManager({\n container,\n tokenData,\n renderingContext: this.getRenderingContext(),\n theme: resolvedTheme,\n enableLogging: resolvedEnableLogging,\n logger: this.config.logger,\n sdkVersion: SDK_VERSION,\n heightOffsetPx: this.heightOffsetPx,\n callbacks: {\n onLoad: () => {\n this.loaded.emit()\n },\n onError: (rawError: RawErrorDetails) => {\n const capitalOsError = new CapitalOSError(rawError)\n this.error.emit(capitalOsError)\n },\n onTokenExpired: () => {\n this.authService.invalidateToken()\n },\n ...this.getComponentCallbacks(),\n },\n })\n }\n}\n","import { Component } from '@angular/core'\nimport { RenderingContext } from '@capitalos/core'\nimport { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES } from './base-iframe.component'\n\n/**\n * CardsApp component that renders the CapitalOS cards interface in an iframe.\n *\n * The component emits events for loading state - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!cardsLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-cards-app\n * (loaded)=\"cardsLoaded = true\"\n * (error)=\"onCardsError($event)\"\n * ></capitalos-cards-app>\n * ```\n */\n@Component({\n selector: 'capitalos-cards-app',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class CardsAppComponent extends BaseIframeComponent {\n protected getRenderingContext(): RenderingContext {\n return { entryPoint: 'cardsApp' }\n }\n}\n","import { Component } from '@angular/core'\nimport { RenderingContext } from '@capitalos/core'\nimport { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES } from './base-iframe.component'\n\n/**\n * BillPayApp component that renders the CapitalOS bill payment interface in an iframe.\n *\n * The component emits events for loading state - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!billPayLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-billpay-app\n * (loaded)=\"billPayLoaded = true\"\n * (error)=\"onBillPayError($event)\"\n * ></capitalos-billpay-app>\n * ```\n */\n@Component({\n selector: 'capitalos-billpay-app',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class BillPayAppComponent extends BaseIframeComponent {\n protected getRenderingContext(): RenderingContext {\n return { entryPoint: 'billPayApp' }\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core'\nimport { RenderingContext, Account, OnboardingEntryPoint, OnboardingExitPoint, CopyOverrides } from '@capitalos/core'\nimport {\n BaseIframeComponent,\n ComponentCallbacks,\n IFRAME_COMPONENT_TEMPLATE,\n IFRAME_COMPONENT_STYLES,\n} from './base-iframe.component'\n\n/**\n * Onboarding component that renders the CapitalOS onboarding flow in an iframe.\n *\n * The component emits events for loading state and completion - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!onboardingLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-onboarding\n * [entryPoint]=\"'welcome'\"\n * [exitPoint]=\"'activation'\"\n * (loaded)=\"onboardingLoaded = true\"\n * (error)=\"onOnboardingError($event)\"\n * (done)=\"onOnboardingComplete($event)\"\n * ></capitalos-onboarding>\n * ```\n */\n@Component({\n selector: 'capitalos-onboarding',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class OnboardingComponent extends BaseIframeComponent {\n // Onboarding-specific inputs\n @Input() entryPoint?: OnboardingEntryPoint\n @Input() exitPoint?: OnboardingExitPoint\n @Input() allowExitOnNonApproved?: boolean\n /** Custom text for the final \"done\" button shown at the end of the onboarding flow. */\n @Input() doneButtonText?: string\n\n // Onboarding-specific outputs\n @Output() done = new EventEmitter<Account>()\n\n protected getRenderingContext(): RenderingContext {\n return {\n entryPoint: 'onboarding',\n onboardingEntryPoint: this.entryPoint,\n onboardingExitPoint: this.exitPoint,\n allowExitOnNonApproved: this.allowExitOnNonApproved,\n copy: this.doneButtonText\n ? ({\n 'onboarding.doneButton': this.doneButtonText,\n 'onboarding.continueButton': this.doneButtonText,\n 'activation.successButton': this.doneButtonText,\n } as CopyOverrides)\n : undefined,\n }\n }\n\n protected override getComponentCallbacks(): ComponentCallbacks {\n return {\n onboarding: {\n onDone: (account: Account) => {\n this.done.emit(account)\n },\n },\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core'\nimport { CardsAppComponent } from './cards-app.component'\nimport { BillPayAppComponent } from './billpay-app.component'\nimport { OnboardingComponent } from './onboarding.component'\nimport { CapitalOsConfig, CAPITALOS_CONFIG } from './provide-capitalos'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { TokenExchangeService } from './token-exchange.service'\n\n/**\n * NgModule for CapitalOS SDK.\n *\n * Use this module for NgModule-based Angular applications.\n * For standalone applications, use provideCapitalOs() instead.\n *\n * Usage:\n * ```typescript\n * @NgModule({\n * imports: [\n * CapitalOsModule.forRoot({\n * getToken: async () => {\n * const response = await fetch('/api/capitalos/token');\n * const data = await response.json();\n * return data.token;\n * },\n * enableLogging: true,\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n */\n@NgModule({\n imports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent],\n exports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent],\n})\nexport class CapitalOsModule {\n static forRoot(config: CapitalOsConfig): ModuleWithProviders<CapitalOsModule> {\n return {\n ngModule: CapitalOsModule,\n providers: [{ provide: CAPITALOS_CONFIG, useValue: config }, TokenExchangeService, CapitalOsAuthService],\n }\n }\n}\n","/*\n * Public API Surface of @capitalos/angular\n */\n\n// Components\nexport { CardsAppComponent } from './lib/cards-app.component'\nexport { BillPayAppComponent } from './lib/billpay-app.component'\nexport { OnboardingComponent } from './lib/onboarding.component'\n\n// Services\nexport { CapitalOsAuthService } from './lib/capitalos-auth.service'\nexport type { AuthState } from './lib/capitalos-auth.service'\n\n// Provider (standalone)\nexport { provideCapitalOs, CAPITALOS_CONFIG } from './lib/provide-capitalos'\nexport type { CapitalOsConfig } from './lib/provide-capitalos'\n\n// Module (NgModule-based apps)\nexport { CapitalOsModule } from './lib/capitalos.module'\n\n// Re-export commonly used types from core\nexport type { ThemeColorScheme, Logger, TokenData, RawErrorDetails, Account, AccountStatus } from '@capitalos/core'\n\nexport { CapitalOSError, ErrorCode } from '@capitalos/core'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capitalos-angular.mjs","sources":["../../../projects/capitalos-angular/src/lib/provide-capitalos.ts","../../../projects/capitalos-angular/src/lib/token-exchange.service.ts","../../../projects/capitalos-angular/src/lib/capitalos-auth.service.ts","../../../projects/capitalos-angular/src/lib/version.ts","../../../projects/capitalos-angular/src/lib/base-iframe.component.ts","../../../projects/capitalos-angular/src/lib/cards-app.component.ts","../../../projects/capitalos-angular/src/lib/billpay-app.component.ts","../../../projects/capitalos-angular/src/lib/onboarding.component.ts","../../../projects/capitalos-angular/src/lib/capitalos.module.ts","../../../projects/capitalos-angular/src/public-api.ts","../../../projects/capitalos-angular/src/capitalos-angular.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core'\nimport { Logger, ThemeColorScheme } from '@capitalos/core'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { TokenExchangeService } from './token-exchange.service'\n\n/**\n * Configuration for CapitalOS SDK\n */\nexport interface CapitalOsConfig {\n /**\n * Function that returns a promise resolving to a one-time token.\n * This is typically a call to your backend that initiates a CapitalOS login.\n */\n getToken: () => Promise<string>\n\n /**\n * Whether to enable logging for debugging purposes.\n */\n enableLogging?: boolean\n\n /**\n * Optional custom logger for capturing SDK logs.\n */\n logger?: Logger\n\n /**\n * Theme color scheme for the SDK components.\n */\n theme?: ThemeColorScheme\n}\n\n/**\n * Injection token for CapitalOS configuration\n */\nexport const CAPITALOS_CONFIG = new InjectionToken<CapitalOsConfig>('CAPITALOS_CONFIG')\n\n/**\n * Provides the CapitalOS SDK with the specified configuration.\n *\n * Usage in app.config.ts (standalone):\n * ```typescript\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideCapitalOs({\n * getToken: async () => {\n * const response = await fetch('/api/capitalos/token');\n * const data = await response.json();\n * return data.token;\n * },\n * enableLogging: true,\n * }),\n * ],\n * });\n * ```\n *\n * For NgModule-based apps, use CapitalOsModule.forRoot() instead.\n */\nexport function provideCapitalOs(config: CapitalOsConfig): Provider[] {\n return [\n {\n provide: CAPITALOS_CONFIG,\n useValue: config,\n },\n TokenExchangeService,\n CapitalOsAuthService,\n ]\n}\n","import { Injectable, inject, OnDestroy } from '@angular/core'\nimport { exchangeOneTimeToken } from '@capitalos/core'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\n\nconst TOKEN_EXCHANGE_TIMEOUT_MS = 10_000\n\nexport interface TokenExchangeResult {\n longLivedToken: string\n baseUrl: string\n}\n\n/**\n * Service responsible for exchanging one-time tokens for long-lived JWTs.\n * Creates a hidden iframe to perform the token exchange securely.\n */\n@Injectable()\nexport class TokenExchangeService implements OnDestroy {\n private readonly config = inject(CAPITALOS_CONFIG)\n private isDestroyed = false\n private activeAbortController: AbortController | null = null\n\n ngOnDestroy(): void {\n this.isDestroyed = true\n this.activeAbortController?.abort()\n this.activeAbortController = null\n }\n\n /**\n * Exchanges a one-time token for a long-lived JWT.\n * Delegates to @capitalos/core (browser-only) which handles iframe + Penpal lifecycle.\n */\n async exchange(oneTimeToken: string, options: { enableLogging?: boolean } = {}): Promise<TokenExchangeResult> {\n if (this.isDestroyed) {\n throw new Error('TokenExchangeService was destroyed')\n }\n\n // Abort any in-flight exchange when a new one begins.\n this.activeAbortController?.abort()\n\n const abortController = new AbortController()\n this.activeAbortController = abortController\n\n try {\n return await exchangeOneTimeToken({\n oneTimeToken,\n enableLogging: options.enableLogging,\n logger: this.config.logger,\n timeoutMs: TOKEN_EXCHANGE_TIMEOUT_MS,\n signal: abortController.signal,\n })\n } finally {\n if (this.activeAbortController === abortController) {\n this.activeAbortController = null\n }\n }\n }\n}\n","import { Injectable, inject, OnDestroy } from '@angular/core'\nimport { BehaviorSubject, Observable, combineLatest } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { TokenData, TokenType, TokenParamKey, TokenParamLocation, createLogger } from '@capitalos/core'\nimport { TokenExchangeService } from './token-exchange.service'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\n\n/**\n * Converts an unknown error to an Error object\n */\nfunction toError(error: unknown): Error {\n if (error instanceof Error) {\n return error\n }\n return new Error(String(error))\n}\n\n/**\n * Authentication state enum\n */\nexport type AuthState = 'idle' | 'loading' | 'authenticated' | 'error'\n\n/**\n * Service that manages CapitalOS authentication state.\n * This is the Angular equivalent of React's CapitalOsAuthenticationProvider.\n *\n * It handles:\n * - Fetching one-time tokens via the provided getToken callback\n * - Exchanging one-time tokens for long-lived JWTs\n * - Managing token state via observables\n * - Auto-refreshing tokens when they expire\n */\n@Injectable()\nexport class CapitalOsAuthService implements OnDestroy {\n private readonly config = inject(CAPITALOS_CONFIG)\n private readonly tokenExchangeService = inject(TokenExchangeService)\n\n // Private BehaviorSubjects for internal state\n private readonly _longLivedToken$ = new BehaviorSubject<string | undefined>(undefined)\n private readonly _baseUrl$ = new BehaviorSubject<string | undefined>(undefined)\n private readonly _isLoading$ = new BehaviorSubject(false)\n private readonly _error$ = new BehaviorSubject<Error | undefined>(undefined)\n\n // Public observable for token data\n readonly tokenData$: Observable<TokenData | undefined> = combineLatest([this._longLivedToken$, this._baseUrl$]).pipe(\n map(([token, baseUrl]) => {\n if (!token || !baseUrl) {\n return undefined\n }\n\n return {\n token,\n tokenType: TokenType.longLived,\n baseUrl,\n paramKey: TokenParamKey.accessToken,\n paramLocation: TokenParamLocation.hash,\n }\n })\n )\n\n // Public observables for UI state\n readonly isLoading$: Observable<boolean> = this._isLoading$.asObservable()\n readonly error$: Observable<Error | undefined> = this._error$.asObservable()\n readonly authState$: Observable<AuthState> = combineLatest([this._isLoading$, this._error$, this.tokenData$]).pipe(\n map(([isLoading, error, tokenData]) => {\n if (isLoading) {\n return 'loading'\n }\n if (error) {\n return 'error'\n }\n if (tokenData) {\n return 'authenticated'\n }\n return 'idle'\n })\n )\n\n private isDestroyed = false\n private logger: ReturnType<typeof createLogger>\n\n constructor() {\n this.logger = createLogger(this.config.enableLogging, this.config.logger)\n\n // Start authentication flow eagerly on construction.\n // This is intentional: auth begins as soon as the app boots so the token\n // is ready when CardsAppComponent renders, reducing perceived load time.\n this.refreshToken()\n }\n\n ngOnDestroy(): void {\n this.isDestroyed = true\n }\n\n /**\n * Invalidates the current token, triggering a refresh.\n * Called when the iframe signals that the token has expired.\n */\n invalidateToken(): void {\n this.logger.log('CapitalOsAuthService: Invalidating token')\n this._longLivedToken$.next(undefined)\n this._baseUrl$.next(undefined)\n this._error$.next(undefined)\n this.refreshToken()\n }\n\n /**\n * Refreshes the token by fetching a new one-time token and exchanging it.\n */\n async refreshToken(): Promise<void> {\n if (this.isDestroyed) {\n return\n }\n\n // Prevent concurrent refresh calls - if already loading, skip\n if (this._isLoading$.value) {\n this.logger.log('CapitalOsAuthService: Token refresh already in progress, skipping')\n return\n }\n\n this.logger.log('CapitalOsAuthService: Starting token refresh')\n this._isLoading$.next(true)\n this._error$.next(undefined)\n\n try {\n // Get one-time token from platform\n const oneTimeToken = await this.config.getToken()\n this.logger.log('CapitalOsAuthService: Received one-time token')\n\n if (this.isDestroyed) {\n return\n }\n\n // Exchange for long-lived token\n const result = await this.tokenExchangeService.exchange(oneTimeToken, {\n enableLogging: this.config.enableLogging,\n })\n\n if (this.isDestroyed) {\n return\n }\n\n this._longLivedToken$.next(result.longLivedToken)\n this._baseUrl$.next(result.baseUrl)\n this._error$.next(undefined)\n this.logger.log('CapitalOsAuthService: Token exchange complete')\n } catch (rawError) {\n if (!this.isDestroyed) {\n const error = toError(rawError)\n this.logger.error(`CapitalOsAuthService: Token refresh failed: ${error.message}`)\n this._error$.next(error)\n }\n } finally {\n if (!this.isDestroyed) {\n this._isLoading$.next(false)\n }\n }\n }\n}\n","// AUTO-GENERATED FILE - DO NOT EDIT\n// Generated by: scripts/generate-version.js\n// Source: projects/capitalos-angular/package.json\n\nexport const SDK_VERSION = '0.3.0'\n","import {\n inject,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n AfterViewInit,\n OnDestroy,\n Directive,\n} from '@angular/core'\nimport { Subscription } from 'rxjs'\nimport {\n IframeManager,\n CapitalOSError,\n TokenData,\n RawErrorDetails,\n ThemeColorScheme,\n RenderingContext,\n IframeManagerConfig,\n} from '@capitalos/core'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { CAPITALOS_CONFIG } from './provide-capitalos'\nimport { SDK_VERSION } from './version'\n\n/**\n * Common template for all iframe components.\n * Angular doesn't support inheriting templates, so subclasses must use this constant.\n */\nexport const IFRAME_COMPONENT_TEMPLATE = `<div #iframeContainer class=\"capitalos-iframe-container\"></div>`\n\n/**\n * Common styles for all iframe components.\n * Angular doesn't support inheriting styles, so subclasses must use this constant.\n *\n * Why Angular needs these styles (unlike React/Vue):\n * Angular component selectors (e.g., <capitalos-cards-app>) remain in the DOM as real elements.\n * Without :host styling, the component element may collapse or not fill its container.\n * In React/Vue, component tags are replaced by rendered content, so no wrapper styling is needed.\n */\nexport const IFRAME_COMPONENT_STYLES = [\n `\n :host {\n display: block;\n width: 100%;\n }\n\n .capitalos-iframe-container {\n width: 100%;\n }\n `,\n]\n\n/**\n * Component-specific callbacks to pass to IframeManager.\n * Excludes common callbacks (onLoad, onError, onTokenExpired) which the base class handles.\n */\nexport type ComponentCallbacks = Omit<IframeManagerConfig['callbacks'], 'onLoad' | 'onError' | 'onTokenExpired'>\n\n/**\n * Abstract base class for CapitalOS iframe components.\n *\n * Handles common functionality:\n * - Token subscription and iframe initialization\n * - Common inputs (theme, heightOffsetPx, enableLogging)\n * - Common outputs (loaded, error)\n * - Lifecycle management (cleanup on destroy)\n *\n * Subclasses must implement:\n * - `getRenderingContext()` - returns the component-specific rendering context\n *\n * Subclasses may override:\n * - `getComponentCallbacks()` - returns component-specific Penpal callbacks\n *\n * Note: Rendering context inputs (e.g., entryPoint, exitPoint for Onboarding) are read once\n * at iframe initialization. Changes to these inputs after the iframe loads will NOT trigger\n * re-initialization. This matches the behavior of the React SDK.\n *\n * @example\n * ```typescript\n * @Component({ selector: 'my-component', ... })\n * export class MyComponent extends BaseIframeComponent {\n * protected getRenderingContext(): RenderingContext {\n * return { entryPoint: 'myComponent' }\n * }\n * }\n * ```\n */\n@Directive()\nexport abstract class BaseIframeComponent implements AfterViewInit, OnDestroy {\n // Injected services\n protected readonly authService = inject(CapitalOsAuthService)\n protected readonly config = inject(CAPITALOS_CONFIG)\n\n // Common inputs\n @Input() theme?: ThemeColorScheme\n @Input() heightOffsetPx = 12\n @Input() enableLogging?: boolean\n\n // Common outputs\n @Output() loaded = new EventEmitter<void>()\n @Output() error = new EventEmitter<CapitalOSError>()\n\n // View children\n @ViewChild('iframeContainer') iframeContainer?: ElementRef<HTMLDivElement>\n\n // Internal state\n private iframeManager?: IframeManager\n private tokenDataSubscription?: Subscription\n\n ngAfterViewInit(): void {\n // Subscribe to tokenData$ and initialize iframe when ready\n this.tokenDataSubscription = this.authService.tokenData$.subscribe((tokenData) => {\n if (tokenData && this.iframeContainer) {\n this.initializeIframe(tokenData, this.iframeContainer.nativeElement)\n }\n })\n }\n\n ngOnDestroy(): void {\n this.tokenDataSubscription?.unsubscribe()\n this.iframeManager?.destroy()\n }\n\n /**\n * Returns the rendering context for this component.\n * Must be implemented by subclasses.\n */\n protected abstract getRenderingContext(): RenderingContext\n\n /**\n * Returns component-specific Penpal callbacks.\n * Override in subclasses that need callbacks (e.g., Onboarding, TokenExchange).\n */\n protected getComponentCallbacks(): ComponentCallbacks {\n return {}\n }\n\n private initializeIframe(tokenData: TokenData, container: HTMLElement): void {\n // Destroy previous iframe if exists\n this.iframeManager?.destroy()\n\n const resolvedEnableLogging = this.enableLogging ?? this.config.enableLogging ?? false\n const resolvedTheme = this.theme ?? this.config.theme\n\n this.iframeManager = new IframeManager({\n container,\n tokenData,\n renderingContext: this.getRenderingContext(),\n theme: resolvedTheme,\n enableLogging: resolvedEnableLogging,\n logger: this.config.logger,\n sdkVersion: SDK_VERSION,\n heightOffsetPx: this.heightOffsetPx,\n callbacks: {\n onLoad: () => {\n this.loaded.emit()\n },\n onError: (rawError: RawErrorDetails) => {\n const capitalOsError = new CapitalOSError(rawError)\n this.error.emit(capitalOsError)\n },\n onTokenExpired: () => {\n this.authService.invalidateToken()\n },\n ...this.getComponentCallbacks(),\n },\n })\n }\n}\n","import { Component } from '@angular/core'\nimport { RenderingContext } from '@capitalos/core'\nimport { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES } from './base-iframe.component'\n\n/**\n * CardsApp component that renders the CapitalOS cards interface in an iframe.\n *\n * The component emits events for loading state - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!cardsLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-cards-app\n * (loaded)=\"cardsLoaded = true\"\n * (error)=\"onCardsError($event)\"\n * ></capitalos-cards-app>\n * ```\n */\n@Component({\n selector: 'capitalos-cards-app',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class CardsAppComponent extends BaseIframeComponent {\n protected getRenderingContext(): RenderingContext {\n return { entryPoint: 'cardsApp' }\n }\n}\n","import { Component } from '@angular/core'\nimport { RenderingContext } from '@capitalos/core'\nimport { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES } from './base-iframe.component'\n\n/**\n * BillPayApp component that renders the CapitalOS bill payment interface in an iframe.\n *\n * The component emits events for loading state - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!billPayLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-billpay-app\n * (loaded)=\"billPayLoaded = true\"\n * (error)=\"onBillPayError($event)\"\n * ></capitalos-billpay-app>\n * ```\n */\n@Component({\n selector: 'capitalos-billpay-app',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class BillPayAppComponent extends BaseIframeComponent {\n protected getRenderingContext(): RenderingContext {\n return { entryPoint: 'billPayApp' }\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core'\nimport { RenderingContext, Account, OnboardingEntryPoint, OnboardingExitPoint, CopyOverrides } from '@capitalos/core'\nimport {\n BaseIframeComponent,\n ComponentCallbacks,\n IFRAME_COMPONENT_TEMPLATE,\n IFRAME_COMPONENT_STYLES,\n} from './base-iframe.component'\n\n/**\n * Onboarding component that renders the CapitalOS onboarding flow in an iframe.\n *\n * The component emits events for loading state and completion - consumers should handle their own loading UI:\n *\n * ```html\n * <div *ngIf=\"!onboardingLoaded\">\n * <my-loading-spinner></my-loading-spinner>\n * </div>\n * <capitalos-onboarding\n * [entryPoint]=\"'welcome'\"\n * [exitPoint]=\"'activation'\"\n * (loaded)=\"onboardingLoaded = true\"\n * (error)=\"onOnboardingError($event)\"\n * (done)=\"onOnboardingComplete($event)\"\n * ></capitalos-onboarding>\n * ```\n */\n@Component({\n selector: 'capitalos-onboarding',\n standalone: true,\n template: IFRAME_COMPONENT_TEMPLATE,\n styles: IFRAME_COMPONENT_STYLES,\n})\nexport class OnboardingComponent extends BaseIframeComponent {\n // Onboarding-specific inputs\n @Input() entryPoint?: OnboardingEntryPoint\n @Input() exitPoint?: OnboardingExitPoint\n @Input() allowExitOnNonApproved?: boolean\n /** Identifies the onboarding product context. Defaults to `'card'` for backward compatibility. */\n @Input() product?: 'billPay' | 'card'\n /** Custom text for the final \"done\" button shown at the end of the onboarding flow. */\n @Input() doneButtonText?: string\n\n // Onboarding-specific outputs\n @Output() done = new EventEmitter<Account>()\n\n protected getRenderingContext(): RenderingContext {\n return {\n entryPoint: 'onboarding',\n onboardingEntryPoint: this.entryPoint,\n onboardingExitPoint: this.exitPoint,\n allowExitOnNonApproved: this.allowExitOnNonApproved,\n product: this.product,\n copy: this.doneButtonText\n ? ({\n 'onboarding.doneButton': this.doneButtonText,\n 'onboarding.continueButton': this.doneButtonText,\n 'activation.successButton': this.doneButtonText,\n } as CopyOverrides)\n : undefined,\n }\n }\n\n protected override getComponentCallbacks(): ComponentCallbacks {\n return {\n onboarding: {\n onDone: (account: Account) => {\n this.done.emit(account)\n },\n },\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core'\nimport { CardsAppComponent } from './cards-app.component'\nimport { BillPayAppComponent } from './billpay-app.component'\nimport { OnboardingComponent } from './onboarding.component'\nimport { CapitalOsConfig, CAPITALOS_CONFIG } from './provide-capitalos'\nimport { CapitalOsAuthService } from './capitalos-auth.service'\nimport { TokenExchangeService } from './token-exchange.service'\n\n/**\n * NgModule for CapitalOS SDK.\n *\n * Use this module for NgModule-based Angular applications.\n * For standalone applications, use provideCapitalOs() instead.\n *\n * Usage:\n * ```typescript\n * @NgModule({\n * imports: [\n * CapitalOsModule.forRoot({\n * getToken: async () => {\n * const response = await fetch('/api/capitalos/token');\n * const data = await response.json();\n * return data.token;\n * },\n * enableLogging: true,\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n */\n@NgModule({\n imports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent],\n exports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent],\n})\nexport class CapitalOsModule {\n static forRoot(config: CapitalOsConfig): ModuleWithProviders<CapitalOsModule> {\n return {\n ngModule: CapitalOsModule,\n providers: [{ provide: CAPITALOS_CONFIG, useValue: config }, TokenExchangeService, CapitalOsAuthService],\n }\n }\n}\n","/*\n * Public API Surface of @capitalos/angular\n */\n\n// Components\nexport { CardsAppComponent } from './lib/cards-app.component'\nexport { BillPayAppComponent } from './lib/billpay-app.component'\nexport { OnboardingComponent } from './lib/onboarding.component'\n\n// Services\nexport { CapitalOsAuthService } from './lib/capitalos-auth.service'\nexport type { AuthState } from './lib/capitalos-auth.service'\n\n// Provider (standalone)\nexport { provideCapitalOs, CAPITALOS_CONFIG } from './lib/provide-capitalos'\nexport type { CapitalOsConfig } from './lib/provide-capitalos'\n\n// Module (NgModule-based apps)\nexport { CapitalOsModule } from './lib/capitalos.module'\n\n// Re-export commonly used types from core\nexport type { ThemeColorScheme, Logger, TokenData, RawErrorDetails, Account, AccountStatus } from '@capitalos/core'\n\nexport { CapitalOSError, ErrorCode } from '@capitalos/core'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -24,11 +24,13 @@ export declare class OnboardingComponent extends BaseIframeComponent {
24
24
  entryPoint?: OnboardingEntryPoint;
25
25
  exitPoint?: OnboardingExitPoint;
26
26
  allowExitOnNonApproved?: boolean;
27
+ /** Identifies the onboarding product context. Defaults to `'card'` for backward compatibility. */
28
+ product?: 'billPay' | 'card';
27
29
  /** Custom text for the final "done" button shown at the end of the onboarding flow. */
28
30
  doneButtonText?: string;
29
31
  done: EventEmitter<Account>;
30
32
  protected getRenderingContext(): RenderingContext;
31
33
  protected getComponentCallbacks(): ComponentCallbacks;
32
34
  static ɵfac: i0.ɵɵFactoryDeclaration<OnboardingComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<OnboardingComponent, "capitalos-onboarding", never, { "entryPoint": "entryPoint"; "exitPoint": "exitPoint"; "allowExitOnNonApproved": "allowExitOnNonApproved"; "doneButtonText": "doneButtonText"; }, { "done": "done"; }, never, never, true>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<OnboardingComponent, "capitalos-onboarding", never, { "entryPoint": "entryPoint"; "exitPoint": "exitPoint"; "allowExitOnNonApproved": "allowExitOnNonApproved"; "product": "product"; "doneButtonText": "doneButtonText"; }, { "done": "done"; }, never, never, true>;
34
36
  }
package/lib/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.2.1";
1
+ export declare const SDK_VERSION = "0.3.0";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capitalos/angular",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Angular SDK for CapitalOS",
5
5
  "publishConfig": {
6
6
  "directory": "../../dist/capitalos-angular"
@@ -10,7 +10,7 @@
10
10
  "@angular/core": ">=14.0.0"
11
11
  },
12
12
  "dependencies": {
13
- "@capitalos/core": "^0.2.0",
13
+ "@capitalos/core": "^0.3.0",
14
14
  "tslib": "^2.3.0"
15
15
  },
16
16
  "sideEffects": false,