@fiado/type-kit 3.399.0 → 3.401.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.
- package/_test_/unit/loanCredit/dtos/loanDeviceContract.test.ts +405 -0
- package/_test_/unit/mdm/dtos/mdmDeviceContract.test.ts +83 -0
- package/bin/loanCredit/dtos/LoanDeviceNotifyItem.d.ts +12 -0
- package/bin/loanCredit/dtos/LoanDeviceNotifyItem.js +54 -0
- package/bin/loanCredit/dtos/LoanDeviceReleaseItem.d.ts +8 -0
- package/bin/loanCredit/dtos/LoanDeviceReleaseItem.js +37 -0
- package/bin/loanCredit/dtos/LoanDeviceUnlockItem.d.ts +6 -0
- package/bin/loanCredit/dtos/LoanDeviceUnlockItem.js +31 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceManualUnlockRequest.d.ts +2 -2
- package/bin/loanCredit/dtos/requests/LoanDeviceManualUnlockRequest.js +2 -2
- package/bin/loanCredit/dtos/requests/LoanDeviceNotifyRequest.d.ts +7 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceNotifyRequest.js +37 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceReleaseRequest.d.ts +7 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceReleaseRequest.js +37 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceNotifyResponse.d.ts +5 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceNotifyResponse.js +7 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceNotifyResult.d.ts +8 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceNotifyResult.js +8 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceReleaseResponse.d.ts +5 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceReleaseResponse.js +7 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceReleaseResult.d.ts +8 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceReleaseResult.js +8 -0
- package/bin/loanCredit/index.d.ts +12 -0
- package/bin/loanCredit/index.js +15 -1
- package/bin/loanCredit/validators/IsFutureIso8601DateTime.d.ts +18 -0
- package/bin/loanCredit/validators/IsFutureIso8601DateTime.js +41 -0
- package/bin/mdm/dtos/DeviceEnrollRequest.d.ts +3 -0
- package/bin/mdm/dtos/DeviceEnrollRequest.js +7 -0
- package/bin/mdm/dtos/DeviceUnlockRequest.d.ts +2 -0
- package/bin/mdm/dtos/DeviceUnlockRequest.js +6 -0
- package/bin/mdm/enums/MdmErrorCodeEnum.d.ts +1 -0
- package/bin/mdm/enums/MdmErrorCodeEnum.js +1 -0
- package/bin/mdm/index.d.ts +1 -0
- package/bin/mdm/index.js +4 -0
- package/package.json +1 -1
- package/src/loanCredit/dtos/LoanDeviceNotifyItem.ts +36 -0
- package/src/loanCredit/dtos/LoanDeviceReleaseItem.ts +22 -0
- package/src/loanCredit/dtos/LoanDeviceUnlockItem.ts +17 -0
- package/src/loanCredit/dtos/requests/LoanDeviceManualUnlockRequest.ts +4 -4
- package/src/loanCredit/dtos/requests/LoanDeviceNotifyRequest.ts +23 -0
- package/src/loanCredit/dtos/requests/LoanDeviceReleaseRequest.ts +23 -0
- package/src/loanCredit/dtos/responses/LoanDeviceNotifyResponse.ts +6 -0
- package/src/loanCredit/dtos/responses/LoanDeviceNotifyResult.ts +10 -0
- package/src/loanCredit/dtos/responses/LoanDeviceReleaseResponse.ts +6 -0
- package/src/loanCredit/dtos/responses/LoanDeviceReleaseResult.ts +10 -0
- package/src/loanCredit/index.ts +13 -0
- package/src/loanCredit/validators/IsFutureIso8601DateTime.ts +32 -0
- package/src/mdm/README.md +16 -0
- package/src/mdm/dtos/DeviceEnrollRequest.ts +8 -1
- package/src/mdm/dtos/DeviceUnlockRequest.ts +7 -1
- package/src/mdm/enums/MdmErrorCodeEnum.ts +1 -0
- package/src/mdm/index.ts +3 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LoanDeviceOperationResult } from '../LoanDeviceOperationResult';
|
|
2
|
+
import { LoanDeviceMdmStatusEnum } from '../../enums/LoanDeviceMdmStatusEnum';
|
|
3
|
+
|
|
4
|
+
/** Resultado por crédito de la liberación definitiva en lote. */
|
|
5
|
+
export class LoanDeviceReleaseResult extends LoanDeviceOperationResult {
|
|
6
|
+
/** Estado nuestro del expediente después de intentar la liberación. */
|
|
7
|
+
mdmStatus: LoanDeviceMdmStatusEnum;
|
|
8
|
+
|
|
9
|
+
releasedAt?: string;
|
|
10
|
+
}
|
package/src/loanCredit/index.ts
CHANGED
|
@@ -44,6 +44,8 @@ export { MdmDeviceStatusEnum } from '../mdm/enums/MdmDeviceStatusEnum';
|
|
|
44
44
|
export { MdmOperationTypeEnum } from '../mdm/enums/MdmOperationTypeEnum';
|
|
45
45
|
export { MdmProviderEnum } from '../mdm/enums/MdmProviderEnum';
|
|
46
46
|
export { DeviceEnrollmentModeEnum } from '../mdm/enums/DeviceEnrollmentModeEnum';
|
|
47
|
+
export { DeviceNotifyIntensityEnum } from '../mdm/enums/DeviceNotifyIntensityEnum';
|
|
48
|
+
export { DeviceReleaseReasonEnum } from '../mdm/enums/DeviceReleaseReasonEnum';
|
|
47
49
|
export { MdmError } from '../mdm/dtos/MdmError';
|
|
48
50
|
export { DeviceLockScreenMessage } from '../mdm/dtos/DeviceLockScreenMessage';
|
|
49
51
|
export { MdmLockModeEnum } from '../retailCatalog/enums/MdmLockModeEnum';
|
|
@@ -55,6 +57,9 @@ export * from './dtos/LoanDeviceOperationResult';
|
|
|
55
57
|
export * from './dtos/LoanDeviceCreditRefItem';
|
|
56
58
|
export * from './dtos/LoanDeviceEnrollItem';
|
|
57
59
|
export * from './dtos/LoanDeviceManualLockItem';
|
|
60
|
+
export * from './dtos/LoanDeviceUnlockItem';
|
|
61
|
+
export * from './dtos/LoanDeviceNotifyItem';
|
|
62
|
+
export * from './dtos/LoanDeviceReleaseItem';
|
|
58
63
|
|
|
59
64
|
export * from './dtos/requests/LoanDeviceEnrollRequest';
|
|
60
65
|
export * from './dtos/requests/LoanDeviceEnrollStatusRequest';
|
|
@@ -62,6 +67,8 @@ export * from './dtos/requests/LoanDeviceStatusRequest';
|
|
|
62
67
|
export * from './dtos/requests/LoanDeviceLastSeenRequest';
|
|
63
68
|
export * from './dtos/requests/LoanDeviceManualLockRequest';
|
|
64
69
|
export * from './dtos/requests/LoanDeviceManualUnlockRequest';
|
|
70
|
+
export * from './dtos/requests/LoanDeviceNotifyRequest';
|
|
71
|
+
export * from './dtos/requests/LoanDeviceReleaseRequest';
|
|
65
72
|
|
|
66
73
|
export * from './dtos/responses/LoanDeviceEnrollResult';
|
|
67
74
|
export * from './dtos/responses/LoanDeviceEnrollResponse';
|
|
@@ -76,3 +83,9 @@ export * from './dtos/responses/LoanDeviceManualLockResponse';
|
|
|
76
83
|
export * from './dtos/responses/LoanDevicePinUnlockResult';
|
|
77
84
|
export * from './dtos/responses/LoanDeviceUnlockResult';
|
|
78
85
|
export * from './dtos/responses/LoanDeviceManualUnlockResponse';
|
|
86
|
+
export * from './dtos/responses/LoanDeviceNotifyResult';
|
|
87
|
+
export * from './dtos/responses/LoanDeviceNotifyResponse';
|
|
88
|
+
export * from './dtos/responses/LoanDeviceReleaseResult';
|
|
89
|
+
export * from './dtos/responses/LoanDeviceReleaseResponse';
|
|
90
|
+
|
|
91
|
+
export * from './validators/IsFutureIso8601DateTime';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ValidatorConstraint, ValidationArguments, ValidatorConstraintInterface } from 'class-validator';
|
|
2
|
+
|
|
3
|
+
/** Datetime ISO-8601 completo: fecha, hora y zona (`Z` u offset). Rechaza el date-only. */
|
|
4
|
+
const ISO_DATETIME_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d{1,3})?)?(Z|[+-]\d{2}:\d{2})$/;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Valida que el valor sea un datetime ISO-8601 con hora y zona, y posterior al momento actual.
|
|
8
|
+
*
|
|
9
|
+
* Por qué no alcanza `@IsISO8601()`:
|
|
10
|
+
* - acepta el date-only (`"2026-09-30"`), que no fija un instante y el proveedor MDM necesita uno;
|
|
11
|
+
* - acepta fechas pasadas, y un corte "hasta ayer" es un no-op silencioso.
|
|
12
|
+
*
|
|
13
|
+
* Uso típico:
|
|
14
|
+
* ```ts
|
|
15
|
+
* @Validate(IsFutureIso8601DateTime)
|
|
16
|
+
* unlockUntil?: string;
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
@ValidatorConstraint({ name: 'isFutureIso8601DateTime', async: false })
|
|
20
|
+
export class IsFutureIso8601DateTime implements ValidatorConstraintInterface {
|
|
21
|
+
validate(value: unknown, _args: ValidationArguments): boolean {
|
|
22
|
+
if (typeof value !== 'string' || !ISO_DATETIME_PATTERN.test(value)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const instant = Date.parse(value);
|
|
26
|
+
return !Number.isNaN(instant) && instant > Date.now();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
defaultMessage(args: ValidationArguments): string {
|
|
30
|
+
return `${args.property} debe ser un datetime ISO-8601 con hora y zona, y posterior al momento actual`;
|
|
31
|
+
}
|
|
32
|
+
}
|
package/src/mdm/README.md
CHANGED
|
@@ -60,6 +60,22 @@ import { Mdm } from "@fiado/type-kit";
|
|
|
60
60
|
| DeviceLastSeen | (incluido en Device Info) | Device Last Seen |
|
|
61
61
|
| DeviceLog | ❌ Error: no expone | Device Log |
|
|
62
62
|
|
|
63
|
+
## Modo de bloqueo (`MdmLockModeEnum`)
|
|
64
|
+
|
|
65
|
+
El enum lo define el catálogo (`retailCatalog`), porque el modo es un atributo del producto que se
|
|
66
|
+
congela al enrolar. El dominio `mdm` lo reexporta para no duplicarlo.
|
|
67
|
+
|
|
68
|
+
| Modo | Qué significa | Cómo se comporta |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| `ONDEMAND` | El bloqueo se dispara bajo demanda | Solo se bloquea cuando se lo ordenan |
|
|
71
|
+
| `SCHEDULED` | El bloqueo se dispara de forma programada | Se bloquea al vencer la vigencia; cada pago la corre |
|
|
72
|
+
|
|
73
|
+
- `DeviceEnrollRequest.lockMode` — opcional; ausente equivale a `ONDEMAND`.
|
|
74
|
+
- `DeviceUnlockRequest.unlockUntil` — opcional; ISO-8601 de hasta cuándo vale el desbloqueo. En
|
|
75
|
+
`ONDEMAND` no aplica y se ignora.
|
|
76
|
+
- `MdmErrorCodeEnum.UNLOCK_UNTIL_REQUIRED` — un desbloqueo sin `unlockUntil` sobre un equipo
|
|
77
|
+
`SCHEDULED` se rechaza: mandarlo sin vigencia liberaría el equipo sin fecha de re-bloqueo.
|
|
78
|
+
|
|
63
79
|
## Eventos entrantes (solo Datacultr)
|
|
64
80
|
|
|
65
81
|
- `DeviceEnrollmentCompletedEvent` — Enrollment Webhook
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Expose } from "class-transformer";
|
|
2
|
-
import { IsString, IsNotEmpty, IsOptional, IsNumber, IsPositive, Matches } from "class-validator";
|
|
2
|
+
import { IsString, IsNotEmpty, IsOptional, IsNumber, IsPositive, Matches, IsEnum } from "class-validator";
|
|
3
3
|
import { CREDIT_ID_MESSAGE, CREDIT_ID_PATTERN } from "../../common/constants/CreditIdPattern";
|
|
4
|
+
import { MdmLockModeEnum } from "../../retailCatalog/enums/MdmLockModeEnum";
|
|
4
5
|
|
|
5
6
|
export class DeviceEnrollRequest {
|
|
6
7
|
@Expose()
|
|
@@ -32,6 +33,12 @@ export class DeviceEnrollRequest {
|
|
|
32
33
|
@IsPositive()
|
|
33
34
|
termMonths: number;
|
|
34
35
|
|
|
36
|
+
/** Cuándo se dispara el bloqueo del equipo; si se omite es ONDEMAND, que es el modo de hoy. */
|
|
37
|
+
@Expose()
|
|
38
|
+
@IsEnum(MdmLockModeEnum)
|
|
39
|
+
@IsOptional()
|
|
40
|
+
lockMode?: MdmLockModeEnum;
|
|
41
|
+
|
|
35
42
|
@Expose()
|
|
36
43
|
@IsString()
|
|
37
44
|
@IsNotEmpty()
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Expose } from "class-transformer";
|
|
2
|
-
import { IsString, IsNotEmpty } from "class-validator";
|
|
2
|
+
import { IsString, IsNotEmpty, IsOptional, IsISO8601 } from "class-validator";
|
|
3
3
|
|
|
4
4
|
export class DeviceUnlockRequest {
|
|
5
5
|
@Expose()
|
|
@@ -7,6 +7,12 @@ export class DeviceUnlockRequest {
|
|
|
7
7
|
@IsNotEmpty()
|
|
8
8
|
imei: string;
|
|
9
9
|
|
|
10
|
+
/** ISO-8601 de hasta cuándo vale el desbloqueo; solo aplica en modo SCHEDULED. */
|
|
11
|
+
@Expose()
|
|
12
|
+
@IsISO8601()
|
|
13
|
+
@IsOptional()
|
|
14
|
+
unlockUntil?: string;
|
|
15
|
+
|
|
10
16
|
@Expose()
|
|
11
17
|
@IsString()
|
|
12
18
|
@IsNotEmpty()
|
|
@@ -3,6 +3,7 @@ export enum MdmErrorCodeEnum {
|
|
|
3
3
|
DEVICE_NOT_FOUND = "DEVICE_NOT_FOUND",
|
|
4
4
|
DEVICE_NOT_ENROLLED = "DEVICE_NOT_ENROLLED",
|
|
5
5
|
INVALID_REQUEST = "INVALID_REQUEST",
|
|
6
|
+
UNLOCK_UNTIL_REQUIRED = "UNLOCK_UNTIL_REQUIRED",
|
|
6
7
|
PROVIDER_ERROR = "PROVIDER_ERROR",
|
|
7
8
|
PROVIDER_TIMEOUT = "PROVIDER_TIMEOUT",
|
|
8
9
|
PROVIDER_RATE_LIMITED = "PROVIDER_RATE_LIMITED",
|
package/src/mdm/index.ts
CHANGED
|
@@ -58,3 +58,6 @@ export * from "./enums/MdmOperationStatusEnum";
|
|
|
58
58
|
export * from "./enums/MdmErrorCodeEnum";
|
|
59
59
|
export * from "./enums/MdmProviderEnum";
|
|
60
60
|
export * from "./enums/MdmOperationTypeEnum";
|
|
61
|
+
|
|
62
|
+
// enums de otro dominio — el modo de bloqueo lo define el producto en el catálogo
|
|
63
|
+
export { MdmLockModeEnum } from "../retailCatalog/enums/MdmLockModeEnum";
|