@camunda8/sdk 8.4.0 → 8.5.0-alpha.4
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/.eslintrc.json +31 -0
- package/CHANGELOG.md +32 -21
- package/CODE_OF_CONDUCT.md +73 -0
- package/CONTRIBUTING.md +116 -0
- package/LICENSE +3 -3
- package/README.md +228 -34
- package/dist/admin/index.d.ts +2 -0
- package/dist/admin/index.js +30 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/lib/AdminApiClient.d.ts +121 -0
- package/dist/admin/lib/AdminApiClient.js +254 -0
- package/dist/admin/lib/AdminApiClient.js.map +1 -0
- package/dist/admin/lib/AdminDto.d.ts +98 -0
- package/dist/admin/lib/AdminDto.js +3 -0
- package/dist/admin/lib/AdminDto.js.map +1 -0
- package/dist/c8/index.d.ts +42 -0
- package/dist/c8/index.js +92 -0
- package/dist/c8/index.js.map +1 -0
- package/dist/index.d.ts +15 -14
- package/dist/index.js +14 -16
- package/dist/index.js.map +1 -1
- package/dist/lib/CertificateAuthority.d.ts +2 -0
- package/dist/lib/CertificateAuthority.js +15 -0
- package/dist/lib/CertificateAuthority.js.map +1 -0
- package/dist/lib/ClientConstructor.d.ts +6 -0
- package/dist/lib/ClientConstructor.js +3 -0
- package/dist/lib/ClientConstructor.js.map +1 -0
- package/dist/lib/Configuration.d.ts +113 -0
- package/dist/lib/Configuration.js +367 -0
- package/dist/lib/Configuration.js.map +1 -0
- package/dist/lib/ConstructOAuthProvider.d.ts +3 -0
- package/dist/lib/ConstructOAuthProvider.js +14 -0
- package/dist/lib/ConstructOAuthProvider.js.map +1 -0
- package/dist/lib/CreateUserAgentString.d.ts +2 -0
- package/dist/lib/CreateUserAgentString.js +11 -0
- package/dist/lib/CreateUserAgentString.js.map +1 -0
- package/dist/lib/Delay.d.ts +1 -0
- package/dist/lib/Delay.js +6 -0
- package/dist/lib/Delay.js.map +1 -0
- package/dist/lib/EnvironmentSetup.d.ts +11 -0
- package/dist/lib/EnvironmentSetup.js +35 -0
- package/dist/lib/EnvironmentSetup.js.map +1 -0
- package/dist/lib/GetPackageVersion.d.ts +1 -0
- package/dist/lib/GetPackageVersion.js +32 -0
- package/dist/lib/GetPackageVersion.js.map +1 -0
- package/dist/lib/LosslessJsonParser.d.ts +103 -0
- package/dist/lib/LosslessJsonParser.js +252 -0
- package/dist/lib/LosslessJsonParser.js.map +1 -0
- package/dist/lib/RequireConfiguration.d.ts +2 -0
- package/dist/lib/RequireConfiguration.js +11 -0
- package/dist/lib/RequireConfiguration.js.map +1 -0
- package/dist/lib/SuppressZeebeLogging.d.ts +2 -0
- package/dist/lib/SuppressZeebeLogging.js +14 -0
- package/dist/lib/SuppressZeebeLogging.js.map +1 -0
- package/dist/lib/ValueOrDefault.d.ts +1 -0
- package/dist/lib/ValueOrDefault.js +8 -0
- package/dist/lib/ValueOrDefault.js.map +1 -0
- package/dist/lib/index.d.ts +12 -0
- package/dist/lib/index.js +32 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/modeler/index.d.ts +2 -0
- package/dist/modeler/index.js +30 -0
- package/dist/modeler/index.js.map +1 -0
- package/dist/modeler/lib/ModelerAPIClient.d.ts +210 -0
- package/dist/modeler/lib/ModelerAPIClient.js +417 -0
- package/dist/modeler/lib/ModelerAPIClient.js.map +1 -0
- package/dist/modeler/lib/ModelerDto.d.ts +187 -0
- package/dist/modeler/lib/ModelerDto.js +3 -0
- package/dist/modeler/lib/ModelerDto.js.map +1 -0
- package/dist/oauth/index.d.ts +15 -0
- package/dist/oauth/index.js +8 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/oauth/lib/IOAuthProvider.d.ts +4 -0
- package/dist/oauth/lib/IOAuthProvider.js +3 -0
- package/dist/oauth/lib/IOAuthProvider.js.map +1 -0
- package/dist/oauth/lib/NullAuthProvider.d.ts +5 -0
- package/dist/oauth/lib/NullAuthProvider.js +16 -0
- package/dist/oauth/lib/NullAuthProvider.js.map +1 -0
- package/dist/oauth/lib/OAuthProvider.d.ts +44 -0
- package/dist/oauth/lib/OAuthProvider.js +316 -0
- package/dist/oauth/lib/OAuthProvider.js.map +1 -0
- package/dist/operate/index.d.ts +2 -0
- package/dist/operate/index.js +30 -0
- package/dist/operate/index.js.map +1 -0
- package/dist/operate/lib/OperateApiClient.d.ts +204 -0
- package/dist/operate/lib/OperateApiClient.js +440 -0
- package/dist/operate/lib/OperateApiClient.js.map +1 -0
- package/dist/operate/lib/OperateDto.d.ts +126 -0
- package/dist/operate/lib/OperateDto.js +125 -0
- package/dist/operate/lib/OperateDto.js.map +1 -0
- package/dist/operate/lib/TestableOperateApiClient.d.ts +7 -0
- package/dist/operate/lib/TestableOperateApiClient.js +15 -0
- package/dist/operate/lib/TestableOperateApiClient.js.map +1 -0
- package/dist/operate/lib/parseSearchResults.d.ts +4 -0
- package/dist/operate/lib/parseSearchResults.js +26 -0
- package/dist/operate/lib/parseSearchResults.js.map +1 -0
- package/dist/optimize/index.d.ts +2 -0
- package/dist/optimize/index.js +30 -0
- package/dist/optimize/index.js.map +1 -0
- package/dist/optimize/lib/APIObjects.d.ts +191 -0
- package/dist/optimize/lib/APIObjects.js +3 -0
- package/dist/optimize/lib/APIObjects.js.map +1 -0
- package/dist/optimize/lib/OptimizeApiClient.d.ts +269 -0
- package/dist/optimize/lib/OptimizeApiClient.js +410 -0
- package/dist/optimize/lib/OptimizeApiClient.js.map +1 -0
- package/dist/optimize/lib/ReportResults.d.ts +23 -0
- package/dist/optimize/lib/ReportResults.js +28 -0
- package/dist/optimize/lib/ReportResults.js.map +1 -0
- package/dist/proto/zeebe.proto +996 -0
- package/dist/tasklist/index.d.ts +2 -0
- package/dist/tasklist/index.js +30 -0
- package/dist/tasklist/index.js.map +1 -0
- package/dist/tasklist/lib/TasklistApiClient.d.ts +104 -0
- package/dist/tasklist/lib/TasklistApiClient.js +233 -0
- package/dist/tasklist/lib/TasklistApiClient.js.map +1 -0
- package/dist/tasklist/lib/TasklistDto.d.ts +147 -0
- package/dist/tasklist/lib/TasklistDto.js +26 -0
- package/dist/tasklist/lib/TasklistDto.js.map +1 -0
- package/dist/tasklist/lib/utils.d.ts +15 -0
- package/dist/tasklist/lib/utils.js +25 -0
- package/dist/tasklist/lib/utils.js.map +1 -0
- package/dist/zeebe/index.d.ts +21 -0
- package/dist/zeebe/index.js +53 -0
- package/dist/zeebe/index.js.map +1 -0
- package/dist/zeebe/lib/BpmnParser.d.ts +38 -0
- package/dist/zeebe/lib/BpmnParser.js +274 -0
- package/dist/zeebe/lib/BpmnParser.js.map +1 -0
- package/dist/zeebe/lib/ConnectionFactory.d.ts +25 -0
- package/dist/zeebe/lib/ConnectionFactory.js +43 -0
- package/dist/zeebe/lib/ConnectionFactory.js.map +1 -0
- package/dist/zeebe/lib/ConnectionStatusEvent.d.ts +6 -0
- package/dist/zeebe/lib/ConnectionStatusEvent.js +10 -0
- package/dist/zeebe/lib/ConnectionStatusEvent.js.map +1 -0
- package/dist/zeebe/lib/GetPackageVersion.d.ts +1 -0
- package/dist/zeebe/lib/GetPackageVersion.js +32 -0
- package/dist/zeebe/lib/GetPackageVersion.js.map +1 -0
- package/dist/zeebe/lib/GrpcClient.d.ts +75 -0
- package/dist/zeebe/lib/GrpcClient.js +467 -0
- package/dist/zeebe/lib/GrpcClient.js.map +1 -0
- package/dist/zeebe/lib/GrpcError.d.ts +19 -0
- package/dist/zeebe/lib/GrpcError.js +23 -0
- package/dist/zeebe/lib/GrpcError.js.map +1 -0
- package/dist/zeebe/lib/GrpcMiddleware.d.ts +21 -0
- package/dist/zeebe/lib/GrpcMiddleware.js +78 -0
- package/dist/zeebe/lib/GrpcMiddleware.js.map +1 -0
- package/dist/zeebe/lib/MockStdOut.d.ts +7 -0
- package/dist/zeebe/lib/MockStdOut.js +19 -0
- package/dist/zeebe/lib/MockStdOut.js.map +1 -0
- package/dist/zeebe/lib/Queue.d.ts +8 -0
- package/dist/zeebe/lib/Queue.js +15 -0
- package/dist/zeebe/lib/Queue.js.map +1 -0
- package/dist/zeebe/lib/SimpleLogger.d.ts +8 -0
- package/dist/zeebe/lib/SimpleLogger.js +47 -0
- package/dist/zeebe/lib/SimpleLogger.js.map +1 -0
- package/dist/zeebe/lib/StatefulLogInterceptor.d.ts +29 -0
- package/dist/zeebe/lib/StatefulLogInterceptor.js +81 -0
- package/dist/zeebe/lib/StatefulLogInterceptor.js.map +1 -0
- package/dist/zeebe/lib/TypedEmitter.d.ts +16 -0
- package/dist/zeebe/lib/TypedEmitter.js +24 -0
- package/dist/zeebe/lib/TypedEmitter.js.map +1 -0
- package/dist/zeebe/lib/ZBJsonLogger.d.ts +5 -0
- package/dist/zeebe/lib/ZBJsonLogger.js +12 -0
- package/dist/zeebe/lib/ZBJsonLogger.js.map +1 -0
- package/dist/zeebe/lib/ZBLogger.d.ts +20 -0
- package/dist/zeebe/lib/ZBLogger.js +134 -0
- package/dist/zeebe/lib/ZBLogger.js.map +1 -0
- package/dist/zeebe/lib/ZBWorkerBase.d.ts +78 -0
- package/dist/zeebe/lib/ZBWorkerBase.js +417 -0
- package/dist/zeebe/lib/ZBWorkerBase.js.map +1 -0
- package/dist/zeebe/lib/cancelProcesses.d.ts +1 -0
- package/dist/zeebe/lib/cancelProcesses.js +40 -0
- package/dist/zeebe/lib/cancelProcesses.js.map +1 -0
- package/dist/zeebe/lib/createUniqueTaskType.d.ts +0 -0
- package/dist/zeebe/lib/createUniqueTaskType.js +65 -0
- package/dist/zeebe/lib/createUniqueTaskType.js.map +1 -0
- package/dist/zeebe/lib/index.d.ts +2 -0
- package/dist/zeebe/lib/index.js +19 -0
- package/dist/zeebe/lib/index.js.map +1 -0
- package/dist/zeebe/lib/interfaces-1.0.d.ts +303 -0
- package/dist/zeebe/lib/interfaces-1.0.js +5 -0
- package/dist/zeebe/lib/interfaces-1.0.js.map +1 -0
- package/dist/zeebe/lib/interfaces-grpc-1.0.d.ts +679 -0
- package/dist/zeebe/lib/interfaces-grpc-1.0.js +22 -0
- package/dist/zeebe/lib/interfaces-grpc-1.0.js.map +1 -0
- package/dist/zeebe/lib/interfaces-published-contract.d.ts +67 -0
- package/dist/zeebe/lib/interfaces-published-contract.js +3 -0
- package/dist/zeebe/lib/interfaces-published-contract.js.map +1 -0
- package/dist/zeebe/lib/stringifyVariables.d.ts +18 -0
- package/dist/zeebe/lib/stringifyVariables.js +28 -0
- package/dist/zeebe/lib/stringifyVariables.js.map +1 -0
- package/dist/zeebe/lib/utils.d.ts +7 -0
- package/dist/zeebe/lib/utils.js +48 -0
- package/dist/zeebe/lib/utils.js.map +1 -0
- package/dist/zeebe/types.d.ts +3 -0
- package/dist/zeebe/types.js +20 -0
- package/dist/zeebe/types.js.map +1 -0
- package/dist/zeebe/zb/ZBWorker.d.ts +7 -0
- package/dist/zeebe/zb/ZBWorker.js +73 -0
- package/dist/zeebe/zb/ZBWorker.js.map +1 -0
- package/dist/zeebe/zb/ZeebeGrpcClient.d.ts +587 -0
- package/dist/zeebe/zb/ZeebeGrpcClient.js +1021 -0
- package/dist/zeebe/zb/ZeebeGrpcClient.js.map +1 -0
- package/package.json +130 -30
- package/renovate.json +9 -0
- package/.github/workflows/build-docs.yml +0 -39
- package/.github/workflows/tag-and-publish.yml +0 -48
- package/.prettierignore +0 -2
- package/img/video.png +0 -0
- package/jest.config.js +0 -5
- package/src/__tests__/exports.spec.ts +0 -7
- package/src/index.ts +0 -17
- package/tsconfig.build.json +0 -8
- package/tsconfig.json +0 -10
- package/tsconfig.tsbuildinfo +0 -1
- package/typedoc.json +0 -10
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
export interface InfoDto {
|
|
2
|
+
version: string;
|
|
3
|
+
authorizedOrganization: string;
|
|
4
|
+
createPermission: boolean;
|
|
5
|
+
readPermission: boolean;
|
|
6
|
+
updatePermission: boolean;
|
|
7
|
+
deletePermission: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface CreateCollaboratorDto {
|
|
10
|
+
email: string;
|
|
11
|
+
projectId: string;
|
|
12
|
+
role: 'project_admin' | 'editor' | 'viewer' | 'commenter';
|
|
13
|
+
}
|
|
14
|
+
export interface ProjectCollaboratorDto {
|
|
15
|
+
name: string;
|
|
16
|
+
email: string;
|
|
17
|
+
projectId: string;
|
|
18
|
+
role: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SortDto {
|
|
21
|
+
field: string;
|
|
22
|
+
direction: 'ASC' | 'DESC';
|
|
23
|
+
}
|
|
24
|
+
export interface PubSearchDtoProjectCollaboratorDto {
|
|
25
|
+
filter: Partial<ProjectCollaboratorDto>;
|
|
26
|
+
sort?: SortDto[];
|
|
27
|
+
/** minimum 0 */
|
|
28
|
+
page?: number;
|
|
29
|
+
/** minumum 0, maximum 50 */
|
|
30
|
+
size?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface PubSearchResultDtoProjectCollaboratorDto {
|
|
33
|
+
items: ProjectCollaboratorDto[];
|
|
34
|
+
total: number;
|
|
35
|
+
}
|
|
36
|
+
export interface CreateFileDto {
|
|
37
|
+
/** maxLength: 255, minLength: 1 */
|
|
38
|
+
name: string;
|
|
39
|
+
/** maxLength: 255, minLength: 1 */
|
|
40
|
+
folderId: string;
|
|
41
|
+
/** maxLength: 255, minLength: 1 */
|
|
42
|
+
projectId: string;
|
|
43
|
+
content: string;
|
|
44
|
+
fileType: string;
|
|
45
|
+
pattern: 'bpmn' | 'dmn' | 'form' | 'connector_template';
|
|
46
|
+
}
|
|
47
|
+
export interface PathElementDto {
|
|
48
|
+
id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
}
|
|
51
|
+
export interface UserDto {
|
|
52
|
+
name: string;
|
|
53
|
+
email: string;
|
|
54
|
+
}
|
|
55
|
+
export interface FileMetadataDto {
|
|
56
|
+
id: string;
|
|
57
|
+
name: string;
|
|
58
|
+
projectId: string;
|
|
59
|
+
folderId: string;
|
|
60
|
+
simplePath: string;
|
|
61
|
+
canonicalPath: PathElementDto[];
|
|
62
|
+
revision: number;
|
|
63
|
+
type: string;
|
|
64
|
+
created: string;
|
|
65
|
+
createdBy: UserDto;
|
|
66
|
+
updated: string;
|
|
67
|
+
updatedBy: UserDto;
|
|
68
|
+
}
|
|
69
|
+
export interface FileDto {
|
|
70
|
+
metadata: FileMetadataDto;
|
|
71
|
+
content: string;
|
|
72
|
+
}
|
|
73
|
+
export interface UpdateFileDto {
|
|
74
|
+
/** maxLength: 255, minLength: 1 */
|
|
75
|
+
name: string;
|
|
76
|
+
content: string;
|
|
77
|
+
revision: number;
|
|
78
|
+
/** maxLength: 255, minLength: 1 */
|
|
79
|
+
projectId: string;
|
|
80
|
+
/** maxLength: 255, minLength: 1 */
|
|
81
|
+
folderId: string;
|
|
82
|
+
}
|
|
83
|
+
export interface PubSearchDtoFileMetadataDto {
|
|
84
|
+
filter: Partial<FileMetadataDto>;
|
|
85
|
+
sort?: SortDto[];
|
|
86
|
+
/** minimum: 0 */
|
|
87
|
+
page?: number;
|
|
88
|
+
/** maximum: 50 minimum: 0 */
|
|
89
|
+
size?: number;
|
|
90
|
+
}
|
|
91
|
+
export interface PubSearchResultDtoFileMetadataDto {
|
|
92
|
+
items: FileMetadataDto[];
|
|
93
|
+
total: number;
|
|
94
|
+
}
|
|
95
|
+
export interface CreateFolderDto {
|
|
96
|
+
/** maxLength: 255 minLength: 1 */
|
|
97
|
+
name: string;
|
|
98
|
+
/** maxLength: 255 minLength: 1 */
|
|
99
|
+
projectId: string;
|
|
100
|
+
/** maxLength: 255 minLength: 1 */
|
|
101
|
+
parentId: string;
|
|
102
|
+
}
|
|
103
|
+
export interface FolderMetadataDto {
|
|
104
|
+
id: string;
|
|
105
|
+
name: string;
|
|
106
|
+
projectId: string;
|
|
107
|
+
parentId: string;
|
|
108
|
+
created: string;
|
|
109
|
+
updated: string;
|
|
110
|
+
createdBy: UserDto;
|
|
111
|
+
updatedBy: UserDto;
|
|
112
|
+
}
|
|
113
|
+
export interface FolderContentDto {
|
|
114
|
+
folders: FolderMetadataDto[];
|
|
115
|
+
files: FileMetadataDto[];
|
|
116
|
+
}
|
|
117
|
+
export interface FolderDto {
|
|
118
|
+
metadata: FolderMetadataDto;
|
|
119
|
+
content: FolderContentDto;
|
|
120
|
+
}
|
|
121
|
+
export interface UpdateFolderDto {
|
|
122
|
+
/** maxLength: 255 minLength: 1 */
|
|
123
|
+
name: string;
|
|
124
|
+
/** maxLength: 255 minLength: 1 */
|
|
125
|
+
projectId: string;
|
|
126
|
+
/** maxLength: 255 minLength: 1 */
|
|
127
|
+
parentId: string;
|
|
128
|
+
}
|
|
129
|
+
export interface CreateMilestoneDto {
|
|
130
|
+
/** maxLength: 255 minLength: 1 */
|
|
131
|
+
name: string;
|
|
132
|
+
/** maxLength: 255 minLength: 1 */
|
|
133
|
+
fileId: string;
|
|
134
|
+
}
|
|
135
|
+
export interface MilestoneMetadataDto {
|
|
136
|
+
id: string;
|
|
137
|
+
name: string;
|
|
138
|
+
fileId: string;
|
|
139
|
+
created: string;
|
|
140
|
+
createdBy: UserDto;
|
|
141
|
+
updated: string;
|
|
142
|
+
updatedBy: UserDto;
|
|
143
|
+
}
|
|
144
|
+
export interface MilestoneDto {
|
|
145
|
+
metadata: MilestoneMetadataDto;
|
|
146
|
+
content: string;
|
|
147
|
+
}
|
|
148
|
+
export interface PubSearchDtoMilestoneMetadataDto {
|
|
149
|
+
filter: Partial<MilestoneMetadataDto>;
|
|
150
|
+
sort?: SortDto[];
|
|
151
|
+
/** minimum: 0 */
|
|
152
|
+
page?: number;
|
|
153
|
+
/** maximum: 50 minimum: 0 */
|
|
154
|
+
size?: number;
|
|
155
|
+
}
|
|
156
|
+
export interface PubSearchResultDtoMilestoneMetadataDto {
|
|
157
|
+
items: MilestoneMetadataDto[];
|
|
158
|
+
total: number;
|
|
159
|
+
}
|
|
160
|
+
export interface ProjectMetadataDto {
|
|
161
|
+
id: string;
|
|
162
|
+
name: string;
|
|
163
|
+
created: string;
|
|
164
|
+
createdBy: UserDto;
|
|
165
|
+
updated: string;
|
|
166
|
+
updatedBy: UserDto;
|
|
167
|
+
}
|
|
168
|
+
export interface ProjectContent {
|
|
169
|
+
folders: FolderMetadataDto[];
|
|
170
|
+
files: FileMetadataDto[];
|
|
171
|
+
}
|
|
172
|
+
export interface ProjectDto {
|
|
173
|
+
metadata: ProjectMetadataDto;
|
|
174
|
+
content: ProjectContent;
|
|
175
|
+
}
|
|
176
|
+
export interface PubSearchDtoProjectMetadataDto {
|
|
177
|
+
filter: Partial<ProjectMetadataDto>;
|
|
178
|
+
sort?: SortDto[];
|
|
179
|
+
/** minimum: 0 */
|
|
180
|
+
page?: number;
|
|
181
|
+
/** maximum: 50, minimum: 0 */
|
|
182
|
+
size?: number;
|
|
183
|
+
}
|
|
184
|
+
export interface PubSearchResultDtoProjectMetadataDto {
|
|
185
|
+
items: ProjectMetadataDto[];
|
|
186
|
+
total: number;
|
|
187
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelerDto.js","sourceRoot":"","sources":["../../../src/modeler/lib/ModelerDto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface Token {
|
|
2
|
+
access_token: string;
|
|
3
|
+
scope: string;
|
|
4
|
+
expires_in: number;
|
|
5
|
+
token_type: string;
|
|
6
|
+
expiry: number;
|
|
7
|
+
audience: string;
|
|
8
|
+
}
|
|
9
|
+
export interface TokenError {
|
|
10
|
+
error: string;
|
|
11
|
+
error_description: string;
|
|
12
|
+
}
|
|
13
|
+
export { IOAuthProvider } from './lib/IOAuthProvider';
|
|
14
|
+
export { NullAuthProvider } from './lib/NullAuthProvider';
|
|
15
|
+
export { OAuthProvider } from './lib/OAuthProvider';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OAuthProvider = exports.NullAuthProvider = void 0;
|
|
4
|
+
var NullAuthProvider_1 = require("./lib/NullAuthProvider");
|
|
5
|
+
Object.defineProperty(exports, "NullAuthProvider", { enumerable: true, get: function () { return NullAuthProvider_1.NullAuthProvider; } });
|
|
6
|
+
var OAuthProvider_1 = require("./lib/OAuthProvider");
|
|
7
|
+
Object.defineProperty(exports, "OAuthProvider", { enumerable: true, get: function () { return OAuthProvider_1.OAuthProvider; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oauth/index.ts"],"names":[],"mappings":";;;AAeA,2DAAyD;AAAhD,oHAAA,gBAAgB,OAAA;AACzB,qDAAmD;AAA1C,8GAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IOAuthProvider.js","sourceRoot":"","sources":["../../../src/oauth/lib/IOAuthProvider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.NullAuthProvider = void 0;
|
|
7
|
+
const debug_1 = __importDefault(require("debug"));
|
|
8
|
+
const d = (0, debug_1.default)('camunda:oauth');
|
|
9
|
+
class NullAuthProvider {
|
|
10
|
+
async getToken(audience) {
|
|
11
|
+
d('NullAuthProvider.getToken: returning empty string for ' + audience);
|
|
12
|
+
return '';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.NullAuthProvider = NullAuthProvider;
|
|
16
|
+
//# sourceMappingURL=NullAuthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NullAuthProvider.js","sourceRoot":"","sources":["../../../src/oauth/lib/NullAuthProvider.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AAKzB,MAAM,CAAC,GAAG,IAAA,eAAK,EAAC,eAAe,CAAC,CAAA;AAEhC,MAAa,gBAAgB;IACrB,KAAK,CAAC,QAAQ,CAAC,QAAgC;QACrD,CAAC,CAAC,wDAAwD,GAAG,QAAQ,CAAC,CAAA;QACtE,OAAO,EAAE,CAAA;IACV,CAAC;CACD;AALD,4CAKC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { CamundaPlatform8Configuration, DeepPartial } from "../../lib";
|
|
2
|
+
import { IOAuthProvider, Token } from '../index';
|
|
3
|
+
import { TokenGrantAudienceType } from './IOAuthProvider';
|
|
4
|
+
export declare class OAuthProvider implements IOAuthProvider {
|
|
5
|
+
private static readonly defaultTokenCache;
|
|
6
|
+
private cacheDir;
|
|
7
|
+
private authServerUrl;
|
|
8
|
+
private clientId;
|
|
9
|
+
private clientSecret;
|
|
10
|
+
private customRootCert?;
|
|
11
|
+
private useFileCache;
|
|
12
|
+
tokenCache: {
|
|
13
|
+
[key: string]: Token;
|
|
14
|
+
};
|
|
15
|
+
private failed;
|
|
16
|
+
private failureCount;
|
|
17
|
+
private inflightTokenRequest?;
|
|
18
|
+
userAgentString: string;
|
|
19
|
+
private scope;
|
|
20
|
+
private audienceMap;
|
|
21
|
+
private consoleClientId;
|
|
22
|
+
private consoleClientSecret;
|
|
23
|
+
private isCamundaSaaS;
|
|
24
|
+
private camundaModelerOAuthAudience;
|
|
25
|
+
private tokenRefreshThresholdMs;
|
|
26
|
+
constructor(options?: {
|
|
27
|
+
config?: DeepPartial<CamundaPlatform8Configuration>;
|
|
28
|
+
});
|
|
29
|
+
getToken(audienceType: TokenGrantAudienceType): Promise<string>;
|
|
30
|
+
flushMemoryCache(): void;
|
|
31
|
+
flushFileCache(): void;
|
|
32
|
+
/** Camunda SaaS needs an audience for a Modeler token request, and Self-Managed does not. */
|
|
33
|
+
private addAudienceIfNeeded;
|
|
34
|
+
private makeDebouncedTokenRequest;
|
|
35
|
+
private sendToMemoryCache;
|
|
36
|
+
private retrieveFromFileCache;
|
|
37
|
+
private sendToFileCache;
|
|
38
|
+
private isExpired;
|
|
39
|
+
private evictFromMemoryCache;
|
|
40
|
+
private evictFromFileCache;
|
|
41
|
+
private getCacheKey;
|
|
42
|
+
private getCachedTokenFileName;
|
|
43
|
+
private getAudience;
|
|
44
|
+
}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.OAuthProvider = void 0;
|
|
30
|
+
const fs = __importStar(require("fs"));
|
|
31
|
+
const https_1 = __importDefault(require("https"));
|
|
32
|
+
const os = __importStar(require("os"));
|
|
33
|
+
const debug_1 = require("debug");
|
|
34
|
+
const lib_1 = require("lib");
|
|
35
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
36
|
+
const trace = (0, debug_1.debug)('camunda:oauth');
|
|
37
|
+
const homedir = os.homedir();
|
|
38
|
+
const BACKOFF_TOKEN_ENDPOINT_FAILURE = 1000;
|
|
39
|
+
class OAuthProvider {
|
|
40
|
+
constructor(options) {
|
|
41
|
+
this.tokenCache = {};
|
|
42
|
+
this.failed = false;
|
|
43
|
+
this.failureCount = 0;
|
|
44
|
+
this.getCacheKey = (audience) => `${this.clientId}-${audience}`;
|
|
45
|
+
this.getCachedTokenFileName = (clientId, audience) => `${this.cacheDir}/oauth-token-${clientId}-${audience}.json`;
|
|
46
|
+
const config = lib_1.CamundaEnvironmentConfigurator.mergeConfigWithEnvironment(options?.config ?? {});
|
|
47
|
+
this.authServerUrl = (0, lib_1.RequireConfiguration)(config.CAMUNDA_OAUTH_URL, 'CAMUNDA_OAUTH_URL');
|
|
48
|
+
this.clientId = config.ZEEBE_CLIENT_ID;
|
|
49
|
+
this.clientSecret = config.ZEEBE_CLIENT_SECRET;
|
|
50
|
+
this.consoleClientId = config.CAMUNDA_CONSOLE_CLIENT_ID;
|
|
51
|
+
this.consoleClientSecret = config.CAMUNDA_CONSOLE_CLIENT_SECRET;
|
|
52
|
+
if (!this.clientId && !this.consoleClientId) {
|
|
53
|
+
throw new Error(`You need to supply a value for at at least one of ZEEBE_CLIENT_ID or CAMUNDA_CONSOLE_CLIENT_ID`);
|
|
54
|
+
}
|
|
55
|
+
if (!this.clientSecret && !this.consoleClientSecret) {
|
|
56
|
+
throw new Error(`You need to supply a value for at least one of ZEEBE_CLIENT_SECRET or CAMUNDA_CONSOLE_CLIENT_SECRET`);
|
|
57
|
+
}
|
|
58
|
+
if (!((!!this.clientId && !!this.clientSecret) ||
|
|
59
|
+
(!!this.consoleClientId && !!this.consoleClientSecret))) {
|
|
60
|
+
throw new Error('You need to supply both a client ID and a client secret');
|
|
61
|
+
}
|
|
62
|
+
const customRootCert = (0, lib_1.GetCertificateAuthority)(config);
|
|
63
|
+
this.customRootCert = customRootCert
|
|
64
|
+
? Buffer.from(customRootCert)
|
|
65
|
+
: undefined;
|
|
66
|
+
this.scope = config.CAMUNDA_TOKEN_SCOPE;
|
|
67
|
+
this.useFileCache = !config.CAMUNDA_TOKEN_DISK_CACHE_DISABLE;
|
|
68
|
+
this.cacheDir =
|
|
69
|
+
config.CAMUNDA_TOKEN_CACHE_DIR ?? OAuthProvider.defaultTokenCache;
|
|
70
|
+
this.userAgentString = (0, lib_1.createUserAgentString)(config);
|
|
71
|
+
/**
|
|
72
|
+
* CAMUNDA_MODELER_OAUTH_AUDIENCE is optional, and only needed if the Modeler is running on Self-Managed
|
|
73
|
+
* and needs an audience. If it is not set, we will not include an audience in the token request.
|
|
74
|
+
*/
|
|
75
|
+
this.audienceMap = {
|
|
76
|
+
OPERATE: config.CAMUNDA_OPERATE_OAUTH_AUDIENCE,
|
|
77
|
+
ZEEBE: config.CAMUNDA_ZEEBE_OAUTH_AUDIENCE,
|
|
78
|
+
OPTIMIZE: config.CAMUNDA_OPTIMIZE_OAUTH_AUDIENCE,
|
|
79
|
+
TASKLIST: config.CAMUNDA_TASKLIST_OAUTH_AUDIENCE,
|
|
80
|
+
CONSOLE: config.CAMUNDA_CONSOLE_OAUTH_AUDIENCE,
|
|
81
|
+
MODELER: config.CAMUNDA_MODELER_OAUTH_AUDIENCE,
|
|
82
|
+
};
|
|
83
|
+
this.camundaModelerOAuthAudience = config.CAMUNDA_MODELER_OAUTH_AUDIENCE;
|
|
84
|
+
this.tokenRefreshThresholdMs =
|
|
85
|
+
config.CAMUNDA_OAUTH_TOKEN_REFRESH_THRESHOLD_MS;
|
|
86
|
+
if (this.useFileCache) {
|
|
87
|
+
try {
|
|
88
|
+
if (!fs.existsSync(this.cacheDir)) {
|
|
89
|
+
fs.mkdirSync(this.cacheDir, {
|
|
90
|
+
recursive: true,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
fs.accessSync(this.cacheDir, fs.constants.W_OK);
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
throw new Error(`FATAL: Cannot write to OAuth cache dir ${this.cacheDir}\n` +
|
|
97
|
+
'If you are running on AWS Lambda, set the HOME environment variable of your lambda function to /tmp');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
this.isCamundaSaaS = this.authServerUrl.includes('https://login.cloud.camunda.io/oauth/token');
|
|
101
|
+
}
|
|
102
|
+
async getToken(audienceType) {
|
|
103
|
+
(0, debug_1.debug)(`Token request for ${audienceType}`);
|
|
104
|
+
// tslint:disable-next-line: no-console
|
|
105
|
+
// We use the Console credential set if it we are requesting from
|
|
106
|
+
// the SaaS OAuth endpoint, and it is a Modeler or Admin Console token.
|
|
107
|
+
// Otherwise we use the application credential set, unless a Console credential set exists.
|
|
108
|
+
// See: https://github.com/camunda/camunda-8-js-sdk/issues/60
|
|
109
|
+
const requestingFromSaaSConsole = this.isCamundaSaaS &&
|
|
110
|
+
(audienceType === 'CONSOLE' || audienceType === 'MODELER');
|
|
111
|
+
const clientIdToUse = requestingFromSaaSConsole
|
|
112
|
+
? (0, lib_1.RequireConfiguration)(this.consoleClientId, 'CAMUNDA_CONSOLE_CLIENT_ID')
|
|
113
|
+
: (0, lib_1.RequireConfiguration)(this.clientId, 'ZEEBE_CLIENT_ID');
|
|
114
|
+
const clientSecretToUse = requestingFromSaaSConsole
|
|
115
|
+
? (0, lib_1.RequireConfiguration)(this.consoleClientSecret, 'CAMUNDA_CONSOLE_CLIENT_SECRET')
|
|
116
|
+
: (0, lib_1.RequireConfiguration)(this.clientSecret, 'ZEEBE_CLIENT_SECRET');
|
|
117
|
+
const key = this.getCacheKey(audienceType);
|
|
118
|
+
if (this.tokenCache[key]) {
|
|
119
|
+
const token = this.tokenCache[key];
|
|
120
|
+
// check expiry and evict in-memory and file cache if expired
|
|
121
|
+
if (this.isExpired(token)) {
|
|
122
|
+
this.evictFromMemoryCache(audienceType);
|
|
123
|
+
trace(`In-memory token ${token.audience} is expired`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
trace(`Using in-memory cached token ${token.audience}`);
|
|
127
|
+
return this.tokenCache[key].access_token;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (this.useFileCache) {
|
|
131
|
+
const cachedToken = this.retrieveFromFileCache(clientIdToUse, audienceType);
|
|
132
|
+
if (cachedToken) {
|
|
133
|
+
// check expiry and evict in-memory and file cache if expired
|
|
134
|
+
if (this.isExpired(cachedToken)) {
|
|
135
|
+
this.evictFromFileCache({ audienceType, clientId: clientIdToUse });
|
|
136
|
+
trace(`File cached token ${cachedToken.audience} is expired`);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
trace(`Using file cached token ${cachedToken.audience}`);
|
|
140
|
+
return cachedToken.access_token;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (!this.inflightTokenRequest) {
|
|
145
|
+
this.inflightTokenRequest = new Promise((resolve, reject) => {
|
|
146
|
+
setTimeout(() => {
|
|
147
|
+
this.makeDebouncedTokenRequest({
|
|
148
|
+
audienceType,
|
|
149
|
+
clientIdToUse,
|
|
150
|
+
clientSecretToUse,
|
|
151
|
+
})
|
|
152
|
+
.then((res) => {
|
|
153
|
+
this.failed = false;
|
|
154
|
+
this.failureCount = 0;
|
|
155
|
+
this.inflightTokenRequest = undefined;
|
|
156
|
+
resolve(res);
|
|
157
|
+
})
|
|
158
|
+
.catch((e) => {
|
|
159
|
+
this.failureCount++;
|
|
160
|
+
this.failed = true;
|
|
161
|
+
this.inflightTokenRequest = undefined;
|
|
162
|
+
reject(e);
|
|
163
|
+
});
|
|
164
|
+
}, this.failed ? BACKOFF_TOKEN_ENDPOINT_FAILURE * this.failureCount : 0);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return this.inflightTokenRequest;
|
|
168
|
+
}
|
|
169
|
+
flushMemoryCache() {
|
|
170
|
+
this.tokenCache = {};
|
|
171
|
+
}
|
|
172
|
+
flushFileCache() {
|
|
173
|
+
if (this.useFileCache) {
|
|
174
|
+
fs.readdirSync(this.cacheDir).forEach((file) => {
|
|
175
|
+
if (fs.existsSync(file)) {
|
|
176
|
+
fs.unlinkSync(file);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/** Camunda SaaS needs an audience for a Modeler token request, and Self-Managed does not. */
|
|
182
|
+
addAudienceIfNeeded(audienceType) {
|
|
183
|
+
/** If we are running on Self-Managed (ie: not Camunda SaaS), and no explicit audience was set,
|
|
184
|
+
* we should not include an audience in the token request.
|
|
185
|
+
* See: https://github.com/camunda/camunda-8-js-sdk/issues/60
|
|
186
|
+
*/
|
|
187
|
+
if (audienceType === 'MODELER' &&
|
|
188
|
+
!this.isCamundaSaaS && // Self-Managed
|
|
189
|
+
!this.camundaModelerOAuthAudience // User didn't set an audience
|
|
190
|
+
) {
|
|
191
|
+
return ''; // No audience in token request
|
|
192
|
+
}
|
|
193
|
+
if (audienceType === 'MODELER' && this.isCamundaSaaS) {
|
|
194
|
+
return 'audience=api.cloud.camunda.io&';
|
|
195
|
+
}
|
|
196
|
+
return `audience=${this.getAudience(audienceType)}&`;
|
|
197
|
+
}
|
|
198
|
+
makeDebouncedTokenRequest({ audienceType, clientIdToUse, clientSecretToUse, }) {
|
|
199
|
+
const body = `${this.addAudienceIfNeeded(audienceType)}client_id=${clientIdToUse}&client_secret=${clientSecretToUse}&grant_type=client_credentials`;
|
|
200
|
+
/* Add a scope to the token request, if one is set */
|
|
201
|
+
const bodyWithScope = this.scope ? `${body}&scope=${this.scope}` : body;
|
|
202
|
+
if (this.customRootCert) {
|
|
203
|
+
trace('Using custom root certificate');
|
|
204
|
+
}
|
|
205
|
+
const customAgent = this.customRootCert
|
|
206
|
+
? new https_1.default.Agent({ ca: this.customRootCert })
|
|
207
|
+
: undefined;
|
|
208
|
+
const options = {
|
|
209
|
+
agent: customAgent,
|
|
210
|
+
method: 'POST',
|
|
211
|
+
body: bodyWithScope,
|
|
212
|
+
headers: {
|
|
213
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
214
|
+
'user-agent': this.userAgentString,
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
const optionsWithAgent = this.customRootCert
|
|
218
|
+
? { ...options, agent: customAgent }
|
|
219
|
+
: options;
|
|
220
|
+
trace(`Making token request to the token endpoint: `);
|
|
221
|
+
trace(` ${this.authServerUrl}`);
|
|
222
|
+
trace(optionsWithAgent);
|
|
223
|
+
return (0, node_fetch_1.default)(this.authServerUrl, optionsWithAgent)
|
|
224
|
+
.catch((e) => {
|
|
225
|
+
console.log(`Erroring requesting token for Client Id ${clientIdToUse}`);
|
|
226
|
+
console.log(e);
|
|
227
|
+
throw e;
|
|
228
|
+
})
|
|
229
|
+
.then((res) => res.json().catch(() => {
|
|
230
|
+
trace(`Failed to parse response from token endpoint. Status ${res.status}: ${res.statusText}`);
|
|
231
|
+
throw new Error(`Failed to parse response from token endpoint. Status ${res.status}: ${res.statusText}`);
|
|
232
|
+
}))
|
|
233
|
+
.then((t) => {
|
|
234
|
+
trace(`Got token for Client Id ${clientIdToUse}: ${JSON.stringify(t, null, 2)}`);
|
|
235
|
+
const isTokenError = (t) => !!t.error;
|
|
236
|
+
if (isTokenError(t)) {
|
|
237
|
+
throw new Error(`Failed to get token: ${t.error} - ${t.error_description}`);
|
|
238
|
+
}
|
|
239
|
+
const token = { ...t, audience: audienceType };
|
|
240
|
+
if (this.useFileCache) {
|
|
241
|
+
this.sendToFileCache({
|
|
242
|
+
audience: audienceType,
|
|
243
|
+
token,
|
|
244
|
+
clientId: clientIdToUse,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
this.sendToMemoryCache({ audience: audienceType, token });
|
|
248
|
+
return token.access_token;
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
sendToMemoryCache({ audience, token, }) {
|
|
252
|
+
const key = this.getCacheKey(audience);
|
|
253
|
+
const d = new Date();
|
|
254
|
+
token.expiry = d.setSeconds(d.getSeconds()) + token.expires_in * 1000;
|
|
255
|
+
this.tokenCache[key] = token;
|
|
256
|
+
}
|
|
257
|
+
retrieveFromFileCache(clientId, audience) {
|
|
258
|
+
let token;
|
|
259
|
+
const tokenFileName = this.getCachedTokenFileName(clientId, audience);
|
|
260
|
+
const tokenCachedInFile = fs.existsSync(tokenFileName);
|
|
261
|
+
if (!tokenCachedInFile) {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
try {
|
|
265
|
+
token = JSON.parse(fs.readFileSync(this.getCachedTokenFileName(clientId, audience), 'utf8'));
|
|
266
|
+
if (this.isExpired(token)) {
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
this.sendToMemoryCache({ audience, token });
|
|
270
|
+
return token;
|
|
271
|
+
}
|
|
272
|
+
catch (_) {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
sendToFileCache({ audience, token, clientId, }) {
|
|
277
|
+
const d = new Date();
|
|
278
|
+
const file = this.getCachedTokenFileName(clientId, audience);
|
|
279
|
+
fs.writeFile(file, JSON.stringify({
|
|
280
|
+
...token,
|
|
281
|
+
expiry: d.setSeconds(d.getSeconds() + token.expires_in),
|
|
282
|
+
}), (e) => {
|
|
283
|
+
if (!e) {
|
|
284
|
+
trace(`Wrote OAuth token to file ${file}`);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
// tslint:disable-next-line
|
|
288
|
+
console.error('Error writing OAuth token to file' + file);
|
|
289
|
+
// tslint:disable-next-line
|
|
290
|
+
console.error(e);
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
isExpired(token) {
|
|
294
|
+
const d = new Date();
|
|
295
|
+
const currentTime = d.setSeconds(d.getSeconds());
|
|
296
|
+
const expiryHorizon = token.expiry - this.tokenRefreshThresholdMs;
|
|
297
|
+
const tokenIsExpired = currentTime >= expiryHorizon;
|
|
298
|
+
return tokenIsExpired;
|
|
299
|
+
}
|
|
300
|
+
evictFromMemoryCache(audience) {
|
|
301
|
+
const key = this.getCacheKey(audience);
|
|
302
|
+
delete this.tokenCache[key];
|
|
303
|
+
}
|
|
304
|
+
evictFromFileCache({ audienceType, clientId, }) {
|
|
305
|
+
const filename = this.getCachedTokenFileName(clientId, audienceType);
|
|
306
|
+
if (this.useFileCache && fs.existsSync(filename)) {
|
|
307
|
+
fs.unlinkSync(filename);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
getAudience(audience) {
|
|
311
|
+
return this.audienceMap[audience];
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
exports.OAuthProvider = OAuthProvider;
|
|
315
|
+
OAuthProvider.defaultTokenCache = `${homedir}/.camunda`;
|
|
316
|
+
//# sourceMappingURL=OAuthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OAuthProvider.js","sourceRoot":"","sources":["../../../src/oauth/lib/OAuthProvider.ts"],"names":[],"mappings":"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"}
|