@package-broker/ui 2.0.0-rc.2 → 2.0.0-rc.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.
Files changed (194) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/api-types.d.ts +8148 -2725
  3. package/dist/api-types.d.ts.map +1 -1
  4. package/dist/api.d.ts +1 -1
  5. package/dist/api.d.ts.map +1 -1
  6. package/dist/api.js +10 -0
  7. package/dist/api.js.map +1 -1
  8. package/dist/app-path.d.ts +2 -0
  9. package/dist/app-path.d.ts.map +1 -0
  10. package/dist/app-path.js +2 -0
  11. package/dist/app-path.js.map +1 -0
  12. package/dist/app.d.ts +10 -14
  13. package/dist/app.d.ts.map +1 -1
  14. package/dist/app.js +37 -22
  15. package/dist/app.js.map +1 -1
  16. package/dist/assets/access.62e9484517a0.js +1 -0
  17. package/dist/assets/app.45b156168495.css +2 -0
  18. package/dist/assets/app.c064670cdc0d.js +9 -0
  19. package/dist/assets/audit.b7c40b9dc998.js +1 -0
  20. package/dist/assets/chunk.28a4d8aab337.js +1 -0
  21. package/dist/assets/chunk.3fcd6998795a.js +1 -0
  22. package/dist/assets/chunk.51497edc7697.js +4 -0
  23. package/dist/assets/chunk.56d473a1587d.js +1 -0
  24. package/dist/assets/chunk.675b635d9462.js +1 -0
  25. package/dist/assets/chunk.6ea6bdcaa465.js +1 -0
  26. package/dist/assets/chunk.741aec8d1ff9.js +1 -0
  27. package/dist/assets/chunk.815f9a91c741.js +1 -0
  28. package/dist/assets/chunk.8442124f6802.js +1 -0
  29. package/dist/assets/chunk.965b76812604.js +2 -0
  30. package/dist/assets/chunk.a6d755a9789f.js +1 -0
  31. package/dist/assets/chunk.d18497920e4d.js +1 -0
  32. package/dist/assets/chunk.d813fefb410d.js +1 -0
  33. package/dist/assets/chunk.e3b0c44298fc.js +0 -0
  34. package/dist/assets/chunk.f54ea1378c8c.js +1 -0
  35. package/dist/assets/chunk.fd375c54b526.js +1 -0
  36. package/dist/assets/import.e7a1e5834631.js +1 -0
  37. package/dist/assets/index.html +9 -2
  38. package/dist/assets/manifest.json +108 -8
  39. package/dist/assets/notifications.19225fe12044.js +1 -0
  40. package/dist/assets/npm-login.e059678af13d.js +1 -0
  41. package/dist/assets/packages.ab5ab25b1c75.js +2 -0
  42. package/dist/assets/projects.927fe18c785c.js +1 -0
  43. package/dist/assets/setup.8e977608d413.js +1 -0
  44. package/dist/assets/setup.html +3 -3
  45. package/dist/assets/sources.ae50f239f80f.js +1 -0
  46. package/dist/assets/tokens.6b86d8d97e07.js +4 -0
  47. package/dist/auth.d.ts +26 -3
  48. package/dist/auth.d.ts.map +1 -1
  49. package/dist/auth.js +133 -19
  50. package/dist/auth.js.map +1 -1
  51. package/dist/components/product-footer-content.d.ts +21 -0
  52. package/dist/components/product-footer-content.d.ts.map +1 -0
  53. package/dist/components/product-footer-content.js +30 -0
  54. package/dist/components/product-footer-content.js.map +1 -0
  55. package/dist/components/product-footer.d.ts +3 -0
  56. package/dist/components/product-footer.d.ts.map +1 -0
  57. package/dist/components/product-footer.js +6 -0
  58. package/dist/components/product-footer.js.map +1 -0
  59. package/dist/components/ui/status-badge.d.ts +5 -0
  60. package/dist/components/ui/status-badge.d.ts.map +1 -1
  61. package/dist/components/ui/status-badge.js +10 -0
  62. package/dist/components/ui/status-badge.js.map +1 -1
  63. package/dist/manifest.d.ts +32 -0
  64. package/dist/manifest.d.ts.map +1 -1
  65. package/dist/manifest.js +41 -0
  66. package/dist/manifest.js.map +1 -1
  67. package/dist/package-limits.d.ts +3 -0
  68. package/dist/package-limits.d.ts.map +1 -0
  69. package/dist/package-limits.js +3 -0
  70. package/dist/package-limits.js.map +1 -0
  71. package/dist/page-hash.d.ts +1 -1
  72. package/dist/page-hash.d.ts.map +1 -1
  73. package/dist/page-hash.js.map +1 -1
  74. package/dist/page-loader.d.ts +5 -0
  75. package/dist/page-loader.d.ts.map +1 -0
  76. package/dist/page-loader.js +39 -0
  77. package/dist/page-loader.js.map +1 -0
  78. package/dist/pages/access/grant-form.d.ts +48 -0
  79. package/dist/pages/access/grant-form.d.ts.map +1 -0
  80. package/dist/pages/access/grant-form.js +153 -0
  81. package/dist/pages/access/grant-form.js.map +1 -0
  82. package/dist/pages/access/permission-descriptions.d.ts +2 -0
  83. package/dist/pages/access/permission-descriptions.d.ts.map +1 -0
  84. package/dist/pages/access/permission-descriptions.js +36 -0
  85. package/dist/pages/access/permission-descriptions.js.map +1 -0
  86. package/dist/pages/access/role-catalogue.d.ts +22 -0
  87. package/dist/pages/access/role-catalogue.d.ts.map +1 -0
  88. package/dist/pages/access/role-catalogue.js +40 -0
  89. package/dist/pages/access/role-catalogue.js.map +1 -0
  90. package/dist/pages/access.d.ts +6 -0
  91. package/dist/pages/access.d.ts.map +1 -1
  92. package/dist/pages/access.js +66 -31
  93. package/dist/pages/access.js.map +1 -1
  94. package/dist/pages/audit.d.ts.map +1 -1
  95. package/dist/pages/notification-actions.d.ts +41 -0
  96. package/dist/pages/notification-actions.d.ts.map +1 -0
  97. package/dist/pages/notification-actions.js +187 -0
  98. package/dist/pages/notification-actions.js.map +1 -0
  99. package/dist/pages/notification-draft.d.ts +13 -0
  100. package/dist/pages/notification-draft.d.ts.map +1 -0
  101. package/dist/pages/notification-draft.js +75 -0
  102. package/dist/pages/notification-draft.js.map +1 -0
  103. package/dist/pages/notification-form.d.ts +35 -0
  104. package/dist/pages/notification-form.d.ts.map +1 -0
  105. package/dist/pages/notification-form.js +167 -0
  106. package/dist/pages/notification-form.js.map +1 -0
  107. package/dist/pages/notifications-controller.d.ts +41 -0
  108. package/dist/pages/notifications-controller.d.ts.map +1 -0
  109. package/dist/pages/notifications-controller.js +184 -0
  110. package/dist/pages/notifications-controller.js.map +1 -0
  111. package/dist/pages/notifications.d.ts +10 -0
  112. package/dist/pages/notifications.d.ts.map +1 -0
  113. package/dist/pages/notifications.js +301 -0
  114. package/dist/pages/notifications.js.map +1 -0
  115. package/dist/pages/npm-login.d.ts +2 -0
  116. package/dist/pages/npm-login.d.ts.map +1 -0
  117. package/dist/pages/npm-login.js +62 -0
  118. package/dist/pages/npm-login.js.map +1 -0
  119. package/dist/pages/packages/npm-workflow.d.ts +31 -0
  120. package/dist/pages/packages/npm-workflow.d.ts.map +1 -0
  121. package/dist/pages/packages/npm-workflow.js +381 -0
  122. package/dist/pages/packages/npm-workflow.js.map +1 -0
  123. package/dist/pages/packages/package-detail.d.ts +9 -0
  124. package/dist/pages/packages/package-detail.d.ts.map +1 -0
  125. package/dist/pages/packages/package-detail.js +242 -0
  126. package/dist/pages/packages/package-detail.js.map +1 -0
  127. package/dist/pages/packages/source-actions.d.ts +49 -0
  128. package/dist/pages/packages/source-actions.d.ts.map +1 -0
  129. package/dist/pages/packages/source-actions.js +319 -0
  130. package/dist/pages/packages/source-actions.js.map +1 -0
  131. package/dist/pages/packages.d.ts +15 -4
  132. package/dist/pages/packages.d.ts.map +1 -1
  133. package/dist/pages/packages.js +138 -20
  134. package/dist/pages/packages.js.map +1 -1
  135. package/dist/pages/projects/project-form-model.d.ts +25 -0
  136. package/dist/pages/projects/project-form-model.d.ts.map +1 -0
  137. package/dist/pages/projects/project-form-model.js +69 -0
  138. package/dist/pages/projects/project-form-model.js.map +1 -0
  139. package/dist/pages/projects/project-form.d.ts +14 -0
  140. package/dist/pages/projects/project-form.d.ts.map +1 -0
  141. package/dist/pages/projects/project-form.js +91 -0
  142. package/dist/pages/projects/project-form.js.map +1 -0
  143. package/dist/pages/projects.d.ts +3 -2
  144. package/dist/pages/projects.d.ts.map +1 -1
  145. package/dist/pages/projects.js +29 -38
  146. package/dist/pages/projects.js.map +1 -1
  147. package/dist/pages/sources/source-form.d.ts +5 -2
  148. package/dist/pages/sources/source-form.d.ts.map +1 -1
  149. package/dist/pages/sources/source-form.js +39 -27
  150. package/dist/pages/sources/source-form.js.map +1 -1
  151. package/dist/pages/sources/sync-copy.d.ts +5 -0
  152. package/dist/pages/sources/sync-copy.d.ts.map +1 -0
  153. package/dist/pages/sources/sync-copy.js +11 -0
  154. package/dist/pages/sources/sync-copy.js.map +1 -0
  155. package/dist/pages/sources.d.ts +11 -3
  156. package/dist/pages/sources.d.ts.map +1 -1
  157. package/dist/pages/sources.js +103 -25
  158. package/dist/pages/sources.js.map +1 -1
  159. package/dist/pages/tokens/client-config.d.ts +3 -0
  160. package/dist/pages/tokens/client-config.d.ts.map +1 -1
  161. package/dist/pages/tokens/client-config.js +12 -2
  162. package/dist/pages/tokens/client-config.js.map +1 -1
  163. package/dist/pages/tokens/issue-token-form.d.ts +27 -0
  164. package/dist/pages/tokens/issue-token-form.d.ts.map +1 -0
  165. package/dist/pages/tokens/issue-token-form.js +270 -0
  166. package/dist/pages/tokens/issue-token-form.js.map +1 -0
  167. package/dist/pages/tokens/principal-form.d.ts +8 -0
  168. package/dist/pages/tokens/principal-form.d.ts.map +1 -0
  169. package/dist/pages/tokens/principal-form.js +155 -0
  170. package/dist/pages/tokens/principal-form.js.map +1 -0
  171. package/dist/pages/tokens/trusted-publishers-controller.d.ts +42 -0
  172. package/dist/pages/tokens/trusted-publishers-controller.d.ts.map +1 -0
  173. package/dist/pages/tokens/trusted-publishers-controller.js +202 -0
  174. package/dist/pages/tokens/trusted-publishers-controller.js.map +1 -0
  175. package/dist/pages/tokens/trusted-publishers.d.ts +6 -0
  176. package/dist/pages/tokens/trusted-publishers.d.ts.map +1 -0
  177. package/dist/pages/tokens/trusted-publishers.js +116 -0
  178. package/dist/pages/tokens/trusted-publishers.js.map +1 -0
  179. package/dist/pages/tokens.d.ts +100 -6
  180. package/dist/pages/tokens.d.ts.map +1 -1
  181. package/dist/pages/tokens.js +324 -86
  182. package/dist/pages/tokens.js.map +1 -1
  183. package/dist/setup.d.ts +3 -2
  184. package/dist/setup.d.ts.map +1 -1
  185. package/dist/setup.js +70 -10
  186. package/dist/setup.js.map +1 -1
  187. package/dist/token-pending.d.ts +4 -0
  188. package/dist/token-pending.d.ts.map +1 -0
  189. package/dist/token-pending.js +12 -0
  190. package/dist/token-pending.js.map +1 -0
  191. package/package.json +3 -3
  192. package/dist/assets/app.b2abf3c46f6e.js +0 -15
  193. package/dist/assets/app.e8cea8b32d3a.css +0 -2
  194. package/dist/assets/setup.98343039898f.js +0 -1
package/dist/manifest.js CHANGED
@@ -18,4 +18,45 @@ export function checkBudget(total, budget) {
18
18
  const limit = Math.floor((budget * (100 + BUDGET_GROWTH_PERCENT)) / 100);
19
19
  return { ok: total <= limit, limit };
20
20
  }
21
+ export function measureInitialLoad(outputs, entry, gzipSizes, fixedBytes) {
22
+ const initial = new Set();
23
+ function visit(path) {
24
+ if (initial.has(path))
25
+ return;
26
+ initial.add(path);
27
+ for (const imported of outputs[path].imports) {
28
+ if (imported.kind !== 'dynamic-import')
29
+ visit(imported.path);
30
+ }
31
+ }
32
+ visit(entry);
33
+ return {
34
+ initialGzipBytes: fixedBytes + [...initial].reduce((sum, path) => sum + gzipSizes[path], 0),
35
+ initialFiles: [...initial],
36
+ totalGzipBytes: fixedBytes + Object.values(gzipSizes).reduce((sum, bytes) => sum + bytes, 0),
37
+ chunkGzipBytes: Math.max(0, ...Object.entries(gzipSizes)
38
+ .filter(([path]) => !initial.has(path))
39
+ .map(([, bytes]) => bytes)),
40
+ };
41
+ }
42
+ export function checkLoadBudgets(sizes, budget) {
43
+ const keys = ['initialGzipBytes', 'chunkGzipBytes', 'totalGzipBytes'];
44
+ for (const key of Object.keys(budget)) {
45
+ if (!keys.some((known) => known === key))
46
+ throw new Error(`Unknown bundle budget key: ${key}`);
47
+ }
48
+ for (const key of keys) {
49
+ if (!Object.hasOwn(budget, key))
50
+ throw new Error(`Missing bundle budget key: ${key}`);
51
+ if (!Number.isSafeInteger(budget[key]) ||
52
+ budget[key] < (key === 'chunkGzipBytes' ? 0 : 1)) {
53
+ throw new Error('Bundle budget values must be positive safe integers (chunkGzipBytes may be zero)');
54
+ }
55
+ }
56
+ return {
57
+ initial: checkBudget(sizes.initialGzipBytes, budget.initialGzipBytes),
58
+ chunk: checkBudget(sizes.chunkGzipBytes, budget.chunkGzipBytes),
59
+ total: checkBudget(sizes.totalGzipBytes, budget.totalGzipBytes),
60
+ };
61
+ }
21
62
  //# sourceMappingURL=manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAO9F,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,4CAA4C,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzF,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACxD,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxE,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACnF,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,MAAc;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,qBAAqB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACzE,OAAO,EAAE,EAAE,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const MAX_NPM_NAME_LENGTH = 214;
2
+ export declare const MAX_PATTERN_BYTES = 50;
3
+ //# sourceMappingURL=package-limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-limits.d.ts","sourceRoot":"","sources":["../src/package-limits.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,iBAAiB,KAAK,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const MAX_NPM_NAME_LENGTH = 214;
2
+ export const MAX_PATTERN_BYTES = 50;
3
+ //# sourceMappingURL=package-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-limits.js","sourceRoot":"","sources":["../src/package-limits.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- export type HashRoute = 'projects' | 'access' | 'sources' | 'packages' | 'tokens' | 'audit' | 'import' | 'login' | 'setup' | 'reauth';
1
+ export type HashRoute = 'projects' | 'access' | 'sources' | 'packages' | 'tokens' | 'notifications' | 'npm-login' | 'audit' | 'import' | 'login' | 'setup' | 'reauth';
2
2
  declare const FILTER_LIMITS: {
3
3
  readonly project: 64;
4
4
  readonly status: 64;
@@ -1 +1 @@
1
- {"version":3,"file":"page-hash.d.ts","sourceRoot":"","sources":["../src/page-hash.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,QAAQ,GACR,SAAS,GACT,UAAU,GACV,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,OAAO,GACP,QAAQ,CAAC;AAEb,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;CAeT,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,CAAC,IAAI,MAAM,OAAO,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;CACvE,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM,CAuBvF"}
1
+ {"version":3,"file":"page-hash.d.ts","sourceRoot":"","sources":["../src/page-hash.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,QAAQ,GACR,SAAS,GACT,UAAU,GACV,QAAQ,GACR,eAAe,GACf,WAAW,GACX,OAAO,GACP,QAAQ,GACR,OAAO,GACP,OAAO,GACP,QAAQ,CAAC;AAEb,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;CAeT,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,CAAC,IAAI,MAAM,OAAO,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;CACvE,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM,CAuBvF"}
@@ -1 +1 @@
1
- {"version":3,"file":"page-hash.js","sourceRoot":"","sources":["../src/page-hash.ts"],"names":[],"mappings":"AAYA,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,EAAE;IACb,CAAC,EAAE,GAAG;IACN,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,EAAE;IACP,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,aAAa,EAAE,GAAG;IAClB,KAAK,EAAE,CAAC;CACA,CAAC;AAMX,MAAM,UAAU,mBAAmB,CAAC,KAAgB,EAAE,UAAuB,EAAE;IAC7E,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAA0B,EAAE,CAAC;QACvE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC;YAAE,SAAS;QACxF,IAAI,IAAI,KAAK,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QAClE,IACE,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW,CAAC;YAC3C,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEtE,SAAS;QACX,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,cAAc,CAAC,IAAI,KAAK,KAAK,UAAU;YAAE,SAAS;QACtF,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,KAAK,QAAQ;YAAE,SAAS;QAC1E,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,OAAO;YAAE,SAAS;QAChG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC;YACxF,SAAS;QACX,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"page-hash.js","sourceRoot":"","sources":["../src/page-hash.ts"],"names":[],"mappings":"AAcA,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,EAAE;IACb,CAAC,EAAE,GAAG;IACN,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,EAAE;IACP,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,aAAa,EAAE,GAAG;IAClB,KAAK,EAAE,CAAC;CACA,CAAC;AAMX,MAAM,UAAU,mBAAmB,CAAC,KAAgB,EAAE,UAAuB,EAAE;IAC7E,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAA0B,EAAE,CAAC;QACvE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC;YAAE,SAAS;QACxF,IAAI,IAAI,KAAK,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QAClE,IACE,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW,CAAC;YAC3C,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEtE,SAAS;QACX,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,cAAc,CAAC,IAAI,KAAK,KAAK,UAAU;YAAE,SAAS;QACtF,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,KAAK,QAAQ;YAAE,SAAS;QAC1E,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,OAAO;YAAE,SAAS;QAChG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC;YACxF,SAAS;QACX,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type ComponentType } from 'react';
2
+ export declare function PageLoader({ load }: {
3
+ load: () => Promise<ComponentType>;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=page-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-loader.d.ts","sourceRoot":"","sources":["../src/page-loader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAOhE,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;CAAE,+BAgD1E"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { Button } from './components/ui/button.js';
4
+ const resolvedPages = new Map();
5
+ export function PageLoader({ load }) {
6
+ const [state, setState] = useState(() => {
7
+ const Page = resolvedPages.get(load);
8
+ return Page ? { Page } : 'loading';
9
+ });
10
+ const [attempt, setAttempt] = useState(0);
11
+ useEffect(() => {
12
+ let live = true;
13
+ const cached = resolvedPages.get(load);
14
+ if (cached) {
15
+ setState({ Page: cached });
16
+ return;
17
+ }
18
+ void load().then((Page) => {
19
+ resolvedPages.set(load, Page);
20
+ if (live)
21
+ setState({ Page });
22
+ }, () => {
23
+ if (live)
24
+ setState('error');
25
+ });
26
+ return () => {
27
+ live = false;
28
+ };
29
+ }, [load, attempt]);
30
+ if (state === 'loading')
31
+ return (_jsx("p", { role: "status", "aria-busy": "true", children: "Loading page\u2026" }));
32
+ if (state === 'error')
33
+ return (_jsxs("div", { role: "alert", children: [_jsx("p", { children: "This page could not be loaded." }), _jsx(Button, { onClick: () => {
34
+ setState('loading');
35
+ setAttempt((value) => value + 1);
36
+ }, children: "Try again" }), _jsx(Button, { onClick: () => location.reload(), children: "Reload page" })] }));
37
+ return _jsx(state.Page, {});
38
+ }
39
+ //# sourceMappingURL=page-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-loader.js","sourceRoot":"","sources":["../src/page-loader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD,MAAM,aAAa,GAAG,IAAI,GAAG,EAA+C,CAAC;AAI7E,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAA0C;IACzE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAY,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,KAAK,IAAI,EAAE,CAAC,IAAI,CACd,CAAC,IAAI,EAAE,EAAE;YACP,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9B,IAAI,IAAI;gBAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC,EACD,GAAG,EAAE;YACH,IAAI,IAAI;gBAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,CACF,CAAC;QACF,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,KAAK,CAAC;QACf,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpB,IAAI,KAAK,KAAK,SAAS;QACrB,OAAO,CACL,YAAG,IAAI,EAAC,QAAQ,eAAW,MAAM,mCAE7B,CACL,CAAC;IACJ,IAAI,KAAK,KAAK,OAAO;QACnB,OAAO,CACL,eAAK,IAAI,EAAC,OAAO,aACf,yDAAqC,EACrC,KAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE;wBACZ,QAAQ,CAAC,SAAS,CAAC,CAAC;wBACpB,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;oBACnC,CAAC,0BAGM,EACT,KAAC,MAAM,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,4BAAsB,IAC1D,CACP,CAAC;IACJ,OAAO,KAAC,KAAK,CAAC,IAAI,KAAG,CAAC;AACxB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { operations } from '../../api-types.js';
2
+ import { type Catalogue, type Provider, type Role } from './role-catalogue.js';
3
+ type GrantInput = operations['createGrant']['requestBody']['content']['application/json'];
4
+ export interface GrantDraft {
5
+ type: 'email' | 'group';
6
+ email: string;
7
+ group: string;
8
+ provider: string;
9
+ roleId: string;
10
+ }
11
+ export declare function grantBody(draft: GrantDraft): {
12
+ body: GrantInput;
13
+ errors?: never;
14
+ } | {
15
+ errors: Record<string, string>;
16
+ body?: never;
17
+ };
18
+ export declare function grantSummary(draft: GrantDraft, role: Pick<Role, 'name' | 'key' | 'permissions'> | undefined, provider: Provider | undefined, project: string | null, organization: string): string;
19
+ export declare function RolePicker({ catalogue, project, value, onChange, id, error, retry, }: {
20
+ catalogue: Catalogue;
21
+ project: string | null;
22
+ value: string;
23
+ onChange: (value: string) => void;
24
+ id: string;
25
+ error?: string | undefined;
26
+ retry: () => void;
27
+ }): import("react").JSX.Element;
28
+ export interface GrantFormProps {
29
+ catalogue: Catalogue;
30
+ providers: Provider[];
31
+ providerStatus: 'ready' | 'loading' | 'error';
32
+ project: string | null;
33
+ organization: string;
34
+ busy: boolean;
35
+ retry: () => void;
36
+ submit: (body: GrantInput) => Promise<void>;
37
+ }
38
+ export declare function GrantForm(props: GrantFormProps): import("react").JSX.Element;
39
+ export declare function ChangeRoleForm({ catalogue, project, currentRole, busy, retry, submit, }: {
40
+ catalogue: Catalogue;
41
+ project: string | null;
42
+ currentRole: string;
43
+ busy: boolean;
44
+ retry: () => void;
45
+ submit: (roleId: string) => Promise<void>;
46
+ }): import("react").JSX.Element;
47
+ export {};
48
+ //# sourceMappingURL=grant-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grant-form.d.ts","sourceRoot":"","sources":["../../../src/pages/access/grant-form.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMrD,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,IAAI,EACV,MAAM,qBAAqB,CAAC;AAE7B,KAAK,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC1F,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,wBAAgB,SAAS,CACvB,KAAK,EAAE,UAAU,GAChB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAmCzF;AACD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC,GAAG,SAAS,EAC5D,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,EAAE,MAAM,UAgBrB;AAkCD,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,OAAO,EACP,KAAK,EACL,QAAQ,EACR,EAAE,EACF,KAAK,EACL,KAAK,GACN,EAAE;IACD,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,+BA+FA;AACD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,cAAc,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BA6N9C;AACD,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,OAAO,EACP,WAAW,EACX,IAAI,EACJ,KAAK,EACL,MAAM,GACP,EAAE;IACD,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C,+BAuCA"}
@@ -0,0 +1,153 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useId, useState } from 'react';
3
+ import { Button } from '../../components/ui/button.js';
4
+ import { Input } from '../../components/ui/input.js';
5
+ import { Label } from '../../components/ui/label.js';
6
+ import { Select } from '../../components/ui/select.js';
7
+ import { permissionDescriptions } from './permission-descriptions.js';
8
+ import { roleDescription, scopeRoles, } from './role-catalogue.js';
9
+ export function grantBody(draft) {
10
+ const errors = {};
11
+ const email = draft.email.trim().toLowerCase();
12
+ if (draft.type === 'email') {
13
+ const domain = email.slice(email.indexOf('@') + 1);
14
+ if (email.length > 254 ||
15
+ !/^[\x21-\x7e]+$/.test(email) ||
16
+ !/^[^@]+@[^@]+$/.test(email) ||
17
+ !/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(domain) ||
18
+ !/[a-z]/.test(domain.slice(domain.lastIndexOf('.') + 1)))
19
+ errors['email'] = 'Enter a valid sign-in email address.';
20
+ }
21
+ else {
22
+ if (!draft.provider)
23
+ errors['provider'] = 'Choose a sign-in provider.';
24
+ if (!draft.group)
25
+ errors['group'] = 'Enter the group value sent by your provider.';
26
+ else if (draft.group !== draft.group.trim())
27
+ errors['group'] =
28
+ "Remove spaces at the start or end. Keep the group's spelling and capitalization.";
29
+ else if (draft.group.length > 256 || /[\p{Cc}\p{Cf}\p{Cs}]/u.test(draft.group))
30
+ errors['group'] = 'Enter the group value sent by your provider.';
31
+ }
32
+ if (!draft.roleId)
33
+ errors['roleId'] = 'Choose a role to review this grant.';
34
+ if (Object.keys(errors).length)
35
+ return { errors };
36
+ return {
37
+ body: {
38
+ roleId: draft.roleId,
39
+ subject: draft.type === 'email'
40
+ ? { type: 'email', value: email }
41
+ : { type: 'group', provider: draft.provider, value: draft.group },
42
+ },
43
+ };
44
+ }
45
+ export function grantSummary(draft, role, provider, project, organization) {
46
+ if (draft.type === 'email' && !draft.email.trim())
47
+ return 'Enter an email address to review this grant.';
48
+ if (draft.type === 'group' && (!provider || !draft.group))
49
+ return 'Choose a provider and enter a group value to review this grant.';
50
+ if (!draft.roleId)
51
+ return 'Choose a role to review this grant.';
52
+ const subject = draft.type === 'email'
53
+ ? draft.email.trim().toLowerCase()
54
+ : `Members of ${draft.group} signing in with ${provider.displayName}`;
55
+ const context = project === null
56
+ ? `for ${organization}${role?.key === 'organization_auditor' ? ', including read access across projects' : role?.permissions.some((p) => p.startsWith('project:')) ? ', including access across projects' : ''}`
57
+ : `on project ${project}`;
58
+ return `${subject} will get ${role?.name ?? 'the selected role'} ${context}.`;
59
+ }
60
+ function FormField({ id, label, help, error, note, children, }) {
61
+ return (_jsxs("div", { className: "grid min-w-0 gap-1", children: [_jsx(Label, { htmlFor: id, children: label }), children, help ? (_jsx("p", { id: `${id}-help`, className: "text-sm text-neutral-600", children: help })) : null, note ? _jsx("p", { className: "text-sm text-neutral-600", children: note }) : null, error ? (_jsx("p", { id: `${id}-error`, role: "alert", children: error })) : null] }));
62
+ }
63
+ export function RolePicker({ catalogue, project, value, onChange, id, error, retry, }) {
64
+ const roles = scopeRoles(catalogue.roles, project);
65
+ const selected = roles.find((role) => role.id === value);
66
+ const describedBy = `${id}-help${error ? ` ${id}-error` : ''}`;
67
+ if (catalogue.status === 'forbidden')
68
+ return (_jsxs(_Fragment, { children: [_jsx("p", { className: "lg:col-span-2", children: "Role choices are unavailable for your account. Ask an organization administrator to grant access." }), _jsx(FormField, { id: id, label: "Enter a role ID", help: "Ask an organization administrator for the role ID.", error: error, children: _jsx(Input, { id: id, name: "roleId", value: value, onChange: (event) => onChange(event.target.value), "aria-invalid": !!error, "aria-describedby": describedBy }) })] }));
69
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "grid min-w-0 gap-2", children: [_jsx(FormField, { id: id, label: "Role", error: error, children: _jsxs(Select, { id: id, name: "roleId", value: selected ? value : '', onChange: (event) => onChange(event.target.value), disabled: catalogue.status !== 'ready' || !roles.length, "aria-invalid": !!error, "aria-describedby": describedBy, children: [_jsx("option", { value: "", children: "Choose a role" }), roles.map((role) => (_jsx("option", { value: role.id, children: role.name }, role.id)))] }) }), _jsxs("div", { id: `${id}-help`, className: "grid gap-2 text-sm", children: [catalogue.status === 'loading' ? (_jsx("p", { children: "Loading roles\u2026" })) : catalogue.status === 'error' ? (_jsxs(_Fragment, { children: [_jsx("p", { role: "alert", children: "Roles could not be loaded. Try again." }), _jsx(Button, { type: "button", variant: "outline", onClick: retry, children: "Retry roles" })] })) : !roles.length ? (_jsx("p", { children: "No roles are available to grant at this scope." })) : null, selected ? (_jsxs(_Fragment, { children: [_jsx("p", { children: roleDescription(selected) }), _jsx("p", { children: selected.isSystem ? 'System role' : 'Custom role' }), selected.isSystem && selected.key === 'project_developer' ? (_jsx("p", { children: "Suggested for developers; includes package read and publish permissions." })) : null, selected.permissions.includes('project:packages:write') ? (_jsx("p", { children: "This role includes permission to publish npm packages to admitted hosted sources." })) : null] })) : null] })] }), selected ? (_jsxs("details", { className: "min-w-0 lg:col-span-2", children: [_jsxs("summary", { className: "cursor-pointer underline", children: ["View permissions (", selected.permissions.length, ")"] }), _jsx("ul", { children: selected.permissions.map((permission) => (_jsxs("li", { className: "my-2", children: [_jsx("span", { children: permissionDescriptions[permission] }), ' ', _jsx("code", { className: "break-all", children: permission })] }, permission))) })] }, selected.id)) : null] }));
70
+ }
71
+ export function GrantForm(props) {
72
+ const prefix = useId();
73
+ const [draft, setDraft] = useState({
74
+ type: 'email',
75
+ email: '',
76
+ group: '',
77
+ provider: '',
78
+ roleId: '',
79
+ });
80
+ const [errors, setErrors] = useState({});
81
+ const [chosenRole, setChosenRole] = useState(false);
82
+ const roles = scopeRoles(props.catalogue.roles, props.project);
83
+ const suggested = props.project === null
84
+ ? ''
85
+ : (roles.find((role) => role.isSystem && role.key === 'project_developer')?.id ?? '');
86
+ const roleId = chosenRole ? draft.roleId : suggested;
87
+ const provider = props.providers.length === 1 ? props.providers[0].id : draft.provider;
88
+ const current = { ...draft, roleId, provider };
89
+ const selectedRole = roles.find((role) => role.id === roleId);
90
+ const selectedProvider = props.providers.find((item) => item.id === provider);
91
+ const field = (name) => ({
92
+ id: `${prefix}-${name}`,
93
+ 'aria-invalid': !!errors[name],
94
+ 'aria-describedby': `${prefix}-${name}-help${errors[name] ? ` ${prefix}-${name}-error` : ''}`,
95
+ });
96
+ const update = (patch) => {
97
+ setDraft({ ...draft, ...patch });
98
+ setErrors({});
99
+ };
100
+ const rolesReady = props.catalogue.status === 'forbidden' ||
101
+ (props.catalogue.status === 'ready' && roles.length > 0);
102
+ return (_jsxs("form", { noValidate: true, className: "my-6 grid max-w-5xl items-start gap-x-6 gap-y-4 lg:grid-cols-2", onSubmit: (event) => {
103
+ event.preventDefault();
104
+ if (props.busy || !rolesReady)
105
+ return;
106
+ const result = grantBody(current);
107
+ const invalid = result.errors ?? {};
108
+ if (draft.type === 'email' &&
109
+ event.currentTarget.querySelector('[name="email"]')?.validity
110
+ .typeMismatch)
111
+ invalid['email'] = 'Enter a valid sign-in email address.';
112
+ if (draft.type === 'group' && !selectedProvider)
113
+ invalid['provider'] = provider
114
+ ? 'This provider is no longer available. Choose another provider.'
115
+ : 'Choose a sign-in provider.';
116
+ if (props.catalogue.status === 'ready' && !selectedRole)
117
+ invalid['roleId'] = 'Choose a role to review this grant.';
118
+ setErrors(invalid);
119
+ const first = ['email', 'provider', 'group', 'roleId'].find((name) => invalid[name]);
120
+ if (first) {
121
+ event.currentTarget.querySelector(`[id="${prefix}-${first}"]`)?.focus();
122
+ return;
123
+ }
124
+ if (result.body)
125
+ void props.submit(result.body);
126
+ }, children: [_jsx("p", { className: "lg:col-span-2", children: "Give a person or a sign-in group a role." }), _jsxs("div", { className: "lg:col-span-2", children: [_jsxs("p", { className: "font-semibold", children: ["Access to:", ' ', props.project === null
127
+ ? `Organization · ${props.organization}`
128
+ : `Project · ${props.project}`] }), _jsx("p", { className: "text-sm text-neutral-600", children: props.project === null
129
+ ? 'Organization roles can give access across projects. To give a development group access, choose a project.'
130
+ : 'This grant applies to this project.' }), props.project === null ? (_jsx("a", { className: "underline", href: "#/projects", children: "Choose a project" })) : null] }), _jsxs("fieldset", { className: "grid min-w-0 gap-2 lg:col-span-2", children: [_jsx("legend", { className: "font-semibold", children: "Who gets access" }), ['email', 'group'].map((type) => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { id: `${prefix}-${type}-radio`, type: "radio", name: "type", value: type, checked: draft.type === type, disabled: type === 'group' && (props.providerStatus !== 'ready' || !props.providers.length), "aria-describedby": type === 'group' ? `${prefix}-provider-status` : undefined, onChange: () => update({ type }) }), _jsx(Label, { htmlFor: `${prefix}-${type}-radio`, children: type === 'email' ? 'Person (email)' : 'Group (from your sign-in provider)' })] }, type)))] }), _jsx("div", { id: `${prefix}-provider-status`, className: "lg:col-span-2", children: props.providerStatus === 'error' ? (_jsxs(_Fragment, { children: [_jsx("p", { role: "alert", children: "Sign-in providers could not be loaded. Try again." }), _jsx(Button, { type: "button", variant: "outline", onClick: props.retry, children: "Retry sign-in providers" })] })) : props.providerStatus === 'loading' ? (_jsx("p", { children: "Loading sign-in providers\u2026" })) : !props.providers.length ? (_jsx("p", { children: "Group access needs a sign-in provider that sends groups. Grant access to individual people instead." })) : null }), draft.type === 'email' ? (_jsx(FormField, { id: `${prefix}-email`, label: "Email address", help: "Use the person's sign-in email. Email matching ignores capitalization. Their provider must verify the email and allow its domain.", note: "This creates an access rule. No invitation email is sent.", error: errors['email'], children: _jsx(Input, { ...field('email'), type: "email", name: "email", autoComplete: "email", placeholder: "alex@acme-company.example", value: draft.email, onChange: (event) => update({ email: event.target.value }) }) })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "grid min-w-0 items-start gap-x-6 gap-y-4 lg:col-span-2 lg:grid-cols-2", children: props.providers.length === 1 ? (_jsxs("p", { children: ["Members signing in with ", selectedProvider?.displayName] })) : (_jsx(FormField, { id: `${prefix}-provider`, label: "Sign-in provider", help: "Choose the provider members use to sign in to Package Broker.", error: errors['provider'], children: _jsxs(Select, { ...field('provider'), name: "provider", value: provider, onChange: (event) => update({ provider: event.target.value }), children: [_jsx("option", { value: "", children: "Choose a provider" }), props.providers.map((item) => (_jsx("option", { value: item.id, children: item.displayName }, item.id)))] }) })) }), _jsx(FormField, { id: `${prefix}-group`, label: "Group value", help: "Use the exact group value sent by this provider. A group email works only if the provider sends that email as a group value.", note: "Package Broker cannot check whether this group exists. Ask a member to sign in and confirm their access after saving.", error: errors['group'], children: _jsx(Input, { ...field('group'), name: "group", value: draft.group, autoComplete: "off", spellCheck: false, onChange: (event) => update({ group: event.target.value }) }) })] })), _jsx(RolePicker, { catalogue: props.catalogue, project: props.project, id: `${prefix}-roleId`, value: roleId, onChange: (value) => {
131
+ setChosenRole(true);
132
+ update({ roleId: value });
133
+ }, error: errors['roleId'], retry: props.retry }), _jsxs("div", { "aria-live": "polite", className: "min-w-0 break-words rounded border p-3 lg:col-span-2", children: [_jsx("p", { children: grantSummary(current, selectedRole, selectedProvider, props.project, props.organization) }), draft.type === 'group' ? (_jsx("p", { className: "text-sm", children: "Applies when the provider reports this exact group value." })) : null] }), _jsx("div", { className: "flex flex-col items-start sm:flex-row lg:col-span-2", children: _jsx(Button, { className: "w-full sm:w-auto lg:w-auto", type: "submit", disabled: props.busy ||
134
+ !rolesReady ||
135
+ (draft.type === 'group' &&
136
+ (props.providerStatus !== 'ready' || !props.providers.length)), children: "Create grant" }) })] }));
137
+ }
138
+ export function ChangeRoleForm({ catalogue, project, currentRole, busy, retry, submit, }) {
139
+ const id = useId();
140
+ const [value, setValue] = useState(currentRole);
141
+ const roles = scopeRoles(catalogue.roles, project);
142
+ const valid = !!value &&
143
+ (catalogue.status === 'forbidden' ||
144
+ (catalogue.status === 'ready' && roles.some((role) => role.id === value)));
145
+ return (_jsxs("form", { className: "grid max-w-5xl items-start gap-x-6 gap-y-4 lg:grid-cols-2", onSubmit: (event) => {
146
+ event.preventDefault();
147
+ if (!busy && valid)
148
+ void submit(value);
149
+ }, children: [_jsx("p", { className: "lg:col-span-2", children: "To change who this grant applies to, create a new grant and revoke this one." }), _jsx(RolePicker, { id: id, catalogue: catalogue, project: project, value: value, onChange: setValue, retry: retry }), _jsx("p", { "aria-live": "polite", className: "min-w-0 break-words lg:col-span-2", children: roles.find((role) => role.id === value)?.name
150
+ ? `Save ${roles.find((role) => role.id === value).name} ${project === null ? 'for the organization' : `on project ${project}`}.`
151
+ : 'Choose a role to review this grant.' }), _jsx("div", { className: "flex flex-col items-start sm:flex-row lg:col-span-2", children: _jsx(Button, { className: "w-full sm:w-auto lg:w-auto", type: "submit", disabled: busy || !valid, children: "Save role" }) })] }));
152
+ }
153
+ //# sourceMappingURL=grant-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grant-form.js","sourceRoot":"","sources":["../../../src/pages/access/grant-form.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const permissionDescriptions: Record<string, string>;
2
+ //# sourceMappingURL=permission-descriptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-descriptions.d.ts","sourceRoot":"","sources":["../../../src/pages/access/permission-descriptions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkCzD,CAAC"}
@@ -0,0 +1,36 @@
1
+ export const permissionDescriptions = {
2
+ 'org:read': 'Read organization details',
3
+ 'org:settings:write': 'Change organization settings',
4
+ 'org:users:read': 'Read organization users',
5
+ 'org:users:write': 'Manage organization users',
6
+ 'org:roles:read': 'Read organization roles',
7
+ 'org:roles:write': 'Manage organization roles',
8
+ 'org:grants:read': 'Read organization grants',
9
+ 'org:grants:write': 'Manage organization grants',
10
+ 'org:projects:create': 'Add projects',
11
+ 'org:projects:archive': 'Archive projects',
12
+ 'org:sources:read': 'Read organization sources',
13
+ 'org:sources:write': 'Manage organization sources',
14
+ 'org:tokens:read': 'Read organization tokens',
15
+ 'org:tokens:revoke': 'Revoke organization tokens',
16
+ 'org:service-principals:write': 'Manage service principals',
17
+ 'org:packages:manage': 'Manage all packages',
18
+ 'org:import:write': 'Import runs: create and read',
19
+ 'org:import:approve': 'Approve and apply import runs',
20
+ 'org:audit:read': 'Read organization audit records',
21
+ 'project:read': 'Read project details',
22
+ 'project:settings:write': 'Change project settings',
23
+ 'project:grants:read': 'Read project grants',
24
+ 'project:grants:write': 'Manage project grants',
25
+ 'project:packages:read': 'Read project packages',
26
+ 'project:packages:write': 'Publish project packages',
27
+ 'project:packages:manage': 'Manage project packages',
28
+ 'project:sources:read': 'Read project sources',
29
+ 'project:sources:write': 'Manage project sources',
30
+ 'project:service-principals:write': 'Manage project service principals',
31
+ 'project:tokens:create': 'Issue project tokens',
32
+ 'project:tokens:read': 'Read project tokens',
33
+ 'project:tokens:revoke': 'Revoke project tokens',
34
+ 'project:audit:read': 'Read project audit records',
35
+ };
36
+ //# sourceMappingURL=permission-descriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-descriptions.js","sourceRoot":"","sources":["../../../src/pages/access/permission-descriptions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAA2B;IAC5D,UAAU,EAAE,2BAA2B;IACvC,oBAAoB,EAAE,8BAA8B;IACpD,gBAAgB,EAAE,yBAAyB;IAC3C,iBAAiB,EAAE,2BAA2B;IAC9C,gBAAgB,EAAE,yBAAyB;IAC3C,iBAAiB,EAAE,2BAA2B;IAC9C,iBAAiB,EAAE,0BAA0B;IAC7C,kBAAkB,EAAE,4BAA4B;IAChD,qBAAqB,EAAE,cAAc;IACrC,sBAAsB,EAAE,kBAAkB;IAC1C,kBAAkB,EAAE,2BAA2B;IAC/C,mBAAmB,EAAE,6BAA6B;IAClD,iBAAiB,EAAE,0BAA0B;IAC7C,mBAAmB,EAAE,4BAA4B;IACjD,8BAA8B,EAAE,2BAA2B;IAC3D,qBAAqB,EAAE,qBAAqB;IAC5C,kBAAkB,EAAE,8BAA8B;IAClD,oBAAoB,EAAE,+BAA+B;IACrD,gBAAgB,EAAE,iCAAiC;IACnD,cAAc,EAAE,sBAAsB;IACtC,wBAAwB,EAAE,yBAAyB;IACnD,qBAAqB,EAAE,qBAAqB;IAC5C,sBAAsB,EAAE,uBAAuB;IAC/C,uBAAuB,EAAE,uBAAuB;IAChD,wBAAwB,EAAE,0BAA0B;IACpD,yBAAyB,EAAE,yBAAyB;IACpD,sBAAsB,EAAE,sBAAsB;IAC9C,uBAAuB,EAAE,wBAAwB;IACjD,kCAAkC,EAAE,mCAAmC;IACvE,uBAAuB,EAAE,sBAAsB;IAC/C,qBAAqB,EAAE,qBAAqB;IAC5C,uBAAuB,EAAE,uBAAuB;IAChD,oBAAoB,EAAE,4BAA4B;CACnD,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { operations } from '../../api-types.js';
2
+ import type { ShellServices } from '../../auth.js';
3
+ export type Role = operations['listRoles']['responses'][200]['content']['application/json']['items'][number];
4
+ export type Provider = operations['listAuthProviders']['responses'][200]['content']['application/json']['providers'][number];
5
+ export type Catalogue = {
6
+ roles: Role[];
7
+ status: 'ready' | 'loading' | 'forbidden' | 'error';
8
+ };
9
+ export declare function loadRoleCatalogue(client: ShellServices['client']): Promise<Catalogue>;
10
+ export declare const scopeRoles: (roles: Role[], project: string | null) => {
11
+ id: string;
12
+ isSystem: boolean;
13
+ key: string;
14
+ name: string;
15
+ permissions: string[];
16
+ protectsLastHolder: boolean;
17
+ revision: number;
18
+ scope: "organization" | "project";
19
+ }[];
20
+ export declare const systemDescriptions: Record<string, string>;
21
+ export declare const roleDescription: (role: Role) => string;
22
+ //# sourceMappingURL=role-catalogue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-catalogue.d.ts","sourceRoot":"","sources":["../../../src/pages/access/role-catalogue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,MAAM,MAAM,IAAI,GACd,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5F,MAAM,MAAM,QAAQ,GAClB,UAAU,CAAC,mBAAmB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AACxG,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;CAAE,CAAC;AAC/F,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAa3F;AAQD,eAAO,MAAM,UAAU,GAAI,OAAO,IAAI,EAAE,EAAE,SAAS,MAAM,GAAG,IAAI;;;;;;;;;GAO1D,CAAC;AACP,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASrD,CAAC;AACF,eAAO,MAAM,eAAe,GAAI,MAAM,IAAI,WAEc,CAAC"}
@@ -0,0 +1,40 @@
1
+ export async function loadRoleCatalogue(client) {
2
+ const roles = [];
3
+ const seen = new Set();
4
+ let after;
5
+ do {
6
+ const result = await client.request('get', '/_pb/roles', { query: { limit: '50', after } });
7
+ if (!result.ok)
8
+ return { roles: [], status: result.status === 403 ? 'forbidden' : 'error' };
9
+ roles.push(...result.data.items);
10
+ after = result.data.next ?? undefined;
11
+ if (after && seen.has(after))
12
+ return { roles: [], status: 'error' };
13
+ if (after)
14
+ seen.add(after);
15
+ } while (after);
16
+ return { roles, status: 'ready' };
17
+ }
18
+ const order = [
19
+ 'project_developer',
20
+ 'project_auditor',
21
+ 'project_owner',
22
+ 'organization_auditor',
23
+ 'organization_admin',
24
+ ];
25
+ export const scopeRoles = (roles, project) => roles
26
+ .filter((role) => role.scope === (project === null ? 'organization' : 'project'))
27
+ .sort((a, b) => {
28
+ const rank = (role) => role.isSystem && order.includes(role.key) ? order.indexOf(role.key) : order.length;
29
+ return rank(a) - rank(b) || a.name.localeCompare(b.name);
30
+ });
31
+ export const systemDescriptions = {
32
+ project_developer: 'Read packages, view sources and issue project tokens; includes publish permission.',
33
+ project_auditor: 'View project details, grants, packages, sources, tokens and audit records.',
34
+ project_owner: 'Manage project settings, access, packages, sources, service principals and tokens.',
35
+ organization_auditor: 'View organization records and project records across the organization.',
36
+ organization_admin: 'Manage the organization and all projects, including users, roles, grants and packages.',
37
+ };
38
+ export const roleDescription = (role) => (role.isSystem && systemDescriptions[role.key]) ||
39
+ `Custom role · ${role.permissions.length} permissions`;
40
+ //# sourceMappingURL=role-catalogue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-catalogue.js","sourceRoot":"","sources":["../../../src/pages/access/role-catalogue.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAA+B;IACrE,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,KAAyB,CAAC;IAC9B,GAAG,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5F,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;QACtC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACpE,IAAI,KAAK;YAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,QAAQ,KAAK,EAAE;IAChB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AACD,MAAM,KAAK,GAAG;IACZ,mBAAmB;IACnB,iBAAiB;IACjB,eAAe;IACf,sBAAsB;IACtB,oBAAoB;CACrB,CAAC;AACF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,OAAsB,EAAE,EAAE,CAClE,KAAK;KACF,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;KAChF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACb,MAAM,IAAI,GAAG,CAAC,IAAU,EAAE,EAAE,CAC1B,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IACrF,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AACP,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,iBAAiB,EACf,oFAAoF;IACtF,eAAe,EAAE,4EAA4E;IAC7F,aAAa,EACX,oFAAoF;IACtF,oBAAoB,EAAE,wEAAwE;IAC9F,kBAAkB,EAChB,wFAAwF;CAC3F,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAU,EAAE,EAAE,CAC5C,CAAC,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,iBAAiB,IAAI,CAAC,WAAW,CAAC,MAAM,cAAc,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { type Catalogue, type Provider } from './access/role-catalogue.js';
1
2
  import type { operations } from '../api-types.js';
2
3
  import { type ShellServices, type ReplayResult } from '../auth.js';
3
4
  import { type ManagementQuery } from './management.js';
@@ -21,6 +22,10 @@ export declare const buildAccessHash: (query: AccessQuery) => string;
21
22
  interface AccessState {
22
23
  query: AccessQuery;
23
24
  roles: Role[];
25
+ catalogue: Catalogue;
26
+ providers: Provider[];
27
+ providerStatus: 'ready' | 'loading' | 'error';
28
+ organizationName: string;
24
29
  grants: Grant[];
25
30
  next: string | null;
26
31
  organization: string[];
@@ -50,6 +55,7 @@ export declare function createAccessController(services: ShellServices): {
50
55
  snapshot: () => AccessState;
51
56
  subscribe: (listener: () => void) => () => void;
52
57
  load: (query: AccessQuery, notice?: string | null) => Promise<void>;
58
+ loadFormOptions: () => Promise<void>;
53
59
  createGrant(body: GrantInput): Promise<void>;
54
60
  changeGrant(id: string, roleId: string): Promise<void>;
55
61
  revoke(id: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/pages/access.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAe,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAWhF,OAAO,EAWL,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AAEzB,KAAK,IAAI,GACP,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5F,KAAK,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC1F,KAAK,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACxF,KAAK,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC1F,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC;AAE1C,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,WAA+C,CAAC;AAC/F,eAAO,MAAM,eAAe,GAAI,OAAO,WAAW,WACoC,CAAC;AACvF,UAAU,WAAW;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW;;;;;;;;;;;;;;EAkBjD;AACD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa;;;kBAgBjC,WAAW,WAAU,MAAM,GAAG,IAAI,KAAU,OAAO,CAAC,IAAI,CAAC;sBAoI1D,UAAU;oBAaZ,MAAM,UAAU,MAAM;eAmB3B,MAAM;qBAcA,SAAS;mBAMX,MAAM,QAAQ,WAAW;mBAWzB,MAAM;qBAUJ,YAAY;;EAgBtC;AACD,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAElE,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,UAAU,GACX,EAAE;IACD,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,gBAAgB,CAAC;CAC9B,+BAgSA;AACD,wBAAgB,UAAU,gCA2BzB"}
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/pages/access.tsx"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAe,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAWhF,OAAO,EAWL,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AAEzB,KAAK,IAAI,GACP,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5F,KAAK,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC1F,KAAK,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACxF,KAAK,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC1F,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC;AAE1C,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,WAA+C,CAAC;AAC/F,eAAO,MAAM,eAAe,GAAI,OAAO,WAAW,WACoC,CAAC;AACvF,UAAU,WAAW;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,cAAc,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW;;;;;;;;;;;;;;EAkBjD;AACD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa;;;kBAsCjC,WAAW,WAAU,MAAM,GAAG,IAAI,KAAU,OAAO,CAAC,IAAI,CAAC;;sBAsJ1D,UAAU;oBAiCZ,MAAM,UAAU,MAAM;eAsB3B,MAAM;qBAiBA,SAAS;mBAMX,MAAM,QAAQ,WAAW;mBAWzB,MAAM;qBAUJ,YAAY;;EAuBtC;AACD,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAElE,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,UAAU,GACX,EAAE;IACD,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,gBAAgB,CAAC;CAC9B,+BAwQA;AACD,wBAAgB,UAAU,gCA2BzB"}