@espressif/rainmaker-neo-base-sdk 1.0.0 → 1.2.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.
Files changed (117) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +40 -4
  3. package/dist/cjs/ESPDevice.js +6 -0
  4. package/dist/cjs/ESPDevice.js.map +1 -1
  5. package/dist/cjs/ESPRMNeoBase.js +1 -1
  6. package/dist/cjs/ESPRMNeoNode.js +33 -14
  7. package/dist/cjs/ESPRMNeoNode.js.map +1 -1
  8. package/dist/cjs/index.js +14 -0
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/methods/ESPDevice/Provision.js +7 -0
  11. package/dist/cjs/methods/ESPDevice/Provision.js.map +1 -1
  12. package/dist/cjs/methods/ESPDevice/ResetWifiStatus.js +26 -0
  13. package/dist/cjs/methods/ESPDevice/ResetWifiStatus.js.map +1 -0
  14. package/dist/cjs/methods/ESPDevice/RetryNetworkCredentials.js +46 -0
  15. package/dist/cjs/methods/ESPDevice/RetryNetworkCredentials.js.map +1 -0
  16. package/dist/cjs/methods/ESPRMNeoNode/Sync.js +4 -1
  17. package/dist/cjs/methods/ESPRMNeoNode/Sync.js.map +1 -1
  18. package/dist/cjs/methods/ESPRMNeoUser/MQTT/AssumeRole.js +8 -9
  19. package/dist/cjs/methods/ESPRMNeoUser/MQTT/AssumeRole.js.map +1 -1
  20. package/dist/cjs/proto/esp_rmaker_chal_resp.js +5 -0
  21. package/dist/cjs/proto/esp_rmaker_chal_resp.js.map +1 -1
  22. package/dist/cjs/proto/rmaker_local_ctrl.js +273 -0
  23. package/dist/cjs/proto/rmaker_local_ctrl.js.map +1 -0
  24. package/dist/cjs/services/ESPRMNeoMqtt/ESPRMNeoMqtt.js +13 -0
  25. package/dist/cjs/services/ESPRMNeoMqtt/ESPRMNeoMqtt.js.map +1 -1
  26. package/dist/cjs/services/ESPTransport/ESPDiscovery/ESPDiscoveryManager.js +5 -4
  27. package/dist/cjs/services/ESPTransport/ESPDiscovery/ESPDiscoveryManager.js.map +1 -1
  28. package/dist/cjs/services/ESPTransport/ESPLocalControlTransport.js +183 -116
  29. package/dist/cjs/services/ESPTransport/ESPLocalControlTransport.js.map +1 -1
  30. package/dist/cjs/services/ESPTransport/LocalControlSession.js +62 -0
  31. package/dist/cjs/services/ESPTransport/LocalControlSession.js.map +1 -0
  32. package/dist/cjs/services/NodeMQTTOrchestrator.js +2 -5
  33. package/dist/cjs/services/NodeMQTTOrchestrator.js.map +1 -1
  34. package/dist/cjs/types/transport.js +24 -0
  35. package/dist/cjs/types/transport.js.map +1 -1
  36. package/dist/cjs/utils/constants.js +80 -4
  37. package/dist/cjs/utils/constants.js.map +1 -1
  38. package/dist/cjs/utils/eventSubscriptionUtils.js +48 -4
  39. package/dist/cjs/utils/eventSubscriptionUtils.js.map +1 -1
  40. package/dist/cjs/utils/nodeUtils.js +12 -1
  41. package/dist/cjs/utils/nodeUtils.js.map +1 -1
  42. package/dist/cjs/utils/waitForNodeOnline.js +7 -6
  43. package/dist/cjs/utils/waitForNodeOnline.js.map +1 -1
  44. package/dist/esm/ESPDevice.js +6 -0
  45. package/dist/esm/ESPDevice.js.map +1 -1
  46. package/dist/esm/ESPRMNeoBase.js +1 -1
  47. package/dist/esm/ESPRMNeoNode.js +33 -14
  48. package/dist/esm/ESPRMNeoNode.js.map +1 -1
  49. package/dist/esm/index.js +4 -2
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/methods/ESPDevice/Provision.js +7 -0
  52. package/dist/esm/methods/ESPDevice/Provision.js.map +1 -1
  53. package/dist/esm/methods/ESPDevice/ResetWifiStatus.js +24 -0
  54. package/dist/esm/methods/ESPDevice/ResetWifiStatus.js.map +1 -0
  55. package/dist/esm/methods/ESPDevice/RetryNetworkCredentials.js +44 -0
  56. package/dist/esm/methods/ESPDevice/RetryNetworkCredentials.js.map +1 -0
  57. package/dist/esm/methods/ESPRMNeoNode/Sync.js +4 -1
  58. package/dist/esm/methods/ESPRMNeoNode/Sync.js.map +1 -1
  59. package/dist/esm/methods/ESPRMNeoUser/MQTT/AssumeRole.js +9 -10
  60. package/dist/esm/methods/ESPRMNeoUser/MQTT/AssumeRole.js.map +1 -1
  61. package/dist/esm/proto/esp_rmaker_chal_resp.js +5 -0
  62. package/dist/esm/proto/esp_rmaker_chal_resp.js.map +1 -1
  63. package/dist/esm/proto/rmaker_local_ctrl.js +271 -0
  64. package/dist/esm/proto/rmaker_local_ctrl.js.map +1 -0
  65. package/dist/esm/services/ESPRMNeoMqtt/ESPRMNeoMqtt.js +13 -0
  66. package/dist/esm/services/ESPRMNeoMqtt/ESPRMNeoMqtt.js.map +1 -1
  67. package/dist/esm/services/ESPTransport/ESPDiscovery/ESPDiscoveryManager.js +5 -4
  68. package/dist/esm/services/ESPTransport/ESPDiscovery/ESPDiscoveryManager.js.map +1 -1
  69. package/dist/esm/services/ESPTransport/ESPLocalControlTransport.js +184 -117
  70. package/dist/esm/services/ESPTransport/ESPLocalControlTransport.js.map +1 -1
  71. package/dist/esm/services/ESPTransport/LocalControlSession.js +59 -0
  72. package/dist/esm/services/ESPTransport/LocalControlSession.js.map +1 -0
  73. package/dist/esm/services/NodeMQTTOrchestrator.js +2 -5
  74. package/dist/esm/services/NodeMQTTOrchestrator.js.map +1 -1
  75. package/dist/esm/types/transport.js +24 -1
  76. package/dist/esm/types/transport.js.map +1 -1
  77. package/dist/esm/utils/constants.js +74 -5
  78. package/dist/esm/utils/constants.js.map +1 -1
  79. package/dist/esm/utils/eventSubscriptionUtils.js +49 -5
  80. package/dist/esm/utils/eventSubscriptionUtils.js.map +1 -1
  81. package/dist/esm/utils/nodeUtils.js +12 -1
  82. package/dist/esm/utils/nodeUtils.js.map +1 -1
  83. package/dist/esm/utils/waitForNodeOnline.js +7 -6
  84. package/dist/esm/utils/waitForNodeOnline.js.map +1 -1
  85. package/dist/types/ESPDevice.d.ts +10 -0
  86. package/dist/types/ESPRMNeoBase.d.ts +1 -1
  87. package/dist/types/ESPRMNeoNode.d.ts +17 -5
  88. package/dist/types/methods/ESPDevice/ResetWifiStatus.d.ts +18 -0
  89. package/dist/types/methods/ESPDevice/RetryNetworkCredentials.d.ts +22 -0
  90. package/dist/types/methods/ESPDevice/index.d.ts +2 -0
  91. package/dist/types/methods/ESPRMNeoUser/MQTT/AssumeRole.d.ts +25 -15
  92. package/dist/types/proto/rmaker_local_ctrl.d.ts +137 -0
  93. package/dist/types/services/ESPRMNeoMqtt/ESPRMNeoMqtt.d.ts +10 -0
  94. package/dist/types/services/ESPTransport/ESPDiscovery/ESPDiscoveryManager.d.ts +4 -3
  95. package/dist/types/services/ESPTransport/ESPLocalControlTransport.d.ts +70 -23
  96. package/dist/types/services/ESPTransport/LocalControlSession.d.ts +24 -0
  97. package/dist/types/services/NodeMQTTOrchestrator.d.ts +2 -2
  98. package/dist/types/services/interfaces/MQTTTransport.d.ts +10 -0
  99. package/dist/types/types/discovery.d.ts +1 -1
  100. package/dist/types/types/localControl.d.ts +26 -1
  101. package/dist/types/types/provision.d.ts +10 -0
  102. package/dist/types/types/transport.d.ts +24 -2
  103. package/dist/types/utils/baseUtils.d.ts +1 -1
  104. package/dist/types/utils/constants.d.ts +74 -5
  105. package/dist/types/utils/eventSubscriptionUtils.d.ts +19 -3
  106. package/dist/types/utils/waitForNodeOnline.d.ts +9 -3
  107. package/package.json +1 -1
  108. package/dist/cjs/proto/constants.js +0 -24
  109. package/dist/cjs/proto/constants.js.map +0 -1
  110. package/dist/cjs/proto/esp_local_ctrl.js +0 -787
  111. package/dist/cjs/proto/esp_local_ctrl.js.map +0 -1
  112. package/dist/esm/proto/constants.js +0 -24
  113. package/dist/esm/proto/constants.js.map +0 -1
  114. package/dist/esm/proto/esp_local_ctrl.js +0 -758
  115. package/dist/esm/proto/esp_local_ctrl.js.map +0 -1
  116. package/dist/types/proto/constants.d.ts +0 -15
  117. package/dist/types/proto/esp_local_ctrl.d.ts +0 -283
@@ -18,6 +18,16 @@ export interface MQTTTransport {
18
18
  * Check if the MQTT client is connected.
19
19
  */
20
20
  isConnected(): Promise<boolean>;
21
+ /**
22
+ * Optional push notification when the transport connects or drops.
23
+ * Returns an unsubscribe function. Not required by NodeMQTTOrchestrator;
24
+ * adapters that omit it simply do not surface async status changes.
25
+ *
26
+ * @param callback - Invoked with `{ connected }` on status changes
27
+ */
28
+ onConnectionStatusChange?(callback: (status: {
29
+ connected: boolean;
30
+ }) => void): () => void;
21
31
  /**
22
32
  * Publish a message to a topic.
23
33
  *
@@ -23,7 +23,7 @@ declare enum ESPRMNeoEventType {
23
23
  * (e.g. mDNS service type and domain).
24
24
  */
25
25
  interface DiscoveryParamsInterface {
26
- /** Service type to browse for, e.g. `_esp_local_ctrl._tcp.` */
26
+ /** Service type to browse for, e.g. `_esp_rmaker_ctrl._tcp.` */
27
27
  serviceType: string;
28
28
  /** Discovery domain, e.g. `local`. */
29
29
  domain: string;
@@ -1,3 +1,25 @@
1
+ /**
2
+ * Per-connection session details passed to {@link
3
+ * ESPLocalControlAdapterInterface.connect}. The protocomm handshake endpoint
4
+ * differs per local-control protocol, so the transport tells the native layer
5
+ * which paths to use instead of the adapter hardcoding them.
6
+ *
7
+ * Adapters built against an earlier SDK simply ignore the extra argument and
8
+ * keep using their built-in default paths.
9
+ */
10
+ export interface ESPLocalControlSessionOptions {
11
+ /** Protocol tag, one of {@link ESPLocalControlProtocol}. */
12
+ protocol: string;
13
+ /** Protocomm session-security endpoint, e.g. `rmaker_local_ctrl/session`. */
14
+ sessionPath: string;
15
+ /** Version/service-info endpoint, e.g. `rmaker_local_ctrl/version`. */
16
+ versionPath: string;
17
+ /**
18
+ * Root key to read in the version response when probing the security scheme
19
+ * version, e.g. `rmaker_local_ctrl` for `{"rmaker_local_ctrl": {…}}`.
20
+ */
21
+ versionKey: string;
22
+ }
1
23
  /**
2
24
  * Local control adapter interface for node communication over LAN.
3
25
  */
@@ -8,8 +30,11 @@ export interface ESPLocalControlAdapterInterface {
8
30
  isConnected(nodeId: string): Promise<boolean>;
9
31
  /**
10
32
  * Connects to the node with local control parameters.
33
+ *
34
+ * @param options - Session endpoints for the protocol in use. Omitted only by
35
+ * callers that want the adapter's built-in default paths.
11
36
  */
12
- connect(nodeId: string, baseUrl: string, securtiyType: number, pop?: string, username?: string): Promise<Record<string, unknown>>;
37
+ connect(nodeId: string, baseUrl: string, securtiyType: number, pop?: string, username?: string, options?: ESPLocalControlSessionOptions): Promise<Record<string, unknown>>;
13
38
  /**
14
39
  * Sends data to the specified path on the node.
15
40
  */
@@ -73,6 +73,16 @@ interface ESPProvisionAdapterInterface {
73
73
  scanWifiList(deviceName: string): Promise<ESPWifiList[]>;
74
74
  sendData(deviceName: string, endPoint: string, data: string): Promise<string>;
75
75
  provision(deviceName: string, ssid: string, passphrase: string): Promise<ESPProvisionStatus>;
76
+ /**
77
+ * Clears the device's Wi-Fi state over the open provisioning session.
78
+ * Requires an established session; the user-node association is left intact.
79
+ *
80
+ * Optional so that adapters written against an earlier SDK keep compiling;
81
+ * `ESPDevice.resetWifiStatus` resolves `false` when it is absent.
82
+ * @param deviceName - Name of the connected provisioning device.
83
+ * @returns Promise resolving to `true` when the device acknowledged the reset.
84
+ */
85
+ resetWifiStatus?(deviceName: string): Promise<boolean>;
76
86
  disconnect(deviceName: string): Promise<void>;
77
87
  }
78
88
  /**
@@ -13,11 +13,33 @@ declare enum ESPTransportMode {
13
13
  /** Communication is routed through MQTT (RainMaker Neo cloud: AWS shadow). */
14
14
  mqtt = "mqtt"
15
15
  }
16
+ /**
17
+ * Wire protocol spoken by the `local` transport. Both protocols run over a
18
+ * protocomm session on the node's LAN HTTP server; they differ in endpoint
19
+ * names and message encoding.
20
+ *
21
+ * Carried on the local transport config's `metadata.protocol`, set by local
22
+ * discovery from the mDNS service type that produced the hit.
23
+ */
24
+ declare enum ESPLocalControlProtocol {
25
+ /**
26
+ * RainMaker Neo protocol (`rmaker_local_ctrl/*` session plus
27
+ * `get_params`/`set_params`/`get_config`), advertised as
28
+ * `_esp_rmaker_ctrl._tcp`. Default for this SDK.
29
+ */
30
+ rmakerLocalCtrl = "rmaker_local_ctrl"
31
+ }
32
+ /**
33
+ * Protocol assumed when a local transport config carries no explicit
34
+ * `metadata.protocol` — for example a LAN transport restored from a client-side
35
+ * registry rather than a fresh discovery hit.
36
+ */
37
+ declare const DEFAULT_LOCAL_CONTROL_PROTOCOL = ESPLocalControlProtocol.rmakerLocalCtrl;
16
38
  /**
17
39
  * Configuration options for the transport mechanism for ESP communication.
18
40
  *
19
41
  * Includes the transport type and any additional metadata for the chosen mode
20
- * (e.g. `baseUrl`, `securityType`, `pop` for the local transport).
42
+ * (e.g. `baseUrl`, `securityType`, `pop`, `protocol` for the local transport).
21
43
  */
22
44
  interface ESPTransportConfig {
23
45
  /**
@@ -62,4 +84,4 @@ interface ESPTransportInterface {
62
84
  * has an explicit order configured: local control first, MQTT (cloud) fallback.
63
85
  */
64
86
  declare const DEFAULT_TRANSPORT_ORDER: (ESPTransportMode | string)[];
65
- export { ESPTransportMode, ESPTransportConfig, ESPTransportInterface, DEFAULT_TRANSPORT_ORDER, };
87
+ export { ESPTransportMode, ESPLocalControlProtocol, ESPTransportConfig, ESPTransportInterface, DEFAULT_TRANSPORT_ORDER, DEFAULT_LOCAL_CONTROL_PROTOCOL, };
@@ -25,7 +25,7 @@ export interface ESPRMNeoBaseAdapters {
25
25
  storage?: ESPStorageAdapter;
26
26
  /** SoftAP / BLE provisioning implementation supplied by the host app. */
27
27
  provision?: ESPProvisionAdapterInterface;
28
- /** LAN `esp_local_ctrl` transport implementation. */
28
+ /** LAN local-control transport implementation. */
29
29
  localControl?: ESPLocalControlAdapterInterface;
30
30
  /** LAN / mDNS discovery implementation. */
31
31
  localDiscovery?: ESPLocalDiscoveryAdapterInterface;
@@ -386,6 +386,15 @@ declare const TriggerErrorMessages: {
386
386
  /** Logged when retrieving triggers for a node fails. */
387
387
  readonly GET_FAILED: "getTriggers failed";
388
388
  };
389
+ /**
390
+ * Error messages for assumeRole (POST /v1/assumed-roles).
391
+ */
392
+ declare const AssumeRoleErrorMessages: {
393
+ /** Thrown when `services` is provided without a `nodeId`. */
394
+ readonly NODE_ID_REQUIRED: "assumeRole: nodeId is required when services is provided";
395
+ /** Thrown when the assume-role response is missing required credential fields. */
396
+ readonly INVALID_RESPONSE: "Invalid assume role response: missing required credential fields";
397
+ };
389
398
  /**
390
399
  * Error / log messages for temporary AWS credentials (POST /v1/user/credentials).
391
400
  */
@@ -459,8 +468,6 @@ declare const ProvisionType: {
459
468
  * An object containing endpoint paths.
460
469
  */
461
470
  declare const Endpoint: {
462
- /** The endpoint for local control. */
463
- LOCAL_CTRL: string;
464
471
  /** The endpoint for cloud user association. */
465
472
  CLOUD_USER_ASSOCIATION: string;
466
473
  /** The endpoint for challenge-response and get-node-id protocol with the device. */
@@ -468,6 +475,64 @@ declare const Endpoint: {
468
475
  /** The endpoint for assisted claiming. */
469
476
  RM_CLAIM: string;
470
477
  };
478
+ /**
479
+ * Endpoint paths of the `rmaker_local_ctrl` protocol served by RainMaker Neo
480
+ * firmware (see the firmware's local-control endpoint protocol spec).
481
+ *
482
+ * All data endpoints inherit the security of the session established on
483
+ * {@link RMakerLocalCtrlEndpoint.SESSION}.
484
+ */
485
+ declare const RMakerLocalCtrlEndpoint: {
486
+ /** Protocomm session-security endpoint (SEC1 with/without PoP, or SEC2). */
487
+ readonly SESSION: "rmaker_local_ctrl/session";
488
+ /** POST any payload; responds with the service info JSON (`sec_ver`, `cap`, …). */
489
+ readonly VERSION: "rmaker_local_ctrl/version";
490
+ /** Reads the params JSON — protobuf `CmdGetData`, fragmented response. */
491
+ readonly GET_PARAMS: "get_params";
492
+ /** Reads the node config JSON — protobuf `CmdGetData`, fragmented response. */
493
+ readonly GET_CONFIG: "get_config";
494
+ /** Writes params — raw JSON request and response (no protobuf). */
495
+ readonly SET_PARAMS: "set_params";
496
+ };
497
+ /**
498
+ * Root key of the JSON served by {@link RMakerLocalCtrlEndpoint.VERSION}, i.e.
499
+ * `{"rmaker_local_ctrl": {"ver": …, "sec_ver": …, "cap": [...]}}`. Passed to the
500
+ * local-control adapter so the native layer probes the right scheme version.
501
+ */
502
+ declare const RMAKER_LOCAL_CTRL_VERSION_KEY = "rmaker_local_ctrl";
503
+ /**
504
+ * Maximum fragment size (bytes) the firmware serves per `RespGetData`. Reads
505
+ * loop with `Offset += Payload.length` until `TotalLen` is reached; this value
506
+ * is informational (the device dictates the actual fragment length).
507
+ */
508
+ declare const RMAKER_LOCAL_CTRL_FRAGMENT_SIZE = 200;
509
+ /**
510
+ * `status` values in a `set_params` raw-JSON response.
511
+ */
512
+ declare const RMakerLocalCtrlSetParamsStatus: {
513
+ readonly SUCCESS: "success";
514
+ readonly FAIL: "fail";
515
+ };
516
+ /**
517
+ * mDNS TXT record keys advertised by the `_esp_rmaker_ctrl._tcp` service.
518
+ */
519
+ declare const RMakerLocalCtrlTxtKey: {
520
+ /** Node ID (also the service instance name and hostname). */
521
+ readonly NODE_ID: "node_id";
522
+ /** Comma-separated active capabilities — see {@link RMakerLocalCtrlCapability}. */
523
+ readonly CAP: "cap";
524
+ };
525
+ /**
526
+ * Capability tokens found in the `cap` TXT record. A node advertising only
527
+ * `ch_resp` is reachable for on-network user-node association but *not* for
528
+ * param control, so it must not be registered as a local control transport.
529
+ */
530
+ declare const RMakerLocalCtrlCapability: {
531
+ /** Params/config endpoints are registered. */
532
+ readonly LOCAL_CTRL: "local_ctrl";
533
+ /** Challenge-response (on-network user-node association) is registered. */
534
+ readonly CH_RESP: "ch_resp";
535
+ };
471
536
  /**
472
537
  * Assisted-claiming REST paths, on the deployment's main API and SigV4-signed
473
538
  * like every other `/v1/*` route.
@@ -618,8 +683,12 @@ declare const ProvErrorCodes: {
618
683
  * @enum {string}
619
684
  */
620
685
  declare const ServiceType: {
621
- /** Represents the ESP local control TCP service type. */
622
- ESP_LOCAL_CTRL_TCP: string;
686
+ /**
687
+ * Service type advertised by RainMaker Neo firmware. A single instance serves
688
+ * the `rmaker_local_ctrl` endpoints; the `cap` TXT record says which endpoint
689
+ * sets are active. This is the default for local discovery in this SDK.
690
+ */
691
+ ESP_RMAKER_LOCAL_CTRL_TCP: string;
623
692
  };
624
693
  /**
625
694
  * An object containing protocol types.
@@ -800,7 +869,7 @@ declare const APIPathV1: {
800
869
  /** POST /v1/groups/{groupId}/node-assoc-requests/{requestId}/verify - Verifies user node mapping */
801
870
  readonly USER_NODE_MAPPING_VERIFY: (groupId: string, requestId: string) => string;
802
871
  };
803
- export { HTTPMethods, APIEndpoints, APIPathV1, StorageKeys, ValidationErrorCodes, StorageAdapterErrorCodes, ConfigErrorCodes, APICallValidationErrorCodes, APIOperations, TokenErrorCodes, AuthErrorCodes, AuthSuccessMessages, AutomationSuccessMessages, AutomationStatusValues, GroupSuccessMessages, NodeSuccessMessages, NodeWarnMessages, ScheduleSuccessMessages, ScheduleErrorMessages, TriggerErrorMessages, TriggerSuccessMessages, SharingSuccessMessages, IntegrationSuccessMessages, AWSCredentialsErrorMessages, GroupUserAliases, Endpoint, ProvisionType, ProvErrorCodes, ServiceType, ProtocolType, StatusMessage, DEFAULT_REST_API_VERSION, ESPServiceType, ESPServiceParamType, ESPProvProgressMessages, ErrorLabels, SDK_VERSION, ClaimEndpoints, ClaimCapabilities, ClaimCapabilityPolicies, ClaimErrorCodes, ClaimProgressMessages, CLAIM_CSR_MAX_CHUNKS, CLAIM_MAX_FRAGMENT_SIZE, CLAIM_MAC_SEPARATORS, CLAIM_MAC_HEX_LENGTHS, CLAIM_DEVICE_MAC_KEYS, CLAIM_DEVICE_CSR_KEYS, };
872
+ export { HTTPMethods, APIEndpoints, APIPathV1, StorageKeys, ValidationErrorCodes, StorageAdapterErrorCodes, ConfigErrorCodes, APICallValidationErrorCodes, APIOperations, TokenErrorCodes, AuthErrorCodes, AuthSuccessMessages, AutomationSuccessMessages, AutomationStatusValues, GroupSuccessMessages, NodeSuccessMessages, NodeWarnMessages, ScheduleSuccessMessages, ScheduleErrorMessages, TriggerErrorMessages, TriggerSuccessMessages, SharingSuccessMessages, IntegrationSuccessMessages, AssumeRoleErrorMessages, AWSCredentialsErrorMessages, GroupUserAliases, Endpoint, RMakerLocalCtrlEndpoint, RMAKER_LOCAL_CTRL_VERSION_KEY, RMAKER_LOCAL_CTRL_FRAGMENT_SIZE, RMakerLocalCtrlSetParamsStatus, RMakerLocalCtrlTxtKey, RMakerLocalCtrlCapability, ProvisionType, ProvErrorCodes, ServiceType, ProtocolType, StatusMessage, DEFAULT_REST_API_VERSION, ESPServiceType, ESPServiceParamType, ESPProvProgressMessages, ErrorLabels, SDK_VERSION, ClaimEndpoints, ClaimCapabilities, ClaimCapabilityPolicies, ClaimErrorCodes, ClaimProgressMessages, CLAIM_CSR_MAX_CHUNKS, CLAIM_MAX_FRAGMENT_SIZE, CLAIM_MAC_SEPARATORS, CLAIM_MAC_HEX_LENGTHS, CLAIM_DEVICE_MAC_KEYS, CLAIM_DEVICE_CSR_KEYS, };
804
873
  export declare enum ESPRMNeoErrorCodes {
805
874
  SDK_NOT_CONFIGURED = "SDK_NOT_CONFIGURED",
806
875
  INVALID_CREDENTIALS = "INVALID_CREDENTIALS",
@@ -4,9 +4,25 @@ import { ESPNodeUpdateData } from "../types/subscription";
4
4
  export type EventTeardown = {
5
5
  stop(): void;
6
6
  };
7
- /** Maps a default local-discovery hit into the client-facing payload shape. */
8
- export declare function toDiscoveredNodeData(info: Record<string, any>): ESPDiscoveredNodeData;
9
- /** Starts LAN discovery; each hit is mapped then passed to `onDiscovered`. */
7
+ /**
8
+ * Maps a default local-discovery hit into the client-facing payload shape.
9
+ *
10
+ * The `_esp_rmaker_ctrl._tcp` instance is also advertised by nodes that
11
+ * only serve challenge-response (on-network user-node association). Those are
12
+ * not reachable for param control, so a hit whose `cap` TXT record excludes
13
+ * `local_ctrl` maps to `undefined` and is dropped rather than registered as a
14
+ * local transport. A hit with no `cap` record is treated as control-capable.
15
+ *
16
+ * @param info - Raw adapter result (`nodeId`, `baseUrl`, and `txt` when the
17
+ * platform resolved TXT records).
18
+ * @returns The payload to deliver, or `undefined` to skip this hit.
19
+ */
20
+ export declare function toDiscoveredNodeData(info: Record<string, any>): ESPDiscoveredNodeData | undefined;
21
+ /**
22
+ * Starts LAN discovery; each hit is mapped then passed to `onDiscovered`.
23
+ * Hits that are not control-capable (see {@link toDiscoveredNodeData}) are
24
+ * skipped.
25
+ */
10
26
  export declare function startLocalDiscovery(onDiscovered: (data: ESPDiscoveredNodeData) => void): EventTeardown;
11
27
  /** Forwards process-wide node param updates to `onUpdate`. */
12
28
  export declare function startNodeUpdates(onUpdate: (update: ESPNodeUpdateData) => void): EventTeardown;
@@ -4,8 +4,8 @@
4
4
  * Typical use: after provisioning WiFi credentials, the device joins the network and
5
5
  * connects to the cloud. There is no dedicated "online" MQTT topic — connectivity is
6
6
  * published as `state.reported.online` inside shadow update messages on the named
7
- * shadow `params-{groupId}` (firmware writes this after getGroupInfo; cloud presence
8
- * only clears online on disconnect).
7
+ * shadow `params-{groupId}` or `params-{groupId}-{subgroupIds}` (firmware writes this
8
+ * after getGroupInfo; cloud presence only clears online on disconnect).
9
9
  *
10
10
  * Matches app_sim `_wait_node_online`: subscribe first, then poll shadow GET on an
11
11
  * interval until `reported.online === true` (or a live MQTT update arrives). GET may
@@ -24,6 +24,12 @@ export interface WaitForNodeOnlineParams {
24
24
  nodeId: string;
25
25
  /** Group the node was associated with during provisioning (drives shadow name). */
26
26
  groupId: string;
27
+ /**
28
+ * Subgroup (room/CG) ids that currently contain the node.
29
+ * Omitted or empty ⇒ home-only shadow `params-{groupId}` (legacy callers).
30
+ * When set, shadow is `params-{groupId}-{sortedSubgroupIds}`.
31
+ */
32
+ subgroupIds?: string[];
27
33
  /** Logged-in user; used to connect MQTT if not already connected. */
28
34
  user: ESPRMNeoUser;
29
35
  timeoutMs?: number;
@@ -45,4 +51,4 @@ export declare function isNodeOnlineFromShadowPayload(payload: unknown): boolean
45
51
  * @throws {ESPProvError} If `timeoutMs` elapses without the node reporting online.
46
52
  * @throws {Error} If MQTT connection or subscription fails.
47
53
  */
48
- export declare function waitForNodeOnline({ nodeId, groupId, user, timeoutMs, pollIntervalMs, }: WaitForNodeOnlineParams): Promise<void>;
54
+ export declare function waitForNodeOnline({ nodeId, groupId, subgroupIds, user, timeoutMs, pollIntervalMs, }: WaitForNodeOnlineParams): Promise<void>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@espressif/rainmaker-neo-base-sdk",
3
3
  "description": "ESP RainMaker Neo TypeScript SDK for JS-based apps — Cognito auth, MQTT control, device provisioning, groups, and real-time node updates.",
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "dist/cjs/index.js",
@@ -1,24 +0,0 @@
1
- 'use strict';
2
-
3
- /*
4
- * SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
5
- *
6
- * SPDX-License-Identifier: Apache-2.0
7
- */
8
- /**
9
- * Generated by the protoc-gen-ts. DO NOT EDIT!
10
- * compiler version: 5.28.2
11
- * source: constants.proto
12
- * git: https://github.com/thesayyn/protoc-gen-ts */
13
- exports.Status = void 0;
14
- (function (Status) {
15
- Status[Status["Success"] = 0] = "Success";
16
- Status[Status["InvalidSecScheme"] = 1] = "InvalidSecScheme";
17
- Status[Status["InvalidProto"] = 2] = "InvalidProto";
18
- Status[Status["TooManySessions"] = 3] = "TooManySessions";
19
- Status[Status["InvalidArgument"] = 4] = "InvalidArgument";
20
- Status[Status["InternalError"] = 5] = "InternalError";
21
- Status[Status["CryptoError"] = 6] = "CryptoError";
22
- Status[Status["InvalidSession"] = 7] = "InvalidSession";
23
- })(exports.Status || (exports.Status = {}));
24
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}