valtech-components 4.0.989 → 4.0.990
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/esm2022/lib/components/organisms/survey-builder/survey-builder.component.mjs +24 -5
- package/esm2022/lib/components/organisms/survey-builder/types.mjs +1 -1
- package/esm2022/lib/services/payments/config.mjs +23 -0
- package/esm2022/lib/services/payments/index.mjs +4 -0
- package/esm2022/lib/services/payments/payments-gateway.service.mjs +69 -0
- package/esm2022/lib/services/payments/types.mjs +8 -0
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/valtech-components.mjs +118 -5
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/survey-builder/survey-builder.component.d.ts +9 -2
- package/lib/components/organisms/survey-builder/types.d.ts +28 -1
- package/lib/services/payments/config.d.ts +14 -0
- package/lib/services/payments/index.d.ts +3 -0
- package/lib/services/payments/payments-gateway.service.d.ts +53 -0
- package/lib/services/payments/types.d.ts +33 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -3,7 +3,7 @@ import { FormControl } from '@angular/forms';
|
|
|
3
3
|
import { ButtonMetadata } from '../../types';
|
|
4
4
|
import type { Color } from '@ionic/core';
|
|
5
5
|
import { EditableFieldDef, FieldSchemaEditorMetadata } from '../field-schema-editor/types';
|
|
6
|
-
import { SurveyBuilderMetadata, SurveyBuilderSaveEvent } from './types';
|
|
6
|
+
import { SurveyBuilderMetadata, SurveyBuilderSaveEvent, SurveyDraftEvent } from './types';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
/**
|
|
9
9
|
* val-survey-builder
|
|
@@ -25,6 +25,13 @@ import * as i0 from "@angular/core";
|
|
|
25
25
|
export declare class SurveyBuilderComponent implements OnInit {
|
|
26
26
|
props: SurveyBuilderMetadata;
|
|
27
27
|
readonly saved: EventEmitter<SurveyBuilderSaveEvent>;
|
|
28
|
+
/**
|
|
29
|
+
* Emite lo escrito, ya validado, SIN guardarlo. Solo con `props.persist:
|
|
30
|
+
* false` — ver el comentario de ese campo: cuando la app tiene endpoint
|
|
31
|
+
* propio, guardar desde acá se salta la validación de la entidad dueña y el
|
|
32
|
+
* permiso de la vertical.
|
|
33
|
+
*/
|
|
34
|
+
readonly draft: EventEmitter<SurveyDraftEvent>;
|
|
28
35
|
private readonly i18n;
|
|
29
36
|
private readonly requests;
|
|
30
37
|
private readonly formBuilder;
|
|
@@ -61,5 +68,5 @@ export declare class SurveyBuilderComponent implements OnInit {
|
|
|
61
68
|
save(): Promise<void>;
|
|
62
69
|
private rowFromField;
|
|
63
70
|
static ɵfac: i0.ɵɵFactoryDeclaration<SurveyBuilderComponent, never>;
|
|
64
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SurveyBuilderComponent, "val-survey-builder", never, { "props": { "alias": "props"; "required": false; }; }, { "saved": "saved"; }, never, never, true, never>;
|
|
71
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SurveyBuilderComponent, "val-survey-builder", never, { "props": { "alias": "props"; "required": false; }; }, { "saved": "saved"; "draft": "draft"; }, never, never, true, never>;
|
|
65
72
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntityRef, RequestTypeConfig, RequestVisibility } from '../../../services/requests/types';
|
|
1
|
+
import { EntityRef, FieldSchemaDef, RequestTypeConfig, RequestVisibility } from '../../../services/requests/types';
|
|
2
2
|
/**
|
|
3
3
|
* Tipos de pregunta que ofrece una encuesta.
|
|
4
4
|
*
|
|
@@ -46,7 +46,34 @@ export interface SurveyBuilderMetadata {
|
|
|
46
46
|
allowAnonymous?: boolean;
|
|
47
47
|
/** Acota el catálogo de `SURVEY_QUESTION_TYPES` si una app quiere ofrecer menos. */
|
|
48
48
|
questionTypes?: string[];
|
|
49
|
+
/**
|
|
50
|
+
* Si el builder guarda por su cuenta contra `/v2/request-types`.
|
|
51
|
+
*
|
|
52
|
+
* Default `true` por compatibilidad, pero **una app con endpoint propio debe
|
|
53
|
+
* pasar `false`** y guardar ella: el endpoint de la vertical es el que valida
|
|
54
|
+
* la entidad dueña, evita que dos encuestas de distinto evento colisionen en
|
|
55
|
+
* el mismo `typeId`, y autoriza con SU permiso. Con `false`, `save()` valida
|
|
56
|
+
* y emite `draft` sin tocar la red.
|
|
57
|
+
*/
|
|
58
|
+
persist?: boolean;
|
|
49
59
|
}
|
|
50
60
|
export interface SurveyBuilderSaveEvent {
|
|
51
61
|
typeConfig: RequestTypeConfig;
|
|
52
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Lo que se escribió, sin persistir.
|
|
65
|
+
*
|
|
66
|
+
* Existe porque **el builder no siempre debe guardar por su cuenta**. Cuando la
|
|
67
|
+
* app tiene su propio endpoint de dominio (el de bingo valida el evento, acota
|
|
68
|
+
* el `typeId` para que dos eventos no colisionen y autoriza con el permiso de
|
|
69
|
+
* la vertical en vez de `apps:manage`), guardar desde acá se salta todo eso.
|
|
70
|
+
*
|
|
71
|
+
* Los tres campos son exactamente los de `CreateEventSurveyRequest` en
|
|
72
|
+
* `services/bingo/survey.go` — no es casualidad: es el contrato que la app
|
|
73
|
+
* necesita reenviar.
|
|
74
|
+
*/
|
|
75
|
+
export interface SurveyDraftEvent {
|
|
76
|
+
label: string;
|
|
77
|
+
subtitle: string;
|
|
78
|
+
questions: FieldSchemaDef[];
|
|
79
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EnvironmentProviders, InjectionToken } from '@angular/core';
|
|
2
|
+
import { ValtechPaymentsConfig } from './types';
|
|
3
|
+
/** Token de inyección de la configuración de pagos. */
|
|
4
|
+
export declare const VALTECH_PAYMENTS_CONFIG: InjectionToken<ValtechPaymentsConfig>;
|
|
5
|
+
export declare const DEFAULT_PAYMENTS_CONFIG: Partial<ValtechPaymentsConfig>;
|
|
6
|
+
/**
|
|
7
|
+
* Provee el cliente de pasarelas de pago.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* providePaymentsGateway({ apiUrl: environment.apiUrl }),
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare function providePaymentsGateway(config: ValtechPaymentsConfig): EnvironmentProviders;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { ConnectionStatusResponse, OAuthAuthorizeURLResponse } from './types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Cliente del onboarding de pasarelas de pago (ADR-028).
|
|
6
|
+
*
|
|
7
|
+
* Conecta la cuenta de UNA ORGANIZACIÓN con una pasarela, para que el dinero
|
|
8
|
+
* le llegue directo. Ese es el punto: si el dinero pasara por una cuenta de
|
|
9
|
+
* Valtech, Valtech sería un PSP regulado por la CMF (ver ADR-028). Por eso
|
|
10
|
+
* todas las operaciones son por `orgId`, y no existe acá un modo "cuenta de la
|
|
11
|
+
* plataforma".
|
|
12
|
+
*
|
|
13
|
+
* Vive en la lib y no en una app porque el flujo es idéntico en todas: Bingo
|
|
14
|
+
* lo usa para que cada colegio cobre sus cartones, y Chesed para que cada
|
|
15
|
+
* refugio reciba aportes. Lo que cambia entre apps es qué se cobra, no cómo se
|
|
16
|
+
* conecta la cuenta.
|
|
17
|
+
*
|
|
18
|
+
* Autenticación: no agrega el Bearer a mano — lo pone el interceptor de
|
|
19
|
+
* `provideValtechAuth`. Errores: no se capturan acá; los maneja la pantalla.
|
|
20
|
+
*/
|
|
21
|
+
export declare class PaymentsGatewayService {
|
|
22
|
+
private http;
|
|
23
|
+
private config;
|
|
24
|
+
private get base();
|
|
25
|
+
/**
|
|
26
|
+
* Estado de conexión de la organización con una pasarela.
|
|
27
|
+
*
|
|
28
|
+
* Es lo que decide si la app puede ofrecer el cobro: `connected` habilita,
|
|
29
|
+
* `expired` y `revoked` NO. Mostrar un botón de pago con un token revocado
|
|
30
|
+
* lleva al usuario a un cobro que falla después de que ya decidió pagar.
|
|
31
|
+
*/
|
|
32
|
+
getConnectionStatus(orgId: string, gateway: string): Observable<ConnectionStatusResponse>;
|
|
33
|
+
/**
|
|
34
|
+
* URL de autorización OAuth, con su `state` CSRF.
|
|
35
|
+
*
|
|
36
|
+
* El caller guarda el `state` antes de redirigir y lo compara al volver: sin
|
|
37
|
+
* eso, cualquiera podría completar la conexión de otra organización.
|
|
38
|
+
*/
|
|
39
|
+
getOAuthAuthorizeURL(orgId: string, gateway: string): Observable<OAuthAuthorizeURLResponse>;
|
|
40
|
+
/** Desconecta la credencial de la organización para esa pasarela. */
|
|
41
|
+
disconnect(orgId: string, gateway: string): Observable<{
|
|
42
|
+
operationId: string;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Guarda una credencial de acceso directo (pasarelas sin OAuth, ej. Khipu).
|
|
46
|
+
* El token es el secreto del cobrador.
|
|
47
|
+
*/
|
|
48
|
+
setCredential(orgId: string, gateway: string, accessToken: string): Observable<{
|
|
49
|
+
operationId: string;
|
|
50
|
+
}>;
|
|
51
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PaymentsGatewayService, never>;
|
|
52
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<PaymentsGatewayService>;
|
|
53
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contratos del onboarding de pasarelas de pago (ADR-028).
|
|
3
|
+
*
|
|
4
|
+
* Espejo reducido del backend: solo lo que una app necesita para conectar la
|
|
5
|
+
* cuenta de una organización y saber si puede cobrar.
|
|
6
|
+
*/
|
|
7
|
+
/** Estado del ciclo de vida de una credencial OAuth. */
|
|
8
|
+
export type OAuthStatus = 'never' | 'connected' | 'expired' | 'revoked';
|
|
9
|
+
/**
|
|
10
|
+
* Respuesta de `connection-status`. No expone el token: solo un enmascarado
|
|
11
|
+
* informativo, porque la UI nunca necesita el secreto.
|
|
12
|
+
*/
|
|
13
|
+
export interface ConnectionStatusResponse {
|
|
14
|
+
operationId: string;
|
|
15
|
+
connected: boolean;
|
|
16
|
+
oauthStatus: OAuthStatus;
|
|
17
|
+
connectedAt?: string;
|
|
18
|
+
maskedToken?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Respuesta de `oauth/authorize-url`. */
|
|
21
|
+
export interface OAuthAuthorizeURLResponse {
|
|
22
|
+
operationId: string;
|
|
23
|
+
authorizeUrl: string;
|
|
24
|
+
/** CSRF. El caller lo guarda antes de redirigir y lo compara al volver. */
|
|
25
|
+
state: string;
|
|
26
|
+
}
|
|
27
|
+
/** Configuración del cliente de pagos. */
|
|
28
|
+
export interface ValtechPaymentsConfig {
|
|
29
|
+
/** Base del backend, sin barra final (ej. `https://api-dev.myvaltech.com`). */
|
|
30
|
+
apiUrl: string;
|
|
31
|
+
/** Prefijo de la API de pagos. Default `/v1/payments`. */
|
|
32
|
+
paymentsPrefix?: string;
|
|
33
|
+
}
|
package/lib/version.d.ts
CHANGED
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -500,6 +500,7 @@ export * from './lib/components/organisms/verify-view/verify-view.component';
|
|
|
500
500
|
export * from './lib/components/organisms/verify-view/types';
|
|
501
501
|
export * from './lib/services/content-platform';
|
|
502
502
|
export * from './lib/services/feedback';
|
|
503
|
+
export * from './lib/services/payments';
|
|
503
504
|
export * from './lib/services/whatsapp';
|
|
504
505
|
export * from './lib/components/organisms/whatsapp-fab/whatsapp-fab.component';
|
|
505
506
|
export * from './lib/services/phone-format/phone-format.service';
|