@fiado/api-invoker 5.144.0 → 5.146.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/bin/index.d.ts CHANGED
@@ -127,6 +127,7 @@ export * from "./domain-callback/index.js";
127
127
  export * from "./datacultrConnector/index.js";
128
128
  export * from "./webhook-business/index.js";
129
129
  export * from "./trustonicConnector/index.js";
130
+ export * from "./motosafeConnector/index.js";
130
131
  export * from "./rewards-business/index.js";
131
132
  export * from "./rewards-eligibility-business/index.js";
132
133
  export * from "./rules-business/index.js";
package/bin/index.js CHANGED
@@ -127,6 +127,7 @@ export * from "./domain-callback/index.js";
127
127
  export * from "./datacultrConnector/index.js";
128
128
  export * from "./webhook-business/index.js";
129
129
  export * from "./trustonicConnector/index.js";
130
+ export * from "./motosafeConnector/index.js";
130
131
  export * from "./rewards-business/index.js";
131
132
  export * from "./rewards-eligibility-business/index.js";
132
133
  export * from "./rules-business/index.js";
@@ -0,0 +1,17 @@
1
+ import type { IHttpRequest } from "@fiado/http-client";
2
+ import { StandardResponse } from "@fiado/gateway-adapter";
3
+ import { DeviceEnrollInitiateResponse, DeviceEnrollRequest, DeviceLockRequest, DeviceLockResponse, DeviceNotifyRequest, DeviceNotifyResponse, DeviceReleaseInitiateResponse, DeviceReleaseRequest, DeviceReleaseStatusRequest, DeviceReleaseStatusResponse, DeviceStatusRequest, DeviceStatusResponse, DeviceUnlockRequest, DeviceUnlockResponse } from "@fiado/type-kit/bin/mdm/index.js";
4
+ import { DeviceBatchRequest, DeviceBatchResult } from "../../utils/MdmEnvelopes.js";
5
+ import { IMotosafeConnectorApi } from "./interfaces/IMotosafeConnectorApi.js";
6
+ export default class MotosafeConnectorApi implements IMotosafeConnectorApi {
7
+ private httpRequest;
8
+ private readonly baseUrl;
9
+ constructor(httpRequest: IHttpRequest);
10
+ enrollDevices(input: DeviceBatchRequest<DeviceEnrollRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceEnrollInitiateResponse>>>;
11
+ getStatus(input: DeviceBatchRequest<DeviceStatusRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceStatusResponse>>>;
12
+ lockDevices(input: DeviceBatchRequest<DeviceLockRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceLockResponse>>>;
13
+ unlockDevices(input: DeviceBatchRequest<DeviceUnlockRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceUnlockResponse>>>;
14
+ releaseDevices(input: DeviceBatchRequest<DeviceReleaseRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceReleaseInitiateResponse>>>;
15
+ releaseStatus(input: DeviceBatchRequest<DeviceReleaseStatusRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceReleaseStatusResponse>>>;
16
+ notifyDevices(input: DeviceBatchRequest<DeviceNotifyRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceNotifyResponse>>>;
17
+ }
@@ -0,0 +1,50 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { inject, injectable } from "inversify";
14
+ // Publisher HTTP de `motosafe-connector`. El consumidor define
15
+ // MOTOSAFE_CONNECTOR_URL: '{{resolve:ssm:motosafe-connector}}' en su template.yml.
16
+ let MotosafeConnectorApi = class MotosafeConnectorApi {
17
+ httpRequest;
18
+ // El buildspec publica la URL en SSM con "/" final; se normaliza para no armar "//devices".
19
+ baseUrl = (process.env.MOTOSAFE_CONNECTOR_URL || "").replace(/\/+$/, "");
20
+ constructor(httpRequest) {
21
+ this.httpRequest = httpRequest;
22
+ }
23
+ async enrollDevices(input) {
24
+ return await this.httpRequest.post(`${this.baseUrl}/devices/enroll`, input);
25
+ }
26
+ async getStatus(input) {
27
+ return await this.httpRequest.post(`${this.baseUrl}/devices/status`, input);
28
+ }
29
+ async lockDevices(input) {
30
+ return await this.httpRequest.post(`${this.baseUrl}/devices/lock`, input);
31
+ }
32
+ async unlockDevices(input) {
33
+ return await this.httpRequest.post(`${this.baseUrl}/devices/unlock`, input);
34
+ }
35
+ async releaseDevices(input) {
36
+ return await this.httpRequest.post(`${this.baseUrl}/devices/release`, input);
37
+ }
38
+ async releaseStatus(input) {
39
+ return await this.httpRequest.post(`${this.baseUrl}/devices/release/status`, input);
40
+ }
41
+ async notifyDevices(input) {
42
+ return await this.httpRequest.post(`${this.baseUrl}/devices/notify`, input);
43
+ }
44
+ };
45
+ MotosafeConnectorApi = __decorate([
46
+ injectable(),
47
+ __param(0, inject("IHttpRequest")),
48
+ __metadata("design:paramtypes", [Object])
49
+ ], MotosafeConnectorApi);
50
+ export default MotosafeConnectorApi;
@@ -0,0 +1,19 @@
1
+ import { StandardResponse } from "@fiado/gateway-adapter";
2
+ import { DeviceEnrollInitiateResponse, DeviceEnrollRequest, DeviceLockRequest, DeviceLockResponse, DeviceNotifyRequest, DeviceNotifyResponse, DeviceReleaseInitiateResponse, DeviceReleaseRequest, DeviceReleaseStatusRequest, DeviceReleaseStatusResponse, DeviceStatusRequest, DeviceStatusResponse, DeviceUnlockRequest, DeviceUnlockResponse } from "@fiado/type-kit/bin/mdm/index.js";
3
+ import { DeviceBatchRequest, DeviceBatchResult } from "../../../utils/MdmEnvelopes.js";
4
+ export interface IMotosafeConnectorApi {
5
+ /** POST `/devices/enroll` — registra cada IMEI; responde `PENDING` sin `pollingHandle` (se concilia por estado). */
6
+ enrollDevices(input: DeviceBatchRequest<DeviceEnrollRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceEnrollInitiateResponse>>>;
7
+ /** POST `/devices/status` — estado aplicado de cada IMEI; `UNKNOWN` si la orden aún no llega al equipo. */
8
+ getStatus(input: DeviceBatchRequest<DeviceStatusRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceStatusResponse>>>;
9
+ /** POST `/devices/lock` — bloqueo inmediato, sin mensaje en pantalla. */
10
+ lockDevices(input: DeviceBatchRequest<DeviceLockRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceLockResponse>>>;
11
+ /** POST `/devices/unlock` — desbloqueo inmediato; rechaza `unlockUntil` (solo ONDEMAND). */
12
+ unlockDevices(input: DeviceBatchRequest<DeviceUnlockRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceUnlockResponse>>>;
13
+ /** POST `/devices/release` — libera cada IMEI; responde `PENDING` y se confirma con `releaseStatus`. */
14
+ releaseDevices(input: DeviceBatchRequest<DeviceReleaseRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceReleaseInitiateResponse>>>;
15
+ /** POST `/devices/release/status` — `SUCCESS` solo si el estado indica liberación; sin `pollingHandle`. */
16
+ releaseStatus(input: DeviceBatchRequest<DeviceReleaseStatusRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceReleaseStatusResponse>>>;
17
+ /** POST `/devices/notify` — aviso en pantalla; título ≤ 30 y contenido ≤ 100 caracteres. */
18
+ notifyDevices(input: DeviceBatchRequest<DeviceNotifyRequest>): Promise<StandardResponse<DeviceBatchResult<DeviceNotifyResponse>>>;
19
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./api/interfaces/IMotosafeConnectorApi.js";
2
+ export { default as MotosafeConnectorApi } from "./api/MotosafeConnectorApi.js";
@@ -0,0 +1,2 @@
1
+ export * from "./api/interfaces/IMotosafeConnectorApi.js";
2
+ export { default as MotosafeConnectorApi } from "./api/MotosafeConnectorApi.js";
@@ -1,6 +1,6 @@
1
1
  import type { IHttpRequest } from "@fiado/http-client";
2
2
  import { APIGatewayProxyResultBody, ApiGatewayResponse, ResolvedPermissions, ResolveInput } from "@fiado/gateway-adapter";
3
- import { DefineNextChallengeRequest, DefineNextChallengeResponse, PrepareChallengeRequest, PrepareChallengeResponse, VerifyChallengeRequest, VerifyChallengeResponse, AuthorizeRequest, AuthorizeResponse, EffectivePermissionsResponse, InjectableUserAttributesResponse, PermissionScope, CreateLevelEntityRequest, CreateLevelEntityResponse, CreateTenantUserRequest, CreateTenantUserResponse, UserProfileResponse, ListLevelEntitiesResponse, LevelEntityResponse, UpdateLevelEntityRequest, DeleteLevelEntityRequest, DeleteLevelEntityResponse, ListTenantUsersResponse, GetTenantUserResponse, TenantUserResponse, TenantUserAckResponse, UpdateTenantUserRequest, DeleteTenantUserRequest, DisableTenantUserRequest, EnableTenantUserRequest, ResetTenantUserPasswordRequest, ResetTenantUserPasswordResponse, ResetTenantUserMfaRequest, ListTenantRolesResponse, AssignTenantRoleRequest, AssignTenantRoleResponse, RevokeTenantRoleRequest, RevokeTenantRoleResponse } from "@fiado/type-kit/bin/platformRbac/index.js";
3
+ import { DefineNextChallengeRequest, DefineNextChallengeResponse, PrepareChallengeRequest, PrepareChallengeResponse, VerifyChallengeRequest, VerifyChallengeResponse, AuthorizeRequest, AuthorizeResponse, EffectivePermissionsResponse, InjectableUserAttributesResponse, PermissionScope, CreateLevelEntityRequest, CreateLevelEntityResponse, CreateTenantUserRequest, CreateTenantUserResponse, UserProfileResponse, ListLevelEntitiesResponse, LevelEntityResponse, UpdateLevelEntityRequest, DeleteLevelEntityRequest, DeleteLevelEntityResponse, ListTenantUsersResponse, GetTenantUserResponse, TenantUserResponse, TenantUserAckResponse, UpdateTenantUserRequest, UpdateTenantUserEmailRequest, DeleteTenantUserRequest, DisableTenantUserRequest, EnableTenantUserRequest, ResetTenantUserPasswordRequest, ResetTenantUserPasswordResponse, ResetTenantUserMfaRequest, ListTenantRolesResponse, AssignTenantRoleRequest, AssignTenantRoleResponse, RevokeTenantRoleRequest, RevokeTenantRoleResponse } from "@fiado/type-kit/bin/platformRbac/index.js";
4
4
  import type { TenantUsersBySubsResponse, RoleAssignmentsByScopeRefsResponse } from "@fiado/type-kit/bin/platformRbac/index.js";
5
5
  import { IPlatformRbacBusinessApi } from "./interfaces/IPlatformRbacBusinessApi.js";
6
6
  /**
@@ -55,6 +55,8 @@ export default class PlatformRbacBusinessApi implements IPlatformRbacBusinessApi
55
55
  getTenantUser(tenantId: string, cognitoSub: string): Promise<APIGatewayProxyResultBody<GetTenantUserResponse>>;
56
56
  /** PUT /internal/tenants/{tenantId}/users/{cognitoSub} — renombra a un usuario. */
57
57
  updateTenantUser(tenantId: string, cognitoSub: string, input: UpdateTenantUserRequest): Promise<APIGatewayProxyResultBody<TenantUserResponse>>;
58
+ /** PUT /internal/tenants/{tenantId}/users/{cognitoSub}/email — cambia el correo de un usuario. */
59
+ updateTenantUserEmail(tenantId: string, cognitoSub: string, input: UpdateTenantUserEmailRequest): Promise<APIGatewayProxyResultBody<TenantUserResponse>>;
58
60
  /** DELETE /internal/tenants/{tenantId}/users/{cognitoSub} — borra a un usuario. El `actedBy` viaja en el cuerpo. */
59
61
  deleteTenantUser(tenantId: string, cognitoSub: string, input: DeleteTenantUserRequest): Promise<APIGatewayProxyResultBody<TenantUserAckResponse>>;
60
62
  /** POST /internal/tenants/{tenantId}/users/{cognitoSub}/disable — suspende a un usuario. */
@@ -143,6 +143,11 @@ let PlatformRbacBusinessApi = class PlatformRbacBusinessApi {
143
143
  const url = `${this._tenantUsersUrl(tenantId)}/${encodeURIComponent(cognitoSub)}`;
144
144
  return await this.httpRequest.put(url, input);
145
145
  }
146
+ /** PUT /internal/tenants/{tenantId}/users/{cognitoSub}/email — cambia el correo de un usuario. */
147
+ async updateTenantUserEmail(tenantId, cognitoSub, input) {
148
+ const url = `${this._tenantUsersUrl(tenantId)}/${encodeURIComponent(cognitoSub)}/email`;
149
+ return await this.httpRequest.put(url, input);
150
+ }
146
151
  /** DELETE /internal/tenants/{tenantId}/users/{cognitoSub} — borra a un usuario. El `actedBy` viaja en el cuerpo. */
147
152
  async deleteTenantUser(tenantId, cognitoSub, input) {
148
153
  const url = `${this._tenantUsersUrl(tenantId)}/${encodeURIComponent(cognitoSub)}`;
@@ -1,5 +1,5 @@
1
1
  import { APIGatewayProxyResultBody, ApiGatewayResponse, ResolvedPermissions, ResolveInput } from "@fiado/gateway-adapter";
2
- import { DefineNextChallengeRequest, DefineNextChallengeResponse, PrepareChallengeRequest, PrepareChallengeResponse, VerifyChallengeRequest, VerifyChallengeResponse, AuthorizeRequest, AuthorizeResponse, EffectivePermissionsResponse, InjectableUserAttributesResponse, PermissionScope, CreateLevelEntityRequest, CreateLevelEntityResponse, CreateTenantUserRequest, CreateTenantUserResponse, UserProfileResponse, ListLevelEntitiesResponse, LevelEntityResponse, UpdateLevelEntityRequest, DeleteLevelEntityRequest, DeleteLevelEntityResponse, ListTenantUsersResponse, GetTenantUserResponse, TenantUserResponse, TenantUserAckResponse, UpdateTenantUserRequest, DeleteTenantUserRequest, DisableTenantUserRequest, EnableTenantUserRequest, ResetTenantUserPasswordRequest, ResetTenantUserPasswordResponse, ResetTenantUserMfaRequest, ListTenantRolesResponse, AssignTenantRoleRequest, AssignTenantRoleResponse, RevokeTenantRoleRequest, RevokeTenantRoleResponse } from "@fiado/type-kit/bin/platformRbac/index.js";
2
+ import { DefineNextChallengeRequest, DefineNextChallengeResponse, PrepareChallengeRequest, PrepareChallengeResponse, VerifyChallengeRequest, VerifyChallengeResponse, AuthorizeRequest, AuthorizeResponse, EffectivePermissionsResponse, InjectableUserAttributesResponse, PermissionScope, CreateLevelEntityRequest, CreateLevelEntityResponse, CreateTenantUserRequest, CreateTenantUserResponse, UserProfileResponse, ListLevelEntitiesResponse, LevelEntityResponse, UpdateLevelEntityRequest, DeleteLevelEntityRequest, DeleteLevelEntityResponse, ListTenantUsersResponse, GetTenantUserResponse, TenantUserResponse, TenantUserAckResponse, UpdateTenantUserRequest, UpdateTenantUserEmailRequest, DeleteTenantUserRequest, DisableTenantUserRequest, EnableTenantUserRequest, ResetTenantUserPasswordRequest, ResetTenantUserPasswordResponse, ResetTenantUserMfaRequest, ListTenantRolesResponse, AssignTenantRoleRequest, AssignTenantRoleResponse, RevokeTenantRoleRequest, RevokeTenantRoleResponse } from "@fiado/type-kit/bin/platformRbac/index.js";
3
3
  import type { TenantUsersBySubsResponse, RoleAssignmentsByScopeRefsResponse } from "@fiado/type-kit/bin/platformRbac/index.js";
4
4
  /**
5
5
  * Contrato del publisher HTTP del lambda `platform-rbac-business` (componente 06 SureKeep Fase 0)
@@ -99,6 +99,8 @@ export interface IPlatformRbacBusinessApi {
99
99
  getTenantUser(tenantId: string, cognitoSub: string): Promise<APIGatewayProxyResultBody<GetTenantUserResponse>>;
100
100
  /** PUT /internal/tenants/{tenantId}/users/{cognitoSub} — renombra a un usuario. */
101
101
  updateTenantUser(tenantId: string, cognitoSub: string, input: UpdateTenantUserRequest): Promise<APIGatewayProxyResultBody<TenantUserResponse>>;
102
+ /** PUT /internal/tenants/{tenantId}/users/{cognitoSub}/email — cambia el correo de un usuario. */
103
+ updateTenantUserEmail(tenantId: string, cognitoSub: string, input: UpdateTenantUserEmailRequest): Promise<APIGatewayProxyResultBody<TenantUserResponse>>;
102
104
  /** DELETE /internal/tenants/{tenantId}/users/{cognitoSub} — borra a un usuario. El `actedBy` viaja en el cuerpo. */
103
105
  deleteTenantUser(tenantId: string, cognitoSub: string, input: DeleteTenantUserRequest): Promise<APIGatewayProxyResultBody<TenantUserAckResponse>>;
104
106
  /** POST /internal/tenants/{tenantId}/users/{cognitoSub}/disable — suspende a un usuario. */
@@ -1,6 +1,6 @@
1
1
  import type { IHttpRequest } from "@fiado/http-client";
2
2
  import { StandardResponse } from "@fiado/gateway-adapter";
3
- import type { CancelRetailSaleRequest, CancelRetailSaleResponse, CheckRetailInventoryRequest, CheckRetailInventoryResponse, GetRetailInventoryRequest, GetRetailInventoryResponse, ListRetailCatalogRequest, ListRetailCatalogResponse, ListRetailStoresRequest, ListRetailStoresResponse, ListRetailUsersRequest, ListRetailUsersResponse, RegisterRetailSaleRequest, RegisterRetailSaleResponse, RetailSystemSale, RetailTenantQuery } from "@fiado/type-kit/bin/retailIntegration/index.js";
3
+ import type { CancelRetailSaleRequest, CancelRetailSaleResponse, CheckRetailInventoryRequest, CheckRetailInventoryResponse, GetRetailInventoryRequest, GetRetailInventoryResponse, ListRetailCatalogRequest, ListRetailCatalogResponse, ListRetailInventoryMovementsRequest, ListRetailInventoryMovementsResponse, ListRetailStoresRequest, ListRetailStoresResponse, ListRetailUsersRequest, ListRetailUsersResponse, RegisterRetailSaleRequest, RegisterRetailSaleResponse, RetailSystemSale, RetailTenantQuery } from "@fiado/type-kit/bin/retailIntegration/index.js";
4
4
  import { IRetailIntegrationConnectorApi } from "./interfaces/IRetailIntegrationConnectorApi.js";
5
5
  /** Publisher de la salida privada de `retail-integration-connector`. */
6
6
  export default class RetailIntegrationConnectorApi implements IRetailIntegrationConnectorApi {
@@ -10,9 +10,11 @@ export default class RetailIntegrationConnectorApi implements IRetailIntegration
10
10
  listRetailStores(request: ListRetailStoresRequest): Promise<StandardResponse<ListRetailStoresResponse>>;
11
11
  listRetailCatalog(request: ListRetailCatalogRequest): Promise<StandardResponse<ListRetailCatalogResponse>>;
12
12
  getRetailInventory(request: GetRetailInventoryRequest): Promise<StandardResponse<GetRetailInventoryResponse>>;
13
+ listRetailInventoryMovements(request: ListRetailInventoryMovementsRequest): Promise<StandardResponse<ListRetailInventoryMovementsResponse>>;
13
14
  listRetailUsers(request: ListRetailUsersRequest): Promise<StandardResponse<ListRetailUsersResponse>>;
14
15
  registerRetailSale(request: RegisterRetailSaleRequest, sale: RetailSystemSale): Promise<StandardResponse<RegisterRetailSaleResponse>>;
15
16
  cancelRetailSale(query: RetailTenantQuery, cancellation: CancelRetailSaleRequest): Promise<StandardResponse<CancelRetailSaleResponse>>;
17
+ /** @deprecated El wizard ya no consulta en vivo; se borra cuando ningún consumidor lo use. */
16
18
  checkRetailInventory(request: CheckRetailInventoryRequest): Promise<StandardResponse<CheckRetailInventoryResponse>>;
17
19
  private getWithTimeout;
18
20
  private tenantQuery;
@@ -41,6 +41,17 @@ let RetailIntegrationConnectorApi = class RetailIntegrationConnectorApi {
41
41
  ...this.tenantQuery(request),
42
42
  storeId: request.storeId,
43
43
  runId: request.runId,
44
+ limit: request.limit,
45
+ nextToken: request.nextToken,
46
+ });
47
+ }
48
+ async listRetailInventoryMovements(request) {
49
+ return await this.getWithTimeout("/private/retail/inventory/movements", {
50
+ ...this.listQuery(request),
51
+ from: request.from,
52
+ to: request.to,
53
+ limit: request.limit,
54
+ nextToken: request.nextToken,
44
55
  });
45
56
  }
46
57
  async listRetailUsers(request) {
@@ -64,6 +75,7 @@ let RetailIntegrationConnectorApi = class RetailIntegrationConnectorApi {
64
75
  timeout: RETAIL_INTEGRATION_CONNECTOR_TIMEOUT_MS,
65
76
  });
66
77
  }
78
+ /** @deprecated El wizard ya no consulta en vivo; se borra cuando ningún consumidor lo use. */
67
79
  async checkRetailInventory(request) {
68
80
  const fields = {
69
81
  ...this.tenantQuery(request),
@@ -1,5 +1,5 @@
1
1
  import { StandardResponse } from "@fiado/gateway-adapter";
2
- import type { CancelRetailSaleRequest, CancelRetailSaleResponse, CheckRetailInventoryRequest, CheckRetailInventoryResponse, GetRetailInventoryRequest, GetRetailInventoryResponse, ListRetailCatalogRequest, ListRetailCatalogResponse, ListRetailStoresRequest, ListRetailStoresResponse, ListRetailUsersRequest, ListRetailUsersResponse, RegisterRetailSaleRequest, RegisterRetailSaleResponse, RetailSystemSale, RetailTenantQuery } from "@fiado/type-kit/bin/retailIntegration/index.js";
2
+ import type { CancelRetailSaleRequest, CancelRetailSaleResponse, CheckRetailInventoryRequest, CheckRetailInventoryResponse, GetRetailInventoryRequest, GetRetailInventoryResponse, ListRetailCatalogRequest, ListRetailCatalogResponse, ListRetailInventoryMovementsRequest, ListRetailInventoryMovementsResponse, ListRetailStoresRequest, ListRetailStoresResponse, ListRetailUsersRequest, ListRetailUsersResponse, RegisterRetailSaleRequest, RegisterRetailSaleResponse, RetailSystemSale, RetailTenantQuery } from "@fiado/type-kit/bin/retailIntegration/index.js";
3
3
  /**
4
4
  * Salida privada de `retail-integration-connector` hacia el sistema del retailer del tenant.
5
5
  * Env var del consumidor: `RETAIL_INTEGRATION_CONNECTOR_URL: '{{resolve:ssm:retail-integration-connector}}'`.
@@ -9,14 +9,19 @@ export interface IRetailIntegrationConnectorApi {
9
9
  listRetailStores(request: ListRetailStoresRequest): Promise<StandardResponse<ListRetailStoresResponse>>;
10
10
  /** `GET /private/retail/catalog` — una página del catálogo del retailer. */
11
11
  listRetailCatalog(request: ListRetailCatalogRequest): Promise<StandardResponse<ListRetailCatalogResponse>>;
12
- /** `GET /private/retail/inventory` — piezas y existencias de una tienda. */
12
+ /** `GET /private/retail/inventory` — una página de piezas y existencias de una tienda. */
13
13
  getRetailInventory(request: GetRetailInventoryRequest): Promise<StandardResponse<GetRetailInventoryResponse>>;
14
+ /** `GET /private/retail/inventory/movements` — una página de movimientos en el rango `[from, to)`; 12 s. */
15
+ listRetailInventoryMovements(request: ListRetailInventoryMovementsRequest): Promise<StandardResponse<ListRetailInventoryMovementsResponse>>;
14
16
  /** `GET /private/retail/users` — una página de usuarios, opcionalmente de una tienda. */
15
17
  listRetailUsers(request: ListRetailUsersRequest): Promise<StandardResponse<ListRetailUsersResponse>>;
16
18
  /** `POST /private/retail/sales` — registra la venta; ante timeout o 502, reintenta con el mismo `saleId`. */
17
19
  registerRetailSale(request: RegisterRetailSaleRequest, sale: RetailSystemSale): Promise<StandardResponse<RegisterRetailSaleResponse>>;
18
20
  /** `POST /private/retail/sales/cancel` — cancela la venta con el mismo `saleId` del registro; 12 s. */
19
21
  cancelRetailSale(query: RetailTenantQuery, cancellation: CancelRetailSaleRequest): Promise<StandardResponse<CancelRetailSaleResponse>>;
20
- /** `GET /private/retail/inventory/live-check` — qué identificadores lista hoy la tienda; 3 s. */
22
+ /**
23
+ * `GET /private/retail/inventory/live-check` — qué identificadores lista hoy la tienda; 3 s.
24
+ * @deprecated El wizard ya no consulta en vivo; se borra cuando ningún consumidor lo use.
25
+ */
21
26
  checkRetailInventory(request: CheckRetailInventoryRequest): Promise<StandardResponse<CheckRetailInventoryResponse>>;
22
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/api-invoker",
3
- "version": "5.144.0",
3
+ "version": "5.146.0",
4
4
  "description": "Sirve como un puente entre diferentes funciones lambda, facilitando la comunicación entre ellas a través de invocaciones http",
5
5
  "type": "module",
6
6
  "main": "bin/index.js",
@@ -34,7 +34,7 @@
34
34
  "@fiado/gateway-adapter": "^3.14.0",
35
35
  "@fiado/http-client": "^2.0.1",
36
36
  "@fiado/logger": "^1.1.3",
37
- "@fiado/type-kit": "^3.579.0",
37
+ "@fiado/type-kit": "^3.585.0",
38
38
  "dotenv": "^16.4.7"
39
39
  },
40
40
  "peerDependencies": {
package/src/index.ts CHANGED
@@ -127,6 +127,7 @@ export * from "./domain-callback/index.js";
127
127
  export * from "./datacultrConnector/index.js";
128
128
  export * from "./webhook-business/index.js";
129
129
  export * from "./trustonicConnector/index.js";
130
+ export * from "./motosafeConnector/index.js";
130
131
  export * from "./rewards-business/index.js";
131
132
  export * from "./rewards-eligibility-business/index.js";
132
133
  export * from "./rules-business/index.js";
@@ -0,0 +1,73 @@
1
+ import { inject, injectable } from "inversify";
2
+ import type { IHttpRequest } from "@fiado/http-client";
3
+ import { StandardResponse } from "@fiado/gateway-adapter";
4
+ import {
5
+ DeviceEnrollInitiateResponse,
6
+ DeviceEnrollRequest,
7
+ DeviceLockRequest,
8
+ DeviceLockResponse,
9
+ DeviceNotifyRequest,
10
+ DeviceNotifyResponse,
11
+ DeviceReleaseInitiateResponse,
12
+ DeviceReleaseRequest,
13
+ DeviceReleaseStatusRequest,
14
+ DeviceReleaseStatusResponse,
15
+ DeviceStatusRequest,
16
+ DeviceStatusResponse,
17
+ DeviceUnlockRequest,
18
+ DeviceUnlockResponse,
19
+ } from "@fiado/type-kit/bin/mdm/index.js";
20
+ import { DeviceBatchRequest, DeviceBatchResult } from "../../utils/MdmEnvelopes.js";
21
+ import { IMotosafeConnectorApi } from "./interfaces/IMotosafeConnectorApi.js";
22
+
23
+ // Publisher HTTP de `motosafe-connector`. El consumidor define
24
+ // MOTOSAFE_CONNECTOR_URL: '{{resolve:ssm:motosafe-connector}}' en su template.yml.
25
+ @injectable()
26
+ export default class MotosafeConnectorApi implements IMotosafeConnectorApi {
27
+ // El buildspec publica la URL en SSM con "/" final; se normaliza para no armar "//devices".
28
+ private readonly baseUrl = (process.env.MOTOSAFE_CONNECTOR_URL || "").replace(/\/+$/, "");
29
+
30
+ constructor(@inject("IHttpRequest") private httpRequest: IHttpRequest) {}
31
+
32
+ async enrollDevices(
33
+ input: DeviceBatchRequest<DeviceEnrollRequest>,
34
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceEnrollInitiateResponse>>> {
35
+ return await this.httpRequest.post(`${this.baseUrl}/devices/enroll`, input);
36
+ }
37
+
38
+ async getStatus(
39
+ input: DeviceBatchRequest<DeviceStatusRequest>,
40
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceStatusResponse>>> {
41
+ return await this.httpRequest.post(`${this.baseUrl}/devices/status`, input);
42
+ }
43
+
44
+ async lockDevices(
45
+ input: DeviceBatchRequest<DeviceLockRequest>,
46
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceLockResponse>>> {
47
+ return await this.httpRequest.post(`${this.baseUrl}/devices/lock`, input);
48
+ }
49
+
50
+ async unlockDevices(
51
+ input: DeviceBatchRequest<DeviceUnlockRequest>,
52
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceUnlockResponse>>> {
53
+ return await this.httpRequest.post(`${this.baseUrl}/devices/unlock`, input);
54
+ }
55
+
56
+ async releaseDevices(
57
+ input: DeviceBatchRequest<DeviceReleaseRequest>,
58
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceReleaseInitiateResponse>>> {
59
+ return await this.httpRequest.post(`${this.baseUrl}/devices/release`, input);
60
+ }
61
+
62
+ async releaseStatus(
63
+ input: DeviceBatchRequest<DeviceReleaseStatusRequest>,
64
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceReleaseStatusResponse>>> {
65
+ return await this.httpRequest.post(`${this.baseUrl}/devices/release/status`, input);
66
+ }
67
+
68
+ async notifyDevices(
69
+ input: DeviceBatchRequest<DeviceNotifyRequest>,
70
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceNotifyResponse>>> {
71
+ return await this.httpRequest.post(`${this.baseUrl}/devices/notify`, input);
72
+ }
73
+ }
@@ -0,0 +1,57 @@
1
+ import { StandardResponse } from "@fiado/gateway-adapter";
2
+ import {
3
+ DeviceEnrollInitiateResponse,
4
+ DeviceEnrollRequest,
5
+ DeviceLockRequest,
6
+ DeviceLockResponse,
7
+ DeviceNotifyRequest,
8
+ DeviceNotifyResponse,
9
+ DeviceReleaseInitiateResponse,
10
+ DeviceReleaseRequest,
11
+ DeviceReleaseStatusRequest,
12
+ DeviceReleaseStatusResponse,
13
+ DeviceStatusRequest,
14
+ DeviceStatusResponse,
15
+ DeviceUnlockRequest,
16
+ DeviceUnlockResponse,
17
+ } from "@fiado/type-kit/bin/mdm/index.js";
18
+ import { DeviceBatchRequest, DeviceBatchResult } from "../../../utils/MdmEnvelopes.js";
19
+
20
+ // Publisher de `motosafe-connector`: paths `/devices/*` sin `/private`, sin tenant, `Feature.ANONIMUS` (VPC).
21
+ // Solo los 7 métodos que llama algún consumidor; el resto lo degrada el adapter sin salir a la red.
22
+ export interface IMotosafeConnectorApi {
23
+ /** POST `/devices/enroll` — registra cada IMEI; responde `PENDING` sin `pollingHandle` (se concilia por estado). */
24
+ enrollDevices(
25
+ input: DeviceBatchRequest<DeviceEnrollRequest>,
26
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceEnrollInitiateResponse>>>;
27
+
28
+ /** POST `/devices/status` — estado aplicado de cada IMEI; `UNKNOWN` si la orden aún no llega al equipo. */
29
+ getStatus(
30
+ input: DeviceBatchRequest<DeviceStatusRequest>,
31
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceStatusResponse>>>;
32
+
33
+ /** POST `/devices/lock` — bloqueo inmediato, sin mensaje en pantalla. */
34
+ lockDevices(
35
+ input: DeviceBatchRequest<DeviceLockRequest>,
36
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceLockResponse>>>;
37
+
38
+ /** POST `/devices/unlock` — desbloqueo inmediato; rechaza `unlockUntil` (solo ONDEMAND). */
39
+ unlockDevices(
40
+ input: DeviceBatchRequest<DeviceUnlockRequest>,
41
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceUnlockResponse>>>;
42
+
43
+ /** POST `/devices/release` — libera cada IMEI; responde `PENDING` y se confirma con `releaseStatus`. */
44
+ releaseDevices(
45
+ input: DeviceBatchRequest<DeviceReleaseRequest>,
46
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceReleaseInitiateResponse>>>;
47
+
48
+ /** POST `/devices/release/status` — `SUCCESS` solo si el estado indica liberación; sin `pollingHandle`. */
49
+ releaseStatus(
50
+ input: DeviceBatchRequest<DeviceReleaseStatusRequest>,
51
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceReleaseStatusResponse>>>;
52
+
53
+ /** POST `/devices/notify` — aviso en pantalla; título ≤ 30 y contenido ≤ 100 caracteres. */
54
+ notifyDevices(
55
+ input: DeviceBatchRequest<DeviceNotifyRequest>,
56
+ ): Promise<StandardResponse<DeviceBatchResult<DeviceNotifyResponse>>>;
57
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./api/interfaces/IMotosafeConnectorApi.js";
2
+ export { default as MotosafeConnectorApi } from "./api/MotosafeConnectorApi.js";
@@ -34,6 +34,7 @@ import {
34
34
  TenantUserResponse,
35
35
  TenantUserAckResponse,
36
36
  UpdateTenantUserRequest,
37
+ UpdateTenantUserEmailRequest,
37
38
  DeleteTenantUserRequest,
38
39
  DisableTenantUserRequest,
39
40
  EnableTenantUserRequest,
@@ -261,6 +262,16 @@ export default class PlatformRbacBusinessApi implements IPlatformRbacBusinessApi
261
262
  return await this.httpRequest.put(url, input);
262
263
  }
263
264
 
265
+ /** PUT /internal/tenants/{tenantId}/users/{cognitoSub}/email — cambia el correo de un usuario. */
266
+ async updateTenantUserEmail(
267
+ tenantId: string,
268
+ cognitoSub: string,
269
+ input: UpdateTenantUserEmailRequest,
270
+ ): Promise<APIGatewayProxyResultBody<TenantUserResponse>> {
271
+ const url = `${this._tenantUsersUrl(tenantId)}/${encodeURIComponent(cognitoSub)}/email`;
272
+ return await this.httpRequest.put(url, input);
273
+ }
274
+
264
275
  /** DELETE /internal/tenants/{tenantId}/users/{cognitoSub} — borra a un usuario. El `actedBy` viaja en el cuerpo. */
265
276
  async deleteTenantUser(
266
277
  tenantId: string,
@@ -31,6 +31,7 @@ import {
31
31
  TenantUserResponse,
32
32
  TenantUserAckResponse,
33
33
  UpdateTenantUserRequest,
34
+ UpdateTenantUserEmailRequest,
34
35
  DeleteTenantUserRequest,
35
36
  DisableTenantUserRequest,
36
37
  EnableTenantUserRequest,
@@ -216,6 +217,13 @@ export interface IPlatformRbacBusinessApi {
216
217
  input: UpdateTenantUserRequest,
217
218
  ): Promise<APIGatewayProxyResultBody<TenantUserResponse>>;
218
219
 
220
+ /** PUT /internal/tenants/{tenantId}/users/{cognitoSub}/email — cambia el correo de un usuario. */
221
+ updateTenantUserEmail(
222
+ tenantId: string,
223
+ cognitoSub: string,
224
+ input: UpdateTenantUserEmailRequest,
225
+ ): Promise<APIGatewayProxyResultBody<TenantUserResponse>>;
226
+
219
227
  /** DELETE /internal/tenants/{tenantId}/users/{cognitoSub} — borra a un usuario. El `actedBy` viaja en el cuerpo. */
220
228
  deleteTenantUser(
221
229
  tenantId: string,
@@ -10,6 +10,8 @@ import type {
10
10
  GetRetailInventoryResponse,
11
11
  ListRetailCatalogRequest,
12
12
  ListRetailCatalogResponse,
13
+ ListRetailInventoryMovementsRequest,
14
+ ListRetailInventoryMovementsResponse,
13
15
  ListRetailStoresRequest,
14
16
  ListRetailStoresResponse,
15
17
  ListRetailUsersRequest,
@@ -58,6 +60,20 @@ export default class RetailIntegrationConnectorApi implements IRetailIntegration
58
60
  ...this.tenantQuery(request),
59
61
  storeId: request.storeId,
60
62
  runId: request.runId,
63
+ limit: request.limit,
64
+ nextToken: request.nextToken,
65
+ });
66
+ }
67
+
68
+ async listRetailInventoryMovements(
69
+ request: ListRetailInventoryMovementsRequest,
70
+ ): Promise<StandardResponse<ListRetailInventoryMovementsResponse>> {
71
+ return await this.getWithTimeout("/private/retail/inventory/movements", {
72
+ ...this.listQuery(request),
73
+ from: request.from,
74
+ to: request.to,
75
+ limit: request.limit,
76
+ nextToken: request.nextToken,
61
77
  });
62
78
  }
63
79
 
@@ -91,6 +107,7 @@ export default class RetailIntegrationConnectorApi implements IRetailIntegration
91
107
  });
92
108
  }
93
109
 
110
+ /** @deprecated El wizard ya no consulta en vivo; se borra cuando ningún consumidor lo use. */
94
111
  async checkRetailInventory(
95
112
  request: CheckRetailInventoryRequest,
96
113
  ): Promise<StandardResponse<CheckRetailInventoryResponse>> {
@@ -8,6 +8,8 @@ import type {
8
8
  GetRetailInventoryResponse,
9
9
  ListRetailCatalogRequest,
10
10
  ListRetailCatalogResponse,
11
+ ListRetailInventoryMovementsRequest,
12
+ ListRetailInventoryMovementsResponse,
11
13
  ListRetailStoresRequest,
12
14
  ListRetailStoresResponse,
13
15
  ListRetailUsersRequest,
@@ -29,9 +31,14 @@ export interface IRetailIntegrationConnectorApi {
29
31
  /** `GET /private/retail/catalog` — una página del catálogo del retailer. */
30
32
  listRetailCatalog(request: ListRetailCatalogRequest): Promise<StandardResponse<ListRetailCatalogResponse>>;
31
33
 
32
- /** `GET /private/retail/inventory` — piezas y existencias de una tienda. */
34
+ /** `GET /private/retail/inventory` — una página de piezas y existencias de una tienda. */
33
35
  getRetailInventory(request: GetRetailInventoryRequest): Promise<StandardResponse<GetRetailInventoryResponse>>;
34
36
 
37
+ /** `GET /private/retail/inventory/movements` — una página de movimientos en el rango `[from, to)`; 12 s. */
38
+ listRetailInventoryMovements(
39
+ request: ListRetailInventoryMovementsRequest,
40
+ ): Promise<StandardResponse<ListRetailInventoryMovementsResponse>>;
41
+
35
42
  /** `GET /private/retail/users` — una página de usuarios, opcionalmente de una tienda. */
36
43
  listRetailUsers(request: ListRetailUsersRequest): Promise<StandardResponse<ListRetailUsersResponse>>;
37
44
 
@@ -47,6 +54,9 @@ export interface IRetailIntegrationConnectorApi {
47
54
  cancellation: CancelRetailSaleRequest,
48
55
  ): Promise<StandardResponse<CancelRetailSaleResponse>>;
49
56
 
50
- /** `GET /private/retail/inventory/live-check` — qué identificadores lista hoy la tienda; 3 s. */
57
+ /**
58
+ * `GET /private/retail/inventory/live-check` — qué identificadores lista hoy la tienda; 3 s.
59
+ * @deprecated El wizard ya no consulta en vivo; se borra cuando ningún consumidor lo use.
60
+ */
51
61
  checkRetailInventory(request: CheckRetailInventoryRequest): Promise<StandardResponse<CheckRetailInventoryResponse>>;
52
62
  }