@donotdev/oauth 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/MultipleOAuthProviders.js +1 -1
- package/dist/components/OAuthConnectionModal.js +1 -1
- package/dist/components/OAuthFallback.js +1 -1
- package/dist/components/OAuthPartnerButton.d.ts +2 -2
- package/dist/components/OAuthPartnerButton.d.ts.map +1 -1
- package/dist/components/OAuthPartnerButton.js +1 -1
- package/dist/config/oauthConfigUtils.js +1 -1
- package/dist/config/schemas.js +1 -1
- package/dist/index.js +1 -1
- package/dist/oauthStore.d.ts +6 -3
- package/dist/oauthStore.d.ts.map +1 -1
- package/dist/oauthStore.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/useOAuth.d.ts.map +1 -1
- package/dist/useOAuth.js +1 -1
- package/dist/utils/partner-discovery.js +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as t}from"react/jsx-runtime";import{Alert as A,Stack as O,Grid as P}from"@donotdev/components";import{useTranslation as b,getEnabledOAuthPartners as w}from"@donotdev/core";import{withOAuthFallback as x}from"./OAuthFallback";import{OAuthPartnerButton as $}from"./OAuthPartnerButton";const N=({providers:n=w(),purpose:c="api-access",containerClassName:i="",providerClassName:u="",variant:S="outline",layout:o="vertical",showLabels:d=!0,ariaLabel:l,id:h,fullWidth:m=!0,onSuccess:p,onError:v})=>{const{t:r}=b("dndev"),s=h||`oauth-providers-${Math.random().toString(36).slice(2,9)}`;if(n.length===0)return t(A,{title:r("oauth.noProviders","No OAuth Providers"),description:r("oauth.noProvidersMessage","No OAuth providers are currently enabled. Check your environment configuration.")});const f=()=>{const a=n.map((e,g)=>t($,{partnerId:e,purpose:c,className:`${u} ${m?"dndev-w-full":""}`,tabIndex:g===0?0:void 0,id:`${s}-${e}-button`,onSuccess:p,onOAuthError:v,children:d?`${e.charAt(0).toUpperCase()+e.slice(1)}`:null},e));return o==="grid"?t(P,{cols:{base:1,sm:2,md:3},gap:"medium",className:i,children:a}):t(O,{direction:o==="horizontal"?"row":"column",wrap:o==="horizontal"?"wrap":void 0,align:o==="horizontal"?"center":"stretch",gap:"medium",className:i,children:a})};return t("div",{className:"dndev-mx-auto",id:s,role:"region","aria-label":l||r("oauth.aria.connectionOptions","Service connection options"),children:f()})},M=x(N,{message:"OAuth connections are not configured",showConnectButton:!0});var E=M;export{M as MultipleOAuthProviders,E as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e,jsxs as c}from"react/jsx-runtime";import{Dialog as
|
|
1
|
+
import{jsx as e,jsxs as c}from"react/jsx-runtime";import{Dialog as d,BUTTON_VARIANT as l}from"@donotdev/components";import{useTranslation as p,getEnabledOAuthPartners as h}from"@donotdev/core";import{MultipleOAuthProviders as u}from"./MultipleOAuthProviders";function y({open:n,onOpenChange:t,purpose:i="api-access",title:a,description:s}){const{t:o}=p("dndev"),r=h();return e(d,{open:n,onOpenChange:t,title:a||o("oauth.connectServices","Connect Services"),description:s||o("oauth.chooseService","Choose which services to connect for enhanced functionality"),children:e("div",{style:{padding:"var(--gap-md)"},children:r.length>0?e(u,{providers:r,purpose:i,layout:"vertical",variant:l.OUTLINE,showLabels:!0}):c("div",{style:{paddingTop:"var(--gap-lg)",paddingBottom:"var(--gap-lg)",color:"var(--muted-foreground)"},children:[e("p",{children:o("oauth.noProvidersEnabled","No OAuth providers are currently enabled")}),e("p",{style:{marginTop:"var(--gap-sm)",fontSize:"var(--font-size-sm)"},children:o("oauth.checkConfiguration","Check your environment configuration")})]})})})}export{y as OAuthConnectionModal};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as o}from"react/jsx-runtime";import{FeatureFallback as
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import{FeatureFallback as a,withFeatureFallback as u}from"@donotdev/components";import{isFeatureAvailable as i,FRAMEWORK_FEATURES as r}from"@donotdev/core";function h({message:e="OAuth connections are not available",showConnectButton:t=!1,className:n=""}){return o(a,{featureName:"OAuth Connections",message:e,icon:"\u{1F517}",showActionButton:t,actionButtonText:"Connect (Unavailable)",className:n,helpText:"This feature requires OAuth to be configured."})}function A(e,t){return u(e,"OAuth Connections",()=>i(r.OAUTH),{message:t?.message,showActionButton:t?.showConnectButton,actionButtonText:"Connect (Unavailable)",icon:"\u{1F517}",helpText:"This feature requires OAuth to be configured."})}export{h as OAuthFallback,A as withOAuthFallback};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @fileoverview OAuth Partner Button - Simple OAuth button like AuthPartnerButton
|
|
3
3
|
* @description Simple OAuth button that uses useOAuth() directly
|
|
4
4
|
*
|
|
5
|
-
* @version 0.0.
|
|
5
|
+
* @version 0.0.3
|
|
6
6
|
* @since 0.0.1
|
|
7
7
|
* @author AMBROISE PARK Consulting
|
|
8
8
|
*/
|
|
@@ -20,7 +20,7 @@ interface OAuthPartnerButtonProps {
|
|
|
20
20
|
* Simple OAuth button like AuthPartnerButton
|
|
21
21
|
* Uses useOAuth() directly - no complex logic
|
|
22
22
|
*
|
|
23
|
-
* @version 0.0.
|
|
23
|
+
* @version 0.0.3
|
|
24
24
|
* @since 0.0.1
|
|
25
25
|
* @author AMBROISE PARK Consulting
|
|
26
26
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthPartnerButton.d.ts","sourceRoot":"","sources":["../../src/components/OAuthPartnerButton.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInE,UAAU,uBAAuB;IAC/B,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAsB,EACtB,SAAS,EACT,YAAY,EACZ,SAAc,EACd,QAAQ,EACR,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,uBAAuB,GAAG,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"OAuthPartnerButton.d.ts","sourceRoot":"","sources":["../../src/components/OAuthPartnerButton.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInE,UAAU,uBAAuB;IAC/B,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAsB,EACtB,SAAS,EACT,YAAY,EACZ,SAAc,EACd,QAAQ,EACR,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,uBAAuB,GAAG,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,2CAwCzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as m}from"react/jsx-runtime";import{useOAuth as n}from"../useOAuth";function b({partnerId:t,purpose:o="api-access",onSuccess:i,onOAuthError:a,className:r="",children:c,disabled:u=!1,...l}){const f=n("isConnected"),C=n("connect"),d=n("disconnect"),e=n("status")==="initializing",g=n("error"),s=f(t);return m("button",{onClick:async()=>{try{s?await d(t):(await C(t,o),i?.({partnerId:t,purpose:o}))}catch(h){a?.(h)}},disabled:u||e,className:r,title:g||void 0,...l,children:c||(e?`Connecting to ${t}...`:s?`Disconnect ${t}`:`Connect ${t}`)})}export{b as OAuthPartnerButton};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{OAUTH_PARTNERS as i,getOAuthRedirectUrl as u,getPlatformEnvVar as
|
|
1
|
+
import{OAUTH_PARTNERS as i,getOAuthRedirectUrl as u,getPlatformEnvVar as r}from"@donotdev/core";function s(t){if(!i[t])return!1;const e=r("OAUTH_PARTNERS");return e?e.split(",").map(n=>n.trim()).includes(t):!1}function l(t){const e=`${t.toUpperCase()}_CLIENT_ID`;return r(e)||null}function p(t){return u()}export{l as getOAuthClientId,p as getOAuthRedirectUri,s as isOAuthPartnerEnabled};
|
package/dist/config/schemas.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as e from"valibot";const i=e.object({provider:e.string(),purpose:e.picklist(["authentication","api-access"]),code:e.pipe(e.string(),e.minLength(1,"Authorization code is required")),redirectUri:e.pipe(e.string(),e.url("Valid redirect URI is required")),codeVerifier:e.optional(e.string()),state:e.optional(e.string()),instance:e.optional(e.pipe(e.string(),e.url()))}),r=e.object({provider:e.string(),refreshToken:e.pipe(e.string(),e.minLength(1,"Refresh token is required")),redirectUri:e.pipe(e.string(),e.url("Valid redirect URI is required"))}),t=e.object({provider:e.string(),purpose:e.picklist(["authentication","api-access"])}),
|
|
1
|
+
import*as e from"valibot";const i=e.object({provider:e.string(),purpose:e.picklist(["authentication","api-access"]),code:e.pipe(e.string(),e.minLength(1,"Authorization code is required")),redirectUri:e.pipe(e.string(),e.url("Valid redirect URI is required")),codeVerifier:e.optional(e.string()),state:e.optional(e.string()),instance:e.optional(e.pipe(e.string(),e.url()))}),r=e.object({provider:e.string(),refreshToken:e.pipe(e.string(),e.minLength(1,"Refresh token is required")),redirectUri:e.pipe(e.string(),e.url("Valid redirect URI is required"))}),t=e.object({provider:e.string(),purpose:e.picklist(["authentication","api-access"])}),o=e.object({provider:e.string(),purpose:e.picklist(["authentication","api-access"])});export{t as connectionRequestSchema,o as disconnectionRequestSchema,i as exchangeTokenSchema,r as refreshTokenSchema};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useOAuth as
|
|
1
|
+
import{useOAuth as r}from"./useOAuth";import{MultipleOAuthProviders as e,OAuthConnectionModal as h,OAuthFallback as l,OAuthPartnerButton as n}from"./components";export{e as MultipleOAuthProviders,h as OAuthConnectionModal,l as OAuthFallback,n as OAuthPartnerButton,r as useOAuth};
|
package/dist/oauthStore.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview OAuth Store - Simple Zustand store
|
|
3
|
-
* @description Single source of truth for OAuth state
|
|
3
|
+
* @description Single source of truth for OAuth state.
|
|
4
|
+
* Uses unified FeatureStatus enum for lifecycle management.
|
|
4
5
|
*
|
|
5
6
|
* **Architecture:**
|
|
6
7
|
* - Pure Zustand store (no events)
|
|
@@ -8,11 +9,11 @@
|
|
|
8
9
|
* - Persists OAuth connections
|
|
9
10
|
* - Partner credential management
|
|
10
11
|
*
|
|
11
|
-
* @version 0.0.
|
|
12
|
+
* @version 0.0.3
|
|
12
13
|
* @since 0.0.1
|
|
13
14
|
* @author AMBROISE PARK Consulting
|
|
14
15
|
*/
|
|
15
|
-
import { type OAuthPartnerId, type OAuthCredentials, type OAuthPurpose } from '@donotdev/core';
|
|
16
|
+
import { type OAuthPartnerId, type OAuthCredentials, type OAuthPurpose, type FeatureStatus } from '@donotdev/core';
|
|
16
17
|
/**
|
|
17
18
|
* OAuth connection state for a single partner
|
|
18
19
|
*/
|
|
@@ -28,9 +29,11 @@ interface OAuthPartnerState {
|
|
|
28
29
|
* OAuth store state interface
|
|
29
30
|
*/
|
|
30
31
|
interface OAuthState {
|
|
32
|
+
status: FeatureStatus;
|
|
31
33
|
loading: boolean;
|
|
32
34
|
error: string | null;
|
|
33
35
|
partners: Record<OAuthPartnerId, OAuthPartnerState>;
|
|
36
|
+
setStatus: (status: FeatureStatus) => void;
|
|
34
37
|
setLoading: (loading: boolean) => void;
|
|
35
38
|
setError: (error: string | null) => void;
|
|
36
39
|
setPartnerConnecting: (partnerId: OAuthPartnerId, connecting: boolean) => void;
|
package/dist/oauthStore.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauthStore.d.ts","sourceRoot":"","sources":["../src/oauthStore.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"oauthStore.d.ts","sourceRoot":"","sources":["../src/oauthStore.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,UAAU,iBAAiB;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED;;GAEG;AACH,UAAU,UAAU;IAElB,MAAM,EAAE,aAAa,CAAC;IAGtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAGpD,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,oBAAoB,EAAE,CACpB,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,OAAO,KAChB,IAAI,CAAC;IACV,mBAAmB,EAAE,CACnB,SAAS,EAAE,cAAc,EACzB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE,YAAY,KAClB,IAAI,CAAC;IACV,sBAAsB,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5D,eAAe,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAG3E,WAAW,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,OAAO,CAAC;IACpD,cAAc,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,gBAAgB,GAAG,IAAI,CAAC;IACvE,oBAAoB,EAAE,MAAM,cAAc,EAAE,CAAC;IAC7C,eAAe,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,iBAAiB,GAAG,IAAI,CAAC;CAC1E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,oHAyGxB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,eAAgD,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,aAAa,qBAA8C,CAAC;AAEzE;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,sLAAiD,CAAC;AAE/E;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,cAAc,6BACG,CAAC;AAE7D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,WAAW,cAAc,YACH,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,WAAW,cAAc,4BACF,CAAC"}
|
package/dist/oauthStore.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createDoNotDevStore as i}from"@donotdev/core";const
|
|
1
|
+
import{createDoNotDevStore as c,FEATURE_STATUS as i}from"@donotdev/core";const o=c({name:"oauth-store",createStore:(t,n)=>({status:i.READY,loading:!1,error:null,partners:{},setStatus:e=>t({status:e}),setLoading:e=>t({loading:e}),setError:e=>t({error:e}),setPartnerConnecting:(e,r)=>t(s=>({partners:{...s.partners,[e]:{...s.partners[e],isConnecting:r,error:r?null:s.partners[e]?.error}}})),setPartnerConnected:(e,r,s)=>t(a=>({partners:{...a.partners,[e]:{isConnected:!0,isConnecting:!1,credentials:r,error:null,lastConnected:new Date().toISOString(),purpose:s}}})),setPartnerDisconnected:e=>t(r=>({partners:{...r.partners,[e]:{isConnected:!1,isConnecting:!1,credentials:null,error:null,lastConnected:r.partners[e]?.lastConnected}}})),setPartnerError:(e,r)=>t(s=>({partners:{...s.partners,[e]:{...s.partners[e],isConnecting:!1,error:r}}})),isConnected:e=>n().partners[e]?.isConnected||!1,getCredentials:e=>n().partners[e]?.credentials||null,getConnectedPartners:()=>{const e=n();return Object.entries(e.partners).filter(([r,s])=>s.isConnected).map(([r])=>r)},getPartnerState:e=>n().partners[e]||null}),persistOptions:{name:"dndev-oauth-store",partialize:t=>({partners:t.partners})}}),u=()=>o(t=>t.loading),p=()=>o(t=>t.error),d=()=>o(t=>t.partners),C=t=>o(n=>n.getPartnerState(t)),g=t=>o(n=>n.isConnected(t)),A=t=>o(n=>n.getCredentials(t));export{g as useOAuthConnected,A as useOAuthCredentials,p as useOAuthError,u as useOAuthLoading,C as useOAuthPartner,d as useOAuthPartners,o as useOAuthStore};
|