@openstax/ts-utils 1.17.0 → 1.19.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.
@@ -21,8 +21,8 @@ declare type RouteClient<R> = {
21
21
  })) => Promise<string>;
22
22
  };
23
23
  interface AcceptStatus<Ro> {
24
- <S extends TResponseStatus<Ro>[]>(...args: S): ApiClientResponse<Extract<Ro, Record<'statusCode', S[number]>>>;
25
- <S extends number[]>(...args: S): ApiClientResponse<any>;
24
+ <S extends TResponseStatus<Ro>[]>(...args: S): Promise<ApiClientResponse<Extract<Ro, Record<'statusCode', S[number]>>>>;
25
+ <S extends number[]>(...args: S): Promise<ApiClientResponse<any>>;
26
26
  }
27
27
  declare type UnsafeApiClientResponse<Ro> = {
28
28
  headers: Headers;
@@ -73,9 +73,9 @@ const makeRouteClient = (initializer, config, route, authProvider) => {
73
73
  }
74
74
  return {
75
75
  status: response.status,
76
- acceptStatus: (...status) => {
76
+ acceptStatus: async (...status) => {
77
77
  if (!status.includes(response.status)) {
78
- throw new Error(`unexpected HTTP ${response.status} response from api`);
78
+ throw new Error(`unexpected HTTP ${response.status} response from api: ${await response.text()}`);
79
79
  }
80
80
  return { status: response.status, headers: response.headers, load: (0, exports.loadResponse)(response) };
81
81
  },
@@ -26,6 +26,7 @@ export interface Window {
26
26
  addEventListener: (event: 'message', callback: EventHandler) => void;
27
27
  removeEventListener: (event: 'message', callback: EventHandler) => void;
28
28
  }
29
+ export declare type UpdatableUserFields = Partial<Pick<User, 'consent_preferences' | 'first_name' | 'last_name'>>;
29
30
  export declare const browserAuthProvider: <C extends string = "auth">({ window, configSpace }: Initializer<C>) => (configProvider: { [key in C]: {
30
31
  accountsBase: import("../../config").ConfigValueProvider<string>;
31
32
  }; }) => {
@@ -62,5 +63,12 @@ export declare const browserAuthProvider: <C extends string = "auth">({ window,
62
63
  * loads current user identity. does not reflect changes in identity after being called the first time.
63
64
  */
64
65
  getUser: () => Promise<User | undefined>;
66
+ /**
67
+ * updates user settings, for example the cookie consent preferences
68
+ */
69
+ updateUser: (updates: UpdatableUserFields) => Promise<{
70
+ user: User;
71
+ token: string | null;
72
+ }>;
65
73
  };
66
74
  export {};
@@ -4,9 +4,9 @@ exports.browserAuthProvider = void 0;
4
4
  const __1 = require("../..");
5
5
  const config_1 = require("../../config");
6
6
  const guards_1 = require("../../guards");
7
- const helpers_1 = require("../../routing/helpers");
7
+ const routing_1 = require("../../routing");
8
8
  const embeddedAuthProvider_1 = require("./utils/embeddedAuthProvider");
9
- const isUserData = (0, helpers_1.unsafePayloadValidator)();
9
+ const isUserData = (0, routing_1.unsafePayloadValidator)();
10
10
  const browserAuthProvider = ({ window, configSpace }) => (configProvider) => {
11
11
  const config = configProvider[(0, guards_1.ifDefined)(configSpace, 'auth')];
12
12
  const accountsBase = (0, __1.once)(() => (0, config_1.resolveConfigValue)(config.accountsBase));
@@ -102,6 +102,17 @@ const browserAuthProvider = ({ window, configSpace }) => (configProvider) => {
102
102
  const getUser = async () => {
103
103
  return (await getUserData()).user;
104
104
  };
105
+ const updateUser = async (updates) => {
106
+ const response = await window.fetch((await accountsBase()).replace(/\/+$/, '') + '/api/user', { ...getAuthorizedFetchConfigFromData(userData), method: routing_1.METHOD.PUT, body: JSON.stringify(updates) });
107
+ if (response.status === 200) {
108
+ const user = await response.json();
109
+ if (isUserData(user)) {
110
+ return { ...userData, user };
111
+ }
112
+ }
113
+ const message = await response.text();
114
+ throw new Error(`Error response from Accounts ${response.status}: ${message}`);
115
+ };
105
116
  return {
106
117
  /**
107
118
  * gets the authentication token
@@ -134,6 +145,10 @@ const browserAuthProvider = ({ window, configSpace }) => (configProvider) => {
134
145
  * loads current user identity. does not reflect changes in identity after being called the first time.
135
146
  */
136
147
  getUser,
148
+ /**
149
+ * updates user settings, for example the cookie consent preferences
150
+ */
151
+ updateUser,
137
152
  };
138
153
  };
139
154
  exports.browserAuthProvider = browserAuthProvider;
@@ -30,7 +30,9 @@ export interface ApiUser extends TokenUser {
30
30
  }>;
31
31
  external_ids: string[];
32
32
  is_not_gdpr_location: boolean;
33
+ self_reported_role: string;
33
34
  signed_contract_names: string[];
35
+ using_openstax: boolean;
34
36
  }
35
37
  export declare type User = TokenUser | ApiUser;
36
38
  export declare type AuthProvider = {