@forteplatforms/sdk 1.0.160 → 1.0.164
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/README.md +29 -8
- package/dist/generated/apis/ProjectsServerApi.d.ts +6 -0
- package/dist/generated/apis/ProjectsServerApi.js +16 -0
- package/dist/generated/models/SearchUsersRequest.d.ts +1 -20
- package/dist/generated/models/SearchUsersRequest.js +4 -9
- package/dist/generated/models/UserActionLogObject.d.ts +1 -0
- package/dist/generated/models/UserActionLogObject.js +1 -0
- package/dist/generated/models/index.d.ts +0 -1
- package/dist/generated/models/index.js +0 -1
- package/dist/index.js +10 -4
- package/package.json +1 -1
- package/dist/generated/models/UserFilter.d.ts +0 -50
- package/dist/generated/models/UserFilter.js +0 -55
package/README.md
CHANGED
|
@@ -10,27 +10,48 @@ npm install @forteplatforms/sdk
|
|
|
10
10
|
|
|
11
11
|
## Authentication
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
The SDK supports three auth modes depending on where it runs.
|
|
14
|
+
|
|
15
|
+
### Inside a Forte-hosted service (no config)
|
|
16
|
+
|
|
17
|
+
`FORTE_API_TOKEN` is set automatically and scoped to the service's project:
|
|
14
18
|
|
|
15
19
|
```typescript
|
|
16
20
|
const client = new ForteClient();
|
|
17
21
|
```
|
|
18
22
|
|
|
19
|
-
|
|
23
|
+
### Client-side (browser / mobile)
|
|
24
|
+
|
|
25
|
+
For calls to `client.users.*`, construct with no arguments. The browser sends the `Forte-User-Session-Token` cookie automatically after the user logs in. The SDK sets `credentials: 'include'` so the cookie reaches the API cross-origin.
|
|
20
26
|
|
|
21
27
|
```typescript
|
|
22
|
-
const client = new ForteClient(
|
|
28
|
+
const client = new ForteClient();
|
|
29
|
+
await client.users.renewSessionToken({ projectId });
|
|
23
30
|
```
|
|
24
31
|
|
|
25
|
-
|
|
32
|
+
Do **not** pass `apiToken` from browser code — it's a server-side secret.
|
|
26
33
|
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
### Server-side BFF calling `client.users.*` (no token, per-call authorization)
|
|
35
|
+
|
|
36
|
+
In a BFF that proxies user-scoped calls, omit the token and forward each user's session token as the `authorization` parameter on each call:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
const client = new ForteClient();
|
|
40
|
+
await client.users.renewSessionToken({
|
|
41
|
+
projectId,
|
|
42
|
+
authorization: `Bearer ${userSessionToken}`,
|
|
43
|
+
});
|
|
29
44
|
```
|
|
30
45
|
|
|
31
|
-
|
|
46
|
+
### External server-side calling `client.projects.*` (explicit token)
|
|
32
47
|
|
|
33
|
-
|
|
48
|
+
```typescript
|
|
49
|
+
const client = new ForteClient({ apiToken: 'your_api_token_here' });
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Or set `FORTE_API_TOKEN` in the environment (Node.js only) and call `new ForteClient()`.
|
|
53
|
+
|
|
54
|
+
You can generate an API token from the Forte Platforms dashboard.
|
|
34
55
|
|
|
35
56
|
## Quick Start
|
|
36
57
|
|
|
@@ -272,6 +272,11 @@ export interface ListUserPaymentsRequest {
|
|
|
272
272
|
}
|
|
273
273
|
export interface ListUsersRequest {
|
|
274
274
|
projectId: string;
|
|
275
|
+
email?: string;
|
|
276
|
+
phone?: string;
|
|
277
|
+
fullName?: string;
|
|
278
|
+
metadataKey?: string;
|
|
279
|
+
metadataValue?: string;
|
|
275
280
|
minTime?: Date;
|
|
276
281
|
maxTime?: Date;
|
|
277
282
|
nextToken?: string;
|
|
@@ -1125,6 +1130,7 @@ export declare const ListUserActionLogsActionTypeType: {
|
|
|
1125
1130
|
readonly USER_HARD_DELETED: "USER_HARD_DELETED";
|
|
1126
1131
|
readonly CONTACT_METHOD_ADDED: "CONTACT_METHOD_ADDED";
|
|
1127
1132
|
readonly CONTACT_METHOD_REMOVED: "CONTACT_METHOD_REMOVED";
|
|
1133
|
+
readonly CONTACT_METHOD_DISPLACED: "CONTACT_METHOD_DISPLACED";
|
|
1128
1134
|
readonly CONTACT_METHOD_VERIFICATION_CODE_SENT: "CONTACT_METHOD_VERIFICATION_CODE_SENT";
|
|
1129
1135
|
readonly CONTACT_METHOD_VERIFICATION_CODE_RE_SENT: "CONTACT_METHOD_VERIFICATION_CODE_RE_SENT";
|
|
1130
1136
|
readonly CONTACT_METHOD_VERIFIED: "CONTACT_METHOD_VERIFIED";
|
|
@@ -2818,6 +2818,21 @@ var ProjectsServerApi = /** @class */ (function (_super) {
|
|
|
2818
2818
|
throw new runtime.RequiredError('projectId', 'Required parameter "projectId" was null or undefined when calling listUsers().');
|
|
2819
2819
|
}
|
|
2820
2820
|
queryParameters = {};
|
|
2821
|
+
if (requestParameters['email'] != null) {
|
|
2822
|
+
queryParameters['email'] = requestParameters['email'];
|
|
2823
|
+
}
|
|
2824
|
+
if (requestParameters['phone'] != null) {
|
|
2825
|
+
queryParameters['phone'] = requestParameters['phone'];
|
|
2826
|
+
}
|
|
2827
|
+
if (requestParameters['fullName'] != null) {
|
|
2828
|
+
queryParameters['fullName'] = requestParameters['fullName'];
|
|
2829
|
+
}
|
|
2830
|
+
if (requestParameters['metadataKey'] != null) {
|
|
2831
|
+
queryParameters['metadataKey'] = requestParameters['metadataKey'];
|
|
2832
|
+
}
|
|
2833
|
+
if (requestParameters['metadataValue'] != null) {
|
|
2834
|
+
queryParameters['metadataValue'] = requestParameters['metadataValue'];
|
|
2835
|
+
}
|
|
2821
2836
|
if (requestParameters['minTime'] != null) {
|
|
2822
2837
|
queryParameters['minTime'] = requestParameters['minTime'].toISOString();
|
|
2823
2838
|
}
|
|
@@ -4569,6 +4584,7 @@ exports.ListUserActionLogsActionTypeType = {
|
|
|
4569
4584
|
USER_HARD_DELETED: 'USER_HARD_DELETED',
|
|
4570
4585
|
CONTACT_METHOD_ADDED: 'CONTACT_METHOD_ADDED',
|
|
4571
4586
|
CONTACT_METHOD_REMOVED: 'CONTACT_METHOD_REMOVED',
|
|
4587
|
+
CONTACT_METHOD_DISPLACED: 'CONTACT_METHOD_DISPLACED',
|
|
4572
4588
|
CONTACT_METHOD_VERIFICATION_CODE_SENT: 'CONTACT_METHOD_VERIFICATION_CODE_SENT',
|
|
4573
4589
|
CONTACT_METHOD_VERIFICATION_CODE_RE_SENT: 'CONTACT_METHOD_VERIFICATION_CODE_RE_SENT',
|
|
4574
4590
|
CONTACT_METHOD_VERIFIED: 'CONTACT_METHOD_VERIFIED',
|
|
@@ -9,37 +9,18 @@
|
|
|
9
9
|
* https://openapi-generator.tech
|
|
10
10
|
* Do not edit the class manually.
|
|
11
11
|
*/
|
|
12
|
-
import type { UserFilter } from './UserFilter';
|
|
13
12
|
/**
|
|
14
13
|
*
|
|
15
14
|
* @export
|
|
16
15
|
* @interface SearchUsersRequest
|
|
17
16
|
*/
|
|
18
17
|
export interface SearchUsersRequest {
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
21
|
-
* @type {Array<UserFilter>}
|
|
22
|
-
* @memberof SearchUsersRequest
|
|
23
|
-
*/
|
|
24
|
-
filters?: Array<UserFilter>;
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
* @type {Date}
|
|
28
|
-
* @memberof SearchUsersRequest
|
|
29
|
-
*/
|
|
30
|
-
minTime?: Date;
|
|
31
|
-
/**
|
|
32
|
-
*
|
|
33
|
-
* @type {Date}
|
|
34
|
-
* @memberof SearchUsersRequest
|
|
35
|
-
*/
|
|
36
|
-
maxTime?: Date;
|
|
37
18
|
/**
|
|
38
19
|
*
|
|
39
20
|
* @type {string}
|
|
40
21
|
* @memberof SearchUsersRequest
|
|
41
22
|
*/
|
|
42
|
-
|
|
23
|
+
q: string;
|
|
43
24
|
}
|
|
44
25
|
/**
|
|
45
26
|
* Check if a given object implements the SearchUsersRequest interface.
|
|
@@ -18,11 +18,12 @@ exports.SearchUsersRequestFromJSON = SearchUsersRequestFromJSON;
|
|
|
18
18
|
exports.SearchUsersRequestFromJSONTyped = SearchUsersRequestFromJSONTyped;
|
|
19
19
|
exports.SearchUsersRequestToJSON = SearchUsersRequestToJSON;
|
|
20
20
|
exports.SearchUsersRequestToJSONTyped = SearchUsersRequestToJSONTyped;
|
|
21
|
-
var UserFilter_1 = require("./UserFilter");
|
|
22
21
|
/**
|
|
23
22
|
* Check if a given object implements the SearchUsersRequest interface.
|
|
24
23
|
*/
|
|
25
24
|
function instanceOfSearchUsersRequest(value) {
|
|
25
|
+
if (!('q' in value) || value['q'] === undefined)
|
|
26
|
+
return false;
|
|
26
27
|
return true;
|
|
27
28
|
}
|
|
28
29
|
function SearchUsersRequestFromJSON(json) {
|
|
@@ -33,10 +34,7 @@ function SearchUsersRequestFromJSONTyped(json, ignoreDiscriminator) {
|
|
|
33
34
|
return json;
|
|
34
35
|
}
|
|
35
36
|
return {
|
|
36
|
-
'
|
|
37
|
-
'minTime': json['minTime'] == null ? undefined : (new Date(json['minTime'])),
|
|
38
|
-
'maxTime': json['maxTime'] == null ? undefined : (new Date(json['maxTime'])),
|
|
39
|
-
'nextToken': json['nextToken'] == null ? undefined : json['nextToken'],
|
|
37
|
+
'q': json['q'],
|
|
40
38
|
};
|
|
41
39
|
}
|
|
42
40
|
function SearchUsersRequestToJSON(json) {
|
|
@@ -48,9 +46,6 @@ function SearchUsersRequestToJSONTyped(value, ignoreDiscriminator) {
|
|
|
48
46
|
return value;
|
|
49
47
|
}
|
|
50
48
|
return {
|
|
51
|
-
'
|
|
52
|
-
'minTime': value['minTime'] == null ? value['minTime'] : value['minTime'].toISOString(),
|
|
53
|
-
'maxTime': value['maxTime'] == null ? value['maxTime'] : value['maxTime'].toISOString(),
|
|
54
|
-
'nextToken': value['nextToken'],
|
|
49
|
+
'q': value['q'],
|
|
55
50
|
};
|
|
56
51
|
}
|
|
@@ -64,6 +64,7 @@ export declare const UserActionLogObjectActionTypeType: {
|
|
|
64
64
|
readonly USER_HARD_DELETED: "USER_HARD_DELETED";
|
|
65
65
|
readonly CONTACT_METHOD_ADDED: "CONTACT_METHOD_ADDED";
|
|
66
66
|
readonly CONTACT_METHOD_REMOVED: "CONTACT_METHOD_REMOVED";
|
|
67
|
+
readonly CONTACT_METHOD_DISPLACED: "CONTACT_METHOD_DISPLACED";
|
|
67
68
|
readonly CONTACT_METHOD_VERIFICATION_CODE_SENT: "CONTACT_METHOD_VERIFICATION_CODE_SENT";
|
|
68
69
|
readonly CONTACT_METHOD_VERIFICATION_CODE_RE_SENT: "CONTACT_METHOD_VERIFICATION_CODE_RE_SENT";
|
|
69
70
|
readonly CONTACT_METHOD_VERIFIED: "CONTACT_METHOD_VERIFIED";
|
|
@@ -29,6 +29,7 @@ exports.UserActionLogObjectActionTypeType = {
|
|
|
29
29
|
USER_HARD_DELETED: 'USER_HARD_DELETED',
|
|
30
30
|
CONTACT_METHOD_ADDED: 'CONTACT_METHOD_ADDED',
|
|
31
31
|
CONTACT_METHOD_REMOVED: 'CONTACT_METHOD_REMOVED',
|
|
32
|
+
CONTACT_METHOD_DISPLACED: 'CONTACT_METHOD_DISPLACED',
|
|
32
33
|
CONTACT_METHOD_VERIFICATION_CODE_SENT: 'CONTACT_METHOD_VERIFICATION_CODE_SENT',
|
|
33
34
|
CONTACT_METHOD_VERIFICATION_CODE_RE_SENT: 'CONTACT_METHOD_VERIFICATION_CODE_RE_SENT',
|
|
34
35
|
CONTACT_METHOD_VERIFIED: 'CONTACT_METHOD_VERIFIED',
|
|
@@ -89,7 +89,6 @@ export * from './UpdateProjectRequest';
|
|
|
89
89
|
export * from './UpdateWebAppRequest';
|
|
90
90
|
export * from './UpdateWebAppResponse';
|
|
91
91
|
export * from './UserActionLogObject';
|
|
92
|
-
export * from './UserFilter';
|
|
93
92
|
export * from './UserMetricsResponse';
|
|
94
93
|
export * from './UserObject';
|
|
95
94
|
export * from './WebAppBuildRequestObject';
|
|
@@ -107,7 +107,6 @@ __exportStar(require("./UpdateProjectRequest"), exports);
|
|
|
107
107
|
__exportStar(require("./UpdateWebAppRequest"), exports);
|
|
108
108
|
__exportStar(require("./UpdateWebAppResponse"), exports);
|
|
109
109
|
__exportStar(require("./UserActionLogObject"), exports);
|
|
110
|
-
__exportStar(require("./UserFilter"), exports);
|
|
111
110
|
__exportStar(require("./UserMetricsResponse"), exports);
|
|
112
111
|
__exportStar(require("./UserObject"), exports);
|
|
113
112
|
__exportStar(require("./WebAppBuildRequestObject"), exports);
|
package/dist/index.js
CHANGED
|
@@ -23,14 +23,20 @@ var ForteClient = /** @class */ (function () {
|
|
|
23
23
|
function ForteClient(options) {
|
|
24
24
|
if (options === void 0) { options = {}; }
|
|
25
25
|
var _a, _b, _c;
|
|
26
|
-
// Falls back to FORTE_API_TOKEN env var in Node.js; safe in browsers where process is undefined
|
|
26
|
+
// Falls back to FORTE_API_TOKEN env var in Node.js; safe in browsers where process is undefined.
|
|
27
|
+
// No token is OK: in browsers the Forte-User-Session-Token cookie authenticates users.*;
|
|
28
|
+
// in BFFs the caller passes `authorization` per-call to users.*.
|
|
27
29
|
var token = (_a = options.apiToken) !== null && _a !== void 0 ? _a : (typeof process !== 'undefined' ? (_b = process.env) === null || _b === void 0 ? void 0 : _b.FORTE_API_TOKEN : undefined);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
var headers = {};
|
|
31
|
+
if (token) {
|
|
32
|
+
headers.Authorization = "Bearer ".concat(token);
|
|
30
33
|
}
|
|
31
34
|
var config = new runtime_1.Configuration({
|
|
32
35
|
basePath: (_c = options.baseUrl) !== null && _c !== void 0 ? _c : 'https://api.forteplatforms.com',
|
|
33
|
-
headers:
|
|
36
|
+
headers: headers,
|
|
37
|
+
// Always include credentials so browsers send the Forte-User-Session-Token cookie
|
|
38
|
+
// cross-origin. No-op for Node.js fetch.
|
|
39
|
+
credentials: 'include',
|
|
34
40
|
});
|
|
35
41
|
this.projects = new ProjectsServerApi_1.ProjectsServerApi(config);
|
|
36
42
|
this.users = new UsersServerApi_1.UsersServerApi(config);
|
package/package.json
CHANGED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenAPI definition
|
|
3
|
-
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
4
|
-
*
|
|
5
|
-
* The version of the OpenAPI document: v0
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
9
|
-
* https://openapi-generator.tech
|
|
10
|
-
* Do not edit the class manually.
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
* @export
|
|
15
|
-
* @interface UserFilter
|
|
16
|
-
*/
|
|
17
|
-
export interface UserFilter {
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
20
|
-
* @type {string}
|
|
21
|
-
* @memberof UserFilter
|
|
22
|
-
*/
|
|
23
|
-
email?: string;
|
|
24
|
-
/**
|
|
25
|
-
*
|
|
26
|
-
* @type {string}
|
|
27
|
-
* @memberof UserFilter
|
|
28
|
-
*/
|
|
29
|
-
phone?: string;
|
|
30
|
-
/**
|
|
31
|
-
*
|
|
32
|
-
* @type {string}
|
|
33
|
-
* @memberof UserFilter
|
|
34
|
-
*/
|
|
35
|
-
metadataKey?: string;
|
|
36
|
-
/**
|
|
37
|
-
*
|
|
38
|
-
* @type {string}
|
|
39
|
-
* @memberof UserFilter
|
|
40
|
-
*/
|
|
41
|
-
metadataValue?: string;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Check if a given object implements the UserFilter interface.
|
|
45
|
-
*/
|
|
46
|
-
export declare function instanceOfUserFilter(value: object): value is UserFilter;
|
|
47
|
-
export declare function UserFilterFromJSON(json: any): UserFilter;
|
|
48
|
-
export declare function UserFilterFromJSONTyped(json: any, ignoreDiscriminator: boolean): UserFilter;
|
|
49
|
-
export declare function UserFilterToJSON(json: any): UserFilter;
|
|
50
|
-
export declare function UserFilterToJSONTyped(value?: UserFilter | null, ignoreDiscriminator?: boolean): any;
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* tslint:disable */
|
|
3
|
-
/* eslint-disable */
|
|
4
|
-
/**
|
|
5
|
-
* OpenAPI definition
|
|
6
|
-
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
7
|
-
*
|
|
8
|
-
* The version of the OpenAPI document: v0
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
12
|
-
* https://openapi-generator.tech
|
|
13
|
-
* Do not edit the class manually.
|
|
14
|
-
*/
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.instanceOfUserFilter = instanceOfUserFilter;
|
|
17
|
-
exports.UserFilterFromJSON = UserFilterFromJSON;
|
|
18
|
-
exports.UserFilterFromJSONTyped = UserFilterFromJSONTyped;
|
|
19
|
-
exports.UserFilterToJSON = UserFilterToJSON;
|
|
20
|
-
exports.UserFilterToJSONTyped = UserFilterToJSONTyped;
|
|
21
|
-
/**
|
|
22
|
-
* Check if a given object implements the UserFilter interface.
|
|
23
|
-
*/
|
|
24
|
-
function instanceOfUserFilter(value) {
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
function UserFilterFromJSON(json) {
|
|
28
|
-
return UserFilterFromJSONTyped(json, false);
|
|
29
|
-
}
|
|
30
|
-
function UserFilterFromJSONTyped(json, ignoreDiscriminator) {
|
|
31
|
-
if (json == null) {
|
|
32
|
-
return json;
|
|
33
|
-
}
|
|
34
|
-
return {
|
|
35
|
-
'email': json['email'] == null ? undefined : json['email'],
|
|
36
|
-
'phone': json['phone'] == null ? undefined : json['phone'],
|
|
37
|
-
'metadataKey': json['metadataKey'] == null ? undefined : json['metadataKey'],
|
|
38
|
-
'metadataValue': json['metadataValue'] == null ? undefined : json['metadataValue'],
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
function UserFilterToJSON(json) {
|
|
42
|
-
return UserFilterToJSONTyped(json, false);
|
|
43
|
-
}
|
|
44
|
-
function UserFilterToJSONTyped(value, ignoreDiscriminator) {
|
|
45
|
-
if (ignoreDiscriminator === void 0) { ignoreDiscriminator = false; }
|
|
46
|
-
if (value == null) {
|
|
47
|
-
return value;
|
|
48
|
-
}
|
|
49
|
-
return {
|
|
50
|
-
'email': value['email'],
|
|
51
|
-
'phone': value['phone'],
|
|
52
|
-
'metadataKey': value['metadataKey'],
|
|
53
|
-
'metadataValue': value['metadataValue'],
|
|
54
|
-
};
|
|
55
|
-
}
|