@atproto/oauth-provider-ui 0.7.4 → 0.8.0

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 (41) hide show
  1. package/dist/account-page-BG82oyjp.js +24 -0
  2. package/dist/account-page-BG82oyjp.js.map +1 -0
  3. package/dist/admonition-CbbBuXJN.css +1 -0
  4. package/dist/admonition-DjgUmks3.js +59 -0
  5. package/dist/admonition-DjgUmks3.js.map +1 -0
  6. package/dist/authorization-page-DfxoC93f.js +2 -0
  7. package/dist/authorization-page-DfxoC93f.js.map +1 -0
  8. package/dist/bundle-manifest.json +73 -41
  9. package/dist/{cookie-error-page-QWOGgXmH.js → cookie-error-page-D338lcpA.js} +2 -2
  10. package/dist/{cookie-error-page-QWOGgXmH.js.map → cookie-error-page-D338lcpA.js.map} +1 -1
  11. package/dist/{error-page-BEjdpIQ7.js → error-page-HTZtfhkN.js} +2 -2
  12. package/dist/{error-page-BEjdpIQ7.js.map → error-page-HTZtfhkN.js.map} +1 -1
  13. package/dist/error-view-BFuIFXNS.js +2 -0
  14. package/dist/error-view-BFuIFXNS.js.map +1 -0
  15. package/dist/index-CmemEDtM.js +64 -0
  16. package/dist/index-CmemEDtM.js.map +1 -0
  17. package/dist/messages-4rkLJjBK.js +2 -0
  18. package/dist/messages-4rkLJjBK.js.map +1 -0
  19. package/dist/messages-BA5oIDGU.js +2 -0
  20. package/dist/messages-BA5oIDGU.js.map +1 -0
  21. package/dist/messages-Cy2gaWBQ.js +2 -0
  22. package/dist/messages-Cy2gaWBQ.js.map +1 -0
  23. package/dist/messages-T8-auoWR.js +2 -0
  24. package/dist/messages-T8-auoWR.js.map +1 -0
  25. package/hydration-data.d.ts +1 -1
  26. package/package.json +5 -5
  27. package/dist/account-page-BWtTrJit.js +0 -24
  28. package/dist/account-page-BWtTrJit.js.map +0 -1
  29. package/dist/admonition--1QPpjgd.css +0 -1
  30. package/dist/admonition-PcOMNxHc.js +0 -59
  31. package/dist/admonition-PcOMNxHc.js.map +0 -1
  32. package/dist/authorization-page-BrCP1UEq.js +0 -2
  33. package/dist/authorization-page-BrCP1UEq.js.map +0 -1
  34. package/dist/button-cooldown-Cek48u1l.js +0 -64
  35. package/dist/button-cooldown-Cek48u1l.js.map +0 -1
  36. package/dist/error-view-BzJJuW_V.js +0 -2
  37. package/dist/error-view-BzJJuW_V.js.map +0 -1
  38. package/dist/messages--aCokQ6a.js +0 -2
  39. package/dist/messages--aCokQ6a.js.map +0 -1
  40. package/dist/messages-BaWkJYfB.js +0 -2
  41. package/dist/messages-BaWkJYfB.js.map +0 -1
@@ -1,145 +1,177 @@
1
1
  {
2
- "admonition--1QPpjgd.css": {
2
+ "admonition-CbbBuXJN.css": {
3
3
  "type": "asset",
4
4
  "mime": "text/css",
5
- "sha256": "KcI78m4PPK4HS1HEQAJ/oJHMZOClwp90gQMfQ1ne43A="
5
+ "sha256": "q8490gWBV1icyYRCekgBvFzFuewLhrlvztPA+7AkVV4="
6
6
  },
7
- "account-page-BWtTrJit.js": {
7
+ "account-page-BG82oyjp.js": {
8
8
  "type": "chunk",
9
9
  "mime": "application/javascript",
10
- "sha256": "KAW3gMeGuc6E7zfkVUbEBxpI0raDMU/5pYRjovadAmM=",
10
+ "sha256": "RpzIK9rjfO0LZoAgVazQiFhe6g8l/atgDaEUBkgvkfY=",
11
11
  "dynamicImports": [],
12
12
  "isDynamicEntry": false,
13
13
  "isEntry": true,
14
14
  "isImplicitEntry": false,
15
15
  "name": "account-page"
16
16
  },
17
- "authorization-page-BrCP1UEq.js": {
17
+ "authorization-page-DfxoC93f.js": {
18
18
  "type": "chunk",
19
19
  "mime": "application/javascript",
20
- "sha256": "X9jzAK5C5u4qo9G4MPpu33CKRVOZShaZDyb5iWYID/I=",
20
+ "sha256": "nIfsVLgfgvGyUCWVbTXjPPR7WwtqzEiUuU7671sFhzw=",
21
21
  "dynamicImports": [],
22
22
  "isDynamicEntry": false,
23
23
  "isEntry": true,
24
24
  "isImplicitEntry": false,
25
25
  "name": "authorization-page"
26
26
  },
27
- "button-cooldown-Cek48u1l.js": {
27
+ "index-CmemEDtM.js": {
28
28
  "type": "chunk",
29
29
  "mime": "application/javascript",
30
- "sha256": "E1jlIl8l4YOjaKCCzDnklIlAHp6SajEDJV0kJDlDeF8=",
30
+ "sha256": "lDn396EJSMjeUQap7iYRiu2HTl+BafdicZr1snu2xCQ=",
31
31
  "dynamicImports": [],
32
32
  "isDynamicEntry": false,
33
33
  "isEntry": false,
34
34
  "isImplicitEntry": false,
35
- "name": "button-cooldown"
35
+ "name": "index"
36
36
  },
37
- "cookie-error-page-QWOGgXmH.js": {
37
+ "cookie-error-page-D338lcpA.js": {
38
38
  "type": "chunk",
39
39
  "mime": "application/javascript",
40
- "sha256": "24Gd5kFVtD525YdzNTE7Pdf9VmKso36HfrCA4tZPpcw=",
40
+ "sha256": "syLymFHx2zg083rgAyzShgzS7BbYNpBLiL0umTBZUgo=",
41
41
  "dynamicImports": [],
42
42
  "isDynamicEntry": false,
43
43
  "isEntry": true,
44
44
  "isImplicitEntry": false,
45
45
  "name": "cookie-error-page"
46
46
  },
47
- "error-page-BEjdpIQ7.js": {
47
+ "error-page-HTZtfhkN.js": {
48
48
  "type": "chunk",
49
49
  "mime": "application/javascript",
50
- "sha256": "h6sdsYygQsoi7yGhk8Ep/iapR/CKaVXUVlfF5J5AHVI=",
50
+ "sha256": "3/6yM3vdMVvb0CSv6nUSEHk1to57f6EgVMQIgUMUzco=",
51
51
  "dynamicImports": [],
52
52
  "isDynamicEntry": false,
53
53
  "isEntry": true,
54
54
  "isImplicitEntry": false,
55
55
  "name": "error-page"
56
56
  },
57
- "error-view-BzJJuW_V.js": {
57
+ "error-view-BFuIFXNS.js": {
58
58
  "type": "chunk",
59
59
  "mime": "application/javascript",
60
- "sha256": "yNgdOVF32BRUw4ADtG96yjF65xtlmPqgd11chiGXaio=",
60
+ "sha256": "zhYzs0NnejTHcJ4udNeMxKdsKGRJHpZbcHUFFTkSl/k=",
61
61
  "dynamicImports": [],
62
62
  "isDynamicEntry": false,
63
63
  "isEntry": false,
64
64
  "isImplicitEntry": false,
65
65
  "name": "error-view"
66
66
  },
67
- "admonition-PcOMNxHc.js": {
67
+ "admonition-DjgUmks3.js": {
68
68
  "type": "chunk",
69
69
  "mime": "application/javascript",
70
- "sha256": "5V0avn9ug2ZwpXpZg6lHJg5b1gYrgeCPhUqnUAGunK0=",
70
+ "sha256": "U9Ewro3oL0nExpzhb4xm5VNEsHeXVqYPh0tpau6ttdc=",
71
71
  "dynamicImports": [
72
- "messages-BaWkJYfB.js",
73
- "messages--aCokQ6a.js"
72
+ "messages-T8-auoWR.js",
73
+ "messages-Cy2gaWBQ.js",
74
+ "messages-BA5oIDGU.js",
75
+ "messages-4rkLJjBK.js"
74
76
  ],
75
77
  "isDynamicEntry": false,
76
78
  "isEntry": false,
77
79
  "isImplicitEntry": false,
78
80
  "name": "admonition"
79
81
  },
80
- "messages-BaWkJYfB.js": {
82
+ "messages-T8-auoWR.js": {
81
83
  "type": "chunk",
82
84
  "mime": "application/javascript",
83
- "sha256": "fXWF+uJGVp6eySO2F9HT7pVSJAJgVnq3GER7fSkbX5E=",
85
+ "sha256": "tWqS7wIcWtsJLRKIN0i2Yj/1sfUi+gksSgN0PgwtAM8=",
84
86
  "dynamicImports": [],
85
87
  "isDynamicEntry": true,
86
88
  "isEntry": false,
87
89
  "isImplicitEntry": false,
88
90
  "name": "messages"
89
91
  },
90
- "messages--aCokQ6a.js": {
92
+ "messages-Cy2gaWBQ.js": {
91
93
  "type": "chunk",
92
94
  "mime": "application/javascript",
93
- "sha256": "PLjkfu273KLVrzjQ52Sz2gssCSMdHYLBApqQHIAQGdE=",
95
+ "sha256": "9Oj1vQrhm43jbfS7HMpwLXzvMD336oUnrGUaz7EI3S0=",
94
96
  "dynamicImports": [],
95
97
  "isDynamicEntry": true,
96
98
  "isEntry": false,
97
99
  "isImplicitEntry": false,
98
100
  "name": "messages"
99
101
  },
100
- "cookie-error-page-QWOGgXmH.js.map": {
102
+ "messages-BA5oIDGU.js": {
103
+ "type": "chunk",
104
+ "mime": "application/javascript",
105
+ "sha256": "pjPX06BixCzf8sU1niQlSxq9iWzQN6cxJRI5dT/CSBk=",
106
+ "dynamicImports": [],
107
+ "isDynamicEntry": true,
108
+ "isEntry": false,
109
+ "isImplicitEntry": false,
110
+ "name": "messages"
111
+ },
112
+ "messages-4rkLJjBK.js": {
113
+ "type": "chunk",
114
+ "mime": "application/javascript",
115
+ "sha256": "dkPe2TL7PDZWiYU+SC6VEVjyuLMF/PnY2tKIgcLIUTo=",
116
+ "dynamicImports": [],
117
+ "isDynamicEntry": true,
118
+ "isEntry": false,
119
+ "isImplicitEntry": false,
120
+ "name": "messages"
121
+ },
122
+ "authorization-page-DfxoC93f.js.map": {
123
+ "type": "asset",
124
+ "mime": "application/json",
125
+ "sha256": "G0/WaJyJ9ed8LLDo9QMTwn18F5I4F0RZMKtnz5mW9DI="
126
+ },
127
+ "account-page-BG82oyjp.js.map": {
128
+ "type": "asset",
129
+ "mime": "application/json",
130
+ "sha256": "9v1VnPxh6PcLBoumh/dlgAoNB0SI5meLAwGB99Earhk="
131
+ },
132
+ "error-page-HTZtfhkN.js.map": {
101
133
  "type": "asset",
102
134
  "mime": "application/json",
103
- "sha256": "+34j8EMHbCznDpIQeIE1uhrIWV894eDO2lsrJi4We2o="
135
+ "sha256": "Yc9xnrJayp+T1g2rPfiyzgKt48NnQYhSnYxfdSaj7rU="
104
136
  },
105
- "messages-BaWkJYfB.js.map": {
137
+ "cookie-error-page-D338lcpA.js.map": {
106
138
  "type": "asset",
107
139
  "mime": "application/json",
108
- "sha256": "LX/m/z5TpsSbph4Mnyoz88nBUDXUYJBnK5W7diUur84="
140
+ "sha256": "quyHpTyk1CTHMYVmEbD2hntKBTqhCdSTN8YErVWQd/E="
109
141
  },
110
- "error-page-BEjdpIQ7.js.map": {
142
+ "messages-BA5oIDGU.js.map": {
111
143
  "type": "asset",
112
144
  "mime": "application/json",
113
- "sha256": "vreWMlFatnC8GdUuU4U7CkqlBafhmPqGBXyDy1XstFc="
145
+ "sha256": "5GvY5ZMVDeSdgO2NKATkiQ5UcRhMk3kA2P2zkM35BWU="
114
146
  },
115
- "messages--aCokQ6a.js.map": {
147
+ "messages-4rkLJjBK.js.map": {
116
148
  "type": "asset",
117
149
  "mime": "application/json",
118
- "sha256": "n+8dYS5hZCn4jiQ0Vg7mlTiirYkHsVdc/uRqed1Ndew="
150
+ "sha256": "WThsRaJurtROOonDs7CM18Fb8chkJmqRZjn55kWNKyg="
119
151
  },
120
- "error-view-BzJJuW_V.js.map": {
152
+ "messages-T8-auoWR.js.map": {
121
153
  "type": "asset",
122
154
  "mime": "application/json",
123
- "sha256": "VEJsFkTkz50u+nK8sR03DfT7dPua3LzChc3NQncktrA="
155
+ "sha256": "DKo2T9p1UdEJvr7n9miZRjCWVjBO8fOFnaACB+aACzM="
124
156
  },
125
- "authorization-page-BrCP1UEq.js.map": {
157
+ "messages-Cy2gaWBQ.js.map": {
126
158
  "type": "asset",
127
159
  "mime": "application/json",
128
- "sha256": "jlylCFBsHU0/CFjgzb2gXaHI8dzAoUu+pXmtzC8Egw8="
160
+ "sha256": "lXw4/X+z/SNI6npKBZ0LdBpb2h8DkvAXs7o1YMDIWJE="
129
161
  },
130
- "account-page-BWtTrJit.js.map": {
162
+ "error-view-BFuIFXNS.js.map": {
131
163
  "type": "asset",
132
164
  "mime": "application/json",
133
- "sha256": "2JTOvJvAlDKCzzpocm1KeKS0LP0nRSCDkPJV6yCrU+Q="
165
+ "sha256": "+LRIbQn5muYlTEBGemIxSKNdrMOCh2d/2y/Th2eZTTk="
134
166
  },
135
- "button-cooldown-Cek48u1l.js.map": {
167
+ "index-CmemEDtM.js.map": {
136
168
  "type": "asset",
137
169
  "mime": "application/json",
138
- "sha256": "iPMBFn28jt8JsB3HYXgQ78g9PzR2Oq1vQxDf0v0j+Is="
170
+ "sha256": "heKeeaiwCZMwAItnYAjhG4w7pZgkOL0JDgSOUQ3XFqM="
139
171
  },
140
- "admonition-PcOMNxHc.js.map": {
172
+ "admonition-DjgUmks3.js.map": {
141
173
  "type": "asset",
142
174
  "mime": "application/json",
143
- "sha256": "B2qGsQ1aNsr0sz9HsIwkRvMQ2KxMQL/n2xAh/s3aN2E="
175
+ "sha256": "0cUV4/utSsPkEVqemCQhrtiXG2MmJtZ2/sP98EdL4v4="
144
176
  }
145
177
  }
@@ -1,2 +1,2 @@
1
- import{f as a,j as e,r as o,C as s,g as c,L as l,A as d,T as r,B as x}from"./admonition-PcOMNxHc.js";const{__continueUrl:m,__customizationData:u}=window,j=document.getElementById("root");a.createRoot(j).render(e.jsx(o.StrictMode,{children:e.jsx(s,{value:u,children:e.jsx(c,{children:e.jsx(p,{})})})}));function p(){const t=new URL(m);return e.jsx(l,{title:{id:"MLyLW8"},children:e.jsxs("form",{action:t.origin,method:"GET",className:"w-xl flex flex-col gap-4",children:[Array.from(new Map(t.searchParams)).map(([i,n])=>e.jsx("input",{type:"hidden",name:i,value:n},i)),e.jsx(d,{role:"alert",variant:"warning",title:e.jsx(r,{id:"MLyLW8"}),children:e.jsx(r,{id:"D2aJ64",values:{0:t.hostname}})}),e.jsx("div",{className:"flex flex-wrap items-center justify-end",children:e.jsx(x,{type:"submit",color:"primary",children:e.jsx(r,{id:"xGVfLh"})})})]})})}
2
- //# sourceMappingURL=cookie-error-page-QWOGgXmH.js.map
1
+ import{f as a,j as e,r as o,C as s,g as c,L as l,A as d,T as r,B as x}from"./admonition-DjgUmks3.js";const{__continueUrl:m,__customizationData:u}=window,j=document.getElementById("root");a.createRoot(j).render(e.jsx(o.StrictMode,{children:e.jsx(s,{value:u,children:e.jsx(c,{children:e.jsx(p,{})})})}));function p(){const t=new URL(m);return e.jsx(l,{title:{id:"MLyLW8"},children:e.jsxs("form",{action:t.origin,method:"GET",className:"w-xl flex flex-col gap-4",children:[Array.from(new Map(t.searchParams)).map(([i,n])=>e.jsx("input",{type:"hidden",name:i,value:n},i)),e.jsx(d,{role:"alert",variant:"warning",title:e.jsx(r,{id:"MLyLW8"}),children:e.jsx(r,{id:"D2aJ64",values:{0:t.hostname}})}),e.jsx("div",{className:"flex flex-wrap items-center justify-end",children:e.jsx(x,{type:"submit",color:"primary",children:e.jsx(r,{id:"xGVfLh"})})})]})})}
2
+ //# sourceMappingURL=cookie-error-page-D338lcpA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cookie-error-page-QWOGgXmH.js","sources":["../src/cookie-error-page.tsx"],"sourcesContent":["import './style.css'\n\nimport { msg } from '@lingui/core/macro'\nimport { Trans } from '@lingui/react/macro'\nimport { StrictMode } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { Button } from '#/components/forms/button.tsx'\nimport { Admonition } from '#/components/utils/admonition.tsx'\nimport { CustomizationProvider } from '#/contexts/customization.tsx'\nimport type { HydrationData } from '#/hydration-data.d.ts'\nimport { LocaleProvider } from '#/locales/locale-provider.tsx'\nimport { LayoutApp } from './components/layouts/layout-app.js'\n\nconst {\n //\n __continueUrl: continueUrl,\n __customizationData: customizationData,\n} = window as typeof window & HydrationData['cookie-error-page']\n\nconst container = document.getElementById('root')!\n\ncreateRoot(container).render(\n <StrictMode>\n <CustomizationProvider value={customizationData}>\n <LocaleProvider>\n <CookieErrorView />\n </LocaleProvider>\n </CustomizationProvider>\n </StrictMode>,\n)\n\nfunction CookieErrorView() {\n const url = new URL(continueUrl)\n\n return (\n <LayoutApp title={msg`Cookie Error`}>\n <form\n action={url.origin}\n method=\"GET\"\n className=\"w-xl flex flex-col gap-4\"\n >\n {Array.from(new Map(url.searchParams)).map(([key, value]) => (\n <input key={key} type=\"hidden\" name={key} value={value} />\n ))}\n\n <Admonition\n role=\"alert\"\n variant=\"warning\"\n title={<Trans>Cookie Error</Trans>}\n >\n <Trans>\n It seems that your browser is not accepting cookies. Press\n \"Continue\" to try again. If the error persists, please ensure that\n your privacy settings allow cookies for the \"{url.hostname}\"\n website.\n </Trans>\n </Admonition>\n\n <div className=\"flex flex-wrap items-center justify-end\">\n <Button type=\"submit\" color=\"primary\">\n <Trans>Continue</Trans>\n </Button>\n </div>\n </form>\n </LayoutApp>\n )\n}\n"],"names":["__continueUrl","continueUrl","__customizationData","customizationData","window","container","document","getElementById","createRoot","render","_jsx","StrictMode","CustomizationProvider","value","LocaleProvider","CookieErrorView","url","URL","LayoutApp","title","form","action","origin","method","className","Array","from","Map","searchParams","map","key","input","type","name","Admonition","role","variant","Trans_","hostname","div","Button","color"],"mappings":"qGAaA,KAAM,CAEJA,cAAeC,EACfC,oBAAqBC,GACnBC,OAEEC,EAAYC,SAASC,eAAe,MAAA,EAE1CC,EAAAA,WAAWH,CAAAA,EAAWI,OACpBC,EAAAA,IAACC,EAAAA,WAAAA,CACC,eAACC,EAAAA,CAAsBC,MAAOV,EAC5B,eAACW,EAAAA,CACC,SAAAJ,EAAAA,IAACK,EAAAA,CAAAA,CAAAA,SAMT,SAASA,GAAAA,CACDC,MAAAA,EAAM,IAAIC,IAAIhB,CAAAA,EAEpB,aACGiB,EAAAA,CAAUC,MAAK,cACd,gBAACC,OAAAA,CACCC,OAAQL,EAAIM,OACZC,OAAO,MACPC,UAAU,qCAETC,MAAMC,KAAK,IAAIC,IAAIX,EAAIY,YAAY,CAAA,EAAGC,IAAI,CAAC,CAACC,EAAKjB,CAAAA,UAC/CkB,QAAAA,CAAgBC,KAAK,SAASC,KAAMH,EAAKjB,MAAAA,CAA9BiB,EAAAA,CAAAA,CAAAA,QAGbI,EAAAA,CACCC,KAAK,QACLC,QAAQ,UACRjB,YAAOkB,EAAA,8BAEPA,EAAA,qBAGgDrB,EAAAA,EAAIsB,QAAAA,YAKrDC,MAAAA,CAAIf,UAAU,0CACb,eAACgB,EAAAA,CAAOR,KAAK,SAASS,MAAM,yBAC1BJ,EAAA,uBAMZ"}
1
+ {"version":3,"file":"cookie-error-page-D338lcpA.js","sources":["../src/cookie-error-page.tsx"],"sourcesContent":["import './style.css'\n\nimport { msg } from '@lingui/core/macro'\nimport { Trans } from '@lingui/react/macro'\nimport { StrictMode } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { Button } from '#/components/forms/button.tsx'\nimport { Admonition } from '#/components/utils/admonition.tsx'\nimport { CustomizationProvider } from '#/contexts/customization.tsx'\nimport type { HydrationData } from '#/hydration-data.d.ts'\nimport { LocaleProvider } from '#/locales/locale-provider.tsx'\nimport { LayoutApp } from './components/layouts/layout-app.js'\n\nconst {\n //\n __continueUrl: continueUrl,\n __customizationData: customizationData,\n} = window as typeof window & HydrationData['cookie-error-page']\n\nconst container = document.getElementById('root')!\n\ncreateRoot(container).render(\n <StrictMode>\n <CustomizationProvider value={customizationData}>\n <LocaleProvider>\n <CookieErrorView />\n </LocaleProvider>\n </CustomizationProvider>\n </StrictMode>,\n)\n\nfunction CookieErrorView() {\n const url = new URL(continueUrl)\n\n return (\n <LayoutApp title={msg`Cookie Error`}>\n <form\n action={url.origin}\n method=\"GET\"\n className=\"w-xl flex flex-col gap-4\"\n >\n {Array.from(new Map(url.searchParams)).map(([key, value]) => (\n <input key={key} type=\"hidden\" name={key} value={value} />\n ))}\n\n <Admonition\n role=\"alert\"\n variant=\"warning\"\n title={<Trans>Cookie Error</Trans>}\n >\n <Trans>\n It seems that your browser is not accepting cookies. Press\n \"Continue\" to try again. If the error persists, please ensure that\n your privacy settings allow cookies for the \"{url.hostname}\"\n website.\n </Trans>\n </Admonition>\n\n <div className=\"flex flex-wrap items-center justify-end\">\n <Button type=\"submit\" color=\"primary\">\n <Trans>Continue</Trans>\n </Button>\n </div>\n </form>\n </LayoutApp>\n )\n}\n"],"names":["__continueUrl","continueUrl","__customizationData","customizationData","window","container","document","getElementById","createRoot","render","_jsx","StrictMode","CustomizationProvider","value","LocaleProvider","CookieErrorView","url","URL","LayoutApp","title","form","action","origin","method","className","Array","from","Map","searchParams","map","key","input","type","name","Admonition","role","variant","Trans_","hostname","div","Button","color"],"mappings":"qGAaA,KAAM,CAEJA,cAAeC,EACfC,oBAAqBC,GACnBC,OAEEC,EAAYC,SAASC,eAAe,MAAA,EAE1CC,EAAAA,WAAWH,CAAAA,EAAWI,OACpBC,EAAAA,IAACC,EAAAA,WAAAA,CACC,eAACC,EAAAA,CAAsBC,MAAOV,EAC5B,eAACW,EAAAA,CACC,SAAAJ,EAAAA,IAACK,EAAAA,CAAAA,CAAAA,SAMT,SAASA,GAAAA,CACDC,MAAAA,EAAM,IAAIC,IAAIhB,CAAAA,EAEpB,aACGiB,EAAAA,CAAUC,MAAK,cACd,gBAACC,OAAAA,CACCC,OAAQL,EAAIM,OACZC,OAAO,MACPC,UAAU,qCAETC,MAAMC,KAAK,IAAIC,IAAIX,EAAIY,YAAY,CAAA,EAAGC,IAAI,CAAC,CAACC,EAAKjB,CAAAA,UAC/CkB,QAAAA,CAAgBC,KAAK,SAASC,KAAMH,EAAKjB,MAAAA,CAA9BiB,EAAAA,CAAAA,CAAAA,QAGbI,EAAAA,CACCC,KAAK,QACLC,QAAQ,UACRjB,YAAOkB,EAAA,8BAEPA,EAAA,qBAGgDrB,EAAAA,EAAIsB,QAAAA,YAKrDC,MAAAA,CAAIf,UAAU,0CACb,eAACgB,EAAAA,CAAOR,KAAK,SAASS,MAAM,yBAC1BJ,EAAA,uBAMZ"}
@@ -1,2 +1,2 @@
1
- import{f as t,j as r,r as a,C as e,g as s}from"./admonition-PcOMNxHc.js";import{p as i,E as n}from"./error-view-BzJJuW_V.js";const{__errorData:o,__customizationData:c}=window,d=i(o),m=document.getElementById("root");t.createRoot(m).render(r.jsx(a.StrictMode,{children:r.jsx(e,{value:c,children:r.jsx(s,{children:r.jsx(n,{error:d??o})})})}));
2
- //# sourceMappingURL=error-page-BEjdpIQ7.js.map
1
+ import{f as t,j as r,r as a,C as e,g as s}from"./admonition-DjgUmks3.js";import{d as i,E as n}from"./error-view-BFuIFXNS.js";const{__errorData:o,__customizationData:c}=window,d=i(o),m=document.getElementById("root");t.createRoot(m).render(r.jsx(a.StrictMode,{children:r.jsx(e,{value:c,children:r.jsx(s,{children:r.jsx(n,{error:d??o})})})}));
2
+ //# sourceMappingURL=error-page-HTZtfhkN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-page-BEjdpIQ7.js","sources":["../src/error-page.tsx"],"sourcesContent":["import './style.css'\n\nimport { StrictMode } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { ErrorView } from '#/components/error-view.tsx'\nimport { CustomizationProvider } from '#/contexts/customization'\nimport type { HydrationData } from '#/hydration-data.d.ts'\nimport { parseApiErrorPayload } from '#/lib/api.ts'\nimport { LocaleProvider } from '#/locales/locale-provider.tsx'\n\nconst {\n //\n __errorData: errorData,\n __customizationData: customizationData,\n} = window as typeof window & HydrationData['error-page']\n\n// Attempt to turn the error data into an actual error instance if the error\n// data has the shape of an API error response. This will allow the ErrorView to\n// display the right error details and messages for known API errors.\nconst error = parseApiErrorPayload(errorData)\n\nconst container = document.getElementById('root')!\n\ncreateRoot(container).render(\n <StrictMode>\n <CustomizationProvider value={customizationData}>\n <LocaleProvider>\n <ErrorView error={error ?? errorData} />\n </LocaleProvider>\n </CustomizationProvider>\n </StrictMode>,\n)\n"],"names":["__errorData","errorData","__customizationData","customizationData","window","error","parseApiErrorPayload","container","document","getElementById","createRoot","render","_jsx","StrictMode","CustomizationProvider","value","LocaleProvider","ErrorView"],"mappings":"6HAUA,KAAM,CAEJA,YAAaC,EACbC,oBAAqBC,GACnBC,OAKEC,EAAQC,EAAqBL,CAAAA,EAE7BM,EAAYC,SAASC,eAAe,MAAA,EAE1CC,EAAAA,WAAWH,CAAAA,EAAWI,OACpBC,EAAAA,IAACC,EAAAA,WAAAA,CACC,eAACC,EAAAA,CAAsBC,MAAOZ,EAC5B,eAACa,EAAAA,CACC,eAACC,EAAAA,CAAUZ,MAAOA,GAASJ"}
1
+ {"version":3,"file":"error-page-HTZtfhkN.js","sources":["../src/error-page.tsx"],"sourcesContent":["import './style.css'\n\nimport { StrictMode } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { ErrorView } from '#/components/error-view.tsx'\nimport { CustomizationProvider } from '#/contexts/customization'\nimport type { HydrationData } from '#/hydration-data.d.ts'\nimport { parseApiErrorPayload } from '#/lib/api.ts'\nimport { LocaleProvider } from '#/locales/locale-provider.tsx'\n\nconst {\n //\n __errorData: errorData,\n __customizationData: customizationData,\n} = window as typeof window & HydrationData['error-page']\n\n// Attempt to turn the error data into an actual error instance if the error\n// data has the shape of an API error response. This will allow the ErrorView to\n// display the right error details and messages for known API errors.\nconst error = parseApiErrorPayload(errorData)\n\nconst container = document.getElementById('root')!\n\ncreateRoot(container).render(\n <StrictMode>\n <CustomizationProvider value={customizationData}>\n <LocaleProvider>\n <ErrorView error={error ?? errorData} />\n </LocaleProvider>\n </CustomizationProvider>\n </StrictMode>,\n)\n"],"names":["__errorData","errorData","__customizationData","customizationData","window","error","parseApiErrorPayload","container","document","getElementById","createRoot","render","_jsx","StrictMode","CustomizationProvider","value","LocaleProvider","ErrorView"],"mappings":"6HAUA,KAAM,CAEJA,YAAaC,EACbC,oBAAqBC,GACnBC,OAKEC,EAAQC,EAAqBL,CAAAA,EAE7BM,EAAYC,SAASC,eAAe,MAAA,EAE1CC,EAAAA,WAAWH,CAAAA,EAAWI,OACpBC,EAAAA,IAACC,EAAAA,WAAAA,CACC,eAACC,EAAAA,CAAsBC,MAAOZ,EAC5B,eAACa,EAAAA,CACC,eAACC,EAAAA,CAAUZ,MAAOA,GAASJ"}
@@ -0,0 +1,2 @@
1
+ import{j as i,c as q,T as f,u as I,r as A,A as N,e as U,L as F}from"./admonition-DjgUmks3.js";const D=Object.freeze(["syntax","domain","slur","taken","reserved","resolution","unsupported"]),J=s=>D.includes(s),M=(s=document.cookie)=>Object.fromEntries(s.split(";").filter(Boolean).map(e=>e.split("=",2).map(r=>decodeURIComponent(r.trim()))));function V(s,e=document.cookie){return M(e)[s]}class K{constructor(e,r){this.baseUrl=e,this.options=r}async fetch(e,r,t,n){var c,a,l,y,p,g,o,w,P;try{const h=new URL(`${this.baseUrl}${r}`);if(e==="GET"&&t)for(const[j,C]of Object.entries(t))h.searchParams.set(j,C);const m=e==="POST"?JSON.stringify(t):void 0,S=new Headers(await((a=(c=this.options)==null?void 0:c.headers)==null?void 0:a.call(c)));m&&!S.has("content-type")&&S.set("content-type","application/json");const d=await fetch(h,{method:e,headers:S,mode:"same-origin",body:m,signal:n==null?void 0:n.signal});if(d.status===204)return;const _=d.headers.get("content-type");if(_!=="application/json")throw await((l=d.body)==null?void 0:l.cancel()),new Error(`Invalid content type "${_}"`,{cause:d});const O=await d.json();if(!d.ok)throw((y=n==null?void 0:n.parseError)==null?void 0:y.call(n,d,O))||this.parseError(d,O);return(o=(g=(p=this.options)==null?void 0:p.onFetchSuccess)==null?void 0:g[r])==null||o.call(null,{output:O,method:e,input:t,options:n}),O}catch(h){const m={method:e,path:r,input:t,options:n};throw console.warn("API request failed",h,m),(P=(w=this.options)==null?void 0:w.onFetchError)==null||P.call(null,h,m),h}}parseError(e,r){return new v(r)}}class v extends Error{constructor(e,r="Unknown JSON error response",t){super(r,t),this.name="JsonErrorResponse",this.msg={id:"Jja+Vn"},this.payload=e}}const L="csrf-token",z="x-csrf-token",$="/@atproto/oauth-provider/~api";class ue extends K{constructor(e){const r=new URL($,window.origin).toString();super(r,{...e,headers:async function(){var c;const t=new Headers(await((c=e==null?void 0:e.headers)==null?void 0:c.call(this))),n=V(L);return n&&t.set(z,n),t}}),this.locale=e.locale}async signIn({username:e,password:r,emailOtp:t,remember:n,locale:c=this.locale},a){return this.fetch("POST","/sign-in",{username:e,password:r,emailOtp:t,remember:n,locale:c},a)}async initiatePasswordReset({email:e,locale:r=this.locale},t){await this.fetch("POST","/reset-password-request",{email:e,locale:r},t)}async accountSessions({did:e},r){return this.fetch("GET","/account-sessions",{did:e},r)}async revokeAccountSession({did:e,deviceId:r},t){return this.fetch("POST","/revoke-account-session",{did:e,deviceId:r},t)}async oauthSessions({did:e},r){return this.fetch("GET","/oauth-sessions",{did:e},r)}async revokeOAuthSession({did:e,tokenId:r},t){return this.fetch("POST","/revoke-oauth-session",{did:e,tokenId:r},t)}async confirmResetPassword({token:e,password:r},t){await this.fetch("POST","/reset-password-confirm",{token:e,password:r},t)}async validateHandleAvailability({handle:e},r){await this.fetch("POST","/verify-handle-availability",{handle:e},r)}async updateEmailRequest({did:e,locale:r=this.locale},t){return this.fetch("POST","/update-email-request",{did:e,locale:r},t)}async updateEmailConfirm({did:e,token:r,email:t,locale:n=this.locale},c){await this.fetch("POST","/update-email-confirm",{did:e,token:r,email:t,locale:n},c)}async verifyEmailRequest({did:e,locale:r=this.locale},t){await this.fetch("POST","/verify-email-request",{did:e,locale:r},t)}async verifyEmailConfirm({did:e,token:r,email:t},n){await this.fetch("POST","/verify-email-confirm",{did:e,token:r,email:t},n)}async updateHandle({did:e,handle:r},t){return this.fetch("POST","/update-handle",{did:e,handle:r},t)}async deactivateAccount({did:e},r){await this.fetch("POST","/deactivate-account",{did:e},r)}async reactivateAccount({did:e},r){return this.fetch("POST","/reactivate-account",{did:e},r)}async deleteAccountRequest({did:e,locale:r=this.locale},t){await this.fetch("POST","/delete-account-request",{did:e,locale:r},t)}async deleteAccountConfirm({did:e,token:r,password:t},n){await this.fetch("POST","/delete-account-confirm",{did:e,token:r,password:t},n)}async signUp({locale:e=this.locale,handle:r,email:t,password:n,inviteCode:c,hcaptchaToken:a},l){return this.fetch("POST","/sign-up",{locale:e,handle:r,email:t,password:n,inviteCode:c,hcaptchaToken:a},l)}async signOut({did:e},r){return this.fetch("POST","/sign-out",{did:e},r)}async consent(e,r,t){return this.fetch("POST","/consent",{did:e,scope:r},t)}async reject(e){return this.fetch("POST","/reject",{},e)}parseError(e,r){return H(r)??super.parseError(e,r)}}function H(s){if(B(s)){for(const e of[se,W,ee,X,T,re,Y,G,E,k])if(e.is(s))return new e(s);return new u(s)}}function B(s,e){return s!=null&&typeof s=="object"&&typeof s.error=="string"&&e===void 0&&(s.error_description===void 0||typeof s.error_description=="string")}class u extends v{constructor(e,r=e.error_description,t){super(e,r||`OAuth Error "${e.error}"`,t),this.name="OAuthErrorResponse",this.msg=u.getMessageForError(e.error)}static getMessageForError(e){switch(e){case"server_error":return{id:"BJ8t7d"};default:return{id:"byKna+"}}}}class G extends u{constructor(e){super(e,e.error_description||"Unauthorized"),this.msg={id:"5OVfoe"}}static is(e){return e.error==="unauthorized"}}class k extends u{constructor(e,r=e.error_description){super(e,r||"Access denied"),this.msg={id:"oYKcFO"}}static is(e){return e.error==="access_denied"}}class E extends u{constructor(e,r=e.error_description){super(e,r||"Invalid request"),this.msg={id:"qrCiCk"}}static is(e){return e.error==="invalid_request"}}class T extends u{constructor(e,r=e.error_description){super(e,r||"Handle unavailable"),this.msg=T.getMessageForReason(e.reason)}static getMessageForReason(e){switch(e){case"syntax":return{id:"C24/JK"};case"domain":return{id:"qDdKKD"};case"slur":return{id:"AQ3Zbm"};case"reserved":return{id:"3j7n8v"};case"taken":return{id:"AXlE0K"};case"resolution":return{id:"E/Pt37"};case"unsupported":return{id:"qfnQHD"}}}static is(e){return e.error==="handle_unavailable"&&J(e.reason)}}const Z=Object.freeze(["emailOtp"]),Q=s=>Z.includes(s);class W extends u{constructor(e,r=e.error_description){const{type:t,hint:n}=e;super(e,r||`${t} auth factor required (hint: ${n})`),this.msg={id:"HJQIko",values:{hint:n}}}get type(){return this.payload.type}get hint(){return this.payload.hint}static is(e){return e.error==="second_authentication_factor_required"&&Q(e.type)&&typeof e.hint=="string"}}class X extends E{constructor(e){super(e),this.msg={id:"+lWheC"}}static is(e){return super.is(e)&&e.error_description!=null&&e.error_description.startsWith("This invite code is invalid.")}}class Y extends k{constructor(){super(...arguments),this.msg={id:"5OVfoe"}}static is(e){return super.is(e)&&e.error_description==="This request has expired"}}class ee extends E{constructor(){super(...arguments),this.msg={id:"jSVjfa"}}static is(e){return super.is(e)&&e.error_description==="Invalid identifier or password"}}class se extends E{constructor(){super(...arguments),this.msg={id:"5OVfoe"}}static is(e){return super.is(e)&&e.error_description==="Unknown request_uri"}}class re extends E{constructor(){super(...arguments),this.msg={id:"SZKM0t"}}static is(e){return super.is(e)&&e.error_description==="Email already taken"}}function de(s,e,r){if(!s)return[e];const t=s.findIndex(r);return t===-1?[...s,e]:[...s.slice(0,t),e,...s.slice(t+1)]}function le(s){return new Promise(e=>setTimeout(e,s))}function R(s){try{return JSON.stringify(s,null,2)}catch{return}}function he(s,e){return s.aborted&&s.reason!=null&&e instanceof Error&&(e===s.reason||e.cause===s.reason)}function te(s){if(s instanceof u)return{name:s.name,code:s.payload.error,message:s.payload.error_description,payload:R(s.payload),description:ne(s)}}function ne(s){if(s instanceof v)return s.msg}function ie(s,e,{checkForDefaultPrevented:r=!0}={}){return function(n){if(s==null||s(n),r===!1||!n.defaultPrevented)return e==null?void 0:e(n)}}function ce(s){return s instanceof Error?{name:s.name,message:s.message,stack:s.stack}:typeof s=="string"?{message:s}:{payload:R(s)}}function ae({name:s,code:e,message:r,payload:t,stack:n,className:c,...a}){return i.jsxs("dl",{className:q("mt-2 grid max-w-full grid-cols-[auto_1fr] gap-x-2 text-sm",c),...a,children:[s&&i.jsx(x,{label:i.jsx(f,{id:"Aw7BNz"}),children:i.jsx("code",{children:s})}),e&&i.jsx(x,{label:i.jsx(f,{id:"Gt+Z/D"}),children:i.jsx("code",{children:e})}),r&&i.jsx(x,{label:i.jsx(f,{id:"FTdsAu"}),children:r}),t&&i.jsx(x,{label:i.jsx(f,{id:"IHV30b"}),children:i.jsx("code",{className:"max-h-[200px] overflow-auto",children:i.jsx("pre",{children:t})})}),n&&i.jsx(x,{label:i.jsx(f,{id:"ZJUDum"}),children:i.jsx("code",{className:"max-h-[200px] overflow-auto",children:i.jsx("pre",{children:n})})})]})}function x({children:s,label:e}){return i.jsxs(i.Fragment,{children:[i.jsx("dt",{className:"font-semibold",children:e}),i.jsx("dd",{children:s})]})}function b({error:s,retry:e,retryLabel:r,parser:t,children:n,onClick:c,...a}){const{_:l}=I(),[y,p]=A.useState(0),g=(y/5|0)%2===1,o=A.useMemo(()=>(t==null?void 0:t(s))??ce(s),[t,s]);return A.useEffect(()=>{console.warn("Displayed error:",o),p(0)},[o]),i.jsx(N,{...a,role:"alert",onClick:ie(c,()=>{p(w=>w+1)}),append:i.jsxs(i.Fragment,{children:[n,g&&i.jsx(ae,{name:o.name,code:o.code,message:o.message,payload:o.payload,stack:o.stack})]}),action:e!=null&&i.jsx(U,{onClick:()=>e(),children:r||i.jsx(f,{id:"6gRgw8"})}),children:l(o.description??{id:"vW+T+d"})})}const fe=s=>i.jsx(b,{...s});function pe({error:s,parser:e=te,retry:r,retryLabel:t,title:n={id:"Vw8l6h"},children:c,...a}){return i.jsx(F,{title:n,...a,children:i.jsx("div",{className:"w-[500px] max-w-full",children:i.jsx(b,{className:"mx-5",error:s,parser:e,retry:r,retryLabel:t,children:c})})})}export{ue as A,pe as E,ee as I,W as S,se as U,te as a,G as b,ie as c,H as d,fe as e,he as i,ce as p,le as s,de as u};
2
+ //# sourceMappingURL=error-view-BFuIFXNS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-view-BFuIFXNS.js","sources":["../../oauth-provider-api/dist/errors.js","../src/lib/cookies.ts","../src/lib/json-client.ts","../src/lib/api.ts","../src/lib/util.ts","../src/lib/api-error-parser.ts","../../../../node_modules/.pnpm/@radix-ui+primitive@1.1.3/node_modules/@radix-ui/primitive/dist/index.mjs","../src/lib/error-parser.ts","../src/components/utils/error-details.tsx","../src/components/utils/error-card.tsx","../src/components/error-view.tsx"],"sourcesContent":["export const HANDLE_UNAVAILABLE_REASON = Object.freeze([\n 'syntax',\n 'domain',\n 'slur',\n 'taken',\n 'reserved',\n 'resolution',\n 'unsupported',\n]);\nexport const isHandleUnavailableReason = (value) => {\n return HANDLE_UNAVAILABLE_REASON.includes(value);\n};\n// @TODO consider moving JsonErrorResponse & sub-classes here (or only the\n// schemas?), allowing the same code to be used on both the server and client\n// for error handling/parsing/formatting.\n//# sourceMappingURL=errors.js.map","export const parseCookieString = (\n cookie: string = document.cookie,\n): Record<string, string | undefined> =>\n Object.fromEntries(\n cookie\n .split(';')\n .filter(Boolean)\n .map((str) => str.split('=', 2).map((s) => decodeURIComponent(s.trim()))),\n )\n\nexport function readCookie(\n name: string,\n cookie: string = document.cookie,\n): string | undefined {\n const cookies = parseCookieString(cookie)\n return cookies[name]\n}\n","import { MessageDescriptor } from '@lingui/core'\nimport { msg } from '@lingui/core/macro'\n\nexport type JsonScalar = string | number | boolean | null\nexport type Json = JsonScalar | Json[] | { [key: string]: undefined | Json }\n\ntype Awaitable<T> = T | PromiseLike<T>\n\nexport type Options = {\n signal?: AbortSignal\n parseError?: (response: Response, payload: Json) => undefined | Error\n}\n\nexport type EndpointPath = `/${string}`\nexport type EndpointDefinition =\n | {\n method: 'POST'\n input: Json\n output: Json | void\n }\n | {\n method: 'GET'\n params?: Record<string, string | undefined>\n output: Json | void\n }\nexport type EndpointDefinitions = { [path: EndpointPath]: EndpointDefinition }\n\nexport type JsonClientOptions<Endpoints extends EndpointDefinitions> = {\n onFetchError?: (\n err: unknown,\n context: {\n method: string\n path: string\n input: unknown\n options?: Options\n },\n ) => void\n onFetchSuccess?: {\n [Path in keyof Endpoints & string]?: (data: {\n method: string\n input: Endpoints[Path] extends { method: 'GET'; params: infer Params }\n ? Params\n : Endpoints[Path] extends { method: 'POST'; input: infer Input }\n ? Input\n : undefined\n output: Endpoints[Path] extends { output: infer Output } ? Output : never\n options?: Options\n }) => void\n }\n headers?: () => Awaitable<HeadersInit>\n}\n\nexport class JsonClient<Endpoints extends EndpointDefinitions> {\n constructor(\n protected readonly baseUrl: string,\n protected readonly options?: JsonClientOptions<Endpoints>,\n ) {}\n\n protected async fetch<Path extends EndpointPath & keyof Endpoints>(\n method: Endpoints[Path]['method'],\n path: Path,\n input: Endpoints[Path] extends { method: 'GET' }\n ? Endpoints[Path]['params']\n : Endpoints[Path] extends { method: 'POST' }\n ? Endpoints[Path]['input']\n : undefined,\n options?: Options,\n ): Promise<Endpoints[Path]['output']> {\n try {\n const url = new URL(`${this.baseUrl}${path}`)\n if (method === 'GET') {\n if (input) {\n for (const [key, value] of Object.entries(input)) {\n url.searchParams.set(key, value)\n }\n }\n }\n\n const body = method === 'POST' ? JSON.stringify(input) : undefined\n\n const headers = new Headers(await this.options?.headers?.())\n\n if (body && !headers.has('content-type')) {\n headers.set('content-type', 'application/json')\n }\n\n const response = await fetch(url, {\n method,\n headers,\n mode: 'same-origin',\n body,\n signal: options?.signal,\n })\n\n if (response.status === 204) {\n return undefined\n }\n\n const responseType = response.headers.get('content-type')\n if (responseType !== 'application/json') {\n await response.body?.cancel()\n throw new Error(`Invalid content type \"${responseType}\"`, {\n cause: response,\n })\n }\n\n const output = await response.json()\n\n if (!response.ok) {\n const error =\n options?.parseError?.(response, output) ||\n this.parseError(response, output)\n throw error\n }\n\n this.options?.onFetchSuccess?.[path]?.call(null, {\n output,\n method,\n input,\n options,\n } as any)\n\n return output as Endpoints[Path]['output']\n } catch (err) {\n const context = { method, path, input, options }\n console.warn('API request failed', err, context)\n this.options?.onFetchError?.call(null, err, context)\n throw err\n }\n }\n\n protected parseError(response: Response, payload: Json): Error {\n return new JsonErrorResponse(payload)\n }\n}\n\nexport class JsonErrorResponse<P = unknown> extends Error {\n name = 'JsonErrorResponse'\n\n msg: MessageDescriptor = msg`Unexpected server response`\n\n constructor(\n public readonly payload: P,\n message: string = 'Unknown JSON error response',\n options?: ErrorOptions,\n ) {\n super(message, options)\n }\n}\n","import { MessageDescriptor } from '@lingui/core'\nimport { msg } from '@lingui/core/macro'\nimport {\n AccountSessionsInput,\n type ApiEndpoints,\n ConfirmAccountDeletionInput,\n ConfirmEmailUpdateInput,\n ConfirmEmailVerificationInput,\n type ConfirmResetPasswordInput,\n DeactivateAccountInput,\n type DidString,\n type HandleUnavailableReason,\n InitiateAccountDeletionInput,\n InitiateEmailUpdateInput,\n InitiateEmailVerificationInput,\n type InitiatePasswordResetInput,\n OAuthSessionsInput,\n ReactivateAccountInput,\n RevokeAccountSessionInput,\n RevokeOAuthSessionInput,\n type SignInInput,\n SignOutInput,\n type SignUpInput,\n type UpdateHandleInput,\n type VerifyHandleAvailabilityInput,\n isHandleUnavailableReason,\n} from '@atproto/oauth-provider-api'\nimport { readCookie } from './cookies.ts'\nimport {\n Json,\n JsonClient,\n JsonClientOptions,\n JsonErrorResponse,\n Options,\n} from './json-client.ts'\n\nexport type { Options } from './json-client.ts'\nconst CSRF_COOKIE_NAME = 'csrf-token'\nconst CSRF_HEADER_NAME = 'x-csrf-token'\n\nconst API_ENDPOINT_PREFIX = '/@atproto/oauth-provider/~api'\n\nexport type ApiOptions = JsonClientOptions<ApiEndpoints> & {\n locale: string\n}\n\nexport type WithOptionalLocale<T extends { locale?: unknown }> = Omit<\n T,\n 'locale'\n> & { locale?: T['locale'] }\n\nexport class Api extends JsonClient<ApiEndpoints> {\n locale: string\n\n constructor(options: ApiOptions) {\n const baseUrl = new URL(API_ENDPOINT_PREFIX, window.origin).toString()\n super(baseUrl, {\n ...options,\n headers: async function () {\n const headers = new Headers(await options?.headers?.call(this))\n const csrfToken = readCookie(CSRF_COOKIE_NAME)\n if (csrfToken) headers.set(CSRF_HEADER_NAME, csrfToken)\n return headers\n },\n })\n this.locale = options.locale\n }\n\n async signIn(\n {\n username,\n password,\n emailOtp,\n remember,\n locale = this.locale,\n }: WithOptionalLocale<SignInInput>,\n options?: Options,\n ) {\n return this.fetch(\n 'POST',\n '/sign-in',\n { username, password, emailOtp, remember, locale },\n options,\n )\n }\n\n async initiatePasswordReset(\n {\n email,\n locale = this.locale,\n }: WithOptionalLocale<InitiatePasswordResetInput>,\n options?: Options,\n ) {\n await this.fetch(\n 'POST',\n '/reset-password-request',\n { email, locale },\n options,\n )\n }\n\n // Account sessions\n\n async accountSessions({ did }: AccountSessionsInput, options?: Options) {\n return this.fetch('GET', '/account-sessions', { did }, options)\n }\n\n async revokeAccountSession(\n { did, deviceId }: RevokeAccountSessionInput,\n options?: Options,\n ) {\n return this.fetch(\n 'POST',\n '/revoke-account-session',\n { did, deviceId },\n options,\n )\n }\n\n // OAuth sessions\n\n async oauthSessions({ did }: OAuthSessionsInput, options?: Options) {\n return this.fetch('GET', '/oauth-sessions', { did }, options)\n }\n\n async revokeOAuthSession(\n { did, tokenId }: RevokeOAuthSessionInput,\n options?: Options,\n ) {\n return this.fetch(\n 'POST',\n '/revoke-oauth-session',\n { did, tokenId },\n options,\n )\n }\n\n //\n\n async confirmResetPassword(\n { token, password }: ConfirmResetPasswordInput,\n options?: Options,\n ) {\n await this.fetch(\n 'POST',\n '/reset-password-confirm',\n { token, password },\n options,\n )\n }\n\n async validateHandleAvailability(\n { handle }: VerifyHandleAvailabilityInput,\n options?: Options,\n ) {\n await this.fetch('POST', '/verify-handle-availability', { handle }, options)\n }\n\n async updateEmailRequest(\n { did, locale = this.locale }: WithOptionalLocale<InitiateEmailUpdateInput>,\n options?: Options,\n ) {\n return this.fetch('POST', '/update-email-request', { did, locale }, options)\n }\n\n async updateEmailConfirm(\n {\n did,\n token,\n email,\n locale = this.locale,\n }: WithOptionalLocale<ConfirmEmailUpdateInput>,\n options?: Options,\n ) {\n await this.fetch(\n 'POST',\n '/update-email-confirm',\n { did, token, email, locale },\n options,\n )\n }\n\n async verifyEmailRequest(\n {\n did,\n locale = this.locale,\n }: WithOptionalLocale<InitiateEmailVerificationInput>,\n options?: Options,\n ) {\n await this.fetch('POST', '/verify-email-request', { did, locale }, options)\n }\n\n async verifyEmailConfirm(\n { did, token, email }: ConfirmEmailVerificationInput,\n options?: Options,\n ) {\n await this.fetch(\n 'POST',\n '/verify-email-confirm',\n { did, token, email },\n options,\n )\n }\n\n async updateHandle({ did, handle }: UpdateHandleInput, options?: Options) {\n return this.fetch('POST', '/update-handle', { did, handle }, options)\n }\n\n async deactivateAccount({ did }: DeactivateAccountInput, options?: Options) {\n await this.fetch('POST', '/deactivate-account', { did }, options)\n }\n\n async reactivateAccount({ did }: ReactivateAccountInput, options?: Options) {\n return this.fetch('POST', '/reactivate-account', { did }, options)\n }\n\n async deleteAccountRequest(\n {\n did,\n locale = this.locale,\n }: WithOptionalLocale<InitiateAccountDeletionInput>,\n options?: Options,\n ) {\n await this.fetch(\n 'POST',\n '/delete-account-request',\n { did, locale },\n options,\n )\n }\n\n async deleteAccountConfirm(\n { did, token, password }: ConfirmAccountDeletionInput,\n options?: Options,\n ) {\n await this.fetch(\n 'POST',\n '/delete-account-confirm',\n { did, token, password },\n options,\n )\n }\n\n async signUp(\n {\n locale = this.locale,\n handle,\n email,\n password,\n inviteCode,\n hcaptchaToken,\n }: WithOptionalLocale<SignUpInput>,\n options?: Options,\n ) {\n return this.fetch(\n 'POST',\n '/sign-up',\n { locale, handle, email, password, inviteCode, hcaptchaToken },\n options,\n )\n }\n\n async signOut({ did }: SignOutInput, options?: Options) {\n return this.fetch('POST', '/sign-out', { did }, options)\n }\n\n async consent(did: DidString, scope?: string, options?: Options) {\n return this.fetch('POST', '/consent', { did, scope }, options)\n }\n\n async reject(options?: Options) {\n return this.fetch('POST', '/reject', {}, options)\n }\n\n // and transform them into instances of the corresponding error classes.\n protected override parseError(response: Response, payload: Json): Error {\n return parseApiErrorPayload(payload) ?? super.parseError(response, payload)\n }\n}\n\nexport function parseApiErrorPayload(\n payload: unknown,\n): OAuthErrorResponse | undefined {\n if (isOAuthErrorPayload(payload)) {\n for (const ErrorClass of [\n // @NOTE Most specific errors must come first!\n UnknownRequestUriError,\n SecondAuthenticationFactorRequiredError,\n InvalidCredentialsError,\n InvalidInviteCodeError,\n HandleUnavailableError,\n EmailTakenError,\n RequestExpiredError,\n UnauthorizedError,\n InvalidRequestError,\n AccessDeniedError,\n ] as Array<{\n is(payload: OAuthErrorPayload): boolean\n new (payload: any): OAuthErrorResponse\n }>) {\n if (ErrorClass.is(payload)) {\n return new ErrorClass(payload)\n }\n }\n\n return new OAuthErrorResponse(payload)\n }\n}\n\nexport type OAuthErrorPayload<E extends string = string> = {\n error: E\n error_description?: string\n} & Record<string, Json>\n\nexport function isOAuthErrorPayload<E extends string = string>(\n json: unknown,\n error: E,\n): json is OAuthErrorPayload<E>\nexport function isOAuthErrorPayload(json: unknown): json is OAuthErrorPayload\nexport function isOAuthErrorPayload(json: unknown, error?: string): boolean {\n return (\n json != null &&\n typeof json === 'object' &&\n typeof json['error'] === 'string' &&\n (error === undefined || json['error'] === error) &&\n (json['error_description'] === undefined ||\n typeof json['error_description'] === 'string')\n )\n}\n\nexport class OAuthErrorResponse<\n P extends OAuthErrorPayload = OAuthErrorPayload,\n> extends JsonErrorResponse<P> {\n name = 'OAuthErrorResponse'\n\n constructor(\n payload: P,\n message = payload.error_description,\n options?: ErrorOptions,\n ) {\n super(payload, message || `OAuth Error \"${payload.error}\"`, options)\n this.msg = OAuthErrorResponse.getMessageForError(payload.error)\n }\n\n protected static getMessageForError(error: string): MessageDescriptor {\n switch (error) {\n // @NOTE This only needs value that are not already covered by more\n // specific error classes with their own messages (e.g.\n // InvalidCredentialsError). The base OAuthErrorResponse message is a\n // generic fallback for any unrecognized error codes.\n case 'server_error':\n return msg`The server encountered an unexpected error. Please try again.`\n default:\n return msg`An unexpected error occurred. Please try again.`\n }\n }\n}\n\nexport type UnauthorizedPayload = OAuthErrorPayload<'unauthorized'>\nexport class UnauthorizedError<\n P extends UnauthorizedPayload = UnauthorizedPayload,\n> extends OAuthErrorResponse<P> {\n override msg = msg`This sign-in session has expired`\n\n constructor(payload: P) {\n super(payload, payload.error_description || 'Unauthorized')\n }\n\n static is(json: OAuthErrorPayload): json is UnauthorizedPayload {\n return json.error === 'unauthorized'\n }\n}\n\nexport type AccessDeniedPayload = OAuthErrorPayload<'access_denied'>\nexport class AccessDeniedError<\n P extends AccessDeniedPayload = AccessDeniedPayload,\n> extends OAuthErrorResponse<P> {\n override msg = msg`This authorization request has been denied. Please try again.`\n\n constructor(payload: P, message = payload.error_description) {\n super(payload, message || 'Access denied')\n }\n\n static is(json: OAuthErrorPayload): json is AccessDeniedPayload {\n return json.error === 'access_denied'\n }\n}\n\nexport type InvalidRequestPayload = OAuthErrorPayload<'invalid_request'>\nexport class InvalidRequestError<\n P extends InvalidRequestPayload = InvalidRequestPayload,\n> extends OAuthErrorResponse<P> {\n override msg = msg`The data you submitted is invalid. Please check the form and try again.`\n\n constructor(payload: P, message = payload.error_description) {\n super(payload, message || 'Invalid request')\n }\n\n static is(json: OAuthErrorPayload): json is InvalidRequestPayload {\n return json.error === 'invalid_request'\n }\n}\n\nexport type HandleUnavailablePayload =\n OAuthErrorPayload<'handle_unavailable'> & {\n reason: HandleUnavailableReason\n }\nexport class HandleUnavailableError<\n P extends HandleUnavailablePayload = HandleUnavailablePayload,\n> extends OAuthErrorResponse<P> {\n constructor(payload: P, message = payload.error_description) {\n super(payload, message || 'Handle unavailable')\n this.msg = HandleUnavailableError.getMessageForReason(payload.reason)\n }\n\n static getMessageForReason(\n reason: HandleUnavailableReason,\n ): MessageDescriptor {\n switch (reason) {\n case 'syntax':\n return msg`The username is invalid`\n case 'domain':\n return msg`The domain name is not allowed`\n case 'slur':\n return msg`The username contains inappropriate language`\n case 'reserved':\n return msg`This username is reserved`\n case 'taken':\n return msg`The username is already in use`\n case 'resolution':\n return msg`The username could not be resolved`\n case 'unsupported':\n // @NOTE Only happens during account creation: should never happen since\n // the UI doesn't allow entering custom handles during account creation.\n return msg`Custom domains are not supported`\n }\n }\n\n static is(json: OAuthErrorPayload): json is HandleUnavailablePayload {\n return (\n json.error === 'handle_unavailable' &&\n isHandleUnavailableReason(json['reason'])\n )\n }\n}\n\nexport const SECOND_AUTH_FACTOR_TYPES = Object.freeze(['emailOtp'] as const)\nexport type SecondAuthFactorType = (typeof SECOND_AUTH_FACTOR_TYPES)[number]\nexport const isSecondAuthFactorType = (\n value: unknown,\n): value is SecondAuthFactorType =>\n (SECOND_AUTH_FACTOR_TYPES as readonly unknown[]).includes(value)\n\nexport type SecondAuthenticationFactorRequiredPayload =\n OAuthErrorPayload<'second_authentication_factor_required'> & {\n type: SecondAuthFactorType\n hint: string\n }\nexport class SecondAuthenticationFactorRequiredError<\n P extends\n SecondAuthenticationFactorRequiredPayload = SecondAuthenticationFactorRequiredPayload,\n> extends OAuthErrorResponse<P> {\n constructor(payload: P, message = payload.error_description) {\n const { type, hint } = payload\n super(payload, message || `${type} auth factor required (hint: ${hint})`)\n this.msg = msg`A second authentication factor is required (${hint})`\n }\n\n get type() {\n return this.payload.type\n }\n get hint() {\n return this.payload.hint\n }\n\n static is(\n json: OAuthErrorPayload,\n ): json is SecondAuthenticationFactorRequiredPayload {\n return (\n json.error === 'second_authentication_factor_required' &&\n isSecondAuthFactorType(json['type']) &&\n typeof json['hint'] === 'string'\n )\n }\n}\n\nexport type InvalidInviteCodePayload = InvalidRequestPayload & {\n error_description: `This invite code is invalid.${string}`\n}\nexport class InvalidInviteCodeError<\n P extends InvalidInviteCodePayload = InvalidInviteCodePayload,\n> extends InvalidRequestError<P> {\n msg = msg`The invite code is not valid`\n\n constructor(payload: P) {\n super(payload)\n }\n\n static is(json: OAuthErrorPayload): json is InvalidInviteCodePayload {\n return (\n super.is(json) &&\n json.error_description != null &&\n json.error_description.startsWith('This invite code is invalid.')\n )\n }\n}\n\nexport type RequestExpiredPayload = AccessDeniedPayload & {\n error_description: 'This request has expired'\n}\nexport class RequestExpiredError<\n P extends RequestExpiredPayload = RequestExpiredPayload,\n> extends AccessDeniedError<P> {\n override msg = msg`This sign-in session has expired`\n\n static is(json: OAuthErrorPayload): json is RequestExpiredPayload {\n return (\n super.is(json) && json.error_description === 'This request has expired'\n )\n }\n}\n\nexport type InvalidCredentialsPayload = InvalidRequestPayload & {\n error_description: 'Invalid identifier or password'\n}\nexport class InvalidCredentialsError<\n P extends InvalidCredentialsPayload = InvalidCredentialsPayload,\n> extends InvalidRequestError<P> {\n override msg = msg`Wrong identifier or password`\n\n static is(json: OAuthErrorPayload): json is InvalidCredentialsPayload {\n return (\n super.is(json) &&\n json.error_description === 'Invalid identifier or password'\n )\n }\n}\n\nexport type UnknownRequestPayload = InvalidRequestPayload & {\n error_description: 'Unknown request_uri'\n}\nexport class UnknownRequestUriError<\n P extends UnknownRequestPayload = UnknownRequestPayload,\n> extends InvalidRequestError<P> {\n override msg = msg`This sign-in session has expired`\n\n static is(json: OAuthErrorPayload): json is UnknownRequestPayload {\n return super.is(json) && json.error_description === 'Unknown request_uri'\n }\n}\nexport type EmailTakenPayload = InvalidRequestPayload & {\n error_description: 'Email already taken'\n}\nexport class EmailTakenError<\n P extends EmailTakenPayload = EmailTakenPayload,\n> extends InvalidRequestError<P> {\n override msg = msg`This email is already used`\n\n static is(json: OAuthErrorPayload): json is EmailTakenPayload {\n return super.is(json) && json.error_description === 'Email already taken'\n }\n}\n","export function upsert<T>(\n arr: undefined | readonly T[],\n item: T,\n predicate: (value: T, index: number, obj: readonly T[]) => boolean,\n): T[] {\n if (!arr) return [item]\n const idx = arr.findIndex(predicate)\n return idx === -1\n ? [...arr, item]\n : [...arr.slice(0, idx), item, ...arr.slice(idx + 1)]\n}\n\nexport type Explicit<T> = { [K in keyof T & string]: T[K] }\nexport type Simplify<T> = { [K in keyof T]: T[K] } & NonNullable<unknown>\nexport type Override<T, U> = Simplify<Omit<T, keyof U> & U>\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function toJsonSafe(value: unknown): string | undefined {\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return undefined\n }\n}\n\nexport function isAbortReason(signal: AbortSignal, error: unknown): boolean {\n return (\n signal.aborted &&\n signal.reason != null &&\n error instanceof Error &&\n (error === signal.reason || error.cause === signal.reason)\n )\n}\n","import { MessageDescriptor } from '@lingui/core'\nimport { ParsedError } from '#/components/utils/error-card.tsx'\nimport { OAuthErrorResponse } from '#/lib/api.ts'\nimport { JsonErrorResponse } from './json-client.ts'\nimport { toJsonSafe } from './util.ts'\n\nexport function apiErrorParser(error: unknown): ParsedError | void {\n if (error instanceof OAuthErrorResponse) {\n return {\n name: error.name,\n code: error.payload.error,\n message: error.payload.error_description,\n payload: toJsonSafe(error.payload),\n description: apiErrorMessage(error),\n }\n }\n}\n\nexport function apiErrorMessage(error: unknown): MessageDescriptor | undefined {\n if (error instanceof JsonErrorResponse) {\n return error.msg\n }\n}\n","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","import { MessageDescriptor } from '@lingui/core'\nimport { toJsonSafe } from './util'\n\nexport type ParsedError = {\n name?: string\n code?: string\n message?: string\n payload?: string\n stack?: string\n\n /**\n * A user-friendly description of the error, suitable for display in the UI.\n */\n description?: MessageDescriptor\n}\n\nexport type ErrorParser = (error: unknown) => ParsedError | void\n\nexport function parseError(error: unknown): ParsedError {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n }\n }\n\n if (typeof error === 'string') {\n return {\n message: error,\n }\n }\n\n return {\n payload: toJsonSafe(error),\n }\n}\n\nexport function composeErrorParsers(\n ...parsers: (ErrorParser | undefined)[]\n): ErrorParser {\n return (error) => {\n for (const parser of parsers) {\n const parsed = parser?.(error)\n if (parsed) return parsed\n }\n }\n}\n","import { Trans } from '@lingui/react/macro'\nimport { clsx } from 'clsx'\nimport { JSX, ReactNode } from 'react'\nimport { Override } from '#/lib/util.ts'\n\nexport type ErrorDetailsProps = Override<\n JSX.IntrinsicElements['dl'],\n {\n name?: string\n code?: string\n message?: string\n payload?: string\n stack?: string\n }\n>\n\nexport function ErrorDetails({\n name,\n code,\n message,\n payload,\n stack,\n\n // dl\n className,\n ...props\n}: ErrorDetailsProps) {\n return (\n <dl\n className={clsx(\n 'mt-2 grid max-w-full grid-cols-[auto_1fr] gap-x-2 text-sm',\n className,\n )}\n {...props}\n >\n {name && (\n <DetailRow label={<Trans context=\"Error\">Name</Trans>}>\n <code>{name}</code>\n </DetailRow>\n )}\n\n {code && (\n <DetailRow label={<Trans context=\"Error\">Code</Trans>}>\n <code>{code}</code>\n </DetailRow>\n )}\n\n {message && (\n <DetailRow label={<Trans context=\"Error\">Message</Trans>}>\n {message}\n </DetailRow>\n )}\n\n {payload && (\n <DetailRow label={<Trans context=\"Error\">Payload</Trans>}>\n <code className=\"max-h-[200px] overflow-auto\">\n <pre>{payload}</pre>\n </code>\n </DetailRow>\n )}\n\n {stack && (\n <DetailRow label={<Trans context=\"Error\">Stack</Trans>}>\n <code className=\"max-h-[200px] overflow-auto\">\n <pre>{stack}</pre>\n </code>\n </DetailRow>\n )}\n </dl>\n )\n}\n\nfunction DetailRow({\n children,\n label,\n}: {\n children: ReactNode\n label: ReactNode\n}) {\n return (\n <>\n <dt className=\"font-semibold\">{label}</dt>\n <dd>{children}</dd>\n </>\n )\n}\n","import { msg } from '@lingui/core/macro'\nimport { useLingui } from '@lingui/react'\nimport { Trans } from '@lingui/react/macro'\nimport { composeEventHandlers } from '@radix-ui/primitive'\nimport { ReactNode, useEffect, useMemo, useState } from 'react'\nimport { ErrorParser, ParsedError, parseError } from '#/lib/error-parser.ts'\nimport { Override } from '#/lib/util.ts'\nimport { Admonition, AdmonitionAction, AdmonitionProps } from './admonition.tsx'\nimport { ErrorDetails } from './error-details.tsx'\n\nexport type { ErrorParser, ParsedError }\n\nexport type ErrorCardProps = Override<\n Omit<AdmonitionProps, 'role' | 'append' | 'action'>,\n {\n error: unknown\n retry?: () => void\n retryLabel?: ReactNode\n parser?: ErrorParser\n }\n>\n\nexport function ErrorCard({\n error,\n retry,\n retryLabel,\n parser,\n\n // Admonition\n children,\n onClick,\n ...props\n}: ErrorCardProps) {\n const { _ } = useLingui()\n const [clickCount, setClickCount] = useState(0)\n\n // Every 5th click; toggle showing the details\n const showDetails = ((clickCount / 5) | 0) % 2 === 1\n\n const parsed = useMemo<ParsedError>(\n () => parser?.(error) ?? parseError(error),\n [parser, error],\n )\n\n useEffect(() => {\n // For debugging purposes\n console.warn('Displayed error:', parsed)\n\n // Reset the click count when the error changes\n setClickCount(0)\n }, [parsed])\n\n return (\n <Admonition\n {...props}\n role=\"alert\"\n onClick={composeEventHandlers(onClick, () => {\n setClickCount((c) => c + 1)\n })}\n append={\n <>\n {children}\n {showDetails && (\n <ErrorDetails\n name={parsed.name}\n code={parsed.code}\n message={parsed.message}\n payload={parsed.payload}\n stack={parsed.stack}\n />\n )}\n </>\n }\n action={\n retry != null && (\n <AdmonitionAction onClick={() => retry()}>\n {retryLabel || <Trans>Retry</Trans>}\n </AdmonitionAction>\n )\n }\n >\n {_(parsed.description ?? msg`An unknown error occurred`)}\n </Admonition>\n )\n}\n\nexport const errorCardRender = (props: ErrorCardProps) => (\n <ErrorCard {...props} />\n)\n","import { msg } from '@lingui/core/macro'\nimport { ReactNode } from 'react'\nimport { apiErrorParser } from '#/lib/api-error-parser.ts'\nimport { Override } from '#/lib/util.ts'\nimport { LayoutApp, LayoutAppProps } from './layouts/layout-app.tsx'\nimport { ErrorCard, ErrorParser } from './utils/error-card.tsx'\n\nexport type ErrorViewProps = Override<\n LayoutAppProps,\n {\n error: unknown\n parser?: ErrorParser\n retry?: () => void\n retryLabel?: ReactNode\n }\n>\n\nexport function ErrorView({\n // FallbackProps\n error,\n parser = apiErrorParser,\n retry,\n retryLabel,\n // LayoutAppProps\n title = msg`An error occurred`,\n children,\n ...props\n}: ErrorViewProps) {\n // @TODO improve error page\n return (\n <LayoutApp title={title} {...props}>\n <div className=\"w-[500px] max-w-full\">\n <ErrorCard\n className=\"mx-5\"\n error={error}\n parser={parser}\n retry={retry}\n retryLabel={retryLabel}\n >\n {children}\n </ErrorCard>\n </div>\n </LayoutApp>\n )\n}\n"],"names":["HANDLE_UNAVAILABLE_REASON","isHandleUnavailableReason","value","parseCookieString","cookie","document","Object","fromEntries","split","filter","Boolean","map","str","s","decodeURIComponent","trim","readCookie","name","JsonClient","baseUrl","options","fetch","method","path","input","url","URL","key","entries","searchParams","set","body","JSON","stringify","undefined","headers","Headers","_b","_a","has","response","mode","signal","status","responseType","get","cancel","Error","cause","output","json","ok","error","parseError","_g","_f","_e","onFetchSuccess","call","err","context","warn","_i","_h","onFetchError","payload","JsonErrorResponse","message","msg","CSRF_COOKIE_NAME","CSRF_HEADER_NAME","API_ENDPOINT_PREFIX","Api","window","origin","toString","csrfToken","locale","signIn","username","password","emailOtp","remember","initiatePasswordReset","email","accountSessions","did","revokeAccountSession","deviceId","oauthSessions","revokeOAuthSession","tokenId","confirmResetPassword","token","validateHandleAvailability","handle","updateEmailRequest","updateEmailConfirm","verifyEmailRequest","verifyEmailConfirm","updateHandle","deactivateAccount","reactivateAccount","deleteAccountRequest","deleteAccountConfirm","signUp","inviteCode","hcaptchaToken","signOut","consent","scope","reject","parseApiErrorPayload","isOAuthErrorPayload","ErrorClass","UnknownRequestUriError","SecondAuthenticationFactorRequiredError","InvalidCredentialsError","InvalidInviteCodeError","HandleUnavailableError","EmailTakenError","RequestExpiredError","UnauthorizedError","InvalidRequestError","AccessDeniedError","is","OAuthErrorResponse","error_description","getMessageForError","getMessageForReason","reason","SECOND_AUTH_FACTOR_TYPES","freeze","isSecondAuthFactorType","includes","type","hint","startsWith","upsert","arr","item","predicate","idx","findIndex","slice","sleep","ms","Promise","resolve","setTimeout","toJsonSafe","isAbortReason","aborted","apiErrorParser","code","description","apiErrorMessage","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","event","stack","ErrorDetails","className","props","dl","clsx","DetailRow","label","Trans_","pre","children","_Fragment","dt","dd","ErrorCard","retry","retryLabel","parser","onClick","_","useLingui","clickCount","setClickCount","useState","showDetails","parsed","useMemo","useEffect","Admonition","role","c","append","action","_jsx","AdmonitionAction","errorCardRender","ErrorView","title","LayoutApp","div"],"mappings":"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","x_google_ignoreList":[6]}