Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions app/src/http/AuthHttpClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,16 @@ class AuthHttpClient extends CoreAuthHttpClient {
this._resetRequestInterceptor();
}

/**
* Populate misc headers
*
* @param {MiscHeaders} miscHeaders
*/
setMiscHeaders(miscHeaders) {
this._context.miscHeaders = miscHeaders;
this._resetRequestInterceptor();
}

/**
* Unlinks bank accounts previously linked by the linkAccounts call.
*
Expand Down
18 changes: 18 additions & 0 deletions app/src/main/Member.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import type {
BulkTransfer,
BulkTransferBodyTransfers,
CustomerTrackingMetadata,
MiscHeaders,
} from '@token-io/core';

/**
Expand Down Expand Up @@ -840,6 +841,23 @@ export default class Member extends CoreMember {
});
}

/**
* Populate misc headers in token calls
*
* @param {MiscHeaders} miscHeaders
*/
setMiscHeaders(
miscHeaders: MiscHeaders,
): void {
return Util.callSync(this.setMiscHeaders, () => {
if(miscHeaders && Object.keys(miscHeaders).length === 0){
throw new Error('Misc headers are empty.');
}

this._client.setMiscHeaders(miscHeaders);
});
}

/**
* Generates a blocking function to cancel a token. (Called by the payer or the redeemer)
*
Expand Down
2 changes: 1 addition & 1 deletion core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@token-io/core",
"version": "1.0.25",
"version": "1.0.26",
"description": "Token JavaScript Core SDK",
"license": "ISC",
"author": {
Expand Down
8 changes: 4 additions & 4 deletions core/src/http/AuthHttpClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ import AuthContext from './AuthContext';
import config from '../config.json';
import ErrorHandler from './ErrorHandler';
import CustomerTrackingMetadataHeader from './CustomerTrackingMetadataHeader';
import MiscHeaders from './MiscHeaders';
import DeveloperHeader from './DeveloperHeader';
import VersionHeader from './VersionHeader';
import stringify from 'fast-json-stable-stringify';
import setAdditionalHeaders from './setAdditionalHeaders';

/**
* Client for making authenticated requests to the Token gateway.
* defaultHeaders argument is for passing in optional headers like https://developer.token.io/token_rest_api_doc/content/0_-_common/request-headers.htm
*/
export class AuthHttpClient {
constructor({
Expand All @@ -24,7 +24,6 @@ export class AuthHttpClient {
loggingEnabled,
customSdkUrl,
customResponseInterceptor,
defaultHeaders
}) {
if (!(config.urls[env] || customSdkUrl)) {
throw new Error('Invalid environment string. Please use one of: ' +
Expand All @@ -44,7 +43,6 @@ export class AuthHttpClient {
this._authHeader = new AuthHeader(customSdkUrl || config.urls[env], this);

this._developerKey = developerKey;
this.defaultHeaders = defaultHeaders;
this._resetRequestInterceptor();

const errorHandler = new ErrorHandler(globalRpcErrorCallback);
Expand Down Expand Up @@ -623,12 +621,14 @@ export class AuthHttpClient {
const versionHeader = new VersionHeader();
const developerHeader = new DeveloperHeader(this._developerKey);
const customerTrackingMetadataHeader = new CustomerTrackingMetadataHeader();
const miscHeaders = new MiscHeaders();
this._interceptor = this._instance.interceptors.request.use(async request => {
await this._authHeader.addAuthorizationHeader(this._memberId, request, this._context);
versionHeader.addVersionHeader(request);
developerHeader.addDeveloperHeader(request);
customerTrackingMetadataHeader.addCustomerTrackingMetadata(request, this._context);
setAdditionalHeaders(request, this.defaultHeaders);
miscHeaders.setMiscHeaders(request, this._context)
setAdditionalHeaders(request);

return request;
});
Expand Down
20 changes: 20 additions & 0 deletions core/src/http/MiscHeaders.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* Class to add misc headers
*/
class MiscHeaders {
/**
* Adds the misc headers
*
* @param {Object} config - config of the request
* @param {AuthContext} context - auth context for access token redemption
*/
setMiscHeaders(config, context) {
if(context && Object.keys(context.miscHeaders).length > 0){
if (context.miscHeaders.jsonError){
config.headers['token-json-error'] = context.miscHeaders.jsonError;
}
}
}
}

export default MiscHeaders;
7 changes: 1 addition & 6 deletions core/src/http/setAdditionalHeaders.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
export default function setAdditionalHeaders(config, defaultHeaders = {}) {
// defaultHeaders are set when the http client class is instantiated and applies to all requests
if (defaultHeaders) {
config.headers = {...config.headers, ...defaultHeaders}
}

export default function setAdditionalHeaders(config) {
// requestHeaders are set when a method fires and applies to only one request
if (config.requestHeaders) {
config.headers = {...config.headers, ...config.requestHeaders}
Expand Down
27 changes: 2 additions & 25 deletions core/src/main/TokenClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ export class TokenClient {
ManualCryptoEngine: Class<MemoryCryptoEngine>;
Util: Util;
_unauthenticatedClient: HttpClient;
defaultHeaders: Object;

constructor(options: {
// Token environment to target, defaults to 'prd'
Expand All @@ -40,16 +39,13 @@ export class TokenClient {
customSdkUrl?: string,
// custom HTTP response interceptor for axios
customResponseInterceptor?: Object,
// default headers passed into a authHttpClient
defaultHeaders?: Object
} = {}) {
this.options = options;
this.options.developerKey = this.options.developerKey || config.devKey.default;
this.KeyLevel = config.KeyLevel;
this.Crypto = Crypto;
this.MemoryCryptoEngine = MemoryCryptoEngine;
this.ManualCryptoEngine = ManualCryptoEngine;
this.setDefaultHeaders(options.defaultHeaders);
}

/**
Expand Down Expand Up @@ -101,7 +97,7 @@ export class TokenClient {
const member = new Member({
memberId: response.data.memberId,
cryptoEngine: engine,
...this.options,
...this.options
});
alias && await member.addAlias(alias);
return member;
Expand Down Expand Up @@ -130,8 +126,7 @@ export class TokenClient {
return new Member({
memberId,
cryptoEngine: engine,
...this.options,
defaultHeaders: this.getDefaultHeaders()
...this.options
});
});
}
Expand Down Expand Up @@ -186,22 +181,4 @@ export class TokenClient {
return res.data.countries;
});
}

/**
* Sets default headers passed into authHttpClient
*
* @param defaultHeaders - object with string values passed into axios headers
*/
setDefaultHeaders(defaultHeaders: Object) {
this.defaultHeaders = defaultHeaders || {};
}

/**
* Gets default headers passed into authHttpClient. Used to understand what default headers are existing
*
* @return object with string values
*/
getDefaultHeaders() {
return this.defaultHeaders;
}
}
4 changes: 4 additions & 0 deletions core/src/types.js
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,10 @@ export type CustomerTrackingMetadata = {
userAgent: string,
};

export type MiscHeaders = {
jsonError: boolean
};

export type StandingOrder = {
id: string,
status: string,
Expand Down
22 changes: 22 additions & 0 deletions tpp/src/http/AuthHttpClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,28 @@ class AuthHttpClient extends CoreAuthHttpClient {
config.KeyLevel.STANDARD),
};
}

/**
* Populate customer tracking metadata headers
*
* @param {CustomerTrackingMetadata} customerTrackingMetadata
*/
addCustomerTrackingMetadata(customerTrackingMetadata) {
this._context.customerInitiated = true;
this._context.customerTrackingMetadata = customerTrackingMetadata;
this._resetRequestInterceptor();
}

/**
* Populate misc headers
*
* @param {MiscHeaders} miscHeaders
*/
setMiscHeaders(miscHeaders) {
this._context.miscHeaders = miscHeaders;
this._resetRequestInterceptor();
}

}

export default AuthHttpClient;
36 changes: 36 additions & 0 deletions tpp/src/main/Member.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import type {
CustomerTrackingMetadata,
GetEidasVerificationStatusResponse,
WebhookConfig,
MiscHeaders,
} from '@token-io/core';

/**
Expand Down Expand Up @@ -629,4 +630,39 @@ export default class Member extends CoreMember {
await this._client.deleteWebhookConfig();
});
}

/**
* Populate customer tracking metadata headers in token calls.
*
* @param {CustomerTrackingMetadata} customerTrackingMetadata
*/
addCustomerTrackingMetadata(
customerTrackingMetadata: CustomerTrackingMetadata,
): void {
return Util.callSync(this.addCustomerTrackingMetadata, () => {
if(customerTrackingMetadata && Object.keys(customerTrackingMetadata).length === 0){
throw new Error('User tracking metadata is empty.');
}

this._client.addCustomerTrackingMetadata(customerTrackingMetadata);
});
}

/**
* Populate misc headers in token calls
*
* @param {MiscHeaders} miscHeaders
*/
setMiscHeaders(
miscHeaders: MiscHeaders,
): void {
return Util.callSync(this.setMiscHeaders, () => {
if(miscHeaders && Object.keys(miscHeaders).length === 0){
throw new Error('Misc headers are empty.');
}

this._client.setMiscHeaders(miscHeaders);
});
}

}
2 changes: 0 additions & 2 deletions tpp/src/main/TokenClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,6 @@ export class TokenClient extends Core {
customSdkUrl?: string,
// custom HTTP response interceptor for axios
customResponseInterceptor?: Object,
// default headers passed into a authHttpClient
defaultHeaders?: Object,
}) {
super(options);
this.options.keyDir = options.keyDir;
Expand Down