@smess/networking 1.2.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 +221 -0
- package/README.md +178 -111
- package/dist/core/body.d.ts +10 -0
- package/dist/core/body.d.ts.map +1 -0
- package/dist/core/body.js +22 -0
- package/dist/core/body.js.map +1 -0
- package/dist/core/client.d.ts +74 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +124 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/decoders.d.ts +8 -0
- package/dist/core/decoders.d.ts.map +1 -0
- package/dist/core/decoders.js +26 -0
- package/dist/core/decoders.js.map +1 -0
- package/dist/core/endpoint.d.ts +69 -0
- package/dist/core/endpoint.d.ts.map +1 -0
- package/dist/core/endpoint.js +6 -0
- package/dist/core/endpoint.js.map +1 -0
- package/dist/core/hosts.d.ts +27 -0
- package/dist/core/hosts.d.ts.map +1 -0
- package/dist/core/hosts.js +24 -0
- package/dist/core/hosts.js.map +1 -0
- package/dist/core/pagination.d.ts +33 -0
- package/dist/core/pagination.d.ts.map +1 -0
- package/dist/core/pagination.js +23 -0
- package/dist/core/pagination.js.map +1 -0
- package/dist/core/pipeline.d.ts +25 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +12 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/retry.d.ts +18 -0
- package/dist/core/retry.d.ts.map +1 -0
- package/dist/core/retry.js +47 -0
- package/dist/core/retry.js.map +1 -0
- package/dist/core/transport.d.ts +30 -0
- package/dist/core/transport.d.ts.map +1 -0
- package/dist/core/transport.js +73 -0
- package/dist/core/transport.js.map +1 -0
- package/dist/core/types.d.ts +24 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/url.d.ts +15 -0
- package/dist/core/url.d.ts.map +1 -0
- package/dist/core/url.js +46 -0
- package/dist/core/url.js.map +1 -0
- package/dist/errors/parse-error-body.d.ts +20 -0
- package/dist/errors/parse-error-body.d.ts.map +1 -0
- package/dist/errors/parse-error-body.js +73 -0
- package/dist/errors/parse-error-body.js.map +1 -0
- package/dist/errors/smess-api-error.d.ts +70 -0
- package/dist/errors/smess-api-error.d.ts.map +1 -0
- package/dist/errors/smess-api-error.js +84 -0
- package/dist/errors/smess-api-error.js.map +1 -0
- package/dist/index.d.ts +27 -25
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -29
- package/dist/index.js.map +1 -0
- package/dist/modules/authentication/index.d.ts +89 -0
- package/dist/modules/authentication/index.d.ts.map +1 -0
- package/dist/modules/authentication/index.js +128 -0
- package/dist/modules/authentication/index.js.map +1 -0
- package/dist/modules/campaign/index.d.ts +212 -0
- package/dist/modules/campaign/index.d.ts.map +1 -0
- package/dist/modules/campaign/index.js +193 -0
- package/dist/modules/campaign/index.js.map +1 -0
- package/dist/modules/campaign/types.d.ts +562 -0
- package/dist/modules/campaign/types.d.ts.map +1 -0
- package/dist/modules/campaign/types.js +2 -0
- package/dist/modules/campaign/types.js.map +1 -0
- package/dist/modules/danara/index.d.ts +153 -0
- package/dist/modules/danara/index.d.ts.map +1 -0
- package/dist/modules/danara/index.js +144 -0
- package/dist/modules/danara/index.js.map +1 -0
- package/dist/modules/danara/types.d.ts +479 -0
- package/dist/modules/danara/types.d.ts.map +1 -0
- package/dist/modules/danara/types.js +2 -0
- package/dist/modules/danara/types.js.map +1 -0
- package/dist/modules/messenger/index.d.ts +92 -0
- package/dist/modules/messenger/index.d.ts.map +1 -0
- package/dist/modules/messenger/index.js +44 -0
- package/dist/modules/messenger/index.js.map +1 -0
- package/dist/modules/smeup-file/index.d.ts +27 -0
- package/dist/modules/smeup-file/index.d.ts.map +1 -0
- package/dist/modules/smeup-file/index.js +17 -0
- package/dist/modules/smeup-file/index.js.map +1 -0
- package/dist/modules/sso/index.d.ts +40 -0
- package/dist/modules/sso/index.d.ts.map +1 -0
- package/dist/modules/sso/index.js +41 -0
- package/dist/modules/sso/index.js.map +1 -0
- package/dist/rx/index.d.ts +11 -0
- package/dist/rx/index.d.ts.map +1 -0
- package/dist/rx/index.js +20 -0
- package/dist/rx/index.js.map +1 -0
- package/dist/session/auth-middleware.d.ts +27 -0
- package/dist/session/auth-middleware.d.ts.map +1 -0
- package/dist/session/auth-middleware.js +122 -0
- package/dist/session/auth-middleware.js.map +1 -0
- package/dist/session/jwt.d.ts +20 -0
- package/dist/session/jwt.d.ts.map +1 -0
- package/dist/session/jwt.js +25 -0
- package/dist/session/jwt.js.map +1 -0
- package/dist/session/stores.d.ts +19 -0
- package/dist/session/stores.d.ts.map +1 -0
- package/dist/session/stores.js +103 -0
- package/dist/session/stores.js.map +1 -0
- package/dist/session/types.d.ts +28 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +2 -0
- package/dist/session/types.js.map +1 -0
- package/package.json +84 -30
- package/dist/core/axios.d.ts +0 -51
- package/dist/core/axios.js +0 -65
- package/dist/core/axios.observable.d.ts +0 -11
- package/dist/core/axios.observable.js +0 -58
- package/dist/core/base.provider.advanced.test.d.ts +0 -1
- package/dist/core/base.provider.advanced.test.js +0 -29
- package/dist/core/base.provider.d.ts +0 -15
- package/dist/core/base.provider.js +0 -13
- package/dist/core/base.provider.test.d.ts +0 -1
- package/dist/core/base.provider.test.js +0 -36
- package/dist/core/base.service.wrapper.advanced.test.d.ts +0 -1
- package/dist/core/base.service.wrapper.advanced.test.js +0 -39
- package/dist/core/base.service.wrapper.d.ts +0 -7
- package/dist/core/base.service.wrapper.js +0 -11
- package/dist/core/base.service.wrapper.test.d.ts +0 -1
- package/dist/core/base.service.wrapper.test.js +0 -25
- package/dist/core/rx.http.service.d.ts +0 -51
- package/dist/core/rx.http.service.js +0 -65
- package/dist/services/auth.service.d.ts +0 -65
- package/dist/services/auth.service.js +0 -197
- package/dist/services/auth.service.test.d.ts +0 -1
- package/dist/services/auth.service.test.js +0 -334
- package/dist/services/cache.service.d.ts +0 -31
- package/dist/services/cache.service.js +0 -77
- package/dist/services/cache.service.test.d.ts +0 -1
- package/dist/services/cache.service.test.js +0 -88
- package/dist/services/customer.service.d.ts +0 -211
- package/dist/services/customer.service.js +0 -128
- package/dist/services/customer.service.test.d.ts +0 -1
- package/dist/services/customer.service.test.js +0 -430
- package/dist/services/employee.service.d.ts +0 -73
- package/dist/services/employee.service.js +0 -74
- package/dist/services/employee.service.test.d.ts +0 -1
- package/dist/services/employee.service.test.js +0 -127
- package/dist/services/logger.service.d.ts +0 -31
- package/dist/services/logger.service.js +0 -93
- package/dist/services/logger.service.test.d.ts +0 -1
- package/dist/services/logger.service.test.js +0 -31
- package/dist/services/order.service.d.ts +0 -73
- package/dist/services/order.service.js +0 -97
- package/dist/services/order.service.test.d.ts +0 -1
- package/dist/services/order.service.test.js +0 -163
- package/dist/services/product.service.d.ts +0 -21
- package/dist/services/product.service.js +0 -42
- package/dist/services/product.service.test.d.ts +0 -1
- package/dist/services/product.service.test.js +0 -61
- package/dist/services/smess.service.d.ts +0 -36
- package/dist/services/smess.service.js +0 -128
- package/dist/services/smess.service.test.d.ts +0 -1
- package/dist/services/smess.service.test.js +0 -103
- package/dist/services/store.cart.service.d.ts +0 -158
- package/dist/services/store.cart.service.js +0 -177
- package/dist/services/store.cart.service.test.d.ts +0 -1
- package/dist/services/store.cart.service.test.js +0 -394
- package/dist/services/store.product.service.d.ts +0 -124
- package/dist/services/store.product.service.js +0 -102
- package/dist/services/store.product.service.test.d.ts +0 -1
- package/dist/services/store.product.service.test.js +0 -319
- package/dist/services/store.service.d.ts +0 -79
- package/dist/services/store.service.js +0 -235
- package/dist/services/store.service.test.d.ts +0 -1
- package/dist/services/store.service.test.js +0 -274
- package/dist/services/storefront.cart.service.d.ts +0 -73
- package/dist/services/storefront.cart.service.js +0 -167
- package/dist/services/storefront.cart.service.test.d.ts +0 -1
- package/dist/services/storefront.cart.service.test.js +0 -211
- package/dist/services/storefront.checkout.service.d.ts +0 -62
- package/dist/services/storefront.checkout.service.js +0 -75
- package/dist/services/storefront.checkout.service.test.d.ts +0 -1
- package/dist/services/storefront.checkout.service.test.js +0 -158
- package/dist/services/storefront.customer.metadata.service.d.ts +0 -91
- package/dist/services/storefront.customer.metadata.service.js +0 -225
- package/dist/services/storefront.customer.metadata.service.test.d.ts +0 -1
- package/dist/services/storefront.customer.metadata.service.test.js +0 -271
- package/dist/services/storefront.order.service.d.ts +0 -45
- package/dist/services/storefront.order.service.js +0 -99
- package/dist/services/storefront.order.service.test.d.ts +0 -1
- package/dist/services/storefront.order.service.test.js +0 -158
- package/dist/services/storefront.product.service.d.ts +0 -52
- package/dist/services/storefront.product.service.js +0 -75
- package/dist/services/storefront.product.service.test.d.ts +0 -1
- package/dist/services/storefront.product.service.test.js +0 -120
- package/dist/services/storefront.store.service.d.ts +0 -54
- package/dist/services/storefront.store.service.js +0 -142
- package/dist/services/storefront.store.service.test.d.ts +0 -1
- package/dist/services/storefront.store.service.test.js +0 -90
- package/dist/services/user.service.d.ts +0 -16
- package/dist/services/user.service.js +0 -37
- package/dist/services/user.service.test.d.ts +0 -1
- package/dist/services/user.service.test.js +0 -52
- package/dist/services/utils/withAuthReset.d.ts +0 -3
- package/dist/services/utils/withAuthReset.js +0 -8
- package/dist/src/core/axios.d.ts +0 -51
- package/dist/src/core/axios.js +0 -65
- package/dist/src/core/axios.observable.d.ts +0 -11
- package/dist/src/core/axios.observable.js +0 -58
- package/dist/src/core/base.provider.advanced.test.d.ts +0 -1
- package/dist/src/core/base.provider.advanced.test.js +0 -29
- package/dist/src/core/base.provider.d.ts +0 -15
- package/dist/src/core/base.provider.js +0 -13
- package/dist/src/core/base.provider.test.d.ts +0 -1
- package/dist/src/core/base.provider.test.js +0 -36
- package/dist/src/core/base.service.wrapper.advanced.test.d.ts +0 -1
- package/dist/src/core/base.service.wrapper.advanced.test.js +0 -39
- package/dist/src/core/base.service.wrapper.d.ts +0 -7
- package/dist/src/core/base.service.wrapper.js +0 -11
- package/dist/src/core/base.service.wrapper.test.d.ts +0 -1
- package/dist/src/core/base.service.wrapper.test.js +0 -25
- package/dist/src/core/rx.http.service.d.ts +0 -51
- package/dist/src/core/rx.http.service.js +0 -65
- package/dist/src/index.d.ts +0 -25
- package/dist/src/index.js +0 -29
- package/dist/src/services/auth.service.d.ts +0 -65
- package/dist/src/services/auth.service.js +0 -197
- package/dist/src/services/auth.service.test.d.ts +0 -1
- package/dist/src/services/auth.service.test.js +0 -334
- package/dist/src/services/cache.service.d.ts +0 -31
- package/dist/src/services/cache.service.js +0 -77
- package/dist/src/services/cache.service.test.d.ts +0 -1
- package/dist/src/services/cache.service.test.js +0 -88
- package/dist/src/services/customer.service.d.ts +0 -199
- package/dist/src/services/customer.service.js +0 -114
- package/dist/src/services/customer.service.test.d.ts +0 -1
- package/dist/src/services/customer.service.test.js +0 -430
- package/dist/src/services/employee.service.d.ts +0 -73
- package/dist/src/services/employee.service.js +0 -74
- package/dist/src/services/employee.service.test.d.ts +0 -1
- package/dist/src/services/employee.service.test.js +0 -127
- package/dist/src/services/logger.service.d.ts +0 -31
- package/dist/src/services/logger.service.js +0 -93
- package/dist/src/services/logger.service.test.d.ts +0 -1
- package/dist/src/services/logger.service.test.js +0 -31
- package/dist/src/services/order.service.d.ts +0 -73
- package/dist/src/services/order.service.js +0 -97
- package/dist/src/services/order.service.test.d.ts +0 -1
- package/dist/src/services/order.service.test.js +0 -163
- package/dist/src/services/product.service.d.ts +0 -21
- package/dist/src/services/product.service.js +0 -42
- package/dist/src/services/product.service.test.d.ts +0 -1
- package/dist/src/services/product.service.test.js +0 -61
- package/dist/src/services/smess.service.d.ts +0 -36
- package/dist/src/services/smess.service.js +0 -128
- package/dist/src/services/smess.service.test.d.ts +0 -1
- package/dist/src/services/smess.service.test.js +0 -103
- package/dist/src/services/store.cart.service.d.ts +0 -158
- package/dist/src/services/store.cart.service.js +0 -177
- package/dist/src/services/store.cart.service.test.d.ts +0 -1
- package/dist/src/services/store.cart.service.test.js +0 -394
- package/dist/src/services/store.product.service.d.ts +0 -124
- package/dist/src/services/store.product.service.js +0 -102
- package/dist/src/services/store.product.service.test.d.ts +0 -1
- package/dist/src/services/store.product.service.test.js +0 -319
- package/dist/src/services/store.service.d.ts +0 -79
- package/dist/src/services/store.service.js +0 -235
- package/dist/src/services/store.service.test.d.ts +0 -1
- package/dist/src/services/store.service.test.js +0 -274
- package/dist/src/services/storefront.cart.service.d.ts +0 -73
- package/dist/src/services/storefront.cart.service.js +0 -167
- package/dist/src/services/storefront.cart.service.test.d.ts +0 -1
- package/dist/src/services/storefront.cart.service.test.js +0 -211
- package/dist/src/services/storefront.checkout.service.d.ts +0 -62
- package/dist/src/services/storefront.checkout.service.js +0 -75
- package/dist/src/services/storefront.checkout.service.test.d.ts +0 -1
- package/dist/src/services/storefront.checkout.service.test.js +0 -158
- package/dist/src/services/storefront.customer.metadata.service.d.ts +0 -91
- package/dist/src/services/storefront.customer.metadata.service.js +0 -225
- package/dist/src/services/storefront.customer.metadata.service.test.d.ts +0 -1
- package/dist/src/services/storefront.customer.metadata.service.test.js +0 -271
- package/dist/src/services/storefront.order.service.d.ts +0 -45
- package/dist/src/services/storefront.order.service.js +0 -99
- package/dist/src/services/storefront.order.service.test.d.ts +0 -1
- package/dist/src/services/storefront.order.service.test.js +0 -158
- package/dist/src/services/storefront.product.service.d.ts +0 -52
- package/dist/src/services/storefront.product.service.js +0 -75
- package/dist/src/services/storefront.product.service.test.d.ts +0 -1
- package/dist/src/services/storefront.product.service.test.js +0 -120
- package/dist/src/services/storefront.store.service.d.ts +0 -52
- package/dist/src/services/storefront.store.service.js +0 -140
- package/dist/src/services/storefront.store.service.test.d.ts +0 -1
- package/dist/src/services/storefront.store.service.test.js +0 -90
- package/dist/src/services/user.service.d.ts +0 -16
- package/dist/src/services/user.service.js +0 -37
- package/dist/src/services/user.service.test.d.ts +0 -1
- package/dist/src/services/user.service.test.js +0 -52
- package/dist/src/services/utils/withAuthReset.d.ts +0 -3
- package/dist/src/services/utils/withAuthReset.js +0 -8
- package/dist/src/types/types.d.ts +0 -93
- package/dist/src/types/types.js +0 -82
- package/dist/src/types/types.test.d.ts +0 -1
- package/dist/src/types/types.test.js +0 -25
- package/dist/src/utils/cache-import.d.ts +0 -3
- package/dist/src/utils/cache-import.js +0 -2
- package/dist/src/utils/networking-import.d.ts +0 -4
- package/dist/src/utils/networking-import.js +0 -3
- package/dist/src/utils/rxjs-import.d.ts +0 -5
- package/dist/src/utils/rxjs-import.js +0 -5
- package/dist/types/types.d.ts +0 -96
- package/dist/types/types.js +0 -82
- package/dist/types/types.test.d.ts +0 -1
- package/dist/types/types.test.js +0 -25
- package/dist/utils/cache-import.d.ts +0 -3
- package/dist/utils/cache-import.js +0 -2
- package/dist/utils/networking-import.d.ts +0 -4
- package/dist/utils/networking-import.js +0 -3
- package/dist/utils/rxjs-import.d.ts +0 -5
- package/dist/utils/rxjs-import.js +0 -5
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication module (`src/Microservice/Authentication`, host `app.authentication_host` → auth.smess.vn).
|
|
3
|
+
*
|
|
4
|
+
* Token lifecycle on the wire:
|
|
5
|
+
* - `login_check` and `token/refresh` return `{token, refresh_token}`. Refresh tokens do not rotate and
|
|
6
|
+
* their TTL slides on each use; the access JWT lives 3600 s.
|
|
7
|
+
* - OTP verify and password reset return `{data: {token, refreshToken}}` (camelCase), and `{data: null}`
|
|
8
|
+
* with HTTP 200 when the code or reset token is wrong.
|
|
9
|
+
* - Every anonymous call here uses `auth: 'none'`: a stale Bearer would 401 them (Lexik `supports()`).
|
|
10
|
+
*/
|
|
11
|
+
import type { SmessClient } from '../../core/client.js';
|
|
12
|
+
import type { RefreshStrategy } from '../../session/auth-middleware.js';
|
|
13
|
+
import type { Session } from '../../session/types.js';
|
|
14
|
+
/** `login_check` / `token/refresh` success body (Lexik + gesdinet). */
|
|
15
|
+
export interface TokenPair {
|
|
16
|
+
token: string;
|
|
17
|
+
refresh_token: string;
|
|
18
|
+
}
|
|
19
|
+
/** `AuthenticationSucceedDTO`, plain `json_encode` (camelCase). */
|
|
20
|
+
export interface AuthenticationSucceeded {
|
|
21
|
+
token: string;
|
|
22
|
+
refreshToken: string;
|
|
23
|
+
}
|
|
24
|
+
export interface LoginInput {
|
|
25
|
+
/** Email or phone; `email`, `phone_number` and `phone` are also accepted by the server. */
|
|
26
|
+
identifier: string;
|
|
27
|
+
password: string;
|
|
28
|
+
}
|
|
29
|
+
export interface IdentifierInput {
|
|
30
|
+
identifier: string;
|
|
31
|
+
}
|
|
32
|
+
export interface OtpVerifyInput {
|
|
33
|
+
identifier: string;
|
|
34
|
+
/** Exactly 6 characters. */
|
|
35
|
+
code: string;
|
|
36
|
+
}
|
|
37
|
+
export interface ResetPasswordInput {
|
|
38
|
+
token: string;
|
|
39
|
+
new_password: string;
|
|
40
|
+
}
|
|
41
|
+
export interface ChangePasswordInput {
|
|
42
|
+
old_password: string;
|
|
43
|
+
password: string;
|
|
44
|
+
/** Also revokes every refresh token of the user. */
|
|
45
|
+
disconnect_from_all_devices?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export declare const authenticationEndpoints: {
|
|
48
|
+
readonly login: import("../../core/endpoint.js").Endpoint<"/v1/authentication/login_check", LoginInput, never, TokenPair>;
|
|
49
|
+
readonly refresh: import("../../core/endpoint.js").Endpoint<"/v1/authentication/token/refresh", {
|
|
50
|
+
refresh_token: string;
|
|
51
|
+
}, never, TokenPair>;
|
|
52
|
+
readonly otpRequest: import("../../core/endpoint.js").Endpoint<"/v1/authentication/otp/request", IdentifierInput, never, undefined>;
|
|
53
|
+
readonly otpVerify: import("../../core/endpoint.js").Endpoint<"/v1/authentication/otp/verify", OtpVerifyInput, never, {
|
|
54
|
+
data: AuthenticationSucceeded | null;
|
|
55
|
+
}>;
|
|
56
|
+
readonly forgotPassword: import("../../core/endpoint.js").Endpoint<"/v1/authentication/forgot-password", IdentifierInput, never, undefined>;
|
|
57
|
+
readonly resetPassword: import("../../core/endpoint.js").Endpoint<"/v1/authentication/verify-reset-password-token", ResetPasswordInput, never, {
|
|
58
|
+
data: AuthenticationSucceeded | null;
|
|
59
|
+
}>;
|
|
60
|
+
readonly changePassword: import("../../core/endpoint.js").Endpoint<"/v1/authentication/change-password", ChangePasswordInput, never, undefined>;
|
|
61
|
+
readonly logout: import("../../core/endpoint.js").Endpoint<"/v1/authentication/logout", never, never, undefined>;
|
|
62
|
+
};
|
|
63
|
+
/** Renews sessions through `POST /v1/authentication/token/refresh`. Pass as `refresh` to `createSmessClient`. */
|
|
64
|
+
export declare function authenticationRefresh(): RefreshStrategy;
|
|
65
|
+
/** Sign-in flows. Successful logins are saved to the client's session store (when it has a writable one). */
|
|
66
|
+
export declare function authentication(client: SmessClient): {
|
|
67
|
+
/** Password login. */
|
|
68
|
+
login: (input: LoginInput) => Promise<Session>;
|
|
69
|
+
/** Renews the session now (normally automatic). Uses the stored refresh token unless one is given. */
|
|
70
|
+
refresh: (refreshToken?: string) => Promise<Session>;
|
|
71
|
+
otp: {
|
|
72
|
+
/** Emails or texts a 6-digit code. Always succeeds (it never reveals whether the account exists). */
|
|
73
|
+
request: (input: IdentifierInput) => Promise<undefined>;
|
|
74
|
+
/** Exchanges the code for a session. A wrong or expired code fails with `validation` / `invalid_code`. */
|
|
75
|
+
verify: (input: OtpVerifyInput) => Promise<Session>;
|
|
76
|
+
};
|
|
77
|
+
/** Sends a reset link. Always succeeds. */
|
|
78
|
+
forgotPassword: (input: IdentifierInput) => Promise<undefined>;
|
|
79
|
+
/** Sets a new password from a reset-link token and signs in. A bad token fails with `invalid_reset_token`. */
|
|
80
|
+
resetPassword: (input: ResetPasswordInput) => Promise<Session>;
|
|
81
|
+
changePassword: (input: ChangePasswordInput) => Promise<undefined>;
|
|
82
|
+
/**
|
|
83
|
+
* Server logout, then clears the local session. The server revokes every refresh token of the user
|
|
84
|
+
* (all devices). To sign out of this device only, call `client.session.clear()`.
|
|
85
|
+
*/
|
|
86
|
+
logout: () => Promise<void>;
|
|
87
|
+
};
|
|
88
|
+
export type AuthenticationModule = ReturnType<typeof authentication>;
|
|
89
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/authentication/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAItD,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,mEAAmE;AACnE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,2FAA2F;IAC3F,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAMD,eAAO,MAAM,uBAAuB;;;uBAOkB,MAAM;;;;cAaxB,uBAAuB,GAAG,IAAI;;;;cAa1B,uBAAuB,GAAG,IAAI;;;;CAoB5D,CAAC;AAoBX,iHAAiH;AACjH,wBAAgB,qBAAqB,IAAI,eAAe,CAQvD;AAID,6GAA6G;AAC7G,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW;IAQ9C,sBAAsB;mBACD,UAAU;IAE/B,sGAAsG;6BACvE,MAAM;;QAOnC,qGAAqG;yBACpF,eAAe;QAChC,0GAA0G;wBACpF,cAAc;;IAItC,2CAA2C;4BACnB,eAAe;IAEvC,8GAA8G;2BACjF,kBAAkB;4BAGvB,mBAAmB;IAE3C;;;OAGG;;EASN;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { ignoreBody } from '../../core/decoders.js';
|
|
2
|
+
import { defineEndpoint } from '../../core/endpoint.js';
|
|
3
|
+
import { SmessApiError } from '../../errors/smess-api-error.js';
|
|
4
|
+
// ── Endpoints ─────────────────────────────────────────────────────────
|
|
5
|
+
const AUTH = 'authentication';
|
|
6
|
+
export const authenticationEndpoints = {
|
|
7
|
+
login: defineEndpoint()({
|
|
8
|
+
service: AUTH,
|
|
9
|
+
method: 'POST',
|
|
10
|
+
path: '/v1/authentication/login_check',
|
|
11
|
+
auth: 'none',
|
|
12
|
+
}),
|
|
13
|
+
refresh: defineEndpoint()({
|
|
14
|
+
service: AUTH,
|
|
15
|
+
method: 'POST',
|
|
16
|
+
path: '/v1/authentication/token/refresh',
|
|
17
|
+
auth: 'none',
|
|
18
|
+
}),
|
|
19
|
+
otpRequest: defineEndpoint()({
|
|
20
|
+
service: AUTH,
|
|
21
|
+
method: 'POST',
|
|
22
|
+
path: '/v1/authentication/otp/request',
|
|
23
|
+
auth: 'none',
|
|
24
|
+
decode: ignoreBody,
|
|
25
|
+
}),
|
|
26
|
+
otpVerify: defineEndpoint()({
|
|
27
|
+
service: AUTH,
|
|
28
|
+
method: 'POST',
|
|
29
|
+
path: '/v1/authentication/otp/verify',
|
|
30
|
+
auth: 'none',
|
|
31
|
+
}),
|
|
32
|
+
forgotPassword: defineEndpoint()({
|
|
33
|
+
service: AUTH,
|
|
34
|
+
method: 'POST',
|
|
35
|
+
path: '/v1/authentication/forgot-password',
|
|
36
|
+
auth: 'none',
|
|
37
|
+
decode: ignoreBody,
|
|
38
|
+
}),
|
|
39
|
+
resetPassword: defineEndpoint()({
|
|
40
|
+
service: AUTH,
|
|
41
|
+
method: 'POST',
|
|
42
|
+
path: '/v1/authentication/verify-reset-password-token',
|
|
43
|
+
auth: 'none',
|
|
44
|
+
}),
|
|
45
|
+
changePassword: defineEndpoint()({
|
|
46
|
+
service: AUTH,
|
|
47
|
+
method: 'POST',
|
|
48
|
+
path: '/v1/authentication/change-password',
|
|
49
|
+
auth: 'required',
|
|
50
|
+
decode: ignoreBody,
|
|
51
|
+
}),
|
|
52
|
+
logout: defineEndpoint()({
|
|
53
|
+
service: AUTH,
|
|
54
|
+
method: 'POST',
|
|
55
|
+
path: '/v1/authentication/logout',
|
|
56
|
+
auth: 'required',
|
|
57
|
+
decode: ignoreBody,
|
|
58
|
+
}),
|
|
59
|
+
};
|
|
60
|
+
// ── Session mapping ───────────────────────────────────────────────────
|
|
61
|
+
function fromTokenPair(body, previousRefresh) {
|
|
62
|
+
if (!body || typeof body.token !== 'string' || body.token === '') {
|
|
63
|
+
throw new SmessApiError({ kind: 'invalid_response', status: 200, message: 'The token response has no token.', body });
|
|
64
|
+
}
|
|
65
|
+
return { accessToken: body.token, refreshToken: body.refresh_token || previousRefresh || null };
|
|
66
|
+
}
|
|
67
|
+
function fromSucceeded(body, code, message) {
|
|
68
|
+
const data = body?.data;
|
|
69
|
+
if (!data?.token) {
|
|
70
|
+
// The handler swallows every failure into HTTP 200 {"data": null}.
|
|
71
|
+
throw new SmessApiError({ kind: 'validation', status: 200, code, message, body });
|
|
72
|
+
}
|
|
73
|
+
return { accessToken: data.token, refreshToken: data.refreshToken || null };
|
|
74
|
+
}
|
|
75
|
+
/** Renews sessions through `POST /v1/authentication/token/refresh`. Pass as `refresh` to `createSmessClient`. */
|
|
76
|
+
export function authenticationRefresh() {
|
|
77
|
+
return async ({ session, client }) => {
|
|
78
|
+
if (!session.refreshToken) {
|
|
79
|
+
throw new SmessApiError({ kind: 'unauthenticated', status: 401, code: 'no_refresh_token' });
|
|
80
|
+
}
|
|
81
|
+
const body = await client.call(authenticationEndpoints.refresh, { body: { refresh_token: session.refreshToken } });
|
|
82
|
+
return fromTokenPair(body, session.refreshToken);
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// ── Module ────────────────────────────────────────────────────────────
|
|
86
|
+
/** Sign-in flows. Successful logins are saved to the client's session store (when it has a writable one). */
|
|
87
|
+
export function authentication(client) {
|
|
88
|
+
const e = authenticationEndpoints;
|
|
89
|
+
const save = async (session) => {
|
|
90
|
+
await client.session.set(session);
|
|
91
|
+
return session;
|
|
92
|
+
};
|
|
93
|
+
return {
|
|
94
|
+
/** Password login. */
|
|
95
|
+
login: async (input) => save(fromTokenPair(await client.call(e.login, { body: input }))),
|
|
96
|
+
/** Renews the session now (normally automatic). Uses the stored refresh token unless one is given. */
|
|
97
|
+
refresh: async (refreshToken) => {
|
|
98
|
+
const token = refreshToken ?? (await client.session.get())?.refreshToken;
|
|
99
|
+
if (!token)
|
|
100
|
+
throw new SmessApiError({ kind: 'unauthenticated', code: 'no_refresh_token', message: 'There is no refresh token.' });
|
|
101
|
+
return save(fromTokenPair(await client.call(e.refresh, { body: { refresh_token: token } }), token));
|
|
102
|
+
},
|
|
103
|
+
otp: {
|
|
104
|
+
/** Emails or texts a 6-digit code. Always succeeds (it never reveals whether the account exists). */
|
|
105
|
+
request: (input) => client.call(e.otpRequest, { body: input }),
|
|
106
|
+
/** Exchanges the code for a session. A wrong or expired code fails with `validation` / `invalid_code`. */
|
|
107
|
+
verify: async (input) => save(fromSucceeded(await client.call(e.otpVerify, { body: input }), 'invalid_code', 'The code is invalid or has expired.')),
|
|
108
|
+
},
|
|
109
|
+
/** Sends a reset link. Always succeeds. */
|
|
110
|
+
forgotPassword: (input) => client.call(e.forgotPassword, { body: input }),
|
|
111
|
+
/** Sets a new password from a reset-link token and signs in. A bad token fails with `invalid_reset_token`. */
|
|
112
|
+
resetPassword: async (input) => save(fromSucceeded(await client.call(e.resetPassword, { body: input }), 'invalid_reset_token', 'This reset link is invalid or has expired.')),
|
|
113
|
+
changePassword: (input) => client.call(e.changePassword, { body: input }),
|
|
114
|
+
/**
|
|
115
|
+
* Server logout, then clears the local session. The server revokes every refresh token of the user
|
|
116
|
+
* (all devices). To sign out of this device only, call `client.session.clear()`.
|
|
117
|
+
*/
|
|
118
|
+
logout: async () => {
|
|
119
|
+
try {
|
|
120
|
+
await client.call(e.logout);
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
await client.session.clear();
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/authentication/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Campaign module, email channel: the smeup.email app API (`/v1/campaigns/email/*`).
|
|
3
|
+
* Host `app.campaign_api_host` → api.smess.vn. Every route needs a signed-in staff member of the account
|
|
4
|
+
* (403 otherwise); approve/decline and SSO settings are owner-only.
|
|
5
|
+
*
|
|
6
|
+
* - The tenant comes from the JWT; do not send `X-Client-Id` from smeup.email (several handlers ignore it,
|
|
7
|
+
* others honour it, so a header would mix two tenants).
|
|
8
|
+
* - Updates are `POST /{id}`, deletes answer 204 (except `DELETE /sender/default`, which returns the Sender).
|
|
9
|
+
* - User-facing errors (400/403/409/422/503) are `{code, message}` with the message written for the end
|
|
10
|
+
* user; it lands in `SmessApiError.serverMessage`.
|
|
11
|
+
*/
|
|
12
|
+
import type { SmessClient } from '../../core/client.js';
|
|
13
|
+
import type { CallOptions } from '../../core/endpoint.js';
|
|
14
|
+
import type { ApiList } from '../../core/pagination.js';
|
|
15
|
+
import type { AbTest, AddressDefaultsInput, ApiCredential, Audience, AudienceContact, AudienceInput, Automation, AutomationInput, Campaign, CampaignRecipient, CampaignReport, ComposeInput, ContactInput, ContactUpdateInput, ContactsQuery, EmailAddress, EmailDomain, HtmlCheck, ImportResult, LinkCheck, Plan, RecipientsQuery, Segment, SegmentInput, SegmentPreview, SegmentRules, Sender, SetDefaultSenderInput, ShortLink, ShortLinkClicks, ShortLinkInput, SpamCheck, SsoConnectAuthorization, SsoStatus, Target, Template, TemplateCheckInput, TemplateInput, TemplatePreview, Webhook, WebhookInput, WebhookTest } from './types.js';
|
|
16
|
+
export type * from './types.js';
|
|
17
|
+
export declare const campaignEmailEndpoints: {
|
|
18
|
+
readonly sender: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/sender", never, never, Sender>;
|
|
19
|
+
readonly setDefaultSender: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/sender/default", SetDefaultSenderInput, never, Sender>;
|
|
20
|
+
readonly clearDefaultSender: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/sender/default", never, never, Sender>;
|
|
21
|
+
readonly targets: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/targets", never, never, ApiList<Target>>;
|
|
22
|
+
readonly templates: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/templates", never, never, ApiList<Template>>;
|
|
23
|
+
readonly createTemplate: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/templates", TemplateInput, never, Template>;
|
|
24
|
+
readonly updateTemplate: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/templates/{id}", TemplateInput, never, Template>;
|
|
25
|
+
readonly deleteTemplate: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/templates/{id}", never, never, undefined>;
|
|
26
|
+
readonly previewTemplate: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/templates/preview", TemplateCheckInput, never, TemplatePreview>;
|
|
27
|
+
readonly checkTemplateHtml: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/templates/check-html", TemplateCheckInput, never, HtmlCheck>;
|
|
28
|
+
readonly checkTemplateLinks: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/templates/check-links", TemplateCheckInput, never, LinkCheck>;
|
|
29
|
+
readonly checkTemplateSpam: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/templates/check-spam", TemplateCheckInput, never, SpamCheck>;
|
|
30
|
+
readonly testSendTemplate: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/templates/test-send", TemplateCheckInput, never, Campaign>;
|
|
31
|
+
readonly campaigns: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/campaigns", never, never, ApiList<Campaign>>;
|
|
32
|
+
readonly compose: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/campaigns", ComposeInput, never, Campaign>;
|
|
33
|
+
readonly report: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/campaigns/{id}/report", never, never, CampaignReport>;
|
|
34
|
+
readonly recipients: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/campaigns/{id}/recipients", never, RecipientsQuery, ApiList<CampaignRecipient>>;
|
|
35
|
+
readonly approve: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/campaigns/{id}/approve", never, never, Campaign>;
|
|
36
|
+
readonly decline: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/campaigns/{id}/decline", never, never, Campaign>;
|
|
37
|
+
readonly plan: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/plan", never, never, Plan>;
|
|
38
|
+
readonly audiences: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/audiences", never, never, ApiList<Audience>>;
|
|
39
|
+
readonly createAudience: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/audiences", AudienceInput, never, Audience>;
|
|
40
|
+
readonly updateAudience: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/audiences/{id}", AudienceInput, never, Audience>;
|
|
41
|
+
readonly deleteAudience: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/audiences/{id}", never, never, undefined>;
|
|
42
|
+
readonly contacts: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/audiences/{id}/contacts", never, ContactsQuery, ApiList<AudienceContact>>;
|
|
43
|
+
readonly importContacts: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/audiences/{id}/contacts", {
|
|
44
|
+
contacts: ContactInput[];
|
|
45
|
+
}, never, ImportResult>;
|
|
46
|
+
readonly updateContact: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/audiences/{id}/contacts/{contactId}", ContactUpdateInput, never, AudienceContact>;
|
|
47
|
+
readonly deleteContact: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/audiences/{id}/contacts/{contactId}", never, never, undefined>;
|
|
48
|
+
readonly domains: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/domains", never, never, ApiList<EmailDomain>>;
|
|
49
|
+
readonly createDomain: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/domains", {
|
|
50
|
+
domain: string;
|
|
51
|
+
}, never, EmailDomain>;
|
|
52
|
+
readonly checkDomain: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/domains/{id}/check", never, never, EmailDomain>;
|
|
53
|
+
readonly deleteDomain: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/domains/{id}", never, never, undefined>;
|
|
54
|
+
readonly addresses: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/addresses", never, never, ApiList<EmailAddress>>;
|
|
55
|
+
readonly createAddress: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/addresses", {
|
|
56
|
+
email: string;
|
|
57
|
+
}, never, EmailAddress>;
|
|
58
|
+
readonly setAddressDefaults: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/addresses/defaults", AddressDefaultsInput, never, ApiList<EmailAddress>>;
|
|
59
|
+
readonly resendAddress: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/addresses/{id}/resend", never, never, EmailAddress>;
|
|
60
|
+
readonly deleteAddress: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/addresses/{id}", never, never, undefined>;
|
|
61
|
+
readonly shortLinks: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/short-links", never, never, ApiList<ShortLink>>;
|
|
62
|
+
readonly createShortLink: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/short-links", ShortLinkInput, never, ShortLink>;
|
|
63
|
+
readonly updateShortLink: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/short-links/{id}", ShortLinkInput, never, ShortLink>;
|
|
64
|
+
readonly shortLinkClicks: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/short-links/{id}/clicks", never, never, ApiList<ShortLinkClicks>>;
|
|
65
|
+
readonly deleteShortLink: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/short-links/{id}", never, never, undefined>;
|
|
66
|
+
readonly segments: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/segments", never, never, ApiList<Segment>>;
|
|
67
|
+
readonly previewSegment: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/segments/preview", {
|
|
68
|
+
rules: SegmentRules;
|
|
69
|
+
}, never, SegmentPreview>;
|
|
70
|
+
readonly createSegment: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/segments", SegmentInput, never, Segment>;
|
|
71
|
+
readonly updateSegment: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/segments/{id}", SegmentInput, never, Segment>;
|
|
72
|
+
readonly deleteSegment: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/segments/{id}", never, never, undefined>;
|
|
73
|
+
readonly automations: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/automations", never, never, ApiList<Automation>>;
|
|
74
|
+
readonly automation: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/automations/{id}", never, never, Automation>;
|
|
75
|
+
readonly createAutomation: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/automations", AutomationInput, never, Automation>;
|
|
76
|
+
readonly updateAutomation: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/automations/{id}", AutomationInput, never, Automation>;
|
|
77
|
+
readonly setAutomationStatus: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/automations/{id}/status", {
|
|
78
|
+
status: "active" | "paused";
|
|
79
|
+
}, never, Automation>;
|
|
80
|
+
readonly deleteAutomation: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/automations/{id}", never, never, undefined>;
|
|
81
|
+
readonly abTests: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/ab-tests", never, never, ApiList<AbTest>>;
|
|
82
|
+
readonly abTest: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/ab-tests/{id}", never, never, AbTest>;
|
|
83
|
+
readonly apiCredentials: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/api_credentials", never, never, ApiList<ApiCredential>>;
|
|
84
|
+
readonly createApiCredential: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/api_credentials", {
|
|
85
|
+
name: string;
|
|
86
|
+
}, never, ApiCredential>;
|
|
87
|
+
readonly deleteApiCredential: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/api_credentials/{id}", never, never, undefined>;
|
|
88
|
+
readonly webhooks: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/webhooks", never, never, ApiList<Webhook>>;
|
|
89
|
+
readonly createWebhook: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/webhooks", WebhookInput, never, Webhook>;
|
|
90
|
+
readonly testWebhook: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/webhooks/{id}/test", never, never, WebhookTest>;
|
|
91
|
+
readonly deleteWebhook: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/webhooks/{id}", never, never, undefined>;
|
|
92
|
+
readonly ssoStatus: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/sso", never, never, SsoStatus>;
|
|
93
|
+
readonly connectSso: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/sso/{provider}/connect", never, never, SsoConnectAuthorization>;
|
|
94
|
+
readonly disconnectSso: import("../../core/endpoint.js").Endpoint<"/v1/campaigns/email/sso/{provider}", never, never, undefined>;
|
|
95
|
+
};
|
|
96
|
+
type Id = number | string;
|
|
97
|
+
/** `campaign(client).email.templates.list()` and so on, one group per backend resource. */
|
|
98
|
+
export declare function campaign(client: SmessClient): {
|
|
99
|
+
email: {
|
|
100
|
+
sender: {
|
|
101
|
+
get: (o?: CallOptions) => Promise<Sender>;
|
|
102
|
+
setDefault: (input: SetDefaultSenderInput, o?: CallOptions) => Promise<Sender>;
|
|
103
|
+
clearDefault: (o?: CallOptions) => Promise<Sender>;
|
|
104
|
+
};
|
|
105
|
+
targets: {
|
|
106
|
+
list: (o?: CallOptions) => Promise<ApiList<Target>>;
|
|
107
|
+
};
|
|
108
|
+
templates: {
|
|
109
|
+
list: (o?: CallOptions) => Promise<ApiList<Template>>;
|
|
110
|
+
create: (input: TemplateInput, o?: CallOptions) => Promise<Template>;
|
|
111
|
+
update: (id: Id, input: TemplateInput, o?: CallOptions) => Promise<Template>;
|
|
112
|
+
delete: (id: Id, o?: CallOptions) => Promise<undefined>;
|
|
113
|
+
preview: (input: TemplateCheckInput, o?: CallOptions) => Promise<TemplatePreview>;
|
|
114
|
+
checkHtml: (input: TemplateCheckInput, o?: CallOptions) => Promise<HtmlCheck>;
|
|
115
|
+
checkLinks: (input: TemplateCheckInput, o?: CallOptions) => Promise<LinkCheck>;
|
|
116
|
+
checkSpam: (input: TemplateCheckInput, o?: CallOptions) => Promise<SpamCheck>;
|
|
117
|
+
/** Mails the email to the signed-in user's own address (the server never takes a recipient). */
|
|
118
|
+
testSend: (input: TemplateCheckInput, o?: CallOptions) => Promise<Campaign>;
|
|
119
|
+
};
|
|
120
|
+
campaigns: {
|
|
121
|
+
/** The newest 50; `has_more` tells whether there are older ones. */
|
|
122
|
+
list: (o?: CallOptions) => Promise<ApiList<Campaign>>;
|
|
123
|
+
compose: (input: ComposeInput, o?: CallOptions) => Promise<Campaign>;
|
|
124
|
+
report: (id: Id, o?: CallOptions) => Promise<CampaignReport>;
|
|
125
|
+
/** Cursor-paginated, oldest first. */
|
|
126
|
+
recipients: (id: Id, query?: RecipientsQuery, o?: CallOptions) => Promise<ApiList<CampaignRecipient>>;
|
|
127
|
+
/** Owner only. */
|
|
128
|
+
approve: (id: Id, o?: CallOptions) => Promise<Campaign>;
|
|
129
|
+
/** Owner only. */
|
|
130
|
+
decline: (id: Id, o?: CallOptions) => Promise<Campaign>;
|
|
131
|
+
};
|
|
132
|
+
plan: {
|
|
133
|
+
get: (o?: CallOptions) => Promise<Plan>;
|
|
134
|
+
};
|
|
135
|
+
audiences: {
|
|
136
|
+
list: (o?: CallOptions) => Promise<ApiList<Audience>>;
|
|
137
|
+
create: (input: AudienceInput, o?: CallOptions) => Promise<Audience>;
|
|
138
|
+
update: (id: Id, input: AudienceInput, o?: CallOptions) => Promise<Audience>;
|
|
139
|
+
delete: (id: Id, o?: CallOptions) => Promise<undefined>;
|
|
140
|
+
contacts: {
|
|
141
|
+
/** Page-numbered (50 per page); `total_count` is the real total. */
|
|
142
|
+
list: (id: Id, query?: ContactsQuery, o?: CallOptions) => Promise<ApiList<AudienceContact>>;
|
|
143
|
+
/** Bulk upsert, 1–1000 contacts. */
|
|
144
|
+
import: (id: Id, contacts: ContactInput[], o?: CallOptions) => Promise<ImportResult>;
|
|
145
|
+
update: (id: Id, contactId: Id, input: ContactUpdateInput, o?: CallOptions) => Promise<AudienceContact>;
|
|
146
|
+
delete: (id: Id, contactId: Id, o?: CallOptions) => Promise<undefined>;
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
domains: {
|
|
150
|
+
list: (o?: CallOptions) => Promise<ApiList<EmailDomain>>;
|
|
151
|
+
create: (domain: string, o?: CallOptions) => Promise<EmailDomain>;
|
|
152
|
+
check: (id: Id, o?: CallOptions) => Promise<EmailDomain>;
|
|
153
|
+
delete: (id: Id, o?: CallOptions) => Promise<undefined>;
|
|
154
|
+
};
|
|
155
|
+
addresses: {
|
|
156
|
+
list: (o?: CallOptions) => Promise<ApiList<EmailAddress>>;
|
|
157
|
+
create: (emailAddress: string, o?: CallOptions) => Promise<EmailAddress>;
|
|
158
|
+
setDefaults: (input: AddressDefaultsInput, o?: CallOptions) => Promise<ApiList<EmailAddress>>;
|
|
159
|
+
/** 429 when a confirmation was sent in the last minute. */
|
|
160
|
+
resend: (id: Id, o?: CallOptions) => Promise<EmailAddress>;
|
|
161
|
+
delete: (id: Id, o?: CallOptions) => Promise<undefined>;
|
|
162
|
+
};
|
|
163
|
+
shortLinks: {
|
|
164
|
+
list: (o?: CallOptions) => Promise<ApiList<ShortLink>>;
|
|
165
|
+
create: (input: ShortLinkInput, o?: CallOptions) => Promise<ShortLink>;
|
|
166
|
+
update: (id: Id, input: ShortLinkInput, o?: CallOptions) => Promise<ShortLink>;
|
|
167
|
+
clicks: (id: Id, o?: CallOptions) => Promise<ApiList<ShortLinkClicks>>;
|
|
168
|
+
delete: (id: Id, o?: CallOptions) => Promise<undefined>;
|
|
169
|
+
};
|
|
170
|
+
segments: {
|
|
171
|
+
list: (o?: CallOptions) => Promise<ApiList<Segment>>;
|
|
172
|
+
preview: (rules: SegmentRules, o?: CallOptions) => Promise<SegmentPreview>;
|
|
173
|
+
create: (input: SegmentInput, o?: CallOptions) => Promise<Segment>;
|
|
174
|
+
update: (id: Id, input: SegmentInput, o?: CallOptions) => Promise<Segment>;
|
|
175
|
+
delete: (id: Id, o?: CallOptions) => Promise<undefined>;
|
|
176
|
+
};
|
|
177
|
+
automations: {
|
|
178
|
+
list: (o?: CallOptions) => Promise<ApiList<Automation>>;
|
|
179
|
+
get: (id: Id, o?: CallOptions) => Promise<Automation>;
|
|
180
|
+
create: (input: AutomationInput, o?: CallOptions) => Promise<Automation>;
|
|
181
|
+
update: (id: Id, input: AutomationInput, o?: CallOptions) => Promise<Automation>;
|
|
182
|
+
/** Activating needs the automation feature on the plan (422 otherwise). */
|
|
183
|
+
setStatus: (id: Id, status: "active" | "paused", o?: CallOptions) => Promise<Automation>;
|
|
184
|
+
delete: (id: Id, o?: CallOptions) => Promise<undefined>;
|
|
185
|
+
};
|
|
186
|
+
abTests: {
|
|
187
|
+
list: (o?: CallOptions) => Promise<ApiList<AbTest>>;
|
|
188
|
+
get: (id: Id, o?: CallOptions) => Promise<AbTest>;
|
|
189
|
+
};
|
|
190
|
+
apiCredentials: {
|
|
191
|
+
list: (o?: CallOptions) => Promise<ApiList<ApiCredential>>;
|
|
192
|
+
/** The response is the only time `api_key` is shown. Needs the API feature on the plan. */
|
|
193
|
+
create: (name: string, o?: CallOptions) => Promise<ApiCredential>;
|
|
194
|
+
delete: (id: string, o?: CallOptions) => Promise<undefined>;
|
|
195
|
+
};
|
|
196
|
+
webhooks: {
|
|
197
|
+
list: (o?: CallOptions) => Promise<ApiList<Webhook>>;
|
|
198
|
+
/** The response is the only time the full `secret` is shown. */
|
|
199
|
+
create: (input: WebhookInput, o?: CallOptions) => Promise<Webhook>;
|
|
200
|
+
test: (id: Id, o?: CallOptions) => Promise<WebhookTest>;
|
|
201
|
+
delete: (id: Id, o?: CallOptions) => Promise<undefined>;
|
|
202
|
+
};
|
|
203
|
+
sso: {
|
|
204
|
+
status: (o?: CallOptions) => Promise<SsoStatus>;
|
|
205
|
+
/** Owner only: the provider URL to link the company organisation. */
|
|
206
|
+
connect: (provider: string, o?: CallOptions) => Promise<SsoConnectAuthorization>;
|
|
207
|
+
disconnect: (provider: string, o?: CallOptions) => Promise<undefined>;
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
};
|
|
211
|
+
export type CampaignModule = ReturnType<typeof campaign>;
|
|
212
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/campaign/index.ts"],"names":[],"mappings":"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"}
|