@smess/networking 2.0.0 → 2.1.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/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  All notable changes to `@smess/networking`. Versions follow [semver](https://semver.org).
4
4
 
5
+ ## 2.1.0 (2026-11-07)
6
+
7
+ ### Added
8
+
9
+ - `@smess/networking/messenger`: `send` (website contact forms and leads, `POST /v1/messenger/send`), `get`
10
+ and `trackWebsiteEvent` (`POST /v1/messenger/website_events`). Anonymous; the tenant goes in the body's
11
+ `client_id` (defaults to the client's `clientId`), so one build can serve domains whose CORS origins are
12
+ bound to different tenants.
13
+ - `messenger` host key in `PRODUCTION_HOSTS` (`api.smess.vn`).
14
+
5
15
  ## 2.0.0 (2026-11-07)
6
16
 
7
17
  A rewrite: one typed client for core-services, built on `fetch`. Not compatible with 1.x.
package/README.md CHANGED
@@ -6,7 +6,8 @@ React Native.
6
6
 
7
7
  - Built on `fetch`, no runtime dependencies, ESM, typed.
8
8
  - One client per app: it knows core's hosts, the tenant header, the session and its refresh.
9
- - One module per core-services Microservice: `authentication`, `sso`, `campaign`, `smeup-file`, `danara`.
9
+ - One module per core-services Microservice: `authentication`, `sso`, `campaign`, `smeup-file`, `danara`,
10
+ `messenger`.
10
11
  - One error type, `SmessApiError`, for every error format core emits.
11
12
 
12
13
  Layers and the backend facts behind them: [docs/architecture.md](docs/architecture.md).
@@ -38,6 +39,20 @@ await auth.otp.verify({ identifier: email, code }); // saves the session
38
39
  const templates = await campaign(smess).email.templates.list(); // ApiList<Template>
39
40
  ```
40
41
 
42
+ ### Public website form (smess.vn)
43
+
44
+ ```ts
45
+ import { createSmessClient, PRODUCTION_HOSTS } from '@smess/networking';
46
+ import { messenger } from '@smess/networking/messenger';
47
+
48
+ const forms = messenger(createSmessClient({ hosts: PRODUCTION_HOSTS }));
49
+ await forms.send({
50
+ client_id: TENANT_ID, // the tenant that owns the site's leads
51
+ type: 'contact_form', // never lead_capture on a contact form: that starts a Rebuild job
52
+ from_name, from_email, subject, message,
53
+ });
54
+ ```
55
+
41
56
  ### Tenant-scoped app, Next.js server component (Danara)
42
57
 
43
58
  ```ts
@@ -120,6 +135,7 @@ never sends one. smeup.email sends none (the tenant comes from the JWT); Danara
120
135
  | `@smess/networking/campaign` | Campaign (email) | `campaignApi` | the whole smeup.email API: sender, templates, campaigns, audiences, domains, addresses, short links, segments, automations, A/B tests, developers, SSO settings |
121
136
  | `@smess/networking/smeup-file` | SMEUpFile | `smeupFile` | base64 upload |
122
137
  | `@smess/networking/danara` | Danara | `danara` | identity, listings, sales, fit-out, leasing, owner portal, transit |
138
+ | `@smess/networking/messenger` | Messenger | `messenger` | website contact forms and leads (`send`), visitor events (`trackWebsiteEvent`) |
123
139
  | `@smess/networking/rx` | – | – | `fromSmess(signal => call)` → cancellable Observable (peer dep `rxjs`) |
124
140
 
125
141
  Each module also exports its endpoint table (`campaignEmailEndpoints`, `danaraEndpoints`, …) and its
@@ -10,6 +10,8 @@ export declare const PRODUCTION_HOSTS: {
10
10
  readonly campaignApi: "https://api.smess.vn";
11
11
  /** `app.smeup_file_host`: file uploads (`/v1/smeup-files/*`). */
12
12
  readonly smeupFile: "https://api.smess.vn";
13
+ /** `app.messenger_host`: public website forms and visitor events (`/v1/messenger/*`). */
14
+ readonly messenger: "https://api.smess.vn";
13
15
  /** `app.sso_host`: company single sign-on (`/v1/sso/*`). */
14
16
  readonly sso: "https://sso.smess.vn";
15
17
  /** `app.danara_host`: the Danara rentals API. */
@@ -1 +1 @@
1
- {"version":3,"file":"hosts.d.ts","sourceRoot":"","sources":["../../src/core/hosts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;IAC3B,sEAAsE;;IAEtE,iFAAiF;;IAEjF,iEAAiE;;IAEjE,4DAA4D;;IAE5D,iDAAiD;;IAEjD,+CAA+C;;IAE/C,sEAAsE;;CAE9D,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAEvD,qHAAqH;AACrH,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"hosts.d.ts","sourceRoot":"","sources":["../../src/core/hosts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;IAC3B,sEAAsE;;IAEtE,iFAAiF;;IAEjF,iEAAiE;;IAEjE,yFAAyF;;IAEzF,4DAA4D;;IAE5D,iDAAiD;;IAEjD,+CAA+C;;IAE/C,sEAAsE;;CAE9D,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAEvD,qHAAqH;AACrH,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC"}
@@ -10,6 +10,8 @@ export const PRODUCTION_HOSTS = {
10
10
  campaignApi: 'https://api.smess.vn',
11
11
  /** `app.smeup_file_host`: file uploads (`/v1/smeup-files/*`). */
12
12
  smeupFile: 'https://api.smess.vn',
13
+ /** `app.messenger_host`: public website forms and visitor events (`/v1/messenger/*`). */
14
+ messenger: 'https://api.smess.vn',
13
15
  /** `app.sso_host`: company single sign-on (`/v1/sso/*`). */
14
16
  sso: 'https://sso.smess.vn',
15
17
  /** `app.danara_host`: the Danara rentals API. */
@@ -1 +1 @@
1
- {"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/core/hosts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,sEAAsE;IACtE,cAAc,EAAE,uBAAuB;IACvC,iFAAiF;IACjF,WAAW,EAAE,sBAAsB;IACnC,iEAAiE;IACjE,SAAS,EAAE,sBAAsB;IACjC,4DAA4D;IAC5D,GAAG,EAAE,sBAAsB;IAC3B,iDAAiD;IACjD,MAAM,EAAE,uBAAuB;IAC/B,+CAA+C;IAC/C,MAAM,EAAE,yBAAyB;IACjC,sEAAsE;IACtE,SAAS,EAAE,uBAAuB;CAC1B,CAAC"}
1
+ {"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/core/hosts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,sEAAsE;IACtE,cAAc,EAAE,uBAAuB;IACvC,iFAAiF;IACjF,WAAW,EAAE,sBAAsB;IACnC,iEAAiE;IACjE,SAAS,EAAE,sBAAsB;IACjC,yFAAyF;IACzF,SAAS,EAAE,sBAAsB;IACjC,4DAA4D;IAC5D,GAAG,EAAE,sBAAsB;IAC3B,iDAAiD;IACjD,MAAM,EAAE,uBAAuB;IAC/B,+CAA+C;IAC/C,MAAM,EAAE,yBAAyB;IACjC,sEAAsE;IACtE,SAAS,EAAE,uBAAuB;CAC1B,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Messenger module (`src/Microservice/Messenger`, host `app.messenger_host` → api.smess.vn): public
3
+ * website forms and visitor events.
4
+ *
5
+ * - Every route is anonymous (`auth: 'none'`). There is no `security: false` firewall on these paths, so
6
+ * a stale Bearer would 401 them: the module never sends one.
7
+ * - The owning tenant is the body's `client_id`; `X-Client-Id` is optional. Leave `clientId` off the
8
+ * client when one build serves several domains whose CORS origins are bound to different tenants
9
+ * (core answers 403 when the header disagrees with the origin's tenant). The module fills `client_id`
10
+ * from the client's `clientId` when the input has none.
11
+ * - `send` does not validate the body (the DTO constraints are not run): keep fields short;
12
+ * `from_phone_number` is a 20-character column.
13
+ * - Saved messages are forwarded to the tenant's Livechat inbox when contact-form forwarding is on for that
14
+ * client (Admin → client → Livechat).
15
+ */
16
+ import type { SmessClient } from '../../core/client.js';
17
+ import type { CallOptions } from '../../core/endpoint.js';
18
+ /**
19
+ * `contact_form` for website contact forms. `lead_capture` also creates a CRM prospect and starts a Rebuild
20
+ * pipeline job (rebuild.vn only). `demo_*` are the Rebuild demo-site CTAs and need `site_id`.
21
+ */
22
+ export type MessengerType = 'contact_form' | 'lead_capture' | 'order' | 'default' | 'monitoring' | 'demo_contract_request' | 'demo_cooperation_request' | (string & Record<never, never>);
23
+ export interface MessengerSendInput {
24
+ /** The owning tenant (Authentication Client UUID). Defaults to the client's `clientId`. */
25
+ client_id?: string;
26
+ /** Default `default`. */
27
+ type?: MessengerType;
28
+ from_name?: string;
29
+ from_email?: string;
30
+ /** ≤ 20 characters (database column). */
31
+ from_phone_number?: string;
32
+ subject?: string;
33
+ message?: string;
34
+ /** `[a-z0-9][a-z0-9-]{0,63}`; required for `demo_*` types. */
35
+ site_id?: string;
36
+ /** Your own reference for the message. */
37
+ external_id?: string;
38
+ }
39
+ /** `MessengerGetDto`, plain `json_encode` (camelCase, nulls kept). */
40
+ export interface MessengerMessage {
41
+ id: string;
42
+ type: MessengerType;
43
+ fromIpAddress: string | null;
44
+ fromName: string | null;
45
+ fromEmail: string | null;
46
+ fromPhoneNumber: string | null;
47
+ subject: string | null;
48
+ message: string | null;
49
+ siteId: string | null;
50
+ }
51
+ export type WebsiteEventName = 'website_viewed' | 'contact_form_opened' | 'contact_form_submitted' | 'contact_form_failed' | 'livechat_opened' | 'livechat_started' | 'livechat_message_sent' | 'lead_created' | 'demo_cta_clicked' | 'contract_booking_started' | 'cooperation_requested';
52
+ export interface WebsiteEventInput {
53
+ /** Defaults to the client's `clientId`; the client must exist. */
54
+ client_id?: string;
55
+ /** `[a-z0-9][a-z0-9-]{0,63}`. */
56
+ site_id: string;
57
+ event: WebsiteEventName;
58
+ /** Per-tab visitor session, ≤ 64. */
59
+ session_id?: string;
60
+ page_url?: string;
61
+ referrer?: string;
62
+ /** ATOM date-time, e.g. `2026-11-07T10:00:00+07:00`. */
63
+ occurred_at?: string;
64
+ /** A Rebuild demo site. */
65
+ demo?: boolean;
66
+ /** ≤ 20 snake_case keys with scalar values (strings ≤ 500). */
67
+ properties?: Record<string, string | number | boolean | null>;
68
+ }
69
+ export interface WebsiteEventAccepted {
70
+ object: 'website_event';
71
+ event: WebsiteEventName;
72
+ accepted: true;
73
+ }
74
+ export declare const messengerEndpoints: {
75
+ readonly send: import("../../core/endpoint.js").Endpoint<"/v1/messenger/send", MessengerSendInput & {
76
+ client_id: string;
77
+ }, never, MessengerMessage>;
78
+ readonly get: import("../../core/endpoint.js").Endpoint<"/v1/messenger/{id}/information", never, never, MessengerMessage>;
79
+ readonly websiteEvent: import("../../core/endpoint.js").Endpoint<"/v1/messenger/website_events", WebsiteEventInput & {
80
+ client_id: string;
81
+ }, never, WebsiteEventAccepted>;
82
+ };
83
+ export declare function messenger(client: SmessClient): {
84
+ /** Saves a website message (contact form, lead, ...) for the tenant. */
85
+ send: (input: MessengerSendInput, o?: CallOptions) => Promise<MessengerMessage>;
86
+ /** A saved message by id. */
87
+ get: (id: string, o?: CallOptions) => Promise<MessengerMessage>;
88
+ /** Records a visitor event (202); 60 per minute per IP and site. */
89
+ trackWebsiteEvent: (input: WebsiteEventInput, o?: CallOptions) => Promise<WebsiteEventAccepted>;
90
+ };
91
+ export type MessengerModule = ReturnType<typeof messenger>;
92
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/messenger/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,cAAc,GACd,OAAO,GACP,SAAS,GACT,YAAY,GACZ,uBAAuB,GACvB,0BAA0B,GAC1B,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEpC,MAAM,WAAW,kBAAkB;IACjC,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,qBAAqB,GACrB,wBAAwB,GACxB,qBAAqB,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,uBAAuB,GACvB,cAAc,GACd,kBAAkB,GAClB,0BAA0B,GAC1B,uBAAuB,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;IACxB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,eAAO,MAAM,kBAAkB;;mBAC4C,MAAM;;;;mBAcK,MAAM;;CAMlF,CAAC;AAEX,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW;IAWzC,wEAAwE;kBACpD,kBAAkB,MAAM,WAAW;IAEvD,6BAA6B;cACnB,MAAM,MAAM,WAAW;IACjC,oEAAoE;+BACnC,iBAAiB,MAAM,WAAW;EAGtE;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { unwrapData } from '../../core/decoders.js';
2
+ import { defineEndpoint } from '../../core/endpoint.js';
3
+ import { SmessApiError } from '../../errors/smess-api-error.js';
4
+ export const messengerEndpoints = {
5
+ send: defineEndpoint()({
6
+ service: 'messenger',
7
+ method: 'POST',
8
+ path: '/v1/messenger/send',
9
+ auth: 'none',
10
+ decode: unwrapData,
11
+ }),
12
+ get: defineEndpoint()({
13
+ service: 'messenger',
14
+ method: 'GET',
15
+ path: '/v1/messenger/{id}/information',
16
+ auth: 'none',
17
+ decode: unwrapData,
18
+ }),
19
+ websiteEvent: defineEndpoint()({
20
+ service: 'messenger',
21
+ method: 'POST',
22
+ path: '/v1/messenger/website_events',
23
+ auth: 'none',
24
+ }),
25
+ };
26
+ export function messenger(client) {
27
+ const e = messengerEndpoints;
28
+ const tenantOf = (clientId) => {
29
+ const value = clientId ?? client.config.clientId;
30
+ if (!value) {
31
+ throw new SmessApiError({ kind: 'config', code: 'missing_client_id', message: 'Messenger needs a client_id (input or client clientId).' });
32
+ }
33
+ return value;
34
+ };
35
+ return {
36
+ /** Saves a website message (contact form, lead, ...) for the tenant. */
37
+ send: async (input, o) => client.call(e.send, { ...o, body: { ...input, client_id: tenantOf(input.client_id) } }),
38
+ /** A saved message by id. */
39
+ get: (id, o) => client.call(e.get, { ...o, path: { id } }),
40
+ /** Records a visitor event (202); 60 per minute per IP and site. */
41
+ trackWebsiteEvent: async (input, o) => client.call(e.websiteEvent, { ...o, body: { ...input, client_id: tenantOf(input.client_id) } }),
42
+ };
43
+ }
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/messenger/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAmFhE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,cAAc,EAAgE,CAAC;QACnF,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,UAAU;KACnB,CAAC;IACF,GAAG,EAAE,cAAc,EAAoB,CAAC;QACtC,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,gCAAgC;QACtC,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,UAAU;KACnB,CAAC;IACF,YAAY,EAAE,cAAc,EAAmE,CAAC;QAC9F,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,8BAA8B;QACpC,IAAI,EAAE,MAAM;KACb,CAAC;CACM,CAAC;AAEX,MAAM,UAAU,SAAS,CAAC,MAAmB;IAC3C,MAAM,CAAC,GAAG,kBAAkB,CAAC;IAC7B,MAAM,QAAQ,GAAG,CAAC,QAA4B,EAAU,EAAE;QACxD,MAAM,KAAK,GAAG,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,yDAAyD,EAAE,CAAC,CAAC;QAC7I,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO;QACL,wEAAwE;QACxE,IAAI,EAAE,KAAK,EAAE,KAAyB,EAAE,CAAe,EAAE,EAAE,CACzD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QACzF,6BAA6B;QAC7B,GAAG,EAAE,CAAC,EAAU,EAAE,CAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAChF,oEAAoE;QACpE,iBAAiB,EAAE,KAAK,EAAE,KAAwB,EAAE,CAAe,EAAE,EAAE,CACrE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;KAClG,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smess/networking",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Typed client for the SMESS core-services API (auth, campaigns, Danara, SSO, files), built on fetch.",
5
5
  "keywords": [
6
6
  "smess",
@@ -40,6 +40,10 @@
40
40
  "types": "./dist/modules/danara/index.d.ts",
41
41
  "default": "./dist/modules/danara/index.js"
42
42
  },
43
+ "./messenger": {
44
+ "types": "./dist/modules/messenger/index.d.ts",
45
+ "default": "./dist/modules/messenger/index.js"
46
+ },
43
47
  "./rx": {
44
48
  "types": "./dist/rx/index.d.ts",
45
49
  "default": "./dist/rx/index.js"