@payloadcms/ui 4.0.0-internal.f11981a → 4.0.0-internal.f715c6e

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 (89) hide show
  1. package/dist/elements/CopyToClipboard/index.d.ts +0 -1
  2. package/dist/elements/CopyToClipboard/index.d.ts.map +1 -1
  3. package/dist/elements/CopyToClipboard/index.js +8 -10
  4. package/dist/elements/CopyToClipboard/index.js.map +1 -1
  5. package/dist/elements/FileManager/FileToolbar/index.d.ts.map +1 -1
  6. package/dist/elements/FileManager/FileToolbar/index.js +0 -3
  7. package/dist/elements/FileManager/FileToolbar/index.js.map +1 -1
  8. package/dist/exports/client/index.d.ts +1 -2
  9. package/dist/exports/client/index.d.ts.map +1 -1
  10. package/dist/exports/client/index.js +1 -1
  11. package/dist/exports/client/index.js.map +3 -3
  12. package/dist/forms/Form/index.d.ts.map +1 -1
  13. package/dist/forms/Form/index.js +1 -4
  14. package/dist/forms/Form/index.js.map +1 -1
  15. package/dist/providers/Auth/index.d.ts +56 -2
  16. package/dist/providers/Auth/index.d.ts.map +1 -1
  17. package/dist/providers/Auth/index.js +135 -283
  18. package/dist/providers/Auth/index.js.map +1 -1
  19. package/dist/providers/FormErrorHandler/index.d.ts +1 -5
  20. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -1
  21. package/dist/providers/FormErrorHandler/index.js.map +1 -1
  22. package/dist/providers/Root/index.js +4 -4
  23. package/dist/providers/Root/index.js.map +1 -1
  24. package/dist/providers/RouteTransition/ProgressBar/index.js +1 -4
  25. package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
  26. package/dist/providers/RouteTransition/index.d.ts +0 -2
  27. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  28. package/dist/providers/RouteTransition/index.js +14 -42
  29. package/dist/providers/RouteTransition/index.js.map +1 -1
  30. package/dist/styles.css +1 -1
  31. package/dist/utilities/filterOutUploadFields.d.ts.map +1 -1
  32. package/dist/utilities/filterOutUploadFields.js +1 -1
  33. package/dist/utilities/filterOutUploadFields.js.map +1 -1
  34. package/package.json +5 -5
  35. package/dist/providers/Auth/AuthSessionDebug/index.css +0 -48
  36. package/dist/providers/Auth/AuthSessionDebug/index.d.ts +0 -13
  37. package/dist/providers/Auth/AuthSessionDebug/index.d.ts.map +0 -1
  38. package/dist/providers/Auth/AuthSessionDebug/index.js +0 -93
  39. package/dist/providers/Auth/AuthSessionDebug/index.js.map +0 -1
  40. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts +0 -21
  41. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts.map +0 -1
  42. package/dist/providers/Auth/AuthSessionDebug/utilities.js +0 -53
  43. package/dist/providers/Auth/AuthSessionDebug/utilities.js.map +0 -1
  44. package/dist/providers/Auth/authSessionRequests.d.ts +0 -27
  45. package/dist/providers/Auth/authSessionRequests.d.ts.map +0 -1
  46. package/dist/providers/Auth/authSessionRequests.js +0 -119
  47. package/dist/providers/Auth/authSessionRequests.js.map +0 -1
  48. package/dist/providers/Auth/authSessionRequests.spec.js +0 -121
  49. package/dist/providers/Auth/authSessionRequests.spec.js.map +0 -1
  50. package/dist/providers/Auth/sessionActivity.d.ts +0 -23
  51. package/dist/providers/Auth/sessionActivity.d.ts.map +0 -1
  52. package/dist/providers/Auth/sessionActivity.js +0 -49
  53. package/dist/providers/Auth/sessionActivity.js.map +0 -1
  54. package/dist/providers/Auth/sessionActivity.spec.js +0 -44
  55. package/dist/providers/Auth/sessionActivity.spec.js.map +0 -1
  56. package/dist/providers/Auth/sessionTiming.d.ts +0 -11
  57. package/dist/providers/Auth/sessionTiming.d.ts.map +0 -1
  58. package/dist/providers/Auth/sessionTiming.js +0 -18
  59. package/dist/providers/Auth/sessionTiming.js.map +0 -1
  60. package/dist/providers/Auth/tabSessionSync/index.d.ts +0 -17
  61. package/dist/providers/Auth/tabSessionSync/index.d.ts.map +0 -1
  62. package/dist/providers/Auth/tabSessionSync/index.js +0 -263
  63. package/dist/providers/Auth/tabSessionSync/index.js.map +0 -1
  64. package/dist/providers/Auth/tabSessionSync/index.spec.js +0 -463
  65. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +0 -1
  66. package/dist/providers/Auth/tabSessionSync/types.d.ts +0 -107
  67. package/dist/providers/Auth/tabSessionSync/types.d.ts.map +0 -1
  68. package/dist/providers/Auth/tabSessionSync/types.js +0 -6
  69. package/dist/providers/Auth/tabSessionSync/types.js.map +0 -1
  70. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts +0 -11
  71. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts.map +0 -1
  72. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js +0 -90
  73. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js.map +0 -1
  74. package/dist/providers/Auth/tabSessionSync/utilities.d.ts +0 -26
  75. package/dist/providers/Auth/tabSessionSync/utilities.d.ts.map +0 -1
  76. package/dist/providers/Auth/tabSessionSync/utilities.js +0 -159
  77. package/dist/providers/Auth/tabSessionSync/utilities.js.map +0 -1
  78. package/dist/providers/Auth/types.d.ts +0 -66
  79. package/dist/providers/Auth/types.d.ts.map +0 -1
  80. package/dist/providers/Auth/types.js +0 -2
  81. package/dist/providers/Auth/types.js.map +0 -1
  82. package/dist/providers/Auth/useAuthSessionTimers.d.ts +0 -26
  83. package/dist/providers/Auth/useAuthSessionTimers.d.ts.map +0 -1
  84. package/dist/providers/Auth/useAuthSessionTimers.js +0 -203
  85. package/dist/providers/Auth/useAuthSessionTimers.js.map +0 -1
  86. package/dist/providers/Auth/useAuthSessionTimers.spec.js +0 -311
  87. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +0 -1
  88. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +0 -44
  89. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"filterOutUploadFields.d.ts","sourceRoot":"","sources":["../../src/utilities/filterOutUploadFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAElD,eAAO,MAAM,qBAAqB,WAAY,mBAAmB,EAAE,KAAG,mBAAmB,EAiBxF,CAAA"}
1
+ {"version":3,"file":"filterOutUploadFields.d.ts","sourceRoot":"","sources":["../../src/utilities/filterOutUploadFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAElD,eAAO,MAAM,qBAAqB,WAAY,mBAAmB,EAAE,KAAG,mBAAmB,EAkBxF,CAAA"}
@@ -1,6 +1,6 @@
1
1
  export const filterOutUploadFields = fields => {
2
2
  // List of reserved upload field names
3
- const baseUploadFieldNames = ['file', 'mimeType', 'thumbnailURL', 'width', 'height', 'filesize', 'filename', 'url', 'focalX', 'focalY', 'sizes'];
3
+ const baseUploadFieldNames = ['file', 'mimeType', 'thumbnailURL', 'width', 'height', 'filesize', 'filename', 'url', 'cropRect', 'focalX', 'focalY', 'sizes'];
4
4
  return fields.filter(field => !baseUploadFieldNames.includes('name' in field && field.name));
5
5
  };
6
6
  //# sourceMappingURL=filterOutUploadFields.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterOutUploadFields.js","names":["filterOutUploadFields","fields","baseUploadFieldNames","filter","field","includes","name"],"sources":["../../src/utilities/filterOutUploadFields.ts"],"sourcesContent":["import type { FieldWithPathClient } from 'payload'\n\nexport const filterOutUploadFields = (fields: FieldWithPathClient[]): FieldWithPathClient[] => {\n // List of reserved upload field names\n const baseUploadFieldNames = [\n 'file',\n 'mimeType',\n 'thumbnailURL',\n 'width',\n 'height',\n 'filesize',\n 'filename',\n 'url',\n 'focalX',\n 'focalY',\n 'sizes',\n ]\n\n return fields.filter((field) => !baseUploadFieldNames.includes('name' in field && field.name))\n}\n"],"mappings":"AAEA,OAAO,MAAMA,qBAAA,GAAyBC,MAAA;EACpC;EACA,MAAMC,oBAAA,GAAuB,CAC3B,QACA,YACA,gBACA,SACA,UACA,YACA,YACA,OACA,UACA,UACA,QACD;EAED,OAAOD,MAAA,CAAOE,MAAM,CAAEC,KAAA,IAAU,CAACF,oBAAA,CAAqBG,QAAQ,CAAC,UAAUD,KAAA,IAASA,KAAA,CAAME,IAAI;AAC9F","ignoreList":[]}
1
+ {"version":3,"file":"filterOutUploadFields.js","names":["filterOutUploadFields","fields","baseUploadFieldNames","filter","field","includes","name"],"sources":["../../src/utilities/filterOutUploadFields.ts"],"sourcesContent":["import type { FieldWithPathClient } from 'payload'\n\nexport const filterOutUploadFields = (fields: FieldWithPathClient[]): FieldWithPathClient[] => {\n // List of reserved upload field names\n const baseUploadFieldNames = [\n 'file',\n 'mimeType',\n 'thumbnailURL',\n 'width',\n 'height',\n 'filesize',\n 'filename',\n 'url',\n 'cropRect',\n 'focalX',\n 'focalY',\n 'sizes',\n ]\n\n return fields.filter((field) => !baseUploadFieldNames.includes('name' in field && field.name))\n}\n"],"mappings":"AAEA,OAAO,MAAMA,qBAAA,GAAyBC,MAAA;EACpC;EACA,MAAMC,oBAAA,GAAuB,CAC3B,QACA,YACA,gBACA,SACA,UACA,YACA,YACA,OACA,YACA,UACA,UACA,QACD;EAED,OAAOD,MAAA,CAAOE,MAAM,CAAEC,KAAA,IAAU,CAACF,oBAAA,CAAqBG,QAAQ,CAAC,UAAUD,KAAA,IAASA,KAAA,CAAME,IAAI;AAC9F","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/ui",
3
- "version": "4.0.0-internal.f11981a",
3
+ "version": "4.0.0-internal.f715c6e",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -289,7 +289,7 @@
289
289
  "ts-essentials": "10.0.3",
290
290
  "use-context-selector": "2.0.0",
291
291
  "uuid": "14.0.0",
292
- "@payloadcms/translations": "4.0.0-internal.f11981a"
292
+ "@payloadcms/translations": "4.0.0-internal.f715c6e"
293
293
  },
294
294
  "devDependencies": {
295
295
  "@babel/cli": "7.27.2",
@@ -303,13 +303,13 @@
303
303
  "babel-plugin-react-compiler": "19.1.0-rc.3",
304
304
  "esbuild": "0.27.1",
305
305
  "esbuild-sass-plugin": "3.3.1",
306
- "payload": "4.0.0-internal.f11981a",
307
- "@payloadcms/eslint-config": "3.28.0"
306
+ "@payloadcms/eslint-config": "3.28.0",
307
+ "payload": "4.0.0-internal.f715c6e"
308
308
  },
309
309
  "peerDependencies": {
310
310
  "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
311
311
  "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
312
- "payload": "4.0.0-internal.f11981a"
312
+ "payload": "4.0.0-internal.f715c6e"
313
313
  },
314
314
  "engines": {
315
315
  "node": ">=24.15.0"
@@ -1,48 +0,0 @@
1
- @layer payload-default {
2
- .auth-session-debug {
3
- background: rgba(20, 20, 24, 0.92);
4
- border: 1px solid rgba(255, 255, 255, 0.2);
5
- border-radius: 8px;
6
- bottom: 16px;
7
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
8
- color: #fff;
9
- display: grid;
10
- font-family: monospace;
11
- font-size: 13px;
12
- gap: 6px;
13
- line-height: 1.4;
14
- padding: 12px 14px;
15
- pointer-events: none;
16
- position: fixed;
17
- right: 16px;
18
- z-index: 1000;
19
- }
20
-
21
- .auth-session-debug__activity {
22
- align-items: center;
23
- display: flex;
24
- gap: 8px;
25
- }
26
-
27
- .auth-session-debug__activity-indicator {
28
- border-radius: 50%;
29
- height: 8px;
30
- width: 8px;
31
- }
32
-
33
- .auth-session-debug__activity--waiting .auth-session-debug__activity-indicator {
34
- background: #a1a1aa;
35
- }
36
-
37
- .auth-session-debug__activity--tracking .auth-session-debug__activity-indicator {
38
- background: #f59e0b;
39
- }
40
-
41
- .auth-session-debug__activity--will-refresh .auth-session-debug__activity-indicator {
42
- background: #22c55e;
43
- }
44
-
45
- .auth-session-debug__activity--closed .auth-session-debug__activity-indicator {
46
- background: #ef4444;
47
- }
48
- }
@@ -1,13 +0,0 @@
1
- import React from 'react';
2
- import './index.css';
3
- type Props = {
4
- children?: React.ReactNode;
5
- };
6
- /**
7
- * Displays the current auth session's expiration, refresh, and activity lifecycle.
8
- *
9
- * Register this component as an admin provider to render it on every admin page.
10
- */
11
- export declare const AuthSessionDebug: React.FC<Props>;
12
- export {};
13
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/providers/Auth/AuthSessionDebug/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,OAAO,aAAa,CAAA;AAEpB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkD5C,CAAA"}
@@ -1,93 +0,0 @@
1
- 'use client';
2
-
3
- import { c as _c } from "react/compiler-runtime";
4
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
5
- import React from 'react';
6
- import { useAuth } from '../index.js';
7
- import { formatCountdown, getActivityStatus, getActivityWindowStatus, getRefreshWindowStatus } from './utilities.js';
8
- import './index.css';
9
- /**
10
- * Displays the current auth session's expiration, refresh, and activity lifecycle.
11
- *
12
- * Register this component as an admin provider to render it on every admin page.
13
- */
14
- export const AuthSessionDebug = t0 => {
15
- const $ = _c(7);
16
- const {
17
- children
18
- } = t0;
19
- const {
20
- authSession
21
- } = useAuth();
22
- const [nowMs, setNowMs] = React.useState();
23
- let t1;
24
- let t2;
25
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
26
- t1 = () => {
27
- const updateCountdown = () => setNowMs(Date.now());
28
- updateCountdown();
29
- const interval = window.setInterval(updateCountdown, 1000);
30
- return () => window.clearInterval(interval);
31
- };
32
- t2 = [];
33
- $[0] = t1;
34
- $[1] = t2;
35
- } else {
36
- t1 = $[0];
37
- t2 = $[1];
38
- }
39
- React.useEffect(t1, t2);
40
- const expiresInMs = Math.max(0, (authSession?.expiresAt ?? 0) - (nowMs ?? 0));
41
- let t3;
42
- if ($[2] !== authSession || $[3] !== children || $[4] !== expiresInMs || $[5] !== nowMs) {
43
- const activityStatus = authSession && nowMs !== undefined ? getActivityStatus({
44
- authSession,
45
- nowMs
46
- }) : "waiting";
47
- const activityWindowStatus = authSession && nowMs !== undefined ? getActivityWindowStatus({
48
- activityStatus,
49
- authSession,
50
- nowMs
51
- }) : "";
52
- const refreshWindowStatus = authSession && nowMs !== undefined ? getRefreshWindowStatus({
53
- authSession,
54
- nowMs
55
- }) : "";
56
- t3 = _jsxs(_Fragment, {
57
- children: [children, authSession && nowMs !== undefined ? _jsxs("aside", {
58
- "aria-label": "Auth session countdown",
59
- className: "auth-session-debug",
60
- "data-auth-session-debug": true,
61
- "data-auth-session-expires-at": authSession.expiresAt,
62
- children: [_jsx("strong", {
63
- children: "Auth session"
64
- }), _jsxs("span", {
65
- children: ["Access expires in: ", formatCountdown(expiresInMs)]
66
- }), _jsxs("span", {
67
- children: ["Refresh window: ", _jsx("span", {
68
- "data-auth-session-refresh-window": true,
69
- children: refreshWindowStatus
70
- })]
71
- }), _jsxs("span", {
72
- className: `auth-session-debug__activity auth-session-debug__activity--${activityStatus}`,
73
- children: [_jsx("span", {
74
- "aria-hidden": true,
75
- className: "auth-session-debug__activity-indicator"
76
- }), "Activity window: ", _jsx("span", {
77
- "data-auth-session-activity": true,
78
- children: activityWindowStatus
79
- })]
80
- })]
81
- }) : null]
82
- });
83
- $[2] = authSession;
84
- $[3] = children;
85
- $[4] = expiresInMs;
86
- $[5] = nowMs;
87
- $[6] = t3;
88
- } else {
89
- t3 = $[6];
90
- }
91
- return t3;
92
- };
93
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","useAuth","formatCountdown","getActivityStatus","getActivityWindowStatus","getRefreshWindowStatus","AuthSessionDebug","t0","$","children","authSession","nowMs","setNowMs","useState","t1","t2","Symbol","for","updateCountdown","Date","now","interval","window","setInterval","clearInterval","useEffect","expiresInMs","Math","max","expiresAt","t3","activityStatus","undefined","activityWindowStatus","refreshWindowStatus","_jsxs","_Fragment","className","_jsx"],"sources":["../../../../src/providers/Auth/AuthSessionDebug/index.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { useAuth } from '../index.js'\nimport {\n formatCountdown,\n getActivityStatus,\n getActivityWindowStatus,\n getRefreshWindowStatus,\n} from './utilities.js'\nimport './index.css'\n\ntype Props = {\n children?: React.ReactNode\n}\n\n/**\n * Displays the current auth session's expiration, refresh, and activity lifecycle.\n *\n * Register this component as an admin provider to render it on every admin page.\n */\nexport const AuthSessionDebug: React.FC<Props> = ({ children }) => {\n const { authSession } = useAuth()\n const [nowMs, setNowMs] = React.useState<number>()\n\n React.useEffect(() => {\n const updateCountdown = () => setNowMs(Date.now())\n\n updateCountdown()\n\n const interval = window.setInterval(updateCountdown, 1000)\n\n return () => window.clearInterval(interval)\n }, [])\n\n const expiresInMs = Math.max(0, (authSession?.expiresAt ?? 0) - (nowMs ?? 0))\n const activityStatus =\n authSession && nowMs !== undefined ? getActivityStatus({ authSession, nowMs }) : 'waiting'\n const activityWindowStatus =\n authSession && nowMs !== undefined\n ? getActivityWindowStatus({ activityStatus, authSession, nowMs })\n : ''\n const refreshWindowStatus =\n authSession && nowMs !== undefined ? getRefreshWindowStatus({ authSession, nowMs }) : ''\n\n return (\n <>\n {children}\n\n {authSession && nowMs !== undefined ? (\n <aside\n aria-label=\"Auth session countdown\"\n className=\"auth-session-debug\"\n data-auth-session-debug\n data-auth-session-expires-at={authSession.expiresAt}\n >\n <strong>Auth session</strong>\n <span>Access expires in: {formatCountdown(expiresInMs)}</span>\n <span>\n Refresh window: <span data-auth-session-refresh-window>{refreshWindowStatus}</span>\n </span>\n <span\n className={`auth-session-debug__activity auth-session-debug__activity--${activityStatus}`}\n >\n <span aria-hidden className=\"auth-session-debug__activity-indicator\" />\n Activity window: <span data-auth-session-activity>{activityWindowStatus}</span>\n </span>\n </aside>\n ) : null}\n </>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,MAAW;AAElB,SAASC,OAAO,QAAQ;AACxB,SACEC,eAAe,EACfC,iBAAiB,EACjBC,uBAAuB,EACvBC,sBAAsB,QACjB;AACP,OAAO;AAMP;;;;;AAKA,OAAO,MAAMC,gBAAA,GAAoCC,EAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAAC;IAAAU;EAAA,IAAAF,EAAY;EAC5D;IAAAG;EAAA,IAAwBT,OAAA;EACxB,OAAAU,KAAA,EAAAC,QAAA,IAA0BZ,KAAA,CAAAa,QAAA,CAAc;EAAA,IAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAP,CAAA,QAAAQ,MAAA,CAAAC,GAAA;IAExBH,EAAA,GAAAA,CAAA;MACd,MAAAI,eAAA,GAAAA,CAAA,KAA8BN,QAAA,CAASO,IAAA,CAAAC,GAAA,CAAQ;MAE/CF,eAAA;MAEA,MAAAG,QAAA,GAAiBC,MAAA,CAAAC,WAAA,CAAmBL,eAAA,MAAiB;MAAA,aAExCI,MAAA,CAAAE,aAAA,CAAqBH,QAAA;IAAA;IACjCN,EAAA;IAAEP,CAAA,MAAAM,EAAA;IAAAN,CAAA,MAAAO,EAAA;EAAA;IAAAD,EAAA,GAAAN,CAAA;IAAAO,EAAA,GAAAP,CAAA;EAAA;EARLR,KAAA,CAAAyB,SAAA,CAAgBX,EAQhB,EAAGC,EAAE;EAEL,MAAAW,WAAA,GAAoBC,IAAA,CAAAC,GAAA,IAAY,CAAClB,WAAA,EAAAmB,SAAA,KAA0B,KAAMlB,KAAA,KAAS;EAAA,IAAAmB,EAAA;EAAA,IAAAtB,CAAA,QAAAE,WAAA,IAAAF,CAAA,QAAAC,QAAA,IAAAD,CAAA,QAAAkB,WAAA,IAAAlB,CAAA,QAAAG,KAAA;IAC1E,MAAAoB,cAAA,GACErB,WAAA,IAAeC,KAAA,KAAAqB,SAAU,GAAY7B,iBAAA;MAAAO,WAAA;MAAAC;IAAA,CAAuC,IAAK;IACnF,MAAAsB,oBAAA,GACEvB,WAAA,IAAeC,KAAA,KAAAqB,SAAU,GACrB5B,uBAAA;MAAA2B,cAAA;MAAArB,WAAA;MAAAC;IAAA,CAA6D,IAC7D;IACN,MAAAuB,mBAAA,GACExB,WAAA,IAAeC,KAAA,KAAAqB,SAAU,GAAY3B,sBAAA;MAAAK,WAAA;MAAAC;IAAA,CAA4C,IAAK;IAGtFmB,EAAA,GAAAK,KAAA,CAAAC,SAAA;MAAA3B,QAAA,GACGA,QAAA,EAEAC,WAAA,IAAeC,KAAA,KAAAqB,SAAU,GACxBG,KAAA,CAAC;QAAA,cACY;QAAAE,SAAA,EACD;QAAA;QAAA,gCAEoB3B,WAAA,CAAAmB,SAAA;QAAApB,QAAA,GAE9B6B,IAAA,CAAC;UAAA7B,QAAA,EAAO;QAAA,C,GACR0B,KAAA,CAAC;UAAA1B,QAAA,GAAK,uBAAoBP,eAAA,CAAgBwB,WAAA;QAAA,C,GAC1CS,KAAA,CAAC;UAAA1B,QAAA,GAAK,oBACY6B,IAAA,CAAC;YAAA;YAAA7B,QAAA,EAAuCyB;UAAA,C;YAE1DC,KAAA,CAAC;UAAAE,SAAA,EACY,8DAA8DN,cAAA,EAAgB;UAAAtB,QAAA,GAEzF6B,IAAA,CAAC;YAAA;YAAAD,SAAA,EAA2B;UAAA,C,GAA2C,qBACtDC,IAAA,CAAC;YAAA;YAAA7B,QAAA,EAAiCwB;UAAA,C;;eAGrD;IAAA,C;;;;;;;;;SAtBNH,E;CAyBJ","ignoreList":[]}
@@ -1,21 +0,0 @@
1
- import type { AuthSession } from '../types.js';
2
- export type ActivityStatus = 'closed' | 'tracking' | 'waiting' | 'will-refresh';
3
- type GetActivityStatusArgs = {
4
- authSession: AuthSession;
5
- nowMs: number;
6
- };
7
- type GetActivityWindowStatusArgs = {
8
- activityStatus: ActivityStatus;
9
- authSession: AuthSession;
10
- nowMs: number;
11
- };
12
- type GetRefreshWindowStatusArgs = {
13
- authSession: AuthSession;
14
- nowMs: number;
15
- };
16
- export declare const formatCountdown: (durationMs: number) => string;
17
- export declare const getActivityStatus: ({ authSession, nowMs, }: GetActivityStatusArgs) => ActivityStatus;
18
- export declare const getActivityWindowStatus: ({ activityStatus, authSession, nowMs, }: GetActivityWindowStatusArgs) => string;
19
- export declare const getRefreshWindowStatus: ({ authSession, nowMs, }: GetRefreshWindowStatusArgs) => string;
20
- export {};
21
- //# sourceMappingURL=utilities.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../../src/providers/Auth/AuthSessionDebug/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,cAAc,CAAA;AAE/E,KAAK,qBAAqB,GAAG;IAC3B,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,0BAA0B,GAAG;IAChC,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,eAAe,eAAgB,MAAM,KAAG,MAMpD,CAAA;AAED,eAAO,MAAM,iBAAiB,4BAG3B,qBAAqB,KAAG,cAc1B,CAAA;AAED,eAAO,MAAM,uBAAuB,4CAIjC,2BAA2B,KAAG,MAkBhC,CAAA;AAED,eAAO,MAAM,sBAAsB,4BAGhC,0BAA0B,KAAG,MAU/B,CAAA"}
@@ -1,53 +0,0 @@
1
- export const formatCountdown = durationMs => {
2
- const totalSeconds = Math.max(0, Math.ceil(durationMs / 1000));
3
- const minutes = Math.floor(totalSeconds / 60);
4
- const seconds = totalSeconds % 60;
5
- return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
6
- };
7
- export const getActivityStatus = ({
8
- authSession,
9
- nowMs
10
- }) => {
11
- if (nowMs >= authSession.reminderStartsAt) {
12
- return 'closed';
13
- }
14
- if (authSession.activityRecorded) {
15
- return 'will-refresh';
16
- }
17
- if (nowMs >= authSession.activityTrackingStartsAt) {
18
- return 'tracking';
19
- }
20
- return 'waiting';
21
- };
22
- export const getActivityWindowStatus = ({
23
- activityStatus,
24
- authSession,
25
- nowMs
26
- }) => {
27
- if (activityStatus === 'closed') {
28
- return 'Closed · no refresh';
29
- }
30
- if (activityStatus === 'will-refresh') {
31
- if (nowMs < authSession.refreshStartsAt) {
32
- return `Recorded · refresh in ${formatCountdown(authSession.refreshStartsAt - nowMs)}`;
33
- }
34
- return 'Recorded · refreshing';
35
- }
36
- if (activityStatus === 'tracking') {
37
- return `Open · closes in ${formatCountdown(authSession.reminderStartsAt - nowMs)}`;
38
- }
39
- return `Opens in ${formatCountdown(authSession.activityTrackingStartsAt - nowMs)}`;
40
- };
41
- export const getRefreshWindowStatus = ({
42
- authSession,
43
- nowMs
44
- }) => {
45
- if (nowMs >= authSession.reminderStartsAt) {
46
- return 'Closed';
47
- }
48
- if (nowMs >= authSession.refreshStartsAt) {
49
- return 'Open';
50
- }
51
- return `Opens in ${formatCountdown(authSession.refreshStartsAt - nowMs)}`;
52
- };
53
- //# sourceMappingURL=utilities.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utilities.js","names":["formatCountdown","durationMs","totalSeconds","Math","max","ceil","minutes","floor","seconds","String","padStart","getActivityStatus","authSession","nowMs","reminderStartsAt","activityRecorded","activityTrackingStartsAt","getActivityWindowStatus","activityStatus","refreshStartsAt","getRefreshWindowStatus"],"sources":["../../../../src/providers/Auth/AuthSessionDebug/utilities.ts"],"sourcesContent":["import type { AuthSession } from '../types.js'\n\nexport type ActivityStatus = 'closed' | 'tracking' | 'waiting' | 'will-refresh'\n\ntype GetActivityStatusArgs = {\n authSession: AuthSession\n nowMs: number\n}\n\ntype GetActivityWindowStatusArgs = {\n activityStatus: ActivityStatus\n authSession: AuthSession\n nowMs: number\n}\n\ntype GetRefreshWindowStatusArgs = {\n authSession: AuthSession\n nowMs: number\n}\n\nexport const formatCountdown = (durationMs: number): string => {\n const totalSeconds = Math.max(0, Math.ceil(durationMs / 1000))\n const minutes = Math.floor(totalSeconds / 60)\n const seconds = totalSeconds % 60\n\n return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`\n}\n\nexport const getActivityStatus = ({\n authSession,\n nowMs,\n}: GetActivityStatusArgs): ActivityStatus => {\n if (nowMs >= authSession.reminderStartsAt) {\n return 'closed'\n }\n\n if (authSession.activityRecorded) {\n return 'will-refresh'\n }\n\n if (nowMs >= authSession.activityTrackingStartsAt) {\n return 'tracking'\n }\n\n return 'waiting'\n}\n\nexport const getActivityWindowStatus = ({\n activityStatus,\n authSession,\n nowMs,\n}: GetActivityWindowStatusArgs): string => {\n if (activityStatus === 'closed') {\n return 'Closed · no refresh'\n }\n\n if (activityStatus === 'will-refresh') {\n if (nowMs < authSession.refreshStartsAt) {\n return `Recorded · refresh in ${formatCountdown(authSession.refreshStartsAt - nowMs)}`\n }\n\n return 'Recorded · refreshing'\n }\n\n if (activityStatus === 'tracking') {\n return `Open · closes in ${formatCountdown(authSession.reminderStartsAt - nowMs)}`\n }\n\n return `Opens in ${formatCountdown(authSession.activityTrackingStartsAt - nowMs)}`\n}\n\nexport const getRefreshWindowStatus = ({\n authSession,\n nowMs,\n}: GetRefreshWindowStatusArgs): string => {\n if (nowMs >= authSession.reminderStartsAt) {\n return 'Closed'\n }\n\n if (nowMs >= authSession.refreshStartsAt) {\n return 'Open'\n }\n\n return `Opens in ${formatCountdown(authSession.refreshStartsAt - nowMs)}`\n}\n"],"mappings":"AAoBA,OAAO,MAAMA,eAAA,GAAmBC,UAAA;EAC9B,MAAMC,YAAA,GAAeC,IAAA,CAAKC,GAAG,CAAC,GAAGD,IAAA,CAAKE,IAAI,CAACJ,UAAA,GAAa;EACxD,MAAMK,OAAA,GAAUH,IAAA,CAAKI,KAAK,CAACL,YAAA,GAAe;EAC1C,MAAMM,OAAA,GAAUN,YAAA,GAAe;EAE/B,OAAO,GAAGO,MAAA,CAAOH,OAAA,EAASI,QAAQ,CAAC,GAAG,QAAQD,MAAA,CAAOD,OAAA,EAASE,QAAQ,CAAC,GAAG,MAAM;AAClF;AAEA,OAAO,MAAMC,iBAAA,GAAoBA,CAAC;EAChCC,WAAW;EACXC;AAAK,CACiB;EACtB,IAAIA,KAAA,IAASD,WAAA,CAAYE,gBAAgB,EAAE;IACzC,OAAO;EACT;EAEA,IAAIF,WAAA,CAAYG,gBAAgB,EAAE;IAChC,OAAO;EACT;EAEA,IAAIF,KAAA,IAASD,WAAA,CAAYI,wBAAwB,EAAE;IACjD,OAAO;EACT;EAEA,OAAO;AACT;AAEA,OAAO,MAAMC,uBAAA,GAA0BA,CAAC;EACtCC,cAAc;EACdN,WAAW;EACXC;AAAK,CACuB;EAC5B,IAAIK,cAAA,KAAmB,UAAU;IAC/B,OAAO;EACT;EAEA,IAAIA,cAAA,KAAmB,gBAAgB;IACrC,IAAIL,KAAA,GAAQD,WAAA,CAAYO,eAAe,EAAE;MACvC,OAAO,yBAAyBnB,eAAA,CAAgBY,WAAA,CAAYO,eAAe,GAAGN,KAAA,GAAQ;IACxF;IAEA,OAAO;EACT;EAEA,IAAIK,cAAA,KAAmB,YAAY;IACjC,OAAO,oBAAoBlB,eAAA,CAAgBY,WAAA,CAAYE,gBAAgB,GAAGD,KAAA,GAAQ;EACpF;EAEA,OAAO,YAAYb,eAAA,CAAgBY,WAAA,CAAYI,wBAAwB,GAAGH,KAAA,GAAQ;AACpF;AAEA,OAAO,MAAMO,sBAAA,GAAyBA,CAAC;EACrCR,WAAW;EACXC;AAAK,CACsB;EAC3B,IAAIA,KAAA,IAASD,WAAA,CAAYE,gBAAgB,EAAE;IACzC,OAAO;EACT;EAEA,IAAID,KAAA,IAASD,WAAA,CAAYO,eAAe,EAAE;IACxC,OAAO;EACT;EAEA,OAAO,YAAYnB,eAAA,CAAgBY,WAAA,CAAYO,eAAe,GAAGN,KAAA,GAAQ;AAC3E","ignoreList":[]}
@@ -1,27 +0,0 @@
1
- import type { AuthenticatedUser } from 'payload';
2
- export type AuthRequestContext = {
3
- /** Accepts the result when its session is still active and cancels any deferred invalidation. */
4
- acceptResult: () => boolean;
5
- /** Invalidates the session after newer queued auth requests have had a chance to restore it. */
6
- invalidateWhenIdle: (invalidate: () => void) => void;
7
- /** Whether the session changed or logout began after this request was queued. */
8
- isResultStale: () => boolean;
9
- };
10
- export type AuthSessionRequests = {
11
- discardPendingResults: () => void;
12
- isLoggingOut: () => boolean;
13
- logOut: ({ clearSession, request, }: {
14
- clearSession: () => void;
15
- request: () => Promise<void>;
16
- }) => Promise<void>;
17
- queue: <Result>(request: (context: AuthRequestContext) => Promise<Result>) => Promise<Result>;
18
- refresh: (request: (context: AuthRequestContext) => Promise<AuthenticatedUser | null>) => Promise<AuthenticatedUser | null>;
19
- };
20
- /**
21
- * Coordinates requests that read or update the current auth session.
22
- *
23
- * Requests run in order, concurrent refreshes and logouts share a promise, and outdated results can
24
- * be discarded after the session changes.
25
- */
26
- export declare function createAuthSessionRequests(): AuthSessionRequests;
27
- //# sourceMappingURL=authSessionRequests.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authSessionRequests.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/authSessionRequests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iGAAiG;IACjG,YAAY,EAAE,MAAM,OAAO,CAAA;IAC3B,gGAAgG;IAChG,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IACpD,iFAAiF;IACjF,aAAa,EAAE,MAAM,OAAO,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,qBAAqB,EAAE,MAAM,IAAI,CAAA;IACjC,YAAY,EAAE,MAAM,OAAO,CAAA;IAC3B,MAAM,EAAE,CAAC,EACP,YAAY,EACZ,OAAO,GACR,EAAE;QACD,YAAY,EAAE,MAAM,IAAI,CAAA;QACxB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAC7B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7F,OAAO,EAAE,CACP,OAAO,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,KACxE,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;CACvC,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,mBAAmB,CA0J/D"}
@@ -1,119 +0,0 @@
1
- /**
2
- * Coordinates requests that read or update the current auth session.
3
- *
4
- * Requests run in order, concurrent refreshes and logouts share a promise, and outdated results can
5
- * be discarded after the session changes.
6
- */export function createAuthSessionRequests() {
7
- let authRequestQueue = Promise.resolve();
8
- let authRequestSequence = 0;
9
- let isLoggingOut = false;
10
- let logoutRequest;
11
- let pendingAuthInvalidation;
12
- let refreshRequest;
13
- let sessionGeneration = 0;
14
- const clearPendingInvalidation = () => {
15
- pendingAuthInvalidation = undefined;
16
- };
17
- const discardPendingResults = () => {
18
- sessionGeneration += 1;
19
- clearPendingInvalidation();
20
- };
21
- const queue = request => {
22
- const requestGeneration = sessionGeneration;
23
- const requestSequence = ++authRequestSequence;
24
- const runRequest = async () => {
25
- const isResultStale = () => sessionGeneration !== requestGeneration || isLoggingOut;
26
- const result = await request({
27
- acceptResult: () => {
28
- if (isResultStale()) {
29
- return false;
30
- }
31
- clearPendingInvalidation();
32
- return true;
33
- },
34
- invalidateWhenIdle: invalidate => {
35
- if (isResultStale()) {
36
- return;
37
- }
38
- if (requestSequence < authRequestSequence) {
39
- pendingAuthInvalidation = {
40
- generation: requestGeneration,
41
- run: invalidate
42
- };
43
- } else {
44
- invalidate();
45
- }
46
- },
47
- isResultStale
48
- });
49
- if (requestSequence === authRequestSequence) {
50
- const pendingInvalidation = pendingAuthInvalidation;
51
- clearPendingInvalidation();
52
- if (pendingInvalidation?.generation === sessionGeneration) {
53
- pendingInvalidation.run();
54
- }
55
- }
56
- return result;
57
- };
58
- const queuedRequest = authRequestQueue.then(runRequest, runRequest);
59
- authRequestQueue = queuedRequest.then(() => undefined, () => undefined);
60
- return queuedRequest;
61
- };
62
- const refresh = request => {
63
- const requestGeneration = sessionGeneration;
64
- const activeRequest = refreshRequest;
65
- if (isLoggingOut) {
66
- return Promise.resolve(null);
67
- }
68
- if (activeRequest?.generation === requestGeneration) {
69
- return activeRequest.promise;
70
- }
71
- const refreshPromise = queue(request);
72
- refreshRequest = {
73
- generation: requestGeneration,
74
- promise: refreshPromise
75
- };
76
- /** Stops sharing this refresh after it settles without clearing a newer refresh request. */
77
- const clearRefreshRequest = () => {
78
- if (refreshRequest?.promise === refreshPromise) {
79
- refreshRequest = undefined;
80
- }
81
- };
82
- void refreshPromise.then(clearRefreshRequest, clearRefreshRequest);
83
- return refreshPromise;
84
- };
85
- const logOut = ({
86
- clearSession,
87
- request
88
- }) => {
89
- if (logoutRequest !== undefined) {
90
- return logoutRequest;
91
- }
92
- isLoggingOut = true;
93
- clearSession();
94
- const pendingLogout = queue(async () => {
95
- try {
96
- await request();
97
- } finally {
98
- isLoggingOut = false;
99
- }
100
- });
101
- logoutRequest = pendingLogout;
102
- /** Stops sharing this logout after it settles without clearing a newer logout request. */
103
- const clearLogoutRequest = () => {
104
- if (logoutRequest === pendingLogout) {
105
- logoutRequest = undefined;
106
- }
107
- };
108
- void pendingLogout.then(clearLogoutRequest, clearLogoutRequest);
109
- return pendingLogout;
110
- };
111
- return {
112
- discardPendingResults,
113
- isLoggingOut: () => isLoggingOut,
114
- logOut,
115
- queue,
116
- refresh
117
- };
118
- }
119
- //# sourceMappingURL=authSessionRequests.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authSessionRequests.js","names":["createAuthSessionRequests","authRequestQueue","Promise","resolve","authRequestSequence","isLoggingOut","logoutRequest","pendingAuthInvalidation","refreshRequest","sessionGeneration","clearPendingInvalidation","undefined","discardPendingResults","queue","request","requestGeneration","requestSequence","runRequest","isResultStale","result","acceptResult","invalidateWhenIdle","invalidate","generation","run","pendingInvalidation","queuedRequest","then","refresh","activeRequest","promise","refreshPromise","clearRefreshRequest","logOut","clearSession","pendingLogout","clearLogoutRequest"],"sources":["../../../src/providers/Auth/authSessionRequests.ts"],"sourcesContent":["import type { AuthenticatedUser } from 'payload'\n\nexport type AuthRequestContext = {\n /** Accepts the result when its session is still active and cancels any deferred invalidation. */\n acceptResult: () => boolean\n /** Invalidates the session after newer queued auth requests have had a chance to restore it. */\n invalidateWhenIdle: (invalidate: () => void) => void\n /** Whether the session changed or logout began after this request was queued. */\n isResultStale: () => boolean\n}\n\nexport type AuthSessionRequests = {\n discardPendingResults: () => void\n isLoggingOut: () => boolean\n logOut: ({\n clearSession,\n request,\n }: {\n clearSession: () => void\n request: () => Promise<void>\n }) => Promise<void>\n queue: <Result>(request: (context: AuthRequestContext) => Promise<Result>) => Promise<Result>\n refresh: (\n request: (context: AuthRequestContext) => Promise<AuthenticatedUser | null>,\n ) => Promise<AuthenticatedUser | null>\n}\n\n/**\n * Coordinates requests that read or update the current auth session.\n *\n * Requests run in order, concurrent refreshes and logouts share a promise, and outdated results can\n * be discarded after the session changes.\n */\nexport function createAuthSessionRequests(): AuthSessionRequests {\n let authRequestQueue = Promise.resolve()\n let authRequestSequence = 0\n let isLoggingOut = false\n let logoutRequest: Promise<void> | undefined\n let pendingAuthInvalidation:\n | {\n generation: number\n run: () => void\n }\n | undefined\n let refreshRequest:\n | {\n generation: number\n promise: Promise<AuthenticatedUser | null>\n }\n | undefined\n let sessionGeneration = 0\n\n const clearPendingInvalidation = (): void => {\n pendingAuthInvalidation = undefined\n }\n\n const discardPendingResults = (): void => {\n sessionGeneration += 1\n clearPendingInvalidation()\n }\n\n const queue = <Result>(\n request: (context: AuthRequestContext) => Promise<Result>,\n ): Promise<Result> => {\n const requestGeneration = sessionGeneration\n const requestSequence = ++authRequestSequence\n const runRequest = async (): Promise<Result> => {\n const isResultStale = () => sessionGeneration !== requestGeneration || isLoggingOut\n const result = await request({\n acceptResult: () => {\n if (isResultStale()) {\n return false\n }\n\n clearPendingInvalidation()\n return true\n },\n invalidateWhenIdle: (invalidate) => {\n if (isResultStale()) {\n return\n }\n\n if (requestSequence < authRequestSequence) {\n pendingAuthInvalidation = { generation: requestGeneration, run: invalidate }\n } else {\n invalidate()\n }\n },\n isResultStale,\n })\n\n if (requestSequence === authRequestSequence) {\n const pendingInvalidation = pendingAuthInvalidation\n\n clearPendingInvalidation()\n\n if (pendingInvalidation?.generation === sessionGeneration) {\n pendingInvalidation.run()\n }\n }\n\n return result\n }\n const queuedRequest = authRequestQueue.then(runRequest, runRequest)\n\n authRequestQueue = queuedRequest.then(\n () => undefined,\n () => undefined,\n )\n\n return queuedRequest\n }\n\n const refresh = (\n request: (context: AuthRequestContext) => Promise<AuthenticatedUser | null>,\n ): Promise<AuthenticatedUser | null> => {\n const requestGeneration = sessionGeneration\n const activeRequest = refreshRequest\n\n if (isLoggingOut) {\n return Promise.resolve(null)\n }\n\n if (activeRequest?.generation === requestGeneration) {\n return activeRequest.promise\n }\n\n const refreshPromise = queue(request)\n\n refreshRequest = { generation: requestGeneration, promise: refreshPromise }\n /** Stops sharing this refresh after it settles without clearing a newer refresh request. */\n const clearRefreshRequest = () => {\n if (refreshRequest?.promise === refreshPromise) {\n refreshRequest = undefined\n }\n }\n\n void refreshPromise.then(clearRefreshRequest, clearRefreshRequest)\n\n return refreshPromise\n }\n\n const logOut = ({\n clearSession,\n request,\n }: {\n clearSession: () => void\n request: () => Promise<void>\n }): Promise<void> => {\n if (logoutRequest !== undefined) {\n return logoutRequest\n }\n\n isLoggingOut = true\n clearSession()\n\n const pendingLogout = queue(async () => {\n try {\n await request()\n } finally {\n isLoggingOut = false\n }\n })\n\n logoutRequest = pendingLogout\n /** Stops sharing this logout after it settles without clearing a newer logout request. */\n const clearLogoutRequest = () => {\n if (logoutRequest === pendingLogout) {\n logoutRequest = undefined\n }\n }\n\n void pendingLogout.then(\n clearLogoutRequest, // onSuccess\n clearLogoutRequest, // onFailure\n )\n\n return pendingLogout\n }\n\n return {\n discardPendingResults,\n isLoggingOut: () => isLoggingOut,\n logOut,\n queue,\n refresh,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,121 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { createAuthSessionRequests } from './authSessionRequests.js';
3
- describe('createAuthSessionRequests', () => {
4
- it('should serialize auth requests in queue order', async () => {
5
- const authRequests = createAuthSessionRequests();
6
- const first = createDeferred();
7
- const order = [];
8
- const firstRequest = authRequests.queue(async () => {
9
- order.push('first:start');
10
- await first.promise;
11
- order.push('first:end');
12
- });
13
- const secondRequest = authRequests.queue(async () => {
14
- order.push('second');
15
- });
16
- expect(order).toEqual([]);
17
- await Promise.resolve();
18
- expect(order).toEqual(['first:start']);
19
- first.resolve();
20
- await Promise.all([firstRequest, secondRequest]);
21
- expect(order).toEqual(['first:start', 'first:end', 'second']);
22
- });
23
- it('should share a refresh while session results remain current', async () => {
24
- const authRequests = createAuthSessionRequests();
25
- const refresh = createDeferred();
26
- let runs = 0;
27
- const run = () => authRequests.refresh(async () => {
28
- runs += 1;
29
- return refresh.promise;
30
- });
31
- const first = run();
32
- const second = run();
33
- expect(first).toBe(second);
34
- refresh.resolve(null);
35
- await Promise.all([first, second]);
36
- expect(runs).toBe(1);
37
- });
38
- it('should discard a queued result after the session changes', async () => {
39
- const authRequests = createAuthSessionRequests();
40
- const operation = createDeferred();
41
- let isResultStaleAfterSettlement = false;
42
- const request = authRequests.queue(async ({
43
- isResultStale
44
- }) => {
45
- await operation.promise;
46
- isResultStaleAfterSettlement = isResultStale();
47
- });
48
- await Promise.resolve();
49
- authRequests.discardPendingResults();
50
- operation.resolve();
51
- await request;
52
- expect(isResultStaleAfterSettlement).toBe(true);
53
- });
54
- it('should settle a logout once and prevent refresh from committing', async () => {
55
- const authRequests = createAuthSessionRequests();
56
- const logout = createDeferred();
57
- let clears = 0;
58
- let logoutRequests = 0;
59
- const first = authRequests.logOut({
60
- clearSession: () => {
61
- clears += 1;
62
- authRequests.discardPendingResults();
63
- },
64
- request: async () => {
65
- logoutRequests += 1;
66
- await logout.promise;
67
- }
68
- });
69
- const second = authRequests.logOut({
70
- clearSession: () => {
71
- clears += 1;
72
- },
73
- request: async () => {
74
- logoutRequests += 1;
75
- }
76
- });
77
- expect(first).toBe(second);
78
- expect(authRequests.isLoggingOut()).toBe(true);
79
- expect(await authRequests.refresh(async () => null)).toBeNull();
80
- logout.resolve();
81
- await first;
82
- expect({
83
- clears,
84
- logoutRequests
85
- }).toEqual({
86
- clears: 1,
87
- logoutRequests: 1
88
- });
89
- });
90
- it('should discard a deferred invalidation after the session changes', async () => {
91
- const authRequests = createAuthSessionRequests();
92
- let invalidations = 0;
93
- const first = authRequests.refresh(async ({
94
- invalidateWhenIdle
95
- }) => {
96
- invalidateWhenIdle(() => {
97
- invalidations += 1;
98
- });
99
- return null;
100
- });
101
- const second = authRequests.queue(async () => {
102
- authRequests.discardPendingResults();
103
- });
104
- await Promise.all([first, second]);
105
- expect(invalidations).toBe(0);
106
- });
107
- });
108
- function createDeferred() {
109
- let resolve;
110
- const promise = new Promise(resolvePromise => {
111
- resolve = resolvePromise;
112
- });
113
- if (!resolve) {
114
- throw new Error('Expected deferred promise resolver.');
115
- }
116
- return {
117
- promise,
118
- resolve
119
- };
120
- }
121
- //# sourceMappingURL=authSessionRequests.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authSessionRequests.spec.js","names":["describe","expect","it","createAuthSessionRequests","authRequests","first","createDeferred","order","firstRequest","queue","push","promise","secondRequest","toEqual","Promise","resolve","all","refresh","runs","run","second","toBe","operation","isResultStaleAfterSettlement","request","isResultStale","discardPendingResults","logout","clears","logoutRequests","logOut","clearSession","isLoggingOut","toBeNull","invalidations","invalidateWhenIdle","resolvePromise","Error"],"sources":["../../../src/providers/Auth/authSessionRequests.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { createAuthSessionRequests } from './authSessionRequests.js'\n\ndescribe('createAuthSessionRequests', () => {\n it('should serialize auth requests in queue order', async () => {\n const authRequests = createAuthSessionRequests()\n const first = createDeferred<void>()\n const order: string[] = []\n\n const firstRequest = authRequests.queue(async () => {\n order.push('first:start')\n await first.promise\n order.push('first:end')\n })\n const secondRequest = authRequests.queue(async () => {\n order.push('second')\n })\n\n expect(order).toEqual([])\n await Promise.resolve()\n expect(order).toEqual(['first:start'])\n\n first.resolve()\n await Promise.all([firstRequest, secondRequest])\n expect(order).toEqual(['first:start', 'first:end', 'second'])\n })\n\n it('should share a refresh while session results remain current', async () => {\n const authRequests = createAuthSessionRequests()\n const refresh = createDeferred<null>()\n let runs = 0\n const run = () =>\n authRequests.refresh(async () => {\n runs += 1\n return refresh.promise\n })\n\n const first = run()\n const second = run()\n expect(first).toBe(second)\n\n refresh.resolve(null)\n await Promise.all([first, second])\n expect(runs).toBe(1)\n })\n\n it('should discard a queued result after the session changes', async () => {\n const authRequests = createAuthSessionRequests()\n const operation = createDeferred<void>()\n let isResultStaleAfterSettlement = false\n\n const request = authRequests.queue(async ({ isResultStale }) => {\n await operation.promise\n isResultStaleAfterSettlement = isResultStale()\n })\n\n await Promise.resolve()\n authRequests.discardPendingResults()\n operation.resolve()\n await request\n\n expect(isResultStaleAfterSettlement).toBe(true)\n })\n\n it('should settle a logout once and prevent refresh from committing', async () => {\n const authRequests = createAuthSessionRequests()\n const logout = createDeferred<void>()\n let clears = 0\n let logoutRequests = 0\n\n const first = authRequests.logOut({\n clearSession: () => {\n clears += 1\n authRequests.discardPendingResults()\n },\n request: async () => {\n logoutRequests += 1\n await logout.promise\n },\n })\n const second = authRequests.logOut({\n clearSession: () => {\n clears += 1\n },\n request: async () => {\n logoutRequests += 1\n },\n })\n\n expect(first).toBe(second)\n expect(authRequests.isLoggingOut()).toBe(true)\n expect(await authRequests.refresh(async () => null)).toBeNull()\n logout.resolve()\n await first\n expect({ clears, logoutRequests }).toEqual({ clears: 1, logoutRequests: 1 })\n })\n\n it('should discard a deferred invalidation after the session changes', async () => {\n const authRequests = createAuthSessionRequests()\n let invalidations = 0\n\n const first = authRequests.refresh(async ({ invalidateWhenIdle }) => {\n invalidateWhenIdle(() => {\n invalidations += 1\n })\n return null\n })\n const second = authRequests.queue(async () => {\n authRequests.discardPendingResults()\n })\n\n await Promise.all([first, second])\n expect(invalidations).toBe(0)\n })\n})\n\nfunction createDeferred<Value>(): {\n promise: Promise<Value>\n resolve: (value: Value | PromiseLike<Value>) => void\n} {\n let resolve: ((value: Value | PromiseLike<Value>) => void) | undefined\n const promise = new Promise<Value>((resolvePromise) => {\n resolve = resolvePromise\n })\n\n if (!resolve) {\n throw new Error('Expected deferred promise resolver.')\n }\n\n return { promise, resolve }\n}\n"],"mappings":"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","ignoreList":[]}