@kelpie/ui 0.4.0 → 0.5.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.
- package/dist/api/resources/account.d.ts +5 -0
- package/dist/api/resources/account.d.ts.map +1 -1
- package/dist/api/resources/account.js +11 -0
- package/dist/api/resources/account.js.map +1 -1
- package/dist/api/resources/apiKeys.d.ts +15 -0
- package/dist/api/resources/apiKeys.d.ts.map +1 -0
- package/dist/api/resources/apiKeys.js +50 -0
- package/dist/api/resources/apiKeys.js.map +1 -0
- package/dist/api/resources/invites.d.ts +0 -2
- package/dist/api/resources/invites.d.ts.map +1 -1
- package/dist/api/resources/invites.js +5 -10
- package/dist/api/resources/invites.js.map +1 -1
- package/dist/api/resources/session.d.ts +17 -3
- package/dist/api/resources/session.d.ts.map +1 -1
- package/dist/api/resources/session.js +34 -6
- package/dist/api/resources/session.js.map +1 -1
- package/dist/app/KelpieApp.d.ts.map +1 -1
- package/dist/app/KelpieApp.js +5 -1
- package/dist/app/KelpieApp.js.map +1 -1
- package/dist/app/SessionGate.d.ts +6 -2
- package/dist/app/SessionGate.d.ts.map +1 -1
- package/dist/app/SessionGate.js +10 -3
- package/dist/app/SessionGate.js.map +1 -1
- package/dist/components/ActivitiesPanel.d.ts.map +1 -1
- package/dist/components/ActivitiesPanel.js +10 -7
- package/dist/components/ActivitiesPanel.js.map +1 -1
- package/dist/components/ApiKeysPanel.d.ts +20 -0
- package/dist/components/ApiKeysPanel.d.ts.map +1 -0
- package/dist/components/ApiKeysPanel.js +70 -0
- package/dist/components/ApiKeysPanel.js.map +1 -0
- package/dist/components/DecisionsPanel.d.ts.map +1 -1
- package/dist/components/DecisionsPanel.js +3 -1
- package/dist/components/DecisionsPanel.js.map +1 -1
- package/dist/components/NotesPanel.d.ts.map +1 -1
- package/dist/components/NotesPanel.js +3 -1
- package/dist/components/NotesPanel.js.map +1 -1
- package/dist/components/Shell.d.ts.map +1 -1
- package/dist/components/Shell.js +1 -0
- package/dist/components/Shell.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/dates.d.ts +25 -5
- package/dist/lib/dates.d.ts.map +1 -1
- package/dist/lib/dates.js +49 -20
- package/dist/lib/dates.js.map +1 -1
- package/dist/pages/DecisionsPage.d.ts.map +1 -1
- package/dist/pages/DecisionsPage.js +4 -2
- package/dist/pages/DecisionsPage.js.map +1 -1
- package/dist/pages/HiringPage.d.ts.map +1 -1
- package/dist/pages/HiringPage.js +3 -1
- package/dist/pages/HiringPage.js.map +1 -1
- package/dist/pages/PlanningPage.js +1 -1
- package/dist/pages/PlanningPage.js.map +1 -1
- package/dist/pages/account/AccountLayout.d.ts.map +1 -1
- package/dist/pages/account/AccountLayout.js +1 -0
- package/dist/pages/account/AccountLayout.js.map +1 -1
- package/dist/pages/account/PersonalApiKeysPage.d.ts +9 -0
- package/dist/pages/account/PersonalApiKeysPage.d.ts.map +1 -0
- package/dist/pages/account/PersonalApiKeysPage.js +14 -0
- package/dist/pages/account/PersonalApiKeysPage.js.map +1 -0
- package/dist/pages/account/PreferencesPage.js +1 -1
- package/dist/pages/account/PreferencesPage.js.map +1 -1
- package/dist/pages/account/SecurityPage.d.ts.map +1 -1
- package/dist/pages/account/SecurityPage.js +3 -2
- package/dist/pages/account/SecurityPage.js.map +1 -1
- package/dist/pages/admin/ApiKeysPage.d.ts +9 -0
- package/dist/pages/admin/ApiKeysPage.d.ts.map +1 -0
- package/dist/pages/admin/ApiKeysPage.js +20 -0
- package/dist/pages/admin/ApiKeysPage.js.map +1 -0
- package/dist/pages/admin/McpPage.d.ts.map +1 -1
- package/dist/pages/admin/McpPage.js +6 -3
- package/dist/pages/admin/McpPage.js.map +1 -1
- package/dist/pages/admin/WebhookDeliveries.d.ts.map +1 -1
- package/dist/pages/admin/WebhookDeliveries.js +4 -2
- package/dist/pages/admin/WebhookDeliveries.js.map +1 -1
- package/dist/pages/admin/WebhooksPage.d.ts.map +1 -1
- package/dist/pages/admin/WebhooksPage.js +5 -3
- package/dist/pages/admin/WebhooksPage.js.map +1 -1
- package/dist/pages/auth/ForgotPasswordPage.js +2 -2
- package/dist/pages/auth/ForgotPasswordPage.js.map +1 -1
- package/dist/pages/auth/SignUpPage.d.ts +5 -3
- package/dist/pages/auth/SignUpPage.d.ts.map +1 -1
- package/dist/pages/auth/SignUpPage.js +12 -6
- package/dist/pages/auth/SignUpPage.js.map +1 -1
- package/dist/pages/auth/VerifyEmailConfirmPage.d.ts +9 -0
- package/dist/pages/auth/VerifyEmailConfirmPage.d.ts.map +1 -0
- package/dist/pages/auth/VerifyEmailConfirmPage.js +58 -0
- package/dist/pages/auth/VerifyEmailConfirmPage.js.map +1 -0
- package/dist/pages/auth/VerifyEmailPendingPage.d.ts +10 -0
- package/dist/pages/auth/VerifyEmailPendingPage.d.ts.map +1 -0
- package/dist/pages/auth/VerifyEmailPendingPage.js +35 -0
- package/dist/pages/auth/VerifyEmailPendingPage.js.map +1 -0
- package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -1
- package/dist/pages/dashboard/DashboardPage.js +6 -4
- package/dist/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/pages/dashboard/sections.d.ts +6 -3
- package/dist/pages/dashboard/sections.d.ts.map +1 -1
- package/dist/pages/dashboard/sections.js +6 -6
- package/dist/pages/dashboard/sections.js.map +1 -1
- package/dist/pages/forms/SubmissionsTable.d.ts.map +1 -1
- package/dist/pages/forms/SubmissionsTable.js +3 -1
- package/dist/pages/forms/SubmissionsTable.js.map +1 -1
- package/dist/pages/handbook/HandbookPage.d.ts.map +1 -1
- package/dist/pages/handbook/HandbookPage.js +3 -1
- package/dist/pages/handbook/HandbookPage.js.map +1 -1
- package/package.json +2 -2
- package/src/api/resources/account.ts +13 -0
- package/src/api/resources/apiKeys.ts +60 -0
- package/src/api/resources/invites.ts +5 -15
- package/src/api/resources/session.ts +42 -6
- package/src/app/KelpieApp.tsx +11 -2
- package/src/app/SessionGate.tsx +11 -3
- package/src/components/ActivitiesPanel.tsx +15 -4
- package/src/components/ApiKeysPanel.tsx +307 -0
- package/src/components/DecisionsPanel.tsx +5 -2
- package/src/components/NotesPanel.tsx +4 -1
- package/src/components/Shell.tsx +1 -0
- package/src/index.ts +0 -1
- package/src/lib/dates.ts +54 -20
- package/src/pages/DecisionsPage.tsx +6 -2
- package/src/pages/HiringPage.tsx +3 -1
- package/src/pages/PlanningPage.tsx +1 -1
- package/src/pages/account/AccountLayout.tsx +1 -0
- package/src/pages/account/PersonalApiKeysPage.tsx +27 -0
- package/src/pages/account/PreferencesPage.tsx +1 -1
- package/src/pages/account/SecurityPage.tsx +4 -1
- package/src/pages/admin/ApiKeysPage.tsx +43 -0
- package/src/pages/admin/McpPage.tsx +7 -4
- package/src/pages/admin/WebhookDeliveries.tsx +4 -2
- package/src/pages/admin/WebhooksPage.tsx +5 -3
- package/src/pages/auth/ForgotPasswordPage.tsx +2 -2
- package/src/pages/auth/SignUpPage.tsx +12 -6
- package/src/pages/auth/VerifyEmailConfirmPage.tsx +81 -0
- package/src/pages/auth/VerifyEmailPendingPage.tsx +65 -0
- package/src/pages/dashboard/DashboardPage.tsx +14 -4
- package/src/pages/dashboard/sections.tsx +9 -3
- package/src/pages/forms/SubmissionsTable.tsx +3 -1
- package/src/pages/handbook/HandbookPage.tsx +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandbookPage.js","sourceRoot":"","sources":["../../../src/pages/handbook/HandbookPage.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HandbookPage.js","sourceRoot":"","sources":["../../../src/pages/handbook/HandbookPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,SAAS,EACT,UAAU,GACX,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA;AAC7F,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAExC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAmC,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gCAAiC,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAGzF;;;;;;;;GAQG;AAEH,MAAM,cAAc,GAAG,eAAe,CAAA;AAEtC,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAA;IAC1C,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAA;IAC1C,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAA;IAE1C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC7D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACzD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAEzC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;IAE1D,MAAM,SAAS,GACb,QAAQ,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;QAClC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK;QACnE,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAA;IAErB,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAE/F,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAErB,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAChD,KAAK,QAAQ,CAAC,aAAa,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IAE5B,KAAK,UAAU,OAAO,CAAC,QAAuB;QAC5C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;YACrC,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,KAAK,cAAc,sBAAsB;YAC/C,QAAQ;SACT,CAAC,CAAA;QAEF,MAAM,QAAQ,CAAC,aAAa,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IACxC,CAAC;IAED;;;;;OAKG;IACH,KAAK,UAAU,UAAU,CAAC,IAAkB;QAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAA;QACzD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAC9B,MAAM,GAAG,CAAC;YACR,CAAC,CAAC,wBAAwB,MAAM,CAAC,MAAM,CAAC,eAAe,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;YAC/E,CAAC,CAAC,mBAAmB,CACxB,CAAA;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAE3E,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAElC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YAE1D,MAAM,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;QACnF,CAAC;IACH,CAAC;IAED,SAAS,SAAS;QAChB,WAAW,CAAC,IAAI,CAAC,CAAA;QACjB,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,UAAU,CAAC,CAAC,CAAC,CAAA;IACf,CAAC;IAED,SAAS,WAAW,CAAC,KAAqB;QACxC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QACpC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAClC,UAAU,CAAC,CAAC,CAAC,CAAA;IACf,CAAC;IAED,SAAS,UAAU,CAAC,KAAoB;QACtC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAEzB,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACxB,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,SAAS,SAAS,CAAC,KAAmB;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAA;QACvB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjE,MAAM,OAAO,GAAG,OAAO,CAAA;QAEvB,SAAS,EAAE,CAAA;QAEX,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACvC,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAEzE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YAClD,OAAM;QACR,CAAC;QAED,UAAU,CAAC,GAAG,CAAC;YACb,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE;SACxE,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,KAAC,YAAY,IAAC,KAAK,EAAC,4BAAuB,GAAG,CAAA;IACvD,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,CAAA;IAC3C,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,qGAAqG,aAClH,iBAAO,SAAS,EAAC,oEAAoE,aACnF,eAAK,SAAS,EAAC,0EAA0E,aACvF,0BACE,cAAK,SAAS,EAAC,oCAAoC,yBAAe,EAClE,cAAK,SAAS,EAAC,4BAA4B,sDAAuC,IAC9E,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,UAAU,CAAC,SAAS,EAC9B,OAAO,EAAE,GAAG,EAAE;oCACZ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;gCACpB,CAAC,EACD,SAAS,EAAC,8HAA8H,oBAGjI,IACL,EACN,eAAK,SAAS,EAAC,4BAA4B,aACzC,MAAC,UAAU,IACT,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,aAAa,EACjC,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,SAAS,aAEvB,KAAC,eAAe,IACd,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAClC,QAAQ,EAAE,2BAA2B,YAErC,aAAI,SAAS,EAAC,uBAAuB,YAClC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAClB,KAAC,gBAAgB,IAEf,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAC/E,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,EAAE,EAChC,UAAU,EAAE,GAAG,EAAE;oDACf,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gDACvB,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;oDACb,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gDAC5B,CAAC,IATI,IAAI,CAAC,EAAE,CAUZ,CACH,CAAC,GACC,GACW,EAClB,KAAC,WAAW,IAAC,aAAa,EAAE,IAAI,YAC7B,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC/B,cACE,SAAS,EAAC,kGAAkG,EAC5G,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,YAE5D,QAAQ,CAAC,IAAI,CAAC,KAAK,GAChB,CACP,GACW,IACH,EACZ,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CACpB,YAAG,SAAS,EAAC,kDAAkD,8BAAkB,CAClF,EACA,KAAK,CAAC,OAAO,IAAI,CAChB,YAAG,SAAS,EAAC,kDAAkD,wGAG3D,CACL,IACG,IACA,EAER,cAAK,SAAS,EAAC,gBAAgB,YAC5B,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CACtB,cAAK,SAAS,EAAC,oEAAoE,uCAE7E,CACP,CAAC,CAAC,CAAC,CACF,KAAC,cAAc,IAEb,IAAI,EAAE,MAAM,EACZ,UAAU,EACR,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAEhF,QAAQ,EAAE,UAAU,CAAC,SAAS,EAC9B,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,EAC3C,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;wBAClB,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;oBAC5C,CAAC,EACD,UAAU,EAAE,GAAG,EAAE;wBACf,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oBACzB,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;wBACb,KAAK,UAAU,CAAC,MAAM,CAAC,CAAA;oBACzB,CAAC,IAfI,MAAM,CAAC,EAAE,CAgBd,CACH,GACG,IACF,CACP,CAAA;AACH,CAAC;AAUD,SAAS,gBAAgB,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,GACc;IACtB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC;QAC3F,EAAE,EAAE,IAAI,CAAC,EAAE;KACZ,CAAC,CAAA;IAEF,OAAO,CACL,aACE,GAAG,EAAE,UAAU,EACf,KAAK,EAAE;YACL,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5C,UAAU;YACV,UAAU,EAAE,KAAK,GAAG,MAAM;YAC1B,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC/B,EACD,SAAS,EAAC,gBAAgB,YAE1B,eACE,SAAS,EAAE;gBACT,6DAA6D;gBAC7D,QAAQ;oBACN,CAAC,CAAC,kCAAkC;oBACpC,CAAC,CAAC,uDAAuD;aAC5D,CAAC,IAAI,CAAC,GAAG,CAAC,aAEX,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,sFAAsF,gBACpF,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,aAAa,KAC5C,UAAU,KACV,SAAS,6BAGN,EACT,KAAC,IAAI,IACH,EAAE,EAAE,aAAa,IAAI,CAAC,EAAE,EAAE,EAC1B,SAAS,EAAE;wBACT,iDAAiD;wBACjD,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;qBAC9B,CAAC,IAAI,CAAC,GAAG,CAAC,YAEV,IAAI,CAAC,IAAI,CAAC,KAAK,GACX,EACP,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,aAAa,EACnB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wBACjB,KAAK,CAAC,cAAc,EAAE,CAAA;wBACtB,UAAU,EAAE,CAAA;oBACd,CAAC,EACD,SAAS,EAAC,yHAAyH,kBAG5H,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,QAAQ,EACd,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wBACjB,KAAK,CAAC,cAAc,EAAE,CAAA;wBACtB,QAAQ,EAAE,CAAA;oBACZ,CAAC,EACD,SAAS,EAAC,6HAA6H,uBAGhI,IACL,GACH,CACN,CAAA;AACH,CAAC;AAYD;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,EACtB,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,KAAK,EACL,MAAM,EACN,UAAU,EACV,QAAQ,GACY;IACpB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClB,UAAU,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAEpC,SAAS,IAAI;QACX,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QAE5B,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACxE,UAAU,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,sBAAsB,aACnC,eAAK,SAAS,EAAC,mFAAmF,aAChG,eAAK,SAAS,EAAC,gBAAgB,aAC5B,OAAO,CAAC,CAAC,CAAC,CACT,gBACE,KAAK,EAAE,KAAK,gBACD,YAAY,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oCAClB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gCAC9B,CAAC,EACD,SAAS,EAAC,0IAA0I,GACpJ,CACH,CAAC,CAAC,CAAC,CACF,aAAI,SAAS,EAAC,mDAAmD,YAAE,IAAI,CAAC,KAAK,GAAM,CACpF,EACD,eAAK,SAAS,EAAC,iCAAiC,yBACrC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAChD,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,UAAU,EAAE,IAC/C,IACF,EACN,cAAK,SAAS,EAAC,4CAA4C,YACxD,OAAO,CAAC,CAAC,CAAC,CACT,8BACE,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;wCACZ,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wCACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wCAClB,UAAU,CAAC,KAAK,CAAC,CAAA;oCACnB,CAAC,EACD,SAAS,EAAC,gFAAgF,uBAGnF,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,IAAI,EACb,SAAS,EAAC,gIAAgI,qBAGnI,IACR,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,UAAU,IAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,GAAI,EAChF,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,6IAA6I,4BAGhJ,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,uIAAuI,uBAG1I,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;wCACZ,UAAU,CAAC,IAAI,CAAC,CAAA;oCAClB,CAAC,EACD,SAAS,EAAC,uIAAuI,qBAG1I,IACR,CACJ,GACG,IACF,EAEN,eAAK,SAAS,EAAC,4BAA4B,aACxC,KAAK,KAAK,IAAI,IAAI,CACjB,cAAK,SAAS,EAAC,gBAAgB,YAC7B,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,GAAI,GACxB,CACP,EACA,OAAO,CAAC,CAAC,CAAC,CACT,mBACE,KAAK,EAAE,IAAI,gBACA,WAAW,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;wBAC7B,CAAC,EACD,SAAS,EAAC,uLAAuL,EACjM,UAAU,SACV,CACH,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,4BAA4B,YACzC,KAAC,YAAY,IAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAI,GAC/B,CACP,IACG,IACF,CACP,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kelpie/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "React UI for Kelpie: components, pages, API client, and the extension registry an assembly composes modules through.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"kelpie",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@dnd-kit/core": "^6.3.1",
|
|
49
49
|
"@dnd-kit/sortable": "^10.0.0",
|
|
50
50
|
"@dnd-kit/utilities": "^3.2.2",
|
|
51
|
-
"@kelpie/schemas": "^0.
|
|
51
|
+
"@kelpie/schemas": "^0.5.0",
|
|
52
52
|
"@tanstack/react-query": "^5.101.4",
|
|
53
53
|
"react-markdown": "^10.1.0",
|
|
54
54
|
"react-router": "^8.3.0",
|
|
@@ -18,11 +18,13 @@ import type {
|
|
|
18
18
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
|
|
19
19
|
import { useEffect, useState } from 'react'
|
|
20
20
|
|
|
21
|
+
import { resolveTimezone } from '../../lib/dates.ts'
|
|
21
22
|
import { applyTheme, getStoredTheme, setStoredTheme, watchSystemTheme } from '../../lib/theme.ts'
|
|
22
23
|
import { useApiClient } from '../context.ts'
|
|
23
24
|
import { toError } from '../errors.ts'
|
|
24
25
|
import type { MutationResult } from '../resource.ts'
|
|
25
26
|
import { asMutationResult } from './mutation.ts'
|
|
27
|
+
import { useWorkspace } from './workspace.ts'
|
|
26
28
|
|
|
27
29
|
/**
|
|
28
30
|
* The signed-in person, as the `/account/*` pages read and write them.
|
|
@@ -218,3 +220,14 @@ export function useTheme(): ThemeControl {
|
|
|
218
220
|
|
|
219
221
|
return { theme, setTheme }
|
|
220
222
|
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* The zone dates render in: the account's own choice, falling back to the
|
|
226
|
+
* workspace's while either query is still loading.
|
|
227
|
+
*/
|
|
228
|
+
export function useTimezone(): string {
|
|
229
|
+
const { preferences } = useAccountPreferences()
|
|
230
|
+
const { workspace } = useWorkspace()
|
|
231
|
+
|
|
232
|
+
return resolveTimezone(preferences?.timezone, workspace?.timezone)
|
|
233
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { apiKeySchema, createApiKeyBody, createdApiKeySchema } from '@kelpie/schemas'
|
|
2
|
+
import type { ApiKey, ApiKeyKind, CreateApiKeyInput, CreatedApiKey } from '@kelpie/schemas'
|
|
3
|
+
import { useMutation, useQueryClient } from '@tanstack/react-query'
|
|
4
|
+
|
|
5
|
+
import { useApiClient } from '../context.ts'
|
|
6
|
+
import { createReadOnlyResourceHooks } from '../resource.ts'
|
|
7
|
+
import type { MutationResult, RecordListResult } from '../resource.ts'
|
|
8
|
+
import { asMutationResult } from './mutation.ts'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* `/v1/api-keys`: workspace keys and personal keys, one endpoint told apart by
|
|
12
|
+
* `kind`. `kind` is required on every list request — the server answers `422`
|
|
13
|
+
* without it — so each page asks for exactly the one kind it manages.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const { useList } = createReadOnlyResourceHooks<ApiKey>({
|
|
17
|
+
name: 'apiKeys',
|
|
18
|
+
path: '/api-keys',
|
|
19
|
+
decode: apiKeySchema.parse,
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
export function useApiKeys(kind: ApiKeyKind): RecordListResult<ApiKey> {
|
|
23
|
+
return useList({ kind })
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Mints a key.
|
|
28
|
+
*
|
|
29
|
+
* Written out rather than taken from `createResourceHooks`, because the `201`
|
|
30
|
+
* is the only response that ever carries the secret and the shared hook decodes
|
|
31
|
+
* with the schema that has no such field. The secret has to survive the decode:
|
|
32
|
+
* it cannot be fetched again, so a page that dropped it would have created a key
|
|
33
|
+
* nobody can use.
|
|
34
|
+
*/
|
|
35
|
+
export function useCreateApiKey(): MutationResult<CreateApiKeyInput, CreatedApiKey> {
|
|
36
|
+
const client = useApiClient()
|
|
37
|
+
const queryClient = useQueryClient()
|
|
38
|
+
const mutation = useMutation({
|
|
39
|
+
mutationFn: (input: CreateApiKeyInput) =>
|
|
40
|
+
client.post('/api-keys', createApiKeyBody(input), createdApiKeySchema.parse),
|
|
41
|
+
onSettled: () => {
|
|
42
|
+
void queryClient.invalidateQueries({ queryKey: ['apiKeys', 'list'] })
|
|
43
|
+
},
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
return asMutationResult(mutation)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function useRevokeApiKey(): MutationResult<string, void> {
|
|
50
|
+
const client = useApiClient()
|
|
51
|
+
const queryClient = useQueryClient()
|
|
52
|
+
const mutation = useMutation({
|
|
53
|
+
mutationFn: (id: string) => client.delete(`/api-keys/${id}`),
|
|
54
|
+
onSettled: () => {
|
|
55
|
+
void queryClient.invalidateQueries({ queryKey: ['apiKeys', 'list'] })
|
|
56
|
+
},
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
return asMutationResult(mutation)
|
|
60
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createInviteBody, inviteSchema
|
|
1
|
+
import { createInviteBody, inviteSchema } from '@kelpie/schemas'
|
|
2
2
|
import type { InvitableRole, Invite } from '@kelpie/schemas'
|
|
3
3
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
|
|
4
4
|
|
|
@@ -15,18 +15,12 @@ import { useSession } from './session.ts'
|
|
|
15
15
|
* only renders this half for an admin, which keeps the refusal off screen
|
|
16
16
|
* without the browser being what decides it.
|
|
17
17
|
*
|
|
18
|
-
* The URL the emailed link points at is built
|
|
19
|
-
*
|
|
20
|
-
* the placeholder it fills in.
|
|
18
|
+
* The URL the emailed link points at is built server-side from the deployment's
|
|
19
|
+
* own base URL, so nothing here sends one.
|
|
21
20
|
*/
|
|
22
21
|
|
|
23
22
|
const INVITES_KEY = 'invites'
|
|
24
23
|
|
|
25
|
-
/** Where an invitee lands. `JoinPage` reads the token out of the query string. */
|
|
26
|
-
export function inviteUrlTemplate(origin: string): string {
|
|
27
|
-
return `${origin}/join?token={token}`
|
|
28
|
-
}
|
|
29
|
-
|
|
30
24
|
export interface InviteListResult {
|
|
31
25
|
readonly invites: readonly Invite[]
|
|
32
26
|
readonly isLoading: boolean
|
|
@@ -64,7 +58,7 @@ export function useSendInvite(): MutationResult<SendInviteArguments, Invite> {
|
|
|
64
58
|
mutationFn: ({ email, role }: SendInviteArguments) =>
|
|
65
59
|
client.post(
|
|
66
60
|
`/workspaces/${workspaceId}/invites`,
|
|
67
|
-
createInviteBody({ email, role
|
|
61
|
+
createInviteBody({ email, role }),
|
|
68
62
|
inviteSchema.parse,
|
|
69
63
|
),
|
|
70
64
|
onSuccess: async () => {
|
|
@@ -83,11 +77,7 @@ export function useResendInvite(): MutationResult<string, Invite> {
|
|
|
83
77
|
const workspaceId = session?.workspaceId ?? ''
|
|
84
78
|
const mutation = useMutation({
|
|
85
79
|
mutationFn: (inviteId: string) =>
|
|
86
|
-
client.post(
|
|
87
|
-
`/workspaces/${workspaceId}/invites/${inviteId}/resend`,
|
|
88
|
-
resendInviteBody({ inviteUrlTemplate: inviteUrlTemplate(window.location.origin) }),
|
|
89
|
-
inviteSchema.parse,
|
|
90
|
-
),
|
|
80
|
+
client.post(`/workspaces/${workspaceId}/invites/${inviteId}/resend`, {}, inviteSchema.parse),
|
|
91
81
|
onSuccess: async () => {
|
|
92
82
|
await queryClient.invalidateQueries({ queryKey: [INVITES_KEY, workspaceId] })
|
|
93
83
|
},
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
confirmEmailVerificationBody,
|
|
2
3
|
confirmPasswordResetBody,
|
|
3
4
|
createWorkspaceBody,
|
|
4
5
|
logInBody,
|
|
@@ -9,6 +10,7 @@ import {
|
|
|
9
10
|
workspaceSchema,
|
|
10
11
|
} from '@kelpie/schemas'
|
|
11
12
|
import type {
|
|
13
|
+
ConfirmEmailVerificationInput,
|
|
12
14
|
ConfirmPasswordResetInput,
|
|
13
15
|
CreateWorkspaceInput,
|
|
14
16
|
LogInInput,
|
|
@@ -63,6 +65,8 @@ export interface SessionState {
|
|
|
63
65
|
readonly isSignedOut: boolean
|
|
64
66
|
/** Signed in, but the account has no workspace yet. Every CRM endpoint answers `403` until it does. */
|
|
65
67
|
readonly needsWorkspace: boolean
|
|
68
|
+
/** No workspace yet, and creating one will answer `403` until the account verifies its email. */
|
|
69
|
+
readonly needsEmailVerification: boolean
|
|
66
70
|
readonly error: Error | null
|
|
67
71
|
}
|
|
68
72
|
|
|
@@ -70,12 +74,14 @@ export function useSession(): SessionState {
|
|
|
70
74
|
const client = useApiClient()
|
|
71
75
|
const result = useQuery(sessionQuery(client))
|
|
72
76
|
const isSignedOut = result.error instanceof ApiError && result.error.status === 401
|
|
77
|
+
const needsWorkspace = result.data !== undefined && result.data.workspaceId === null
|
|
73
78
|
|
|
74
79
|
return {
|
|
75
80
|
session: result.data,
|
|
76
81
|
isLoading: result.isPending,
|
|
77
82
|
isSignedOut,
|
|
78
|
-
needsWorkspace
|
|
83
|
+
needsWorkspace,
|
|
84
|
+
needsEmailVerification: needsWorkspace && result.data?.emailVerified === false,
|
|
79
85
|
error: isSignedOut ? null : toError(result.error),
|
|
80
86
|
}
|
|
81
87
|
}
|
|
@@ -132,11 +138,6 @@ export function useLogOut(): MutationResult<void, void> {
|
|
|
132
138
|
return asMutationResult(mutation)
|
|
133
139
|
}
|
|
134
140
|
|
|
135
|
-
/** Where a reset email lands. `ResetPasswordPage` reads the token out of the query string. */
|
|
136
|
-
export function resetUrlTemplate(origin: string): string {
|
|
137
|
-
return `${origin}/reset-password?token={token}`
|
|
138
|
-
}
|
|
139
|
-
|
|
140
141
|
/**
|
|
141
142
|
* Asks for a reset link.
|
|
142
143
|
*
|
|
@@ -176,6 +177,41 @@ export function useConfirmPasswordReset(): MutationResult<ConfirmPasswordResetIn
|
|
|
176
177
|
return asMutationResult(mutation)
|
|
177
178
|
}
|
|
178
179
|
|
|
180
|
+
/**
|
|
181
|
+
* Asks for a fresh verification link. The same call a "resend" button makes,
|
|
182
|
+
* and a no-op once the account is already verified.
|
|
183
|
+
*
|
|
184
|
+
* Nothing in the cache changes: this signs nobody in or out.
|
|
185
|
+
*/
|
|
186
|
+
export function useRequestEmailVerification(): MutationResult<void, void> {
|
|
187
|
+
const client = useApiClient()
|
|
188
|
+
const mutation = useMutation({
|
|
189
|
+
mutationFn: () => client.postEmpty('/auth/verify-email'),
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
return asMutationResult(mutation)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Spends a verification token from that email.
|
|
197
|
+
*
|
|
198
|
+
* Unlike a password reset this ends no session, so the caller only needs the
|
|
199
|
+
* session re-read: `needsEmailVerification` flips once it lands.
|
|
200
|
+
*/
|
|
201
|
+
export function useConfirmEmailVerification(): MutationResult<ConfirmEmailVerificationInput, void> {
|
|
202
|
+
const client = useApiClient()
|
|
203
|
+
const queryClient = useQueryClient()
|
|
204
|
+
const mutation = useMutation({
|
|
205
|
+
mutationFn: (input: ConfirmEmailVerificationInput) =>
|
|
206
|
+
client.postEmpty('/auth/verify-email/confirm', confirmEmailVerificationBody(input)),
|
|
207
|
+
onSuccess: async () => {
|
|
208
|
+
await queryClient.fetchQuery(sessionQuery(client))
|
|
209
|
+
},
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
return asMutationResult(mutation)
|
|
213
|
+
}
|
|
214
|
+
|
|
179
215
|
/**
|
|
180
216
|
* Joins the workspace an invitation names.
|
|
181
217
|
*
|
package/src/app/KelpieApp.tsx
CHANGED
|
@@ -27,9 +27,11 @@ import { RaiseDetail } from '../pages/RaiseDetail.tsx'
|
|
|
27
27
|
import { RaiseStageSettingsPage } from '../pages/RaiseStageSettingsPage.tsx'
|
|
28
28
|
import { RoleDetail } from '../pages/RoleDetail.tsx'
|
|
29
29
|
import { AccountLayout } from '../pages/account/AccountLayout.tsx'
|
|
30
|
+
import { PersonalApiKeysPage } from '../pages/account/PersonalApiKeysPage.tsx'
|
|
30
31
|
import { PreferencesPage } from '../pages/account/PreferencesPage.tsx'
|
|
31
32
|
import { ProfilePage } from '../pages/account/ProfilePage.tsx'
|
|
32
33
|
import { SecurityPage } from '../pages/account/SecurityPage.tsx'
|
|
34
|
+
import { ApiKeysPage } from '../pages/admin/ApiKeysPage.tsx'
|
|
33
35
|
import { DataPage } from '../pages/admin/DataPage.tsx'
|
|
34
36
|
import { McpPage } from '../pages/admin/McpPage.tsx'
|
|
35
37
|
import { ModulesPage } from '../pages/admin/ModulesPage.tsx'
|
|
@@ -41,6 +43,8 @@ import { JoinPage } from '../pages/auth/JoinPage.tsx'
|
|
|
41
43
|
import { ResetPasswordPage } from '../pages/auth/ResetPasswordPage.tsx'
|
|
42
44
|
import { SignInPage } from '../pages/auth/SignInPage.tsx'
|
|
43
45
|
import { SignUpPage } from '../pages/auth/SignUpPage.tsx'
|
|
46
|
+
import { VerifyEmailConfirmPage } from '../pages/auth/VerifyEmailConfirmPage.tsx'
|
|
47
|
+
import { VerifyEmailPendingPage } from '../pages/auth/VerifyEmailPendingPage.tsx'
|
|
44
48
|
import { DashboardPage } from '../pages/dashboard/DashboardPage.tsx'
|
|
45
49
|
import { HandbookLayout } from '../pages/handbook/HandbookPage.tsx'
|
|
46
50
|
import { HandbookStepPage } from '../pages/onboarding/HandbookStepPage.tsx'
|
|
@@ -110,10 +114,13 @@ function AppRoutes(): React.JSX.Element {
|
|
|
110
114
|
<Route path="/forgot-password" element={<ForgotPasswordPage />} />
|
|
111
115
|
<Route path="/reset-password" element={<ResetPasswordPage />} />
|
|
112
116
|
{/* Outside the gate: an invitee may have no workspace yet, and this is how
|
|
113
|
-
they get one. Same for the first onboarding step,
|
|
114
|
-
|
|
117
|
+
they get one. Same for the first onboarding step, and for the two
|
|
118
|
+
verification pages, all of which are what the gate sends an account
|
|
119
|
+
with no workspace to. */}
|
|
115
120
|
<Route path="/join" element={<JoinPage />} />
|
|
116
121
|
<Route path="/onboarding/workspace" element={<WorkspaceStepPage />} />
|
|
122
|
+
<Route path="/verify-email" element={<VerifyEmailConfirmPage />} />
|
|
123
|
+
<Route path="/verify-email/pending" element={<VerifyEmailPendingPage />} />
|
|
117
124
|
|
|
118
125
|
<Route element={<SessionGate />}>
|
|
119
126
|
{/* Inside the gate and outside the Shell: both steps need the workspace
|
|
@@ -155,6 +162,7 @@ function AppRoutes(): React.JSX.Element {
|
|
|
155
162
|
<Route path="admin/workspace" element={<WorkspaceSettingsPage />} />
|
|
156
163
|
<Route path="admin/team" element={<TeamPage />} />
|
|
157
164
|
<Route path="admin/data" element={<DataPage />} />
|
|
165
|
+
<Route path="admin/api-keys" element={<ApiKeysPage />} />
|
|
158
166
|
<Route path="admin/mcp" element={<McpPage />} />
|
|
159
167
|
<Route path="admin/webhooks" element={<WebhooksPage />} />
|
|
160
168
|
<Route path="admin/modules" element={<ModulesPage />} />
|
|
@@ -164,6 +172,7 @@ function AppRoutes(): React.JSX.Element {
|
|
|
164
172
|
<Route path="profile" element={<ProfilePage />} />
|
|
165
173
|
<Route path="security" element={<SecurityPage />} />
|
|
166
174
|
<Route path="preferences" element={<PreferencesPage />} />
|
|
175
|
+
<Route path="api-keys" element={<PersonalApiKeysPage />} />
|
|
167
176
|
{accountRoutes.map((route) => (
|
|
168
177
|
<Route
|
|
169
178
|
key={route.path}
|
package/src/app/SessionGate.tsx
CHANGED
|
@@ -6,17 +6,21 @@ import { ErrorPanel, LoadingPanel } from '../components/QueryState.tsx'
|
|
|
6
6
|
/**
|
|
7
7
|
* What stands between a URL and a page that needs a workspace.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* Four answers, and they are not the same thing:
|
|
10
10
|
*
|
|
11
11
|
* - `401` means sign in. That is a redirect.
|
|
12
|
-
* - Signed in
|
|
12
|
+
* - Signed in, no workspace, email unverified means go verify it: creating a
|
|
13
|
+
* workspace answers `403` until then. Checked before `needsWorkspace`,
|
|
14
|
+
* since both are true at once for a fresh direct signup and this is the one
|
|
15
|
+
* that has to happen first.
|
|
16
|
+
* - Signed in, no workspace, verified means create one. Also a redirect, to a
|
|
13
17
|
* different place, because sending someone to a sign-in form they have
|
|
14
18
|
* already passed is a loop.
|
|
15
19
|
* - Anything else is the service being unreachable or broken, and redirecting
|
|
16
20
|
* on that would hide it behind a sign-in form that will also fail.
|
|
17
21
|
*/
|
|
18
22
|
export function SessionGate(): React.JSX.Element {
|
|
19
|
-
const { isLoading, isSignedOut, needsWorkspace, error } = useSession()
|
|
23
|
+
const { isLoading, isSignedOut, needsWorkspace, needsEmailVerification, error } = useSession()
|
|
20
24
|
|
|
21
25
|
if (isSignedOut) {
|
|
22
26
|
return <Navigate to="/login" replace />
|
|
@@ -34,6 +38,10 @@ export function SessionGate(): React.JSX.Element {
|
|
|
34
38
|
return <LoadingPanel />
|
|
35
39
|
}
|
|
36
40
|
|
|
41
|
+
if (needsEmailVerification) {
|
|
42
|
+
return <Navigate to="/verify-email/pending" replace />
|
|
43
|
+
}
|
|
44
|
+
|
|
37
45
|
if (needsWorkspace) {
|
|
38
46
|
return <Navigate to="/onboarding/workspace" replace />
|
|
39
47
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Activity, ActivityKind, RecordTargetType } from '@kelpie/schemas'
|
|
2
2
|
|
|
3
|
+
import { useTimezone } from '../api/resources/account.ts'
|
|
3
4
|
import { useActivities } from '../api/resources/activities.ts'
|
|
4
5
|
import { useMembers } from '../api/resources/members.ts'
|
|
5
6
|
import { formatRelativeTime, monthLabel } from '../lib/dates.ts'
|
|
@@ -55,11 +56,15 @@ interface MonthGroup {
|
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
/** Consecutive runs, not a map: the list is already ordered, so a month never recurs. */
|
|
58
|
-
function groupByMonth(
|
|
59
|
+
function groupByMonth(
|
|
60
|
+
activities: readonly Activity[],
|
|
61
|
+
timezone: string,
|
|
62
|
+
now: Date,
|
|
63
|
+
): readonly MonthGroup[] {
|
|
59
64
|
const groups: { label: string; items: Activity[] }[] = []
|
|
60
65
|
|
|
61
66
|
for (const activity of activities) {
|
|
62
|
-
const label = monthLabel(activity.createdAt, now)
|
|
67
|
+
const label = monthLabel(activity.createdAt, timezone, now)
|
|
63
68
|
const last = groups.at(-1)
|
|
64
69
|
|
|
65
70
|
if (last?.label === label) {
|
|
@@ -78,7 +83,8 @@ export function ActivitiesPanel({
|
|
|
78
83
|
}: ActivitiesPanelProps): React.JSX.Element {
|
|
79
84
|
const activities = useActivities({ targetType, targetId })
|
|
80
85
|
const members = useMembers()
|
|
81
|
-
const
|
|
86
|
+
const timezone = useTimezone()
|
|
87
|
+
const groups = groupByMonth(activities.records, timezone, new Date())
|
|
82
88
|
|
|
83
89
|
return (
|
|
84
90
|
<section>
|
|
@@ -104,6 +110,7 @@ export function ActivitiesPanel({
|
|
|
104
110
|
contextType={targetType}
|
|
105
111
|
contextId={targetId}
|
|
106
112
|
isLast={index === group.items.length - 1}
|
|
113
|
+
timezone={timezone}
|
|
107
114
|
/>
|
|
108
115
|
))}
|
|
109
116
|
</ol>
|
|
@@ -137,6 +144,7 @@ export function LatestActivity({
|
|
|
137
144
|
}: ActivitiesPanelProps): React.JSX.Element {
|
|
138
145
|
const activities = useActivities({ targetType, targetId })
|
|
139
146
|
const members = useMembers()
|
|
147
|
+
const timezone = useTimezone()
|
|
140
148
|
const latest = activities.records[0]
|
|
141
149
|
|
|
142
150
|
return (
|
|
@@ -158,6 +166,7 @@ export function LatestActivity({
|
|
|
158
166
|
contextType={targetType}
|
|
159
167
|
contextId={targetId}
|
|
160
168
|
isLast
|
|
169
|
+
timezone={timezone}
|
|
161
170
|
/>
|
|
162
171
|
</ol>
|
|
163
172
|
)}
|
|
@@ -183,12 +192,14 @@ function ActivityEvent({
|
|
|
183
192
|
contextType,
|
|
184
193
|
contextId,
|
|
185
194
|
isLast,
|
|
195
|
+
timezone,
|
|
186
196
|
}: {
|
|
187
197
|
readonly activity: Activity
|
|
188
198
|
readonly actorName: string
|
|
189
199
|
readonly contextType: RecordTargetType
|
|
190
200
|
readonly contextId: string
|
|
191
201
|
readonly isLast: boolean
|
|
202
|
+
readonly timezone: string
|
|
192
203
|
}): React.JSX.Element {
|
|
193
204
|
const isRolledUp = activity.targetType !== contextType || activity.targetId !== contextId
|
|
194
205
|
|
|
@@ -218,7 +229,7 @@ function ActivityEvent({
|
|
|
218
229
|
dateTime={activity.createdAt.toISOString()}
|
|
219
230
|
className="shrink-0 text-[11px] text-ink-faint"
|
|
220
231
|
>
|
|
221
|
-
{formatRelativeTime(activity.createdAt)}
|
|
232
|
+
{formatRelativeTime(activity.createdAt, timezone)}
|
|
222
233
|
</time>
|
|
223
234
|
</div>
|
|
224
235
|
{isRolledUp && (
|