@frankieone/one-sdk 0.5.5-rc → 0.6.5-rc
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.
- package/README.md +38 -36
- package/dist/commit.txt +2 -2
- package/dist/esm/modules/common/constants.d.ts +1 -0
- package/dist/esm/modules/common/constants.js +2 -0
- package/dist/esm/modules/common/constants.js.map +1 -1
- package/dist/esm/modules/common/modules/{runIfWhen.d.ts → HOF.d.ts} +17 -2
- package/dist/esm/modules/common/modules/{runIfWhen.js → HOF.js} +22 -3
- package/dist/esm/modules/common/modules/HOF.js.map +1 -0
- package/dist/esm/modules/common/modules/LocalStorage.d.ts +6 -0
- package/dist/esm/modules/common/modules/LocalStorage.js +21 -0
- package/dist/esm/modules/common/modules/LocalStorage.js.map +1 -0
- package/dist/esm/modules/common/modules/env2url.d.ts +6 -1
- package/dist/esm/modules/common/modules/env2url.js +17 -1
- package/dist/esm/modules/common/modules/env2url.js.map +1 -1
- package/dist/esm/modules/common/modules/url.d.ts +5 -0
- package/dist/esm/modules/common/modules/url.js +10 -0
- package/dist/esm/modules/common/modules/url.js.map +1 -0
- package/dist/esm/modules/common/types/Configuration.d.ts +15 -0
- package/dist/esm/modules/federation/constants.d.ts +2 -0
- package/dist/esm/modules/federation/constants.js +3 -0
- package/dist/esm/modules/federation/constants.js.map +1 -0
- package/dist/esm/modules/federation/index.d.ts +3 -0
- package/dist/esm/modules/federation/index.js +69 -0
- package/dist/esm/modules/federation/index.js.map +1 -0
- package/dist/esm/modules/federation/parseConfiguration.d.ts +2 -0
- package/dist/esm/modules/federation/parseConfiguration.js +43 -0
- package/dist/esm/modules/federation/parseConfiguration.js.map +1 -0
- package/dist/esm/modules/federation/types/events.d.ts +4 -0
- package/dist/esm/modules/federation/types/events.js +2 -0
- package/dist/esm/modules/federation/types/events.js.map +1 -0
- package/dist/esm/modules/federation/types/module.d.ts +8 -0
- package/dist/esm/modules/federation/types/module.js +2 -0
- package/dist/esm/modules/federation/types/module.js.map +1 -0
- package/dist/esm/modules/federation/types/wrapper.d.ts +18 -0
- package/dist/esm/modules/federation/types/wrapper.js +2 -0
- package/dist/esm/modules/federation/types/wrapper.js.map +1 -0
- package/dist/esm/modules/federation/vendors/Singpass.d.ts +8 -0
- package/dist/esm/modules/federation/vendors/Singpass.js +110 -0
- package/dist/esm/modules/federation/vendors/Singpass.js.map +1 -0
- package/dist/esm/modules/frankie-client/DummyFrankieApiClient.d.ts +28 -22
- package/dist/esm/modules/frankie-client/DummyFrankieApiClient.js +47 -45
- package/dist/esm/modules/frankie-client/DummyFrankieApiClient.js.map +1 -1
- package/dist/esm/modules/frankie-client/FrankieApiClient.d.ts +6 -8
- package/dist/esm/modules/frankie-client/FrankieApiClient.js +10 -25
- package/dist/esm/modules/frankie-client/FrankieApiClient.js.map +1 -1
- package/dist/esm/modules/frankie-client/clients/ApplicantClient.js +7 -11
- package/dist/esm/modules/frankie-client/clients/ApplicantClient.js.map +1 -1
- package/dist/esm/modules/frankie-client/clients/BaseClient.d.ts +1 -3
- package/dist/esm/modules/frankie-client/clients/BaseClient.js +4 -3
- package/dist/esm/modules/frankie-client/clients/BaseClient.js.map +1 -1
- package/dist/esm/modules/frankie-client/clients/FederationClient.d.ts +11 -0
- package/dist/esm/modules/frankie-client/clients/FederationClient.js +24 -0
- package/dist/esm/modules/frankie-client/clients/FederationClient.js.map +1 -0
- package/dist/esm/modules/frankie-client/clients/StorageClient.d.ts +10 -0
- package/dist/esm/modules/frankie-client/clients/StorageClient.js +23 -0
- package/dist/esm/modules/frankie-client/clients/StorageClient.js.map +1 -0
- package/dist/esm/modules/frankie-client/index.d.ts +8 -2
- package/dist/esm/modules/frankie-client/index.js +23 -32
- package/dist/esm/modules/frankie-client/index.js.map +1 -1
- package/dist/esm/modules/frankie-client/mocks/federation/index.d.ts +4 -0
- package/dist/esm/modules/frankie-client/mocks/federation/index.js +32 -0
- package/dist/esm/modules/frankie-client/mocks/federation/index.js.map +1 -0
- package/dist/esm/modules/frankie-client/mocks/index.js +4 -0
- package/dist/esm/modules/frankie-client/mocks/index.js.map +1 -1
- package/dist/esm/modules/frankie-client/mocks/individual/loadIndividual.d.ts +1 -1
- package/dist/esm/modules/frankie-client/mocks/individual/loadIndividual.js +2 -2
- package/dist/esm/modules/frankie-client/mocks/individual/loadIndividual.js.map +1 -1
- package/dist/esm/modules/index.d.ts +15 -3
- package/dist/esm/modules/index.js +18 -9
- package/dist/esm/modules/index.js.map +1 -1
- package/dist/esm/modules/individual/actions/search.js +4 -5
- package/dist/esm/modules/individual/actions/search.js.map +1 -1
- package/dist/esm/modules/individual/types/events.d.ts +1 -1
- package/dist/esm/modules/meta.json +1 -1
- package/dist/esm/modules/ocr/actions/start.js +6 -14
- package/dist/esm/modules/ocr/actions/start.js.map +1 -1
- package/dist/esm/modules/sdk/index.js +3 -1
- package/dist/esm/modules/sdk/index.js.map +1 -1
- package/dist/esm/modules/sdk/initialisation/componentLoader.js +1 -1
- package/dist/esm/modules/sdk/initialisation/componentLoader.js.map +1 -1
- package/dist/esm/modules/sdk/initialisation/configurationParser.js +4 -7
- package/dist/esm/modules/sdk/initialisation/configurationParser.js.map +1 -1
- package/dist/esm/modules/sdk/initialisation/sharedDependencies.d.ts +2 -1
- package/dist/esm/modules/sdk/initialisation/sharedDependencies.js +4 -4
- package/dist/esm/modules/sdk/initialisation/sharedDependencies.js.map +1 -1
- package/dist/esm/modules/sdk/types/components.d.ts +2 -2
- package/dist/esm/modules/sdk/types/configuration.d.ts +17 -26
- package/dist/esm/modules/sdk/types/configuration.js.map +1 -1
- package/dist/esm/modules/sdk/types/module.d.ts +1 -1
- package/dist/esm/modules/session/SessionContext.d.ts +55 -0
- package/dist/esm/modules/session/SessionContext.js +90 -0
- package/dist/esm/modules/session/SessionContext.js.map +1 -0
- package/dist/esm/modules/session/constants.d.ts +3 -0
- package/dist/esm/modules/session/constants.js +4 -0
- package/dist/esm/modules/session/constants.js.map +1 -0
- package/dist/esm/modules/session/index.d.ts +6 -0
- package/dist/esm/modules/session/index.js +70 -0
- package/dist/esm/modules/session/index.js.map +1 -0
- package/dist/esm/modules/session/types/module.d.ts +5 -0
- package/dist/esm/modules/session/types/module.js +2 -0
- package/dist/esm/modules/session/types/module.js.map +1 -0
- package/dist/esm/types/Primitives.d.ts +1 -0
- package/dist/release.txt +1 -1
- package/dist/umd/commit.txt +1 -0
- package/dist/umd/device-sardine.js +1 -1
- package/dist/umd/oneSdk.umd.js +1 -1
- package/dist/umd/oneSdk.umd.js.map +1 -1
- package/dist/umd/release.txt +1 -0
- package/dist/umd/version.txt +1 -0
- package/dist/version.txt +2 -2
- package/package.json +12 -9
- package/dist/esm/modules/common/modules/runIfWhen.js.map +0 -1
- package/dist/esm/modules/common/types/Session.d.ts +0 -16
- package/dist/esm/modules/common/types/Session.js +0 -2
- package/dist/esm/modules/common/types/Session.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseModuleOptions, ModuleContext } from "../../sdk/types";
|
|
2
|
+
import { Events } from "./events";
|
|
3
|
+
export interface FederationModule {
|
|
4
|
+
initialise: (o: BaseModuleOptions) => FederationModuleContext;
|
|
5
|
+
}
|
|
6
|
+
export declare type FederationModuleContext = ModuleContext<{
|
|
7
|
+
start: () => void;
|
|
8
|
+
}, Events>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../../modules/federation/types/module.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { EventHub } from "../../common";
|
|
2
|
+
import { BaseModuleOptions } from "../../sdk/types";
|
|
3
|
+
import { Vendor } from "../constants";
|
|
4
|
+
import { Events } from "./events";
|
|
5
|
+
export interface WrapperModule {
|
|
6
|
+
wrapper: VendorWrapper;
|
|
7
|
+
}
|
|
8
|
+
export interface VendorWrapper {
|
|
9
|
+
readonly vendor: Vendor;
|
|
10
|
+
authorize(o: VendorOptions): Promise<VendorContext>;
|
|
11
|
+
}
|
|
12
|
+
export interface VendorContext {
|
|
13
|
+
readonly vendor: Vendor;
|
|
14
|
+
}
|
|
15
|
+
export interface AdditionalDeviceInternalDependencies {
|
|
16
|
+
eventHub: EventHub<Events>;
|
|
17
|
+
}
|
|
18
|
+
export declare type VendorOptions = BaseModuleOptions & AdditionalDeviceInternalDependencies;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../../../modules/federation/types/wrapper.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RecipeConfiguration } from "../../common";
|
|
2
|
+
import { VendorOptions, VendorWrapper } from "../types/wrapper";
|
|
3
|
+
export declare const wrapper: VendorWrapper;
|
|
4
|
+
export declare function hasAllAuthorisationParams(urlParams: URLSearchParams, options: VendorOptions): boolean;
|
|
5
|
+
export declare type SingpassEnvironment = RecipeConfiguration["idps"]["singpass"]["environment"];
|
|
6
|
+
export declare type SingpassEnvironmentURLDictionary = Record<SingpassEnvironment, string>;
|
|
7
|
+
export declare const singpassURLs: SingpassEnvironmentURLDictionary;
|
|
8
|
+
export declare function getSingpassURL(environment: SingpassEnvironment): URL;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { OneSDKError } from "../../common";
|
|
11
|
+
import { LocalStorage } from "../../common/modules/LocalStorage";
|
|
12
|
+
import { getURLParams } from "../../common/modules/url";
|
|
13
|
+
import { FederationClient } from "../../frankie-client/clients/FederationClient";
|
|
14
|
+
import { StorageKeys } from "../../session/constants";
|
|
15
|
+
// 302 Service will redirect all responses to 'redirect_uri' with additional parameters added as response results. Expected parameters include:
|
|
16
|
+
// code: this is the authorisation code you will use when calling the token endpoint
|
|
17
|
+
// state: this should be the same state passed in your initial URL.
|
|
18
|
+
// error: if there are any errors encountered, the error code will be given in this parameter.
|
|
19
|
+
// '500' - Unknown or other server side errors.
|
|
20
|
+
// '503' - MyInfo under maintenance. Error description will also be given in error_description parameter.
|
|
21
|
+
// 'access_denied' - When user did not give consent, refer to error_description parameter for the reason.
|
|
22
|
+
// error_description: if error is 'access_denied' i.e. user did not give consent, the description will be 'Resource Owner did not authorize the request'.
|
|
23
|
+
// Note: If user closes the browser window prematurely, there will be no callback to the 'redirect_uri'. Therefore it is important for you to check the 'state' to verify that the transaction is the same.
|
|
24
|
+
export const wrapper = {
|
|
25
|
+
vendor: "singpass",
|
|
26
|
+
authorize(options) {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
const urlParams = getURLParams();
|
|
29
|
+
if (hasAllAuthorisationParams(urlParams, options))
|
|
30
|
+
yield submitAuthorization(urlParams, options);
|
|
31
|
+
else
|
|
32
|
+
yield authorize(options);
|
|
33
|
+
return {
|
|
34
|
+
vendor: "singpass",
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
function submitAuthorization(urlParams, options) {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
// Submit data to BFF
|
|
42
|
+
const client = new FederationClient(options.frankieClient);
|
|
43
|
+
const clearStoredToken = () => new LocalStorage().delete(StorageKeys.TOKEN);
|
|
44
|
+
const emitError = (e) => {
|
|
45
|
+
options.eventHub.emit("error", new OneSDKError(e.message, e.payload));
|
|
46
|
+
};
|
|
47
|
+
try {
|
|
48
|
+
// If initial request fails, it will contain an object in the form { message, errorCode }
|
|
49
|
+
// On failure, this request interrupts the flow with an error event containing
|
|
50
|
+
// the message and an error payload containing "errorCode" AND clears any stored session
|
|
51
|
+
const { individual, status } = yield client.provideAuthorisation("singpass", urlParams.get("code"));
|
|
52
|
+
// If customer decides to call "approve", submit confirmation to BFF
|
|
53
|
+
// otherwise data will automatically be purged after a few minutes
|
|
54
|
+
const approve = () => {
|
|
55
|
+
client
|
|
56
|
+
.submitCachedData()
|
|
57
|
+
.then(() => {
|
|
58
|
+
options.eventHub.emit("data_extracted_successfully");
|
|
59
|
+
})
|
|
60
|
+
.catch((e) => {
|
|
61
|
+
const { message, errorCode, issues } = e.response.data;
|
|
62
|
+
emitError({ message: `Failed sending confirmation: "${message}"`, payload: { errorCode, issues } });
|
|
63
|
+
})
|
|
64
|
+
.finally(clearStoredToken);
|
|
65
|
+
};
|
|
66
|
+
options.eventHub.emit("results", individual, status, approve);
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
clearStoredToken();
|
|
70
|
+
const { message, errorCode, issues } = e.response.data;
|
|
71
|
+
emitError({ message: `Failed sending authorisation: "${message}"`, payload: { errorCode, issues } });
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function authorize(options) {
|
|
76
|
+
var _a;
|
|
77
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
const singpassConfig = options.recipe.idps.singpass;
|
|
79
|
+
// Set query parameters
|
|
80
|
+
const url = getSingpassURL(singpassConfig.environment);
|
|
81
|
+
url.searchParams.set("client_id", singpassConfig.client_id);
|
|
82
|
+
url.searchParams.set("attributes", singpassConfig.attributes);
|
|
83
|
+
url.searchParams.set("state", options.session.sessionId); // Take at runtime from customer
|
|
84
|
+
url.searchParams.set("redirect_uri", (_a = singpassConfig.redirect_url) !== null && _a !== void 0 ? _a : window.location.href);
|
|
85
|
+
url.searchParams.set("purpose", singpassConfig.purpose);
|
|
86
|
+
// Using FrankieClient for redirection so in dummy mode we can intercept it and fake a redirection
|
|
87
|
+
options.frankieClient.redirect(url);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
export function hasAllAuthorisationParams(urlParams, options) {
|
|
91
|
+
const stateMatches = options.session.sessionId === urlParams.get("state");
|
|
92
|
+
const authCode = urlParams.get("code");
|
|
93
|
+
const error = urlParams.get("error");
|
|
94
|
+
const errorInfo = urlParams.get("error_description");
|
|
95
|
+
if (error)
|
|
96
|
+
throw new Error(errorInfo !== null && errorInfo !== void 0 ? errorInfo : "Internal server error");
|
|
97
|
+
if (authCode && !stateMatches)
|
|
98
|
+
throw new Error("A different session is being used to initialise the OneSDK than the one used at the beginning of the federation flow.");
|
|
99
|
+
return authCode && stateMatches;
|
|
100
|
+
}
|
|
101
|
+
export const singpassURLs = {
|
|
102
|
+
sandbox: "https://sandbox.api.myinfo.gov.sg",
|
|
103
|
+
test: "https://test.api.myinfo.gov.sg",
|
|
104
|
+
production: "https://api.myinfo.gov.sg",
|
|
105
|
+
};
|
|
106
|
+
export function getSingpassURL(environment) {
|
|
107
|
+
const urlString = [singpassURLs[environment], "com/v3/authorise"].join("/");
|
|
108
|
+
return new URL(urlString);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=Singpass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Singpass.js","sourceRoot":"","sources":["../../../../../modules/federation/vendors/Singpass.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +1,26 @@
|
|
|
1
1
|
import { EventHub } from "../common";
|
|
2
2
|
import { AxiosRequestConfig, AxiosResponse } from "axios";
|
|
3
|
+
import { SessionMeta } from "../session/SessionContext";
|
|
3
4
|
import { FrankieApiClient } from "./FrankieApiClient";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
declare type StubFactory = (options: Partial<AxiosRequestConfig> & {
|
|
10
|
-
urlMatch?: RegExpExecArray | string;
|
|
11
|
-
}) => Partial<AxiosResponse & {
|
|
12
|
-
delay: number;
|
|
13
|
-
title?: string;
|
|
14
|
-
}>;
|
|
15
|
-
export declare const URL_PARAM = "([^/]+)";
|
|
5
|
+
export declare const URL_PARAM = "([^/?]+)";
|
|
6
|
+
export declare const QUERY_PARAM = "([^&?]+)";
|
|
7
|
+
export declare const dummySessionMeta: SessionMeta;
|
|
16
8
|
export declare class DummyFrankieApiClient extends FrankieApiClient {
|
|
17
9
|
protected o: {
|
|
18
10
|
globalEventHub: EventHub;
|
|
19
11
|
defaultDelay?: number;
|
|
20
12
|
};
|
|
21
|
-
protected requestPayloadDictionary:
|
|
13
|
+
protected requestPayloadDictionary: StubResponseDictionary;
|
|
22
14
|
protected globalEventHub: EventHub;
|
|
23
15
|
constructor(o: {
|
|
24
16
|
globalEventHub: EventHub;
|
|
25
17
|
defaultDelay?: number;
|
|
26
18
|
});
|
|
27
|
-
|
|
28
|
-
checkValidity?: boolean;
|
|
29
|
-
}): Promise<void>;
|
|
30
|
-
stubResponse(options: {
|
|
19
|
+
stubResponse<TheMethod extends Method | "redirect" | "default">(options: {
|
|
31
20
|
url: string | RegExp;
|
|
32
|
-
method?:
|
|
33
|
-
}, responsePayload?:
|
|
34
|
-
|
|
35
|
-
title: string;
|
|
36
|
-
}>): void;
|
|
21
|
+
method?: TheMethod;
|
|
22
|
+
}, responsePayload?: StubResponseDictionary[string][TheMethod]): void;
|
|
23
|
+
findStub<URLPattern extends string, TheMethod extends Method | "redirect">(url: URLPattern, method: TheMethod): FoundStub<TheMethod> | null;
|
|
37
24
|
getStubPayload(config: Partial<AxiosRequestConfig>): AxiosResponse & {
|
|
38
25
|
delay?: number;
|
|
39
26
|
};
|
|
@@ -42,7 +29,26 @@ export declare class DummyFrankieApiClient extends FrankieApiClient {
|
|
|
42
29
|
delete<T = unknown>(url: string, config?: AxiosRequestConfig | undefined): Promise<AxiosResponse<T>>;
|
|
43
30
|
post<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig | undefined): Promise<AxiosResponse<T>>;
|
|
44
31
|
put<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig | undefined): Promise<AxiosResponse<T>>;
|
|
32
|
+
redirect(url: URL): void;
|
|
45
33
|
private delayResponse;
|
|
46
34
|
}
|
|
47
35
|
declare type Method = "get" | "put" | "post" | "delete";
|
|
36
|
+
declare type URLPattern = string;
|
|
37
|
+
declare type StubResponse = Partial<AxiosResponse & {
|
|
38
|
+
delay: number;
|
|
39
|
+
title?: string;
|
|
40
|
+
}>;
|
|
41
|
+
declare type StubResponseDictionary = Record<URLPattern, Partial<MethodStubDictionary>>;
|
|
42
|
+
declare type MethodStubDictionary = Record<Method | "default", Partial<StubResponse> | StubFactory> & {
|
|
43
|
+
redirect: RedirectStub;
|
|
44
|
+
};
|
|
45
|
+
declare type StubFactoryParameter = Partial<AxiosRequestConfig> & {
|
|
46
|
+
urlMatch?: RegExpExecArray | string;
|
|
47
|
+
};
|
|
48
|
+
declare type StubFactory = (options: StubFactoryParameter) => StubResponse;
|
|
49
|
+
declare type FoundStub<TheMethod extends Method | "redirect"> = {
|
|
50
|
+
stub: StubResponseDictionary[string][TheMethod];
|
|
51
|
+
urlMatch?: RegExpExecArray | string;
|
|
52
|
+
};
|
|
53
|
+
declare type RedirectStub = (url: URL) => URL | null;
|
|
48
54
|
export {};
|
|
@@ -20,19 +20,22 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
20
20
|
};
|
|
21
21
|
import { merge } from "../common";
|
|
22
22
|
import { AxiosError } from "axios";
|
|
23
|
+
import { SessionContext } from "../session/SessionContext";
|
|
23
24
|
import { FrankieApiClient } from "./FrankieApiClient";
|
|
24
|
-
const
|
|
25
|
-
export const
|
|
25
|
+
export const URL_PARAM = "([^/?]+)";
|
|
26
|
+
export const QUERY_PARAM = "([^&?]+)";
|
|
26
27
|
const DEFAULT_DELAY = 0;
|
|
27
28
|
const regexKeyMatcher = /^regex:/;
|
|
28
29
|
const regexKeyPrefix = "regex:";
|
|
29
|
-
const
|
|
30
|
-
environment: "https://dummy.com",
|
|
30
|
+
export const dummySessionMeta = {
|
|
31
31
|
customerID: "none",
|
|
32
|
+
customerChildID: "none",
|
|
33
|
+
environment: "https://dummy.com",
|
|
32
34
|
sessionId: "none",
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
reference: "dummy-reference",
|
|
36
|
+
entityId: null,
|
|
35
37
|
};
|
|
38
|
+
const trimUrl = (url) => url.replace(/\/$/, "").replace(/^\//, "");
|
|
36
39
|
export class DummyFrankieApiClient extends FrankieApiClient {
|
|
37
40
|
constructor(o) {
|
|
38
41
|
var _a;
|
|
@@ -42,18 +45,7 @@ export class DummyFrankieApiClient extends FrankieApiClient {
|
|
|
42
45
|
this.o.defaultDelay = (_a = o.defaultDelay) !== null && _a !== void 0 ? _a : DEFAULT_DELAY;
|
|
43
46
|
this.globalEventHub = o.globalEventHub;
|
|
44
47
|
this.instance.defaults.baseURL = "https://dummy.com";
|
|
45
|
-
this.
|
|
46
|
-
}
|
|
47
|
-
setToken(t, o = {}) {
|
|
48
|
-
const _super = Object.create(null, {
|
|
49
|
-
setToken: { get: () => super.setToken }
|
|
50
|
-
});
|
|
51
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
-
yield _super.setToken.call(this, t, o);
|
|
53
|
-
// Fill gaps of session object defined by token with values from defaultSessionData and reassign to sessionMeta
|
|
54
|
-
const sessionObject = Object.assign(defaultSessionData, this.session);
|
|
55
|
-
this.session = sessionObject;
|
|
56
|
-
});
|
|
48
|
+
this.session = new SessionContext(dummySessionMeta);
|
|
57
49
|
}
|
|
58
50
|
stubResponse(options, responsePayload) {
|
|
59
51
|
var _a, _b;
|
|
@@ -68,68 +60,72 @@ export class DummyFrankieApiClient extends FrankieApiClient {
|
|
|
68
60
|
const method = (_b = options.method) !== null && _b !== void 0 ? _b : "default";
|
|
69
61
|
this.requestPayloadDictionary[trimmedUrl][method] = responsePayload;
|
|
70
62
|
}
|
|
71
|
-
|
|
72
|
-
const { url, method } = config;
|
|
63
|
+
findStub(url, method) {
|
|
73
64
|
const trimmedUrl = trimUrl(url);
|
|
74
|
-
const defaultResponse = {
|
|
75
|
-
data: {},
|
|
76
|
-
status: 200,
|
|
77
|
-
statusText: "OK",
|
|
78
|
-
headers: {},
|
|
79
|
-
config,
|
|
80
|
-
isMockResponse: true,
|
|
81
|
-
};
|
|
82
65
|
const dictionary = this.requestPayloadDictionary;
|
|
83
66
|
const findAsRegex = () => {
|
|
84
|
-
const
|
|
67
|
+
const allMatchedKeys = Object.keys(dictionary)
|
|
85
68
|
.filter((k) => k.match(regexKeyMatcher))
|
|
86
69
|
.map((k) => k.replace(regexKeyMatcher, ""))
|
|
87
|
-
.
|
|
88
|
-
// ensure regex pattern is searching the full url by prepending with '^' and appending with $
|
|
70
|
+
.filter((regexPattern) => {
|
|
71
|
+
// ensure regex pattern is searching the full url by prepending with '^' and appending with '$'
|
|
89
72
|
const regex = new RegExp(`^${regexPattern}$`);
|
|
90
73
|
return Boolean(regex.exec(trimmedUrl));
|
|
91
74
|
});
|
|
92
|
-
if (!
|
|
75
|
+
if (!allMatchedKeys)
|
|
93
76
|
return false;
|
|
94
|
-
const
|
|
77
|
+
const longestMatchedKey = allMatchedKeys.sort((a, b) => b.length - a.length).shift();
|
|
78
|
+
const regex = new RegExp(`^${longestMatchedKey}$`);
|
|
95
79
|
const urlMatch = regex.exec(trimmedUrl);
|
|
96
80
|
return {
|
|
97
|
-
|
|
81
|
+
methods: dictionary[`${regexKeyPrefix}${longestMatchedKey}`],
|
|
98
82
|
urlMatch,
|
|
99
83
|
};
|
|
100
84
|
};
|
|
101
85
|
const findAsKey = () => {
|
|
102
86
|
if (!dictionary[trimmedUrl])
|
|
103
87
|
return false;
|
|
104
|
-
return {
|
|
88
|
+
return { methods: dictionary[trimmedUrl], urlMatch: trimmedUrl };
|
|
105
89
|
};
|
|
106
90
|
const findStoredStub = () => {
|
|
107
|
-
const emptyStub = { stub: {} };
|
|
108
91
|
const payloadsForUrl = findAsKey() || findAsRegex();
|
|
109
92
|
if (!payloadsForUrl)
|
|
110
|
-
return
|
|
111
|
-
const {
|
|
112
|
-
const payloadForMethod =
|
|
113
|
-
const defaultPayload =
|
|
114
|
-
// If url wasn't even found
|
|
93
|
+
return null;
|
|
94
|
+
const { methods, urlMatch } = payloadsForUrl;
|
|
95
|
+
const payloadForMethod = methods === null || methods === void 0 ? void 0 : methods[method];
|
|
96
|
+
const defaultPayload = methods === null || methods === void 0 ? void 0 : methods.default;
|
|
97
|
+
// If url wasn't even found
|
|
115
98
|
if (!payloadsForUrl)
|
|
116
|
-
return
|
|
117
|
-
// If method wasn't found and there isnt a default
|
|
99
|
+
return null;
|
|
100
|
+
// If method wasn't found and there isnt a default
|
|
118
101
|
if (!payloadForMethod && !defaultPayload)
|
|
119
|
-
return
|
|
102
|
+
return null;
|
|
120
103
|
// If method wasn't found, but default stub was, return default
|
|
121
104
|
if (!payloadForMethod && defaultPayload)
|
|
122
105
|
return { stub: defaultPayload };
|
|
123
106
|
// Otherwise stub for specific method was found, return it
|
|
124
107
|
return { stub: payloadForMethod, urlMatch };
|
|
125
108
|
};
|
|
109
|
+
return findStoredStub();
|
|
110
|
+
}
|
|
111
|
+
getStubPayload(config) {
|
|
112
|
+
var _a;
|
|
113
|
+
const { url, method } = config;
|
|
114
|
+
const defaultResponse = {
|
|
115
|
+
data: {},
|
|
116
|
+
status: 200,
|
|
117
|
+
statusText: "OK",
|
|
118
|
+
headers: {},
|
|
119
|
+
config,
|
|
120
|
+
isMockResponse: true,
|
|
121
|
+
};
|
|
126
122
|
const mergeWithDefaults = (foundStub) => {
|
|
127
123
|
const { stub, urlMatch } = foundStub;
|
|
128
124
|
// provide configuration and matched url (either regex match results or trimmed url string)
|
|
129
125
|
const response = typeof stub === "function" ? stub(Object.assign(Object.assign({}, config), { urlMatch })) : stub;
|
|
130
126
|
return merge({}, defaultResponse, response);
|
|
131
127
|
};
|
|
132
|
-
const storedStub =
|
|
128
|
+
const storedStub = (_a = this.findStub(url, method)) !== null && _a !== void 0 ? _a : { stub: {} };
|
|
133
129
|
const mergedResponse = mergeWithDefaults(storedStub);
|
|
134
130
|
return mergedResponse;
|
|
135
131
|
}
|
|
@@ -163,6 +159,12 @@ export class DummyFrankieApiClient extends FrankieApiClient {
|
|
|
163
159
|
return this.preventUncaughtErrors(url, config, "put", data);
|
|
164
160
|
});
|
|
165
161
|
}
|
|
162
|
+
redirect(url) {
|
|
163
|
+
const { stub } = this.findStub(url.hostname, "redirect");
|
|
164
|
+
const resultingURL = stub(url);
|
|
165
|
+
if (resultingURL)
|
|
166
|
+
window.location.href = resultingURL.href;
|
|
167
|
+
}
|
|
166
168
|
delayResponse(payload, delay) {
|
|
167
169
|
return __awaiter(this, void 0, void 0, function* () {
|
|
168
170
|
let groupTitle = "Executing mock request to";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DummyFrankieApiClient.js","sourceRoot":"","sources":["../../../../modules/frankie-client/DummyFrankieApiClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAY,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAqC,MAAM,OAAO,CAAC;AACtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"DummyFrankieApiClient.js","sourceRoot":"","sources":["../../../../modules/frankie-client/DummyFrankieApiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ENVIRONMENTS } from "../common";
|
|
2
|
-
import { ApplicantId } from "../
|
|
3
|
-
import { SessionMeta } from "../sdk/types";
|
|
2
|
+
import { ApplicantId, SessionContext } from "../session/SessionContext";
|
|
4
3
|
import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios";
|
|
5
4
|
import { ClientsConstructorDictionary, InstanceOf, LoadClientParametersFor } from "./ClientsDictionary";
|
|
6
5
|
export declare type IFrankieClientCredentials = {
|
|
@@ -10,7 +9,7 @@ export declare type IFrankieClientCredentials = {
|
|
|
10
9
|
};
|
|
11
10
|
export declare class FrankieApiClient {
|
|
12
11
|
protected instance: AxiosInstance;
|
|
13
|
-
protected
|
|
12
|
+
protected sessionContext: SessionContext;
|
|
14
13
|
constructor();
|
|
15
14
|
get interceptors(): AxiosInstance["interceptors"];
|
|
16
15
|
set entityId(value: string);
|
|
@@ -18,14 +17,13 @@ export declare class FrankieApiClient {
|
|
|
18
17
|
environment: ENVIRONMENTS;
|
|
19
18
|
}): Promise<string>;
|
|
20
19
|
get token(): string;
|
|
21
|
-
get session():
|
|
22
|
-
set session(session:
|
|
23
|
-
|
|
24
|
-
checkValidity?: boolean;
|
|
25
|
-
}): Promise<void>;
|
|
20
|
+
get session(): SessionContext;
|
|
21
|
+
set session(session: SessionContext);
|
|
22
|
+
validateSession(): Promise<AxiosResponse<unknown, any>>;
|
|
26
23
|
get<T = unknown>(url: string, config?: AxiosRequestConfig | undefined): Promise<AxiosResponse<T>>;
|
|
27
24
|
delete<T = unknown>(url: string, config?: AxiosRequestConfig | undefined): Promise<AxiosResponse<T>>;
|
|
28
25
|
post<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig | undefined): Promise<AxiosResponse<T>>;
|
|
29
26
|
put<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig | undefined): Promise<AxiosResponse<T>>;
|
|
27
|
+
redirect(url: URL): void;
|
|
30
28
|
loadClient<Client extends keyof ClientsConstructorDictionary>(...parameters: LoadClientParametersFor<Client>): Promise<InstanceOf<Client>>;
|
|
31
29
|
}
|
|
@@ -9,16 +9,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { env2url } from "../common";
|
|
11
11
|
import { stringToBase64 } from "../common/modules/base64";
|
|
12
|
-
import { hasEntityId } from "../common/types/Session";
|
|
13
12
|
import Axios from "axios";
|
|
14
|
-
import jwtDecode from "jwt-decode";
|
|
15
13
|
export class FrankieApiClient {
|
|
16
14
|
constructor() {
|
|
17
15
|
this.instance = Axios.create();
|
|
18
16
|
this.interceptors.response.use((response) => {
|
|
19
17
|
const token = response.headers.token;
|
|
20
|
-
if (token)
|
|
21
|
-
this.setToken(token);
|
|
18
|
+
if (token && this.session)
|
|
19
|
+
this.session.setToken(token);
|
|
22
20
|
return response;
|
|
23
21
|
});
|
|
24
22
|
}
|
|
@@ -26,7 +24,7 @@ export class FrankieApiClient {
|
|
|
26
24
|
return this.instance.interceptors;
|
|
27
25
|
}
|
|
28
26
|
set entityId(value) {
|
|
29
|
-
this.
|
|
27
|
+
this.sessionContext.setEntityId(value);
|
|
30
28
|
}
|
|
31
29
|
login(credentials, applicantId, options) {
|
|
32
30
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -34,7 +32,6 @@ export class FrankieApiClient {
|
|
|
34
32
|
const agent = "machine";
|
|
35
33
|
const environmentUrl = env2url(options.environment);
|
|
36
34
|
this.instance.defaults.baseURL = environmentUrl;
|
|
37
|
-
// TODO: create new set of permissions for onesdk
|
|
38
35
|
const response = yield this.post(endpoint, {
|
|
39
36
|
permissions: Object.assign({ preset: "one-sdk" }, applicantId),
|
|
40
37
|
}, {
|
|
@@ -50,23 +47,16 @@ export class FrankieApiClient {
|
|
|
50
47
|
return this.session.token;
|
|
51
48
|
}
|
|
52
49
|
get session() {
|
|
53
|
-
return this.
|
|
50
|
+
return this.sessionContext;
|
|
54
51
|
}
|
|
55
52
|
set session(session) {
|
|
56
53
|
this.instance.defaults.baseURL = session.environment;
|
|
57
54
|
this.instance.defaults.headers.common.authorization = session.token;
|
|
58
55
|
this.instance.defaults.headers.common["X-Frankie-Channel"] = "onesdk";
|
|
59
|
-
this.
|
|
56
|
+
this.sessionContext = session;
|
|
60
57
|
}
|
|
61
|
-
|
|
62
|
-
return
|
|
63
|
-
const { checkValidity = false } = options;
|
|
64
|
-
const session = deconstructToken(token);
|
|
65
|
-
this.session = session;
|
|
66
|
-
if (checkValidity) {
|
|
67
|
-
yield this.get("data/v2/token-validity");
|
|
68
|
-
}
|
|
69
|
-
});
|
|
58
|
+
validateSession() {
|
|
59
|
+
return this.get("data/v2/token-validity");
|
|
70
60
|
}
|
|
71
61
|
get(url, config) {
|
|
72
62
|
return this.instance.get(url, config);
|
|
@@ -80,6 +70,9 @@ export class FrankieApiClient {
|
|
|
80
70
|
put(url, data, config) {
|
|
81
71
|
return this.instance.put(url, data, config);
|
|
82
72
|
}
|
|
73
|
+
redirect(url) {
|
|
74
|
+
window.location.href = url.href;
|
|
75
|
+
}
|
|
83
76
|
loadClient(...parameters) {
|
|
84
77
|
return __awaiter(this, void 0, void 0, function* () {
|
|
85
78
|
const [which, options] = parameters;
|
|
@@ -94,14 +87,6 @@ export class FrankieApiClient {
|
|
|
94
87
|
});
|
|
95
88
|
}
|
|
96
89
|
}
|
|
97
|
-
const deconstructToken = (token) => {
|
|
98
|
-
var _a, _b;
|
|
99
|
-
// deconstructs JWT to get entityId or reference and environment (url)
|
|
100
|
-
// returns all that information, including token into SessionMeta
|
|
101
|
-
const { data: payload } = jwtDecode(token);
|
|
102
|
-
const identifier = hasEntityId(payload) ? { entityId: payload.entityId } : { reference: payload.reference };
|
|
103
|
-
return Object.assign({ token, customerID: (_a = payload.organisation) === null || _a === void 0 ? void 0 : _a.customerId, customerChildID: (_b = payload.organisation) === null || _b === void 0 ? void 0 : _b.customerChildId, environment: payload.environment, sessionId: payload.sessionId }, identifier);
|
|
104
|
-
};
|
|
105
90
|
function serialiseCredentials(credentials) {
|
|
106
91
|
const elements = [credentials.customerID, credentials.customerChildID, credentials.apiKey];
|
|
107
92
|
return stringToBase64(elements.filter(Boolean).join(":"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrankieApiClient.js","sourceRoot":"","sources":["../../../../modules/frankie-client/FrankieApiClient.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"FrankieApiClient.js","sourceRoot":"","sources":["../../../../modules/frankie-client/FrankieApiClient.ts"],"names":[],"mappings":"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"}
|