diff --git a/packages/web-core/openapi/spec_v2.yaml b/packages/web-core/openapi/spec_v2.yaml index 3cc20023a..121372c6e 100644 --- a/packages/web-core/openapi/spec_v2.yaml +++ b/packages/web-core/openapi/spec_v2.yaml @@ -827,6 +827,28 @@ paths: '204': description: tbd + /v2/connect/process/clear: + post: + description: Remove process state for a connect process. + operationId: ConnectProcessClear + tags: + - CorbadoConnect + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/connectProcessClearReq' + responses: + '200': + description: Contains information about the process state. + content: + application/json: + schema: + $ref: '#/components/schemas/connectProcessClearRsp' + '404': + description: No process was found for the token + components: ################################################################### # Security schemes # @@ -1486,6 +1508,22 @@ components: aaguidDetails: $ref: '#/components/schemas/aaguidDetails' + connectProcessClearReq: + type: object + required: + - processId + properties: + processId: + type: string + + connectProcessClearRsp: + type: object + required: + - processId + properties: + processId: + type: string + aaguidDetails: type: object required: diff --git a/packages/web-core/src/api/v2/api.ts b/packages/web-core/src/api/v2/api.ts index 47b830413..e15ca20d2 100644 --- a/packages/web-core/src/api/v2/api.ts +++ b/packages/web-core/src/api/v2/api.ts @@ -743,6 +743,32 @@ export interface ConnectManageListRsp { */ 'userID': string; } +/** + * + * @export + * @interface ConnectProcessClearReq + */ +export interface ConnectProcessClearReq { + /** + * + * @type {string} + * @memberof ConnectProcessClearReq + */ + 'processId': string; +} +/** + * + * @export + * @interface ConnectProcessClearRsp + */ +export interface ConnectProcessClearRsp { + /** + * + * @type {string} + * @memberof ConnectProcessClearRsp + */ + 'processId': string; +} /** * * @export @@ -4368,6 +4394,48 @@ export const CorbadoConnectApiAxiosParamCreator = function (configuration?: Conf localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(connectManageListReq, localVarRequestOptions, configuration) + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Remove process state for a connect process. + * @param {ConnectProcessClearReq} connectProcessClearReq + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + connectProcessClear: async (connectProcessClearReq: ConnectProcessClearReq, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'connectProcessClearReq' is not null or undefined + assertParamExists('connectProcessClear', 'connectProcessClearReq', connectProcessClearReq) + const localVarPath = `/v2/connect/process/clear`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearerAuth required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + // authentication projectID required + await setApiKeyToObject(localVarHeaderParameter, "X-Corbado-ProjectID", configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(connectProcessClearReq, localVarRequestOptions, configuration) + return { url: toPathString(localVarUrlObj), options: localVarRequestOptions, @@ -4483,6 +4551,16 @@ export const CorbadoConnectApiFp = function(configuration?: Configuration) { const localVarAxiosArgs = await localVarAxiosParamCreator.connectManageList(connectManageListReq, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, + /** + * Remove process state for a connect process. + * @param {ConnectProcessClearReq} connectProcessClearReq + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async connectProcessClear(connectProcessClearReq: ConnectProcessClearReq, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.connectProcessClear(connectProcessClearReq, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, } }; @@ -4583,6 +4661,15 @@ export const CorbadoConnectApiFactory = function (configuration?: Configuration, connectManageList(connectManageListReq: ConnectManageListReq, options?: any): AxiosPromise { return localVarFp.connectManageList(connectManageListReq, options).then((request) => request(axios, basePath)); }, + /** + * Remove process state for a connect process. + * @param {ConnectProcessClearReq} connectProcessClearReq + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + connectProcessClear(connectProcessClearReq: ConnectProcessClearReq, options?: any): AxiosPromise { + return localVarFp.connectProcessClear(connectProcessClearReq, options).then((request) => request(axios, basePath)); + }, }; }; @@ -4702,6 +4789,17 @@ export class CorbadoConnectApi extends BaseAPI { public connectManageList(connectManageListReq: ConnectManageListReq, options?: AxiosRequestConfig) { return CorbadoConnectApiFp(this.configuration).connectManageList(connectManageListReq, options).then((request) => request(this.axios, this.basePath)); } + + /** + * Remove process state for a connect process. + * @param {ConnectProcessClearReq} connectProcessClearReq + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CorbadoConnectApi + */ + public connectProcessClear(connectProcessClearReq: ConnectProcessClearReq, options?: AxiosRequestConfig) { + return CorbadoConnectApiFp(this.configuration).connectProcessClear(connectProcessClearReq, options).then((request) => request(this.axios, this.basePath)); + } } diff --git a/packages/web-core/src/services/ConnectService.ts b/packages/web-core/src/services/ConnectService.ts index 9a9840f2b..03f27887e 100644 --- a/packages/web-core/src/services/ConnectService.ts +++ b/packages/web-core/src/services/ConnectService.ts @@ -45,7 +45,7 @@ export class ConnectService { constructor(projectId: string, frontendApiUrlSuffix: string, isDebug: boolean) { this.#projectId = projectId; - this.#timeout = 10 * 1000; + this.#timeout = 5 * 1000; this.#frontendApiUrlSuffix = frontendApiUrlSuffix; this.#webAuthnService = new WebAuthnService(); this.#visitorId = ''; @@ -153,6 +153,10 @@ export class ConnectService { const existingProcessFromOtherLoginInit = ConnectProcess.loadFromStorage(this.#projectId); const maybeExistingLoginDataFromOtherLoginInit = existingProcessFromOtherLoginInit?.getValidLoginData(); if (maybeExistingLoginDataFromOtherLoginInit) { + if (res.val.token !== existingProcessFromOtherLoginInit?.id) { + await this.#connectApi.connectProcessClear({ processId: res.val.token }); + } + log.debug('process exists (after login init attempt'); this.#setApisV2(existingProcessFromOtherLoginInit);