@payloadcms/next 3.0.0-alpha.31 → 3.0.0-alpha.33

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 (233) hide show
  1. package/dist/elements/ClearRouteCache/index.d.ts +3 -0
  2. package/dist/elements/ClearRouteCache/index.d.ts.map +1 -0
  3. package/dist/elements/ClearRouteCache/index.js +16 -0
  4. package/dist/layouts/Root/index.d.ts.map +1 -1
  5. package/dist/layouts/Root/index.js +9 -8
  6. package/dist/next-fileupload/fileFactory.d.ts +1 -1
  7. package/dist/next-fileupload/fileFactory.d.ts.map +1 -1
  8. package/dist/next-fileupload/fileFactory.js +1 -1
  9. package/dist/next-fileupload/handlers.d.ts +1 -1
  10. package/dist/next-fileupload/handlers.d.ts.map +1 -1
  11. package/dist/next-fileupload/handlers.js +1 -1
  12. package/dist/routes/index.d.ts +0 -1
  13. package/dist/routes/index.d.ts.map +1 -1
  14. package/dist/routes/index.js +1 -2
  15. package/dist/routes/rest/auth/access.d.ts +1 -1
  16. package/dist/routes/rest/auth/access.d.ts.map +1 -1
  17. package/dist/routes/rest/auth/access.js +1 -1
  18. package/dist/routes/rest/auth/forgotPassword.d.ts +1 -1
  19. package/dist/routes/rest/auth/forgotPassword.d.ts.map +1 -1
  20. package/dist/routes/rest/auth/forgotPassword.js +1 -1
  21. package/dist/routes/rest/auth/init.d.ts +1 -1
  22. package/dist/routes/rest/auth/init.d.ts.map +1 -1
  23. package/dist/routes/rest/auth/init.js +1 -1
  24. package/dist/routes/rest/auth/login.d.ts +1 -1
  25. package/dist/routes/rest/auth/login.d.ts.map +1 -1
  26. package/dist/routes/rest/auth/login.js +1 -1
  27. package/dist/routes/rest/auth/logout.d.ts +1 -1
  28. package/dist/routes/rest/auth/logout.d.ts.map +1 -1
  29. package/dist/routes/rest/auth/logout.js +1 -1
  30. package/dist/routes/rest/auth/me.d.ts +1 -1
  31. package/dist/routes/rest/auth/me.d.ts.map +1 -1
  32. package/dist/routes/rest/auth/me.js +1 -1
  33. package/dist/routes/rest/auth/refresh.d.ts +1 -1
  34. package/dist/routes/rest/auth/refresh.d.ts.map +1 -1
  35. package/dist/routes/rest/auth/refresh.js +1 -1
  36. package/dist/routes/rest/auth/registerFirstUser.d.ts +1 -1
  37. package/dist/routes/rest/auth/registerFirstUser.d.ts.map +1 -1
  38. package/dist/routes/rest/auth/registerFirstUser.js +1 -1
  39. package/dist/routes/rest/auth/resetPassword.d.ts +1 -1
  40. package/dist/routes/rest/auth/resetPassword.d.ts.map +1 -1
  41. package/dist/routes/rest/auth/resetPassword.js +1 -1
  42. package/dist/routes/rest/auth/unlock.d.ts +1 -1
  43. package/dist/routes/rest/auth/unlock.d.ts.map +1 -1
  44. package/dist/routes/rest/auth/unlock.js +1 -1
  45. package/dist/routes/rest/auth/verifyEmail.d.ts +1 -1
  46. package/dist/routes/rest/auth/verifyEmail.d.ts.map +1 -1
  47. package/dist/routes/rest/auth/verifyEmail.js +1 -1
  48. package/dist/routes/rest/collections/create.d.ts +1 -1
  49. package/dist/routes/rest/collections/create.d.ts.map +1 -1
  50. package/dist/routes/rest/collections/create.js +1 -1
  51. package/dist/routes/rest/collections/delete.d.ts +1 -1
  52. package/dist/routes/rest/collections/delete.d.ts.map +1 -1
  53. package/dist/routes/rest/collections/delete.js +2 -5
  54. package/dist/routes/rest/collections/deleteByID.d.ts +1 -1
  55. package/dist/routes/rest/collections/deleteByID.d.ts.map +1 -1
  56. package/dist/routes/rest/collections/deleteByID.js +1 -1
  57. package/dist/routes/rest/collections/docAccess.d.ts +1 -1
  58. package/dist/routes/rest/collections/docAccess.d.ts.map +1 -1
  59. package/dist/routes/rest/collections/docAccess.js +1 -1
  60. package/dist/routes/rest/collections/find.d.ts +1 -1
  61. package/dist/routes/rest/collections/find.d.ts.map +1 -1
  62. package/dist/routes/rest/collections/find.js +2 -5
  63. package/dist/routes/rest/collections/findByID.d.ts +1 -1
  64. package/dist/routes/rest/collections/findByID.d.ts.map +1 -1
  65. package/dist/routes/rest/collections/findByID.js +1 -1
  66. package/dist/routes/rest/collections/findVersionByID.d.ts +1 -1
  67. package/dist/routes/rest/collections/findVersionByID.d.ts.map +1 -1
  68. package/dist/routes/rest/collections/findVersionByID.js +1 -1
  69. package/dist/routes/rest/collections/findVersions.d.ts +1 -1
  70. package/dist/routes/rest/collections/findVersions.d.ts.map +1 -1
  71. package/dist/routes/rest/collections/findVersions.js +2 -5
  72. package/dist/routes/rest/collections/restoreVersion.d.ts +1 -1
  73. package/dist/routes/rest/collections/restoreVersion.d.ts.map +1 -1
  74. package/dist/routes/rest/collections/restoreVersion.js +1 -1
  75. package/dist/routes/rest/collections/update.d.ts +1 -1
  76. package/dist/routes/rest/collections/update.d.ts.map +1 -1
  77. package/dist/routes/rest/collections/update.js +2 -5
  78. package/dist/routes/rest/collections/updateByID.d.ts +1 -1
  79. package/dist/routes/rest/collections/updateByID.d.ts.map +1 -1
  80. package/dist/routes/rest/collections/updateByID.js +1 -1
  81. package/dist/routes/rest/files/checkFileAccess.d.ts +7 -0
  82. package/dist/routes/rest/files/checkFileAccess.d.ts.map +1 -0
  83. package/dist/routes/rest/files/checkFileAccess.js +50 -0
  84. package/dist/routes/rest/files/getFile.d.ts +9 -0
  85. package/dist/routes/rest/files/getFile.d.ts.map +1 -0
  86. package/dist/routes/rest/files/getFile.js +52 -0
  87. package/dist/routes/rest/globals/docAccess.d.ts +1 -1
  88. package/dist/routes/rest/globals/docAccess.d.ts.map +1 -1
  89. package/dist/routes/rest/globals/docAccess.js +1 -1
  90. package/dist/routes/rest/globals/findOne.d.ts +1 -1
  91. package/dist/routes/rest/globals/findOne.d.ts.map +1 -1
  92. package/dist/routes/rest/globals/findOne.js +1 -1
  93. package/dist/routes/rest/globals/findVersionByID.d.ts +1 -1
  94. package/dist/routes/rest/globals/findVersionByID.d.ts.map +1 -1
  95. package/dist/routes/rest/globals/findVersionByID.js +1 -1
  96. package/dist/routes/rest/globals/findVersions.d.ts +1 -1
  97. package/dist/routes/rest/globals/findVersions.d.ts.map +1 -1
  98. package/dist/routes/rest/globals/findVersions.js +2 -5
  99. package/dist/routes/rest/globals/restoreVersion.d.ts +1 -1
  100. package/dist/routes/rest/globals/restoreVersion.d.ts.map +1 -1
  101. package/dist/routes/rest/globals/restoreVersion.js +1 -1
  102. package/dist/routes/rest/globals/update.d.ts +1 -1
  103. package/dist/routes/rest/globals/update.d.ts.map +1 -1
  104. package/dist/routes/rest/globals/update.js +1 -1
  105. package/dist/routes/rest/index.d.ts.map +1 -1
  106. package/dist/routes/rest/index.js +11 -2
  107. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  108. package/dist/utilities/createPayloadRequest.js +4 -1
  109. package/dist/utilities/getDataAndFile.js +2 -2
  110. package/dist/views/API/index.client.d.ts.map +1 -1
  111. package/dist/views/API/index.client.js +1 -3
  112. package/dist/views/Account/index.d.ts +1 -1
  113. package/dist/views/Account/index.d.ts.map +1 -1
  114. package/dist/views/Account/index.js +22 -9
  115. package/dist/views/Account/meta.d.ts +1 -1
  116. package/dist/views/Account/meta.d.ts.map +1 -1
  117. package/dist/views/Account/meta.js +1 -1
  118. package/dist/views/CreateFirstUser/index.d.ts +1 -1
  119. package/dist/views/CreateFirstUser/index.d.ts.map +1 -1
  120. package/dist/views/CreateFirstUser/index.js +1 -1
  121. package/dist/views/CreateFirstUser/meta.d.ts +1 -1
  122. package/dist/views/CreateFirstUser/meta.d.ts.map +1 -1
  123. package/dist/views/CreateFirstUser/meta.js +1 -1
  124. package/dist/views/Dashboard/index.d.ts +1 -1
  125. package/dist/views/Dashboard/index.d.ts.map +1 -1
  126. package/dist/views/Dashboard/index.js +1 -1
  127. package/dist/views/Dashboard/meta.d.ts +1 -1
  128. package/dist/views/Dashboard/meta.d.ts.map +1 -1
  129. package/dist/views/Dashboard/meta.js +1 -1
  130. package/dist/views/Document/getMetaBySegment.d.ts +1 -1
  131. package/dist/views/Document/getMetaBySegment.d.ts.map +1 -1
  132. package/dist/views/Document/getMetaBySegment.js +1 -1
  133. package/dist/views/Document/index.d.ts +2 -2
  134. package/dist/views/Document/index.d.ts.map +1 -1
  135. package/dist/views/Document/index.js +15 -14
  136. package/dist/views/Edit/Default/Auth/index.d.ts +1 -1
  137. package/dist/views/Edit/Default/Auth/index.d.ts.map +1 -1
  138. package/dist/views/Edit/Default/Auth/index.js +1 -1
  139. package/dist/views/Edit/Default/SetDocumentTitle/formatTitle.d.ts.map +1 -1
  140. package/dist/views/Edit/Default/SetDocumentTitle/formatTitle.js +4 -1
  141. package/dist/views/Edit/Default/SetDocumentTitle/index.d.ts.map +1 -1
  142. package/dist/views/Edit/Default/SetDocumentTitle/index.js +7 -2
  143. package/dist/views/Edit/Default/SetStepNav/index.d.ts +0 -1
  144. package/dist/views/Edit/Default/SetStepNav/index.d.ts.map +1 -1
  145. package/dist/views/Edit/Default/SetStepNav/index.js +3 -3
  146. package/dist/views/Edit/Default/index.js +9 -9
  147. package/dist/views/Edit/index.client.d.ts.map +1 -1
  148. package/dist/views/Edit/index.client.js +2 -3
  149. package/dist/views/List/Default/index.js +1 -1
  150. package/dist/views/List/index.d.ts +1 -1
  151. package/dist/views/List/index.d.ts.map +1 -1
  152. package/dist/views/List/index.js +1 -1
  153. package/dist/views/List/meta.d.ts +1 -1
  154. package/dist/views/List/meta.d.ts.map +1 -1
  155. package/dist/views/List/meta.js +1 -1
  156. package/dist/views/LivePreview/Context/context.d.ts +2 -2
  157. package/dist/views/LivePreview/Context/context.d.ts.map +1 -1
  158. package/dist/views/LivePreview/Context/context.js +1 -1
  159. package/dist/views/LivePreview/Context/index.d.ts +1 -1
  160. package/dist/views/LivePreview/Context/index.d.ts.map +1 -1
  161. package/dist/views/LivePreview/Context/index.js +1 -1
  162. package/dist/views/LivePreview/index.client.d.ts.map +1 -1
  163. package/dist/views/LivePreview/index.client.js +1 -2
  164. package/dist/views/LivePreview/meta.d.ts +1 -1
  165. package/dist/views/LivePreview/meta.d.ts.map +1 -1
  166. package/dist/views/LivePreview/meta.js +1 -1
  167. package/dist/views/Unauthorized/index.d.ts +1 -1
  168. package/dist/views/Unauthorized/index.d.ts.map +1 -1
  169. package/dist/views/Unauthorized/index.js +1 -1
  170. package/dist/views/Unauthorized/meta.d.ts +1 -1
  171. package/dist/views/Unauthorized/meta.d.ts.map +1 -1
  172. package/dist/views/Unauthorized/meta.js +1 -1
  173. package/dist/views/Verify/index.d.ts +1 -1
  174. package/dist/views/Verify/index.d.ts.map +1 -1
  175. package/dist/views/Verify/index.js +1 -1
  176. package/dist/views/Verify/meta.d.ts +1 -1
  177. package/dist/views/Verify/meta.d.ts.map +1 -1
  178. package/dist/views/Verify/meta.js +1 -1
  179. package/dist/views/Version/Default/index.d.ts +1 -1
  180. package/dist/views/Version/Default/index.d.ts.map +1 -1
  181. package/dist/views/Version/Default/index.js +1 -1
  182. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts +1 -1
  183. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts.map +1 -1
  184. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +1 -1
  185. package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.d.ts +1 -1
  186. package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.d.ts.map +1 -1
  187. package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.js +1 -1
  188. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts +1 -1
  189. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts.map +1 -1
  190. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +1 -1
  191. package/dist/views/Version/RenderFieldsToDiff/fields/Select/DiffViewer/index.d.ts.map +1 -1
  192. package/dist/views/Version/RenderFieldsToDiff/fields/Select/DiffViewer/index.js +2 -3
  193. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts +1 -1
  194. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts.map +1 -1
  195. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +1 -1
  196. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts +1 -1
  197. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts.map +1 -1
  198. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +1 -1
  199. package/dist/views/Version/RenderFieldsToDiff/fields/Text/DiffViewer/index.d.ts.map +1 -1
  200. package/dist/views/Version/RenderFieldsToDiff/fields/Text/DiffViewer/index.js +2 -3
  201. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts +1 -1
  202. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts.map +1 -1
  203. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +1 -1
  204. package/dist/views/Version/RenderFieldsToDiff/index.d.ts +1 -1
  205. package/dist/views/Version/RenderFieldsToDiff/index.d.ts.map +1 -1
  206. package/dist/views/Version/RenderFieldsToDiff/index.js +1 -1
  207. package/dist/views/Version/RenderFieldsToDiff/types.d.ts +1 -1
  208. package/dist/views/Version/RenderFieldsToDiff/types.d.ts.map +1 -1
  209. package/dist/views/Version/RenderFieldsToDiff/types.js +1 -1
  210. package/dist/views/Version/Restore/index.d.ts +1 -1
  211. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  212. package/dist/views/Version/Restore/index.js +1 -1
  213. package/dist/views/Version/SelectComparison/index.d.ts +1 -1
  214. package/dist/views/Version/SelectComparison/index.d.ts.map +1 -1
  215. package/dist/views/Version/SelectComparison/index.js +1 -1
  216. package/dist/views/Version/SelectComparison/types.d.ts +1 -1
  217. package/dist/views/Version/SelectComparison/types.d.ts.map +1 -1
  218. package/dist/views/Version/SelectComparison/types.js +1 -1
  219. package/dist/views/Version/SelectLocales/index.d.ts +1 -1
  220. package/dist/views/Version/SelectLocales/index.d.ts.map +1 -1
  221. package/dist/views/Version/SelectLocales/index.js +1 -1
  222. package/dist/views/Version/meta.d.ts +1 -1
  223. package/dist/views/Version/meta.d.ts.map +1 -1
  224. package/dist/views/Version/meta.js +1 -1
  225. package/dist/views/Versions/index.d.ts.map +1 -1
  226. package/dist/views/Versions/index.js +1 -2
  227. package/dist/views/Versions/meta.d.ts +1 -1
  228. package/dist/views/Versions/meta.d.ts.map +1 -1
  229. package/dist/views/Versions/meta.js +1 -1
  230. package/package.json +7 -7
  231. package/dist/routes/rest/[collection]/file/[filename]/route.d.ts +0 -8
  232. package/dist/routes/rest/[collection]/file/[filename]/route.d.ts.map +0 -1
  233. package/dist/routes/rest/[collection]/file/[filename]/route.js +0 -110
@@ -1,110 +0,0 @@
1
- import fsPromises from 'fs/promises';
2
- import httpStatus from 'http-status';
3
- import path from 'path';
4
- import { executeAccess } from 'payload/auth';
5
- import { APIError, Forbidden } from 'payload/errors';
6
- import { streamFile } from '../../../../../next-stream-file/index.js';
7
- import { createPayloadRequest } from '../../../../../utilities/createPayloadRequest.js';
8
- import { RouteError } from '../../../RouteError.js';
9
- import { endpointsAreDisabled } from '../../../checkEndpoints.js';
10
- async function checkFileAccess({ collection, filename, req }) {
11
- const { config } = collection;
12
- const disableEndpoints = endpointsAreDisabled({
13
- endpoints: config.endpoints,
14
- request: req
15
- });
16
- if (disableEndpoints) return disableEndpoints;
17
- const accessResult = await executeAccess({
18
- isReadingStaticFile: true,
19
- req
20
- }, config.access.read);
21
- if (typeof accessResult === 'object') {
22
- const queryToBuild = {
23
- and: [
24
- {
25
- or: [
26
- {
27
- filename: {
28
- equals: filename
29
- }
30
- }
31
- ]
32
- },
33
- accessResult
34
- ]
35
- };
36
- if (config.upload.imageSizes) {
37
- config.upload.imageSizes.forEach(({ name })=>{
38
- queryToBuild.and[0].or.push({
39
- [`sizes.${name}.filename`]: {
40
- equals: filename
41
- }
42
- });
43
- });
44
- }
45
- const doc = await req.payload.db.findOne({
46
- collection: config.slug,
47
- req,
48
- where: queryToBuild
49
- });
50
- if (!doc) {
51
- throw new Forbidden(req.t);
52
- }
53
- }
54
- }
55
- export const GET = (config)=>async (request, { params })=>{
56
- const { collection: collectionSlug, filename } = params;
57
- let req;
58
- let collection;
59
- try {
60
- req = await createPayloadRequest({
61
- config,
62
- params: {
63
- collection: collectionSlug
64
- },
65
- request
66
- });
67
- collection = req.payload.collections?.[collectionSlug];
68
- if (!collection) {
69
- throw new APIError(`Media collection not found: ${collectionSlug}`, httpStatus.BAD_REQUEST);
70
- }
71
- if (!collection.config.upload) {
72
- throw new APIError(`This collection is not an upload collection: ${collectionSlug}`, httpStatus.BAD_REQUEST);
73
- }
74
- if (collection.config.upload.disableLocalStorage && !collection.config.upload.handlers) {
75
- throw new APIError(`This collection has local storage disabled: ${collectionSlug}`, httpStatus.BAD_REQUEST);
76
- }
77
- await checkFileAccess({
78
- collection,
79
- filename,
80
- req
81
- });
82
- let response = null;
83
- if (collection.config.upload.handlers?.length) {
84
- for (const handler of collection.config.upload.handlers){
85
- response = await handler(req, {
86
- params
87
- });
88
- }
89
- return response;
90
- }
91
- const fileDir = collection.config.upload?.staticDir || collection.config.slug;
92
- const filePath = path.resolve(`${fileDir}/${filename}`);
93
- const stats = await fsPromises.stat(filePath);
94
- const data = streamFile(filePath);
95
- return new Response(data, {
96
- headers: new Headers({
97
- 'content-length': stats.size + ''
98
- }),
99
- status: httpStatus.OK
100
- });
101
- } catch (error) {
102
- return RouteError({
103
- collection,
104
- err: error,
105
- req
106
- });
107
- }
108
- };
109
-
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yb3V0ZXMvcmVzdC9bY29sbGVjdGlvbl0vZmlsZS9bZmlsZW5hbWVdL3JvdXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbiwgUGF5bG9hZFJlcXVlc3QsIFNhbml0aXplZENvbmZpZywgV2hlcmUgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgZnNQcm9taXNlcyBmcm9tICdmcy9wcm9taXNlcydcbmltcG9ydCBodHRwU3RhdHVzIGZyb20gJ2h0dHAtc3RhdHVzJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IGV4ZWN1dGVBY2Nlc3MgfSBmcm9tICdwYXlsb2FkL2F1dGgnXG5pbXBvcnQgeyBBUElFcnJvciwgRm9yYmlkZGVuIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5cbmltcG9ydCB7IHN0cmVhbUZpbGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9uZXh0LXN0cmVhbS1maWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgY3JlYXRlUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsaXRpZXMvY3JlYXRlUGF5bG9hZFJlcXVlc3QuanMnXG5pbXBvcnQgeyBSb3V0ZUVycm9yIH0gZnJvbSAnLi4vLi4vLi4vUm91dGVFcnJvci5qcydcbmltcG9ydCB7IGVuZHBvaW50c0FyZURpc2FibGVkIH0gZnJvbSAnLi4vLi4vLi4vY2hlY2tFbmRwb2ludHMuanMnXG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrRmlsZUFjY2Vzcyh7XG4gIGNvbGxlY3Rpb24sXG4gIGZpbGVuYW1lLFxuICByZXEsXG59OiB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb25cbiAgZmlsZW5hbWU6IHN0cmluZ1xuICByZXE6IFBheWxvYWRSZXF1ZXN0XG59KSB7XG4gIGNvbnN0IHsgY29uZmlnIH0gPSBjb2xsZWN0aW9uXG4gIGNvbnN0IGRpc2FibGVFbmRwb2ludHMgPSBlbmRwb2ludHNBcmVEaXNhYmxlZCh7IGVuZHBvaW50czogY29uZmlnLmVuZHBvaW50cywgcmVxdWVzdDogcmVxIH0pXG4gIGlmIChkaXNhYmxlRW5kcG9pbnRzKSByZXR1cm4gZGlzYWJsZUVuZHBvaW50c1xuXG4gIGNvbnN0IGFjY2Vzc1Jlc3VsdCA9IGF3YWl0IGV4ZWN1dGVBY2Nlc3MoeyBpc1JlYWRpbmdTdGF0aWNGaWxlOiB0cnVlLCByZXEgfSwgY29uZmlnLmFjY2Vzcy5yZWFkKVxuXG4gIGlmICh0eXBlb2YgYWNjZXNzUmVzdWx0ID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHF1ZXJ5VG9CdWlsZDogV2hlcmUgPSB7XG4gICAgICBhbmQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG9yOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpbGVuYW1lOiB7XG4gICAgICAgICAgICAgICAgZXF1YWxzOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgYWNjZXNzUmVzdWx0LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnVwbG9hZC5pbWFnZVNpemVzKSB7XG4gICAgICBjb25maWcudXBsb2FkLmltYWdlU2l6ZXMuZm9yRWFjaCgoeyBuYW1lIH0pID0+IHtcbiAgICAgICAgcXVlcnlUb0J1aWxkLmFuZFswXS5vci5wdXNoKHtcbiAgICAgICAgICBbYHNpemVzLiR7bmFtZX0uZmlsZW5hbWVgXToge1xuICAgICAgICAgICAgZXF1YWxzOiBmaWxlbmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBkb2MgPSBhd2FpdCByZXEucGF5bG9hZC5kYi5maW5kT25lKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbmZpZy5zbHVnLFxuICAgICAgcmVxLFxuICAgICAgd2hlcmU6IHF1ZXJ5VG9CdWlsZCxcbiAgICB9KVxuXG4gICAgaWYgKCFkb2MpIHtcbiAgICAgIHRocm93IG5ldyBGb3JiaWRkZW4ocmVxLnQpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBHRVQgPVxuICAoY29uZmlnOiBQcm9taXNlPFNhbml0aXplZENvbmZpZz4pID0+XG4gIGFzeW5jIChyZXF1ZXN0OiBSZXF1ZXN0LCB7IHBhcmFtcyB9OiB7IHBhcmFtczogeyBjb2xsZWN0aW9uOiBzdHJpbmc7IGZpbGVuYW1lOiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgY29uc3QgeyBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZywgZmlsZW5hbWUgfSA9IHBhcmFtc1xuICAgIGxldCByZXE6IFBheWxvYWRSZXF1ZXN0XG4gICAgbGV0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25cblxuICAgIHRyeSB7XG4gICAgICByZXEgPSBhd2FpdCBjcmVhdGVQYXlsb2FkUmVxdWVzdCh7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcGFyYW1zOiB7IGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnIH0sXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICB9KVxuXG4gICAgICBjb2xsZWN0aW9uID0gcmVxLnBheWxvYWQuY29sbGVjdGlvbnM/Lltjb2xsZWN0aW9uU2x1Z11cblxuICAgICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBBUElFcnJvcihgTWVkaWEgY29sbGVjdGlvbiBub3QgZm91bmQ6ICR7Y29sbGVjdGlvblNsdWd9YCwgaHR0cFN0YXR1cy5CQURfUkVRVUVTVClcbiAgICAgIH1cblxuICAgICAgaWYgKCFjb2xsZWN0aW9uLmNvbmZpZy51cGxvYWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKFxuICAgICAgICAgIGBUaGlzIGNvbGxlY3Rpb24gaXMgbm90IGFuIHVwbG9hZCBjb2xsZWN0aW9uOiAke2NvbGxlY3Rpb25TbHVnfWAsXG4gICAgICAgICAgaHR0cFN0YXR1cy5CQURfUkVRVUVTVCxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoY29sbGVjdGlvbi5jb25maWcudXBsb2FkLmRpc2FibGVMb2NhbFN0b3JhZ2UgJiYgIWNvbGxlY3Rpb24uY29uZmlnLnVwbG9hZC5oYW5kbGVycykge1xuICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoXG4gICAgICAgICAgYFRoaXMgY29sbGVjdGlvbiBoYXMgbG9jYWwgc3RvcmFnZSBkaXNhYmxlZDogJHtjb2xsZWN0aW9uU2x1Z31gLFxuICAgICAgICAgIGh0dHBTdGF0dXMuQkFEX1JFUVVFU1QsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgYXdhaXQgY2hlY2tGaWxlQWNjZXNzKHtcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIHJlcSxcbiAgICAgIH0pXG5cbiAgICAgIGxldCByZXNwb25zZTogUmVzcG9uc2UgPSBudWxsXG4gICAgICBpZiAoY29sbGVjdGlvbi5jb25maWcudXBsb2FkLmhhbmRsZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGNvbGxlY3Rpb24uY29uZmlnLnVwbG9hZC5oYW5kbGVycykge1xuICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgaGFuZGxlcihyZXEsIHsgcGFyYW1zIH0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZURpciA9IGNvbGxlY3Rpb24uY29uZmlnLnVwbG9hZD8uc3RhdGljRGlyIHx8IGNvbGxlY3Rpb24uY29uZmlnLnNsdWdcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGAke2ZpbGVEaXJ9LyR7ZmlsZW5hbWV9YClcblxuICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmc1Byb21pc2VzLnN0YXQoZmlsZVBhdGgpXG4gICAgICBjb25zdCBkYXRhID0gc3RyZWFtRmlsZShmaWxlUGF0aClcblxuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShkYXRhLCB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgICAnY29udGVudC1sZW5ndGgnOiBzdGF0cy5zaXplICsgJycsXG4gICAgICAgIH0pLFxuICAgICAgICBzdGF0dXM6IGh0dHBTdGF0dXMuT0ssXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUm91dGVFcnJvcih7XG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGVycjogZXJyb3IsXG4gICAgICAgIHJlcSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG4iXSwibmFtZXMiOlsiZnNQcm9taXNlcyIsImh0dHBTdGF0dXMiLCJwYXRoIiwiZXhlY3V0ZUFjY2VzcyIsIkFQSUVycm9yIiwiRm9yYmlkZGVuIiwic3RyZWFtRmlsZSIsImNyZWF0ZVBheWxvYWRSZXF1ZXN0IiwiUm91dGVFcnJvciIsImVuZHBvaW50c0FyZURpc2FibGVkIiwiY2hlY2tGaWxlQWNjZXNzIiwiY29sbGVjdGlvbiIsImZpbGVuYW1lIiwicmVxIiwiY29uZmlnIiwiZGlzYWJsZUVuZHBvaW50cyIsImVuZHBvaW50cyIsInJlcXVlc3QiLCJhY2Nlc3NSZXN1bHQiLCJpc1JlYWRpbmdTdGF0aWNGaWxlIiwiYWNjZXNzIiwicmVhZCIsInF1ZXJ5VG9CdWlsZCIsImFuZCIsIm9yIiwiZXF1YWxzIiwidXBsb2FkIiwiaW1hZ2VTaXplcyIsImZvckVhY2giLCJuYW1lIiwicHVzaCIsImRvYyIsInBheWxvYWQiLCJkYiIsImZpbmRPbmUiLCJzbHVnIiwid2hlcmUiLCJ0IiwiR0VUIiwicGFyYW1zIiwiY29sbGVjdGlvblNsdWciLCJjb2xsZWN0aW9ucyIsIkJBRF9SRVFVRVNUIiwiZGlzYWJsZUxvY2FsU3RvcmFnZSIsImhhbmRsZXJzIiwicmVzcG9uc2UiLCJsZW5ndGgiLCJoYW5kbGVyIiwiZmlsZURpciIsInN0YXRpY0RpciIsImZpbGVQYXRoIiwicmVzb2x2ZSIsInN0YXRzIiwic3RhdCIsImRhdGEiLCJS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