@lokalise/harmony 1.15.1 → 1.17.0-exp-jwtheaderfactorysharedauth.1

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 (59) hide show
  1. package/README.md +31 -21
  2. package/dist/harmony.cjs +1 -1
  3. package/dist/harmony.css +1 -1
  4. package/dist/harmony.mjs +1470 -847
  5. package/dist/types/src/components/Sidebar/Sidebar.d.ts +3 -0
  6. package/dist/types/src/components/Sidebar/Widgets/Tasks/TaskLanguage/TaskLanguage.d.ts +6 -0
  7. package/dist/types/src/components/Sidebar/Widgets/Tasks/TaskLanguageCompleted/TaskLanguageCompleted.d.ts +7 -0
  8. package/dist/types/src/components/Sidebar/Widgets/Tasks/TaskOverview/TaskOverview.d.ts +5 -0
  9. package/dist/types/src/components/Sidebar/Widgets/Tasks/Tasks.d.ts +3 -0
  10. package/dist/types/src/components/Sidebar/Widgets/Tasks/TasksContext.d.ts +3 -0
  11. package/dist/types/src/components/Sidebar/Widgets/Tasks/TasksPopover/TasksPopover.d.ts +1 -0
  12. package/dist/types/src/components/Sidebar/Widgets/Tasks/TasksProvider.d.ts +10 -0
  13. package/dist/types/src/components/Sidebar/Widgets/Tasks/index.d.ts +2 -0
  14. package/dist/types/src/components/Sidebar/Widgets/Tasks/types.d.ts +86 -0
  15. package/dist/types/src/components/Sidebar/Widgets/Tasks/utils/content.d.ts +16 -0
  16. package/dist/types/src/components/Sidebar/Widgets/Tasks/utils/taskEvents.d.ts +24 -0
  17. package/dist/types/src/features/auth/core/headers/headerBuilder.d.ts +199 -0
  18. package/dist/types/src/features/auth/core/middleware/jwtAuthHeaderBuilderMiddleware.d.ts +10 -0
  19. package/dist/types/src/features/auth/core/middleware/publicApiHeaderBuilderMiddleware.d.ts +3 -0
  20. package/dist/types/src/features/auth/core/types/jwtTokenPayload.d.ts +2 -2
  21. package/dist/types/src/features/auth/core/types/jwtTokenPayload.fixture.d.ts +3 -3
  22. package/dist/types/src/features/auth/core/utils/makeAuthHeader.d.ts +2 -2
  23. package/dist/types/src/features/auth/errors/UnauthorizedError.d.ts +4 -0
  24. package/dist/types/src/features/auth/frontend/hooks/useAuthenticatedProjectContributor.d.ts +4 -1
  25. package/dist/types/src/features/auth/frontend/hooks/useAuthenticatedSessionPayload.d.ts +1 -1
  26. package/dist/types/src/features/auth/frontend/hooks/useAuthenticatedUser.d.ts +4 -1
  27. package/dist/types/src/features/auth/frontend/hooks/useGetPromotedClassicSessionJwtQuery.d.ts +4 -2
  28. package/dist/types/src/features/auth/frontend/services/generateTokenFromClassicSession.d.ts +5 -0
  29. package/dist/types/src/features/auth/frontend/services/refreshExpiredToken.d.ts +6 -0
  30. package/dist/types/src/features/auth/frontend/utils/cookieTokenUtils.d.ts +2 -2
  31. package/dist/types/src/features/auth/node.d.ts +6 -4
  32. package/dist/types/src/features/publicApi/contributors.d.ts +19 -1
  33. package/dist/types/src/features/publicApi/hooks/useCreateProjectMutation.d.ts +4 -2
  34. package/dist/types/src/features/publicApi/hooks/useGetTeamUsersQuery.d.ts +4 -2
  35. package/dist/types/src/features/publicApi/hooks/useGetUserTokenQuery.d.ts +6 -5
  36. package/dist/types/src/features/publicApi/hooks/useListProjectLanguagesQuery.d.ts +10 -1
  37. package/dist/types/src/features/publicApi/hooks/useListProjectsQuery.d.ts +4 -2
  38. package/dist/types/src/features/publicApi/hooks/useRetrieveContributorQuery.d.ts +4 -2
  39. package/dist/types/src/features/publicApi/hooks/useRetrieveProjectQuery.d.ts +4 -2
  40. package/dist/types/src/features/publicApi/hooks/useUpdateProjectMutation.d.ts +4 -2
  41. package/dist/types/src/features/publicApi/languages.d.ts +19 -1
  42. package/dist/types/src/features/publicApi/node.d.ts +1 -1
  43. package/dist/types/src/features/publicApi/projects.d.ts +76 -4
  44. package/dist/types/src/features/publicApi/teamUsers.d.ts +22 -4
  45. package/dist/types/src/features/publicApi/types/contributorTypes.d.ts +20 -0
  46. package/dist/types/src/features/publicApi/types/projectTypes.d.ts +20 -0
  47. package/dist/types/src/features/publicApi/types/sharedTypes.d.ts +57 -0
  48. package/dist/types/src/features/publicApi/types/teamUserTypes.d.ts +20 -0
  49. package/dist/types/src/features/publicApi/types/userTokenTypes.d.ts +2 -2
  50. package/dist/types/src/features/publicApi/userToken.d.ts +1 -1
  51. package/dist/types/src/node.d.ts +1 -0
  52. package/dist/types/tests/mocks/sidebar/tasks.d.ts +2 -0
  53. package/package.json +1 -1
  54. package/dist/types/src/features/auth/core/middleware/jwtAuthMiddleware.d.ts +0 -17
  55. package/dist/types/src/features/auth/core/middleware/publicApiHeadersMiddleware.d.ts +0 -5
  56. package/dist/types/src/features/auth/frontend/middleware/clientSideJwtAuthMiddleware.d.ts +0 -9
  57. package/dist/types/src/features/auth/frontend/middleware/promoteClassicSessionToJwtMiddleware.d.ts +0 -14
  58. /package/dist/types/src/{features/auth/core/middleware/jwtAuthMiddleware.test.d.ts → components/Sidebar/Widgets/Tasks/Tasks.test.d.ts} +0 -0
  59. /package/dist/types/src/features/auth/{frontend/middleware/promoteClassicSessionToJwtMiddleware.test.d.ts → core/headers/headerBuilder.test.d.ts} +0 -0
@@ -46,5 +46,8 @@ declare const Sidebar: {
46
46
  onClick?: () => void;
47
47
  hideBottomDivider?: boolean;
48
48
  }) => import("react/jsx-runtime").JSX.Element | null;
49
+ Tasks: (props: {
50
+ config: import('./Widgets/Tasks/types').SidebarTasksConfig;
51
+ }) => import("react/jsx-runtime").JSX.Element;
49
52
  };
50
53
  export { Sidebar };
@@ -0,0 +1,6 @@
1
+ import { SidebarTask, SidebarTaskLanguage } from '../types';
2
+ export type TaskLanguageProps = {
3
+ task: SidebarTask;
4
+ language: SidebarTaskLanguage;
5
+ };
6
+ export declare const TaskLanguage: ({ language, task }: TaskLanguageProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { SidebarTask, SidebarTaskLanguage } from '../types';
2
+ type TaskLanguageCompletedProps = {
3
+ task: SidebarTask;
4
+ language: SidebarTaskLanguage;
5
+ };
6
+ export declare const TaskLanguageCompleted: ({ task, language }: TaskLanguageCompletedProps) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,5 @@
1
+ import { SidebarTask } from '../types';
2
+ export type TaskProps = {
3
+ task: SidebarTask;
4
+ };
5
+ export declare const TaskOverview: ({ task }: TaskProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,3 @@
1
+ export declare const Tasks: (props: {
2
+ config: import('./types').SidebarTasksConfig;
3
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import { SidebarTasksContextProps } from './types';
2
+ export declare const TasksContext: import('react').Context<SidebarTasksContextProps>;
3
+ export declare const useTasks: () => SidebarTasksContextProps;
@@ -0,0 +1 @@
1
+ export declare const TasksPopover: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ import { SidebarTasksConfig } from './types';
3
+ type TasksProviderProps = PropsWithChildren<{
4
+ config: SidebarTasksConfig;
5
+ }>;
6
+ export declare const TasksProvider: ({ children, config }: TasksProviderProps) => import("react/jsx-runtime").JSX.Element;
7
+ export declare const withTasksContext: <P extends {
8
+ config: SidebarTasksConfig;
9
+ }>(WrappedComponent: FC<Omit<P, "config">>) => (props: P) => import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,2 @@
1
+ export { Tasks } from './Tasks';
2
+ export { dispatchTaskEvent, TaskEvents } from './utils/taskEvents';
@@ -0,0 +1,86 @@
1
+ import { TypesFromMap } from '../../../../utils/typeUtils';
2
+ export declare const SidebarTaskStatuses: {
3
+ readonly Completed: "completed";
4
+ readonly InProgress: "in_progress";
5
+ readonly Created: "created";
6
+ readonly Queued: "queued";
7
+ };
8
+ export type SidebarTaskStatus = TypesFromMap<typeof SidebarTaskStatuses>;
9
+ export declare const SidebarTaskLanguageStatuses: {
10
+ readonly NotStarted: "not_started";
11
+ readonly Completed: "completed";
12
+ readonly InProgress: "in_progress";
13
+ readonly Created: "created";
14
+ readonly Queued: "queued";
15
+ };
16
+ export type SidebarTaskLanguageStatus = TypesFromMap<typeof SidebarTaskLanguageStatuses>;
17
+ export declare const SidebarTaskTypeOptions: {
18
+ readonly translation: "translation";
19
+ readonly review: "review";
20
+ readonly lqa_by_ai: "lqa_by_ai";
21
+ readonly automatic_translation: "automatic_translation";
22
+ };
23
+ export type SidebarTaskTypeOption = TypesFromMap<typeof SidebarTaskTypeOptions>;
24
+ export type SidebarTaskStyleGuide = {
25
+ id: string;
26
+ name: string;
27
+ };
28
+ export type SidebarTaskLanguage = {
29
+ lang_id: string;
30
+ name: string;
31
+ progress?: number;
32
+ status: SidebarTaskLanguageStatus;
33
+ base_words_total: number;
34
+ base_words_done: number;
35
+ };
36
+ export type SidebarTask = {
37
+ id: string;
38
+ title: string;
39
+ status: SidebarTaskStatus;
40
+ langs: SidebarTaskLanguage[];
41
+ team_id: number;
42
+ created_by_fullname: string;
43
+ source_lang_name: string;
44
+ task_type: SidebarTaskTypeOption;
45
+ style_guides: SidebarTaskStyleGuide[];
46
+ description?: string;
47
+ project_name: string;
48
+ master_branching_enabled: '0' | '1';
49
+ branch_name: string | null;
50
+ due_date: string | null;
51
+ };
52
+ export type SidebarDefaultFnArgs = {
53
+ task: SidebarTask;
54
+ language: SidebarTaskLanguage;
55
+ };
56
+ export type SidebarDefaultFn = (props: SidebarDefaultFnArgs) => void;
57
+ export type SidebarTasksGetProjectUrlFnArgs = {
58
+ task: SidebarTask;
59
+ language?: SidebarTaskLanguage;
60
+ view?: 'single' | 'multi';
61
+ taskUncompleted?: boolean;
62
+ };
63
+ export type SidebarTasksGetProjectUrlFn = (props: SidebarTasksGetProjectUrlFnArgs) => string;
64
+ export type SidebarTaskTitleOnClickFn = (props: Pick<SidebarDefaultFnArgs, 'task'>) => void;
65
+ export type SidebarOnLanguageCompleteConfirmFnArgs = SidebarDefaultFnArgs & {
66
+ closePrompt: () => void;
67
+ };
68
+ export type SidebarOnLanguageCompleteConfirmFn = (props: SidebarOnLanguageCompleteConfirmFnArgs) => Promise<void>;
69
+ export type SidebarTasksConfig = {
70
+ getTasksCount: () => Promise<number>;
71
+ getTasks: () => Promise<SidebarTask[]>;
72
+ getProjectUrl: SidebarTasksGetProjectUrlFn;
73
+ onLanguageCompleteConfirm: SidebarOnLanguageCompleteConfirmFn;
74
+ onTasksWidgetOpen?: ({ tasks }: {
75
+ tasks: SidebarTask[];
76
+ }) => void;
77
+ taskTitleOnClick?: SidebarTaskTitleOnClickFn;
78
+ langNameOnClick?: SidebarDefaultFn;
79
+ langProgressOnClick?: SidebarDefaultFn;
80
+ };
81
+ export type SidebarTasksContextProps = Pick<SidebarTasksConfig, 'onTasksWidgetOpen' | 'getProjectUrl' | 'taskTitleOnClick' | 'langNameOnClick' | 'langProgressOnClick' | 'onLanguageCompleteConfirm'> & {
82
+ fetchTasks: () => Promise<void>;
83
+ tasks: SidebarTask[];
84
+ tasksCount: number;
85
+ loadingTasks: boolean;
86
+ };
@@ -0,0 +1,16 @@
1
+ import { SidebarTask, SidebarTaskLanguage, SidebarTaskLanguageStatus, SidebarTaskTypeOption } from '../types';
2
+ export declare const getStatusText: (status: SidebarTaskLanguageStatus, progressValue: number) => "Closed" | "Completed" | "In progress" | "Not started" | "Queued" | "-";
3
+ export declare const resolveStatus: (language: SidebarTaskLanguage) => SidebarTaskLanguageStatus;
4
+ /**
5
+ * TODO - these should be taken from louis
6
+ */
7
+ export declare const tagColor: Record<SidebarTaskTypeOption, string>;
8
+ export declare const getTaskLanguages: (langs: SidebarTaskLanguage[]) => {
9
+ status: SidebarTaskLanguageStatus;
10
+ lang_id: string;
11
+ name: string;
12
+ progress?: number;
13
+ base_words_total: number;
14
+ base_words_done: number;
15
+ }[];
16
+ export declare const isLanguageProgressCompleted: (task: SidebarTask, language: SidebarTaskLanguage) => boolean;
@@ -0,0 +1,24 @@
1
+ import { TypesFromMap } from '../../../../../utils/node.ts';
2
+ export declare const TaskEvents: {
3
+ readonly TaskCompleted: "task_completed";
4
+ readonly TaskClosed: "task_closed";
5
+ readonly Refresh: "refresh";
6
+ readonly ShowDialog: "show_dialog";
7
+ };
8
+ export type TaskEvent = TypesFromMap<typeof TaskEvents>;
9
+ type SingleTaskPayload = {
10
+ taskId: string | number;
11
+ };
12
+ type DispatchTaskEventPayload = {
13
+ name: typeof TaskEvents.TaskCompleted;
14
+ detail: SingleTaskPayload;
15
+ } | {
16
+ name: typeof TaskEvents.TaskClosed;
17
+ detail: SingleTaskPayload;
18
+ } | {
19
+ name: typeof TaskEvents.Refresh;
20
+ } | {
21
+ name: typeof TaskEvents.ShowDialog;
22
+ };
23
+ export declare const dispatchTaskEvent: (props: DispatchTaskEventPayload) => void;
24
+ export {};
@@ -0,0 +1,199 @@
1
+ export type Headers<K extends string = string, V = any> = Record<K, V>;
2
+ /**
3
+ * A builder class that helps to build up a set of headers in a type-safe way.
4
+ * It allows you to add headers, merge them together, and resolve them into a single object.
5
+ * The builder is immutable, so every operation returns a new instance of the builder.
6
+ * It offers a middleware function that allows you to modify the builder, asynchronously, in a type-safe way.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const authMiddleware = createHeaderBuilderMiddleware(async (builder) => {
11
+ * const token = await fetchToken()
12
+ * return builder.add('Authorization', `Bearer ${token}`)
13
+ * })
14
+ *
15
+ * const builder = HeaderBuilder.create()
16
+ * .add('Content-Type', 'application/json')
17
+ * .and({ 'X-Custom-Header': 'custom', 'X-Another-Header': 'another' })
18
+ * .with(authMiddleware)
19
+ *
20
+ * const headers = await builder.resolve()
21
+ * console.log(headers)
22
+ * // Prints: {
23
+ * // 'Content-Type': 'application/json',
24
+ * // 'X-Custom-Header': 'custom',
25
+ * // 'X-Another-Header': 'another',
26
+ * // 'Authorization': 'Bearer <token>'
27
+ * // }
28
+ */
29
+ export declare class HeaderBuilder<H extends Headers = {}> {
30
+ private readonly factories;
31
+ /**
32
+ * Creates a new HeaderBuilder, optionally with an initial set of headers.
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * const builder = HeaderBuilder.create()
37
+ *
38
+ * const builderWithHeaders = HeaderBuilder.create({ 'Content-Type': 'application/json' })
39
+ *
40
+ * console.log(builder) // {}
41
+ * console.log(builderWithHeaders) // { 'Content-Type': 'application/json' }
42
+ * ```
43
+ */
44
+ static create<const H extends Headers = {}>(): HeaderBuilder<H>;
45
+ static create<const H extends Headers>(initialHeaders: H): HeaderBuilder<H>;
46
+ /**
47
+ * This constructor is private to prevent the creation of a HeaderBuilder, it's an implementation detail
48
+ * that users of this class should not be aware of. The only way to create a HeaderBuilder is through the
49
+ * static create method.
50
+ *
51
+ * @private
52
+ */
53
+ private constructor();
54
+ /**
55
+ * Adds a single header to the builder by providing a key and a value.
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const builder = HeaderBuilder.create()
60
+ * .add('Content-Type', 'application/json')
61
+ * .add('Authorization', 'Bearer token')
62
+ *
63
+ * const headers = await builder.resolve()
64
+ * console.log(headers)
65
+ * // { 'Content-Type': 'application/json', 'Authorization': 'Bearer token' }
66
+ * ```
67
+ *
68
+ * @param key - The key of the header
69
+ * @param value - The value of the header
70
+ */
71
+ add<const K extends string, const V>(key: K, value: V): HeaderBuilder<H & {
72
+ [k in K]: V;
73
+ }>;
74
+ /**
75
+ * Adds multiple headers to the builder by providing an object or a promise of an object with the headers.
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const builder = HeaderBuilder.create()
80
+ * .and({ 'Content-Type': 'application/json', 'Authorization': 'Bearer token' })
81
+ * .and(Promise.resolve({ 'X-Custom-Header': 'custom', 'X-Another-Header': 'another' }))
82
+ *
83
+ * const headers = await builder.resolve()
84
+ * console.log(headers)
85
+ * // Prints: {
86
+ * // 'Content-Type': 'application/json',
87
+ * // 'Authorization': 'Bearer token',
88
+ * // 'X-Custom-Header': 'custom',
89
+ * // 'X-Another-Header': 'another'
90
+ * // }
91
+ * ```
92
+ *
93
+ * @param extension - An object with the headers to add
94
+ */
95
+ and<const K extends string, const V, E extends Headers<K, V>>(extension: E | Promise<E>): HeaderBuilder<H & E>;
96
+ /**
97
+ * Adds a factory function that returns a promise of headers to the builder.
98
+ * This is useful when you need to fetch some data asynchronously to build the headers.
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * const builder = HeaderBuilder.create()
103
+ * .from(async () => {
104
+ * const token = await fetchToken()
105
+ * return { 'Authorization': `Bearer ${token}` }
106
+ * })
107
+ *
108
+ * const headers = await builder.resolve()
109
+ * console.log(headers) // { 'Authorization': 'Bearer <token>' }
110
+ * ```
111
+ *
112
+ * @param factory - A function that returns a promise of headers
113
+ */
114
+ from<E extends Headers>(factory: () => E | Promise<E>): HeaderBuilder<H & E>;
115
+ /**
116
+ * Takes a middleware function that receives the current builder and returns a new, modified, builder.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const authMiddleware = createHeaderBuilderMiddleware(async (builder) => {
121
+ * const token = await fetchToken()
122
+ * return builder.add('Authorization', `Bearer ${token}`)
123
+ * })
124
+ *
125
+ * const builder = HeaderBuilder.create()
126
+ * .with(authMiddleware)
127
+ *
128
+ * const headers = await builder.resolve() // Type of headers is { 'Authorization': string }
129
+ * console.log(headers) // { 'Authorization': 'Bearer <token>' }
130
+ * ```
131
+ *
132
+ * @param middleware
133
+ */
134
+ with<const T extends Headers>(middleware: HeaderBuilderMiddleware<T>): HeaderBuilder<H & T>;
135
+ /**
136
+ * Merges the current builder with another builder.
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const builderA = HeaderBuilder.create()
141
+ * .add('Content-Type', 'application/json')
142
+ *
143
+ * const builderB = HeaderBuilder.create()
144
+ * .add('Authorization', 'Bearer token')
145
+ *
146
+ * const mergedBuilder = builderA.merge(builderB)
147
+ *
148
+ * const headers = await mergedBuilder.resolve()
149
+ * console.log(headers)
150
+ * // { 'Content-Type': 'application/json', 'Authorization': 'Bearer token' }
151
+ * ```
152
+ *
153
+ * @param builder - The builder to merge with
154
+ */
155
+ merge<const T extends Headers>(builder: HeaderBuilder<T>): HeaderBuilder<H & T>;
156
+ /**
157
+ * Resolves the headers by waiting for all the promises to resolve and merging them together.
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * const builder = HeaderBuilder.create()
162
+ * .add('Content-Type', 'application/json')
163
+ *
164
+ * const headers = await builder.resolve()
165
+ * console.log(headers) // { 'Content-Type': 'application/json' }
166
+ */
167
+ resolve(): Promise<H>;
168
+ }
169
+ /**
170
+ * A middleware class that allows you to modify a HeaderBuilder in a type-safe way.
171
+ * It receives a builder and returns a new builder with the modifications applied.
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * const authMiddleware = createHeaderBuilderMiddleware(async (builder) => {
176
+ * const token = await fetchToken()
177
+ * return builder.add('Authorization', `Bearer ${token}`)
178
+ * })
179
+ *
180
+ * const builder = HeaderBuilder.create()
181
+ * .with(authMiddleware)
182
+ *
183
+ * const headers = await builder.resolve() // Type of headers is { 'Authorization': string }
184
+ * console.log(headers) // { 'Authorization': 'Bearer <token>' }
185
+ */
186
+ declare class HeaderBuilderMiddleware<const H extends Headers> {
187
+ private readonly middleware;
188
+ constructor(middleware: (builder: HeaderBuilder<Headers>) => HeaderBuilder<H> | Promise<HeaderBuilder<H>>);
189
+ apply<const BH extends Headers>(base: HeaderBuilder<BH>): HeaderBuilder<BH & H>;
190
+ }
191
+ /**
192
+ * A helper function that creates a HeaderBuilderMiddleware, it removed the
193
+ * complexity of creating a new instance of the middleware class and tracking the input types.
194
+ *
195
+ * @param middleware - A function that modifies a HeaderBuilder
196
+ * @returns - A new instance of HeaderBuilderMiddleware to be used with a HeaderBuilder
197
+ */
198
+ export declare function createHeaderBuilderMiddleware<const H extends Headers>(middleware: (builder: HeaderBuilder) => HeaderBuilder<H> | Promise<HeaderBuilder<H>>): HeaderBuilderMiddleware<H>;
199
+ export type { HeaderBuilderMiddleware };
@@ -0,0 +1,10 @@
1
+ import { JwtToken } from '../../../publicApi/types/userTokenTypes';
2
+ export type JwtAuthHeaderBuilderMiddlewareProps = {
3
+ refreshToken: (current: JwtToken) => Promise<JwtToken | null>;
4
+ getCurrentToken: () => JwtToken | null;
5
+ generateNewToken?: () => Promise<JwtToken | null>;
6
+ onNewTokenIssued?: (token: JwtToken) => void;
7
+ };
8
+ export declare function JwtAuthHeaderBuilderMiddleware(props: JwtAuthHeaderBuilderMiddlewareProps): import('../headers/headerBuilder').HeaderBuilderMiddleware<{
9
+ Authorization: `Bearer ${string}`;
10
+ }>;
@@ -0,0 +1,3 @@
1
+ export declare const PublicApiHeaderBuilderMiddleware: import('../headers/headerBuilder').HeaderBuilderMiddleware<{
2
+ 'x-lokalise-plugin': string;
3
+ }>;
@@ -18,9 +18,9 @@ export declare const JWT_TOKEN_PAYLOAD_SCHEMA: z.ZodObject<{
18
18
  planId: number;
19
19
  userTeamRole: "member" | "admin" | "biller" | "owner";
20
20
  userEmail: string;
21
- teamId: number;
22
21
  userId: number;
23
22
  userUuid: string;
23
+ teamId: number;
24
24
  userName: string;
25
25
  userCurrentTeamId: number;
26
26
  planName: string;
@@ -31,9 +31,9 @@ export declare const JWT_TOKEN_PAYLOAD_SCHEMA: z.ZodObject<{
31
31
  planId: number;
32
32
  userTeamRole: "member" | "admin" | "biller" | "owner";
33
33
  userEmail: string;
34
- teamId: number;
35
34
  userId: number;
36
35
  userUuid: string;
36
+ teamId: number;
37
37
  userName: string;
38
38
  userCurrentTeamId: number;
39
39
  planName: string;
@@ -4,22 +4,22 @@ export declare const createMockJwtTokenPayload: (overrides?: {
4
4
  planId?: number | undefined;
5
5
  userTeamRole?: "member" | "admin" | "biller" | "owner" | undefined;
6
6
  userEmail?: string | undefined;
7
- teamId?: number | undefined;
8
7
  userId?: number | undefined;
9
8
  userUuid?: string | undefined;
9
+ teamId?: number | undefined;
10
10
  userName?: string | undefined;
11
11
  userCurrentTeamId?: number | undefined;
12
12
  planName?: string | undefined;
13
13
  exp?: number | undefined;
14
- } | undefined, removeProperties?: ("isProviderAlpha" | "isFullyAuthenticated" | "planId" | "userTeamRole" | "userEmail" | "teamId" | "userId" | "userUuid" | "userName" | "userCurrentTeamId" | "planName" | "exp")[]) => {
14
+ } | undefined, removeProperties?: ("isProviderAlpha" | "isFullyAuthenticated" | "planId" | "userTeamRole" | "userEmail" | "userId" | "userUuid" | "teamId" | "userName" | "userCurrentTeamId" | "planName" | "exp")[]) => {
15
15
  isProviderAlpha: boolean;
16
16
  isFullyAuthenticated: boolean;
17
17
  planId: number;
18
18
  userTeamRole: "member" | "admin" | "biller" | "owner";
19
19
  userEmail: string;
20
- teamId: number;
21
20
  userId: number;
22
21
  userUuid: string;
22
+ teamId: number;
23
23
  userName: string;
24
24
  userCurrentTeamId: number;
25
25
  planName: string;
@@ -1,2 +1,2 @@
1
- import { AuthenticatedRequestHeader } from '../../../publicApi/types/userTokenTypes';
2
- export declare function makeAuthHeader(token: string): AuthenticatedRequestHeader;
1
+ import { UserTokenRequestHeader } from '../../../publicApi/types/userTokenTypes';
2
+ export declare function makeAuthHeader(token: string): UserTokenRequestHeader;
@@ -0,0 +1,4 @@
1
+ export declare class UnauthorizedError extends Error {
2
+ readonly name = "UnauthorizedError";
3
+ readonly status = 401;
4
+ }
@@ -1,3 +1,5 @@
1
+ import { HeaderBuilder } from '../../core/headers/headerBuilder';
2
+ import { ContributorApiBaseHeader } from '../../../publicApi/types/contributorTypes';
1
3
  import { Wretch } from 'wretch';
2
4
  /**
3
5
  * Uses the payload attached to the JWT to request the contributor information
@@ -5,9 +7,10 @@ import { Wretch } from 'wretch';
5
7
  * This required an active JWT token to be present in the cookie.
6
8
  *
7
9
  * @param wretchClient - Wretch instance configured to a public API instance.
10
+ * @param headers - The headers to attach to the request.
8
11
  * @param projectId - The ID of the project to retrieve the contributor information.
9
12
  */
10
- export declare function useAuthenticatedProjectContributor<T>(wretchClient: Wretch<T>, projectId: string): import('@tanstack/react-query').UseQueryResult<{
13
+ export declare function useAuthenticatedProjectContributor<T>(wretchClient: Wretch<T>, headers: HeaderBuilder<ContributorApiBaseHeader>, projectId: string): import('@tanstack/react-query').UseQueryResult<{
11
14
  contributors: {
12
15
  email: string;
13
16
  user_id: number;
@@ -8,9 +8,9 @@ export declare function useAuthenticatedSessionPayload(): {
8
8
  planId: number;
9
9
  userTeamRole: "member" | "admin" | "biller" | "owner";
10
10
  userEmail: string;
11
- teamId: number;
12
11
  userId: number;
13
12
  userUuid: string;
13
+ teamId: number;
14
14
  userName: string;
15
15
  userCurrentTeamId: number;
16
16
  planName: string;
@@ -1,11 +1,14 @@
1
+ import { HeaderBuilder } from '../../core/headers/headerBuilder';
2
+ import { TeamUserApiBaseHeaders } from '../../../publicApi/types/teamUserTypes';
1
3
  import { Wretch } from 'wretch';
2
4
  /**
3
5
  * Uses the payload attached to the JWT to request the team-user information for the authenticated user.
4
6
  * This required an active JWT token to be present in the cookie.
5
7
  *
6
8
  * @param wretchClient - Wretch instance configured to a public API instance.
9
+ * @param headers - Headers to be attached to the request.
7
10
  */
8
- export declare function useAuthenticatedUser<T>(wretchClient: Wretch<T>): import('@tanstack/react-query').UseQueryResult<{
11
+ export declare function useAuthenticatedUser<T>(wretchClient: Wretch<T>, headers: HeaderBuilder<TeamUserApiBaseHeaders>): import('@tanstack/react-query').UseQueryResult<{
9
12
  team_id: number;
10
13
  team_user: {
11
14
  role: "member" | "admin" | "biller" | "owner";
@@ -1,12 +1,14 @@
1
+ import { HeaderBuilder } from '../../core/headers/headerBuilder';
1
2
  import { Wretch } from 'wretch';
2
3
  /**
3
4
  * For use in environments that are authenticated with a classic CSRF PHP session (e.g. Expert).
4
5
  * This hook will send that token to the public API, upgrade to a JWT session.
5
6
  *
6
7
  * @param wretchClient - Wretch instance configured to a public API instance.
8
+ * @param headers - The headers to send with the request.
7
9
  * @param teamId - The team ID to get the JWT for.
8
10
  */
9
- export declare function useGetPromotedClassicSessionJwtQuery<T>(wretchClient: Wretch<T>, teamId: number): import('@tanstack/react-query').UseQueryResult<{
11
+ export declare function useGetPromotedClassicSessionJwtQuery<T>(wretchClient: Wretch<T>, headers: HeaderBuilder, teamId: number): import('@tanstack/react-query').UseQueryResult<{
10
12
  accessToken: string;
11
13
  refreshToken: string;
12
- }, undefined>;
14
+ } | null, undefined>;
@@ -0,0 +1,5 @@
1
+ import { Wretch } from 'wretch';
2
+ export declare function generateTokenFromClassicSession<T>(authenticationProvider: Wretch<T>, getCsrfToken: () => string | null, getTeamId: () => Promise<string>): () => Promise<{
3
+ accessToken: string;
4
+ refreshToken: string;
5
+ } | null>;
@@ -0,0 +1,6 @@
1
+ import { JwtToken } from '../../../publicApi/types/userTokenTypes';
2
+ import { Wretch } from 'wretch';
3
+ export declare function refreshExpiredToken<T>(authenticationProvider: Wretch<T>, getTeamId: () => Promise<string>): ({ refreshToken }: JwtToken) => Promise<{
4
+ accessToken: string;
5
+ refreshToken: string;
6
+ } | null>;
@@ -1,4 +1,4 @@
1
1
  import { JwtToken } from '../../../publicApi/types/userTokenTypes';
2
- export declare function getJwtTokenFromCookie(): JwtToken | undefined;
3
- export declare function getCsrfTokenFromCookie(): string | undefined;
2
+ export declare function getJwtTokenFromCookie(): JwtToken | null;
3
+ export declare function getCsrfTokenFromCookie(): string | null;
4
4
  export declare function getCookie(cookies: string, name: string): string | undefined;
@@ -1,10 +1,12 @@
1
- export { jwtAuthMiddleware } from './core/middleware/jwtAuthMiddleware';
2
- export { publicApiHeadersMiddleware } from './core/middleware/publicApiHeadersMiddleware';
3
- export { clientSideJwtAuthMiddleware } from './frontend/middleware/clientSideJwtAuthMiddleware';
4
- export { promoteClassicSessionToJwtMiddleware } from './frontend/middleware/promoteClassicSessionToJwtMiddleware';
1
+ export { JwtAuthHeaderBuilderMiddleware, type JwtAuthHeaderBuilderMiddlewareProps, } from './core/middleware/jwtAuthHeaderBuilderMiddleware';
2
+ export { PublicApiHeaderBuilderMiddleware } from './core/middleware/publicApiHeaderBuilderMiddleware';
5
3
  export type { JwtTokenPayload } from './core/types/jwtTokenPayload';
6
4
  export { parseJwtTokenPayload } from './core/utils/jwtTokenPayload';
5
+ export { getJwtTokenFromCookie, getCsrfTokenFromCookie } from './frontend/utils/cookieTokenUtils';
6
+ export { HeaderBuilder, createHeaderBuilderMiddleware, type HeaderBuilderMiddleware, type Headers, } from './core/headers/headerBuilder';
7
7
  export * from './backend/services/getAuthenticatedSessionDetailFromRequest';
8
+ export * from './frontend/services/generateTokenFromClassicSession';
9
+ export * from './frontend/services/refreshExpiredToken';
8
10
  export * from './frontend/hooks/useGetPromotedClassicSessionJwtQuery';
9
11
  export * from './frontend/hooks/useAuthenticatedSessionPayload';
10
12
  export * from './frontend/hooks/useAuthenticatedUser';
@@ -108,4 +108,22 @@ export declare const retrieveContributor: import('@lokalise/universal-ts-utils/n
108
108
  }, {
109
109
  projectId: string;
110
110
  contributorId: number;
111
- }>, undefined, undefined, false, false>;
111
+ }>, undefined, z.ZodIntersection<z.ZodUnion<[z.ZodObject<{
112
+ Authorization: z.ZodString;
113
+ }, "strip", z.ZodTypeAny, {
114
+ Authorization: string;
115
+ }, {
116
+ Authorization: string;
117
+ }>, z.ZodObject<{
118
+ 'X-API-Token': z.ZodString;
119
+ }, "strip", z.ZodTypeAny, {
120
+ 'X-API-Token': string;
121
+ }, {
122
+ 'X-API-Token': string;
123
+ }>]>, z.ZodObject<{
124
+ 'X-Lokalise-Plugin': z.ZodString;
125
+ }, "strip", z.ZodTypeAny, {
126
+ 'X-Lokalise-Plugin': string;
127
+ }, {
128
+ 'X-Lokalise-Plugin': string;
129
+ }>>, false, false>;
@@ -1,13 +1,15 @@
1
+ import { HeaderBuilder } from '../../auth/core/headers/headerBuilder';
1
2
  import { ApiMutationOverrides } from '../../../utils/types/apiMutationOverrides';
2
3
  import { Wretch } from 'wretch';
3
- import { CreateProjectRequestBody, Project } from '../types/projectTypes';
4
+ import { CreateProjectRequestBody, Project, ProjectApiBaseHeaders } from '../types/projectTypes';
4
5
  /**
5
6
  * A react-router wrapper about the createProject public API endpoint
6
7
  *
7
8
  * @param wretchClient - Wretch instance configured to a public API instance.
9
+ * @param headers - A header builder instance to resolve the headers for the request.
8
10
  * @param overrides - Additional options to pass to the query.
9
11
  */
10
- export declare function useCreateProjectMutation<T>(wretchClient: Wretch<T>, overrides?: ApiMutationOverrides<Project, CreateProjectRequestBody>): import('@tanstack/react-query').UseMutationResult<{
12
+ export declare function useCreateProjectMutation<T>(wretchClient: Wretch<T>, headers: HeaderBuilder<ProjectApiBaseHeaders>, overrides?: ApiMutationOverrides<Project, CreateProjectRequestBody>): import('@tanstack/react-query').UseMutationResult<{
11
13
  name: string;
12
14
  created_at: string;
13
15
  created_at_timestamp: number;
@@ -1,4 +1,5 @@
1
- import { TeamUserResponse } from '../types/teamUserTypes';
1
+ import { HeaderBuilder } from '../../auth/core/headers/headerBuilder';
2
+ import { TeamUserApiBaseHeaders, TeamUserResponse } from '../types/teamUserTypes';
2
3
  import { ApiQueryOverrides } from '../../../utils/types/apiQueryOverrides';
3
4
  import { Wretch } from 'wretch/types';
4
5
  /**
@@ -11,9 +12,10 @@ export declare const getTeamUsersQueryKey: {
11
12
  * A react-router wrapper about the getTeamUser public API endpoint
12
13
  *
13
14
  * @param wretchClient - Wretch instance configured to a public API instance.
15
+ * @param headers - Instance of the header builder for the public API.
14
16
  * @param overrides - Additional options to pass to the query.
15
17
  */
16
- export declare const useGetTeamUsersQuery: <T>(wretchClient: Wretch<T>, overrides: ApiQueryOverrides<TeamUserResponse, typeof getTeamUsersQueryKey>) => import('@tanstack/react-query').UseQueryResult<{
18
+ export declare const useGetTeamUsersQuery: <T>(wretchClient: Wretch<T>, headers: HeaderBuilder<TeamUserApiBaseHeaders>, overrides: ApiQueryOverrides<TeamUserResponse, typeof getTeamUsersQueryKey>) => import('@tanstack/react-query').UseQueryResult<{
17
19
  team_id: number;
18
20
  team_user: {
19
21
  role: "member" | "admin" | "biller" | "owner";