@oxyhq/services 19.1.1 → 19.1.2
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/lib/commonjs/ui/boot/runProviderColdBoot.js +4 -0
- package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -1
- package/lib/commonjs/ui/components/OxyOAuthCallback.js +3 -4
- package/lib/commonjs/ui/components/OxyOAuthCallback.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +0 -2
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +1 -2
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
- package/lib/commonjs/ui/screens/CreateAccountScreen.js +53 -2
- package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/utils/oauthReturn.js +27 -0
- package/lib/commonjs/ui/utils/oauthReturn.js.map +1 -1
- package/lib/module/ui/boot/runProviderColdBoot.js +5 -1
- package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
- package/lib/module/ui/components/OxyOAuthCallback.js +3 -4
- package/lib/module/ui/components/OxyOAuthCallback.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +0 -2
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +1 -2
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
- package/lib/module/ui/screens/CreateAccountScreen.js +53 -2
- package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/module/ui/utils/oauthReturn.js +26 -0
- package/lib/module/ui/utils/oauthReturn.js.map +1 -1
- package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +3 -2
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/CreateAccountScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts +6 -0
- package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts.map +1 -1
- package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +3 -2
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/CreateAccountScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/oauthReturn.d.ts +6 -0
- package/lib/typescript/module/ui/utils/oauthReturn.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ui/boot/runProviderColdBoot.ts +5 -1
- package/src/ui/components/OxyOAuthCallback.tsx +3 -3
- package/src/ui/context/OxyContext.tsx +1 -3
- package/src/ui/context/hooks/useAuthOperations.ts +2 -3
- package/src/ui/context/useOxyAccountGraph.ts +1 -1
- package/src/ui/screens/CreateAccountScreen.tsx +59 -2
- package/src/ui/utils/oauthReturn.ts +29 -0
|
@@ -22,4 +22,10 @@ export declare function tryCompleteOAuthReturn(opts: {
|
|
|
22
22
|
authRedirectUri?: string;
|
|
23
23
|
commitSession: (input: OAuthReturnCommitInput) => Promise<void>;
|
|
24
24
|
}): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* When auth.oxy.so hub-sync redeem fails, the IdP redirects back with
|
|
27
|
+
* `?hub_sync=failed`. Strip the param and log so cold boot can continue
|
|
28
|
+
* without leaving a stale query string.
|
|
29
|
+
*/
|
|
30
|
+
export declare function consumeHubSyncFailure(): boolean;
|
|
25
31
|
//# sourceMappingURL=oauthReturn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauthReturn.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/oauthReturn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE,GAAG,OAAO,CAAC,OAAO,CAAC,CA8DnB"}
|
|
1
|
+
{"version":3,"file":"oauthReturn.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/oauthReturn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE,GAAG,OAAO,CAAC,OAAO,CAAC,CA8DnB;AAeD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAmB/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runProviderColdBoot.d.ts","sourceRoot":"","sources":["../../../../../src/ui/boot/runProviderColdBoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA4B,CAAC;AAE9D,iFAAiF;AACjF,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,0BAA0B,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,aAAa,EAAE,CACb,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAC9C,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"runProviderColdBoot.d.ts","sourceRoot":"","sources":["../../../../../src/ui/boot/runProviderColdBoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA4B,CAAC;AAE9D,iFAAiF;AACjF,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,0BAA0B,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,aAAa,EAAE,CACb,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAC9C,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA8GzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyContext.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/OxyContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA2D/B,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,uBAAuB,EAE7B,MAAM,sBAAmB,CAAC;AAI3B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,sBAAmB,CAAC;AAIxG,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"OxyContext.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/OxyContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA2D/B,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,uBAAuB,EAE7B,MAAM,sBAAmB,CAAC;AAI3B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,sBAAmB,CAAC;AAIxG,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA43BzD,CAAC;AAEF,eAAO,MAAM,kBAAkB,mCAAc,CAAC;AA+D9C,eAAO,MAAM,MAAM,QAAO,eAMzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthOperations.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/context/hooks/useAuthOperations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAIvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC;;;;;;OAMG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,cAAc,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,0JAA0J;IAC1J,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD;;;;;OAKG;IACH,aAAa,EAAE,aAAa,CAAC;IAC7B,+MAA+M;IAC/M,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,uBAAuB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IAClD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,uBAAuB;IACtC,uCAAuC;IACvC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,kCAAkC;IAClC,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,+BAA+B;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAMD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EACrB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,GAClD,IAAI,CAIN;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,wRAmB/B,wBAAwB,KAAG,
|
|
1
|
+
{"version":3,"file":"useAuthOperations.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/context/hooks/useAuthOperations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAIvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC;;;;;;OAMG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,cAAc,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,0JAA0J;IAC1J,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD;;;;;OAKG;IACH,aAAa,EAAE,aAAa,CAAC;IAC7B,+MAA+M;IAC/M,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,uBAAuB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IAClD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,uBAAuB;IACtC,uCAAuC;IACvC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,kCAAkC;IAClC,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,+BAA+B;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAMD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EACrB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,GAClD,IAAI,CAIN;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,wRAmB/B,wBAAwB,KAAG,uBAoR7B,CAAC"}
|
|
@@ -32,14 +32,14 @@ export declare const useUpdateProfile: () => import("@tanstack/react-query").Use
|
|
|
32
32
|
id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
33
33
|
}, "strip", import("zod").ZodTypeAny, {
|
|
34
34
|
url: string;
|
|
35
|
-
id?: string | undefined;
|
|
36
35
|
description?: string | undefined;
|
|
36
|
+
id?: string | undefined;
|
|
37
37
|
title?: string | undefined;
|
|
38
38
|
image?: string | undefined;
|
|
39
39
|
}, {
|
|
40
40
|
url: string;
|
|
41
|
-
id?: string | undefined;
|
|
42
41
|
description?: string | undefined;
|
|
42
|
+
id?: string | undefined;
|
|
43
43
|
title?: string | undefined;
|
|
44
44
|
image?: string | undefined;
|
|
45
45
|
}>, "many">>;
|
|
@@ -202,6 +202,7 @@ export declare const useUpdateAccountSettings: () => {
|
|
|
202
202
|
};
|
|
203
203
|
isManagedAccount?: boolean;
|
|
204
204
|
managedBy?: string;
|
|
205
|
+
organizationCategory?: import("@oxyhq/contracts").OrganizationCategory;
|
|
205
206
|
notificationPreferences?: NotificationPreferences;
|
|
206
207
|
userPreferences?: UserPreferences;
|
|
207
208
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAccountMutations.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/hooks/mutations/useAccountMutations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,IAAI,EACJ,eAAe,EAChB,MAAM,aAAa,CAAC;AAerB;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;
|
|
1
|
+
{"version":3,"file":"useAccountMutations.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/hooks/mutations/useAccountMutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateAccountScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/CreateAccountScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CreateAccountScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/CreateAccountScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAqB,CAAC;AAgF3D;;;;;GAKG;AACH,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAsUlD,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -22,4 +22,10 @@ export declare function tryCompleteOAuthReturn(opts: {
|
|
|
22
22
|
authRedirectUri?: string;
|
|
23
23
|
commitSession: (input: OAuthReturnCommitInput) => Promise<void>;
|
|
24
24
|
}): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* When auth.oxy.so hub-sync redeem fails, the IdP redirects back with
|
|
27
|
+
* `?hub_sync=failed`. Strip the param and log so cold boot can continue
|
|
28
|
+
* without leaving a stale query string.
|
|
29
|
+
*/
|
|
30
|
+
export declare function consumeHubSyncFailure(): boolean;
|
|
25
31
|
//# sourceMappingURL=oauthReturn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauthReturn.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/oauthReturn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE,GAAG,OAAO,CAAC,OAAO,CAAC,CA8DnB"}
|
|
1
|
+
{"version":3,"file":"oauthReturn.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/oauthReturn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE,GAAG,OAAO,CAAC,OAAO,CAAC,CA8DnB;AAeD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAmB/C"}
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
consumeSilentOAuthError,
|
|
11
11
|
maybeStartSilentOAuthRestore,
|
|
12
12
|
} from '../utils/crossOriginRestore';
|
|
13
|
-
import { tryCompleteOAuthReturn } from '../utils/oauthReturn';
|
|
13
|
+
import { tryCompleteOAuthReturn, consumeHubSyncFailure } from '../utils/oauthReturn';
|
|
14
14
|
import { isWebBrowser } from '../utils/isWebBrowser';
|
|
15
15
|
import type { CommitInput } from '../context/oxyContextTypes';
|
|
16
16
|
|
|
@@ -57,6 +57,7 @@ export async function runProviderColdBoot(opts: RunProviderColdBootOptions): Pro
|
|
|
57
57
|
|
|
58
58
|
try {
|
|
59
59
|
consumeSilentOAuthError();
|
|
60
|
+
consumeHubSyncFailure();
|
|
60
61
|
|
|
61
62
|
const oauthCompleted = await tryCompleteOAuthReturn({
|
|
62
63
|
oxyServices,
|
|
@@ -75,6 +76,9 @@ export async function runProviderColdBoot(opts: RunProviderColdBootOptions): Pro
|
|
|
75
76
|
store: authStore,
|
|
76
77
|
platform: { isWeb: isWebBrowser(), isNative: !isWebBrowser() },
|
|
77
78
|
onSession: async (session) => {
|
|
79
|
+
// Mint already persisted `{deviceId, deviceSecret}` to the store; sync the
|
|
80
|
+
// in-memory SessionClient host so sockets + tab-focus re-mint can use it.
|
|
81
|
+
await syncDeviceCredentialToHost();
|
|
78
82
|
const handoff = commitSession(
|
|
79
83
|
{
|
|
80
84
|
sessionId: session.sessionId,
|
|
@@ -14,7 +14,7 @@ export interface OxyOAuthCallbackProps {
|
|
|
14
14
|
* callback path for a Clerk-style loading shell while auth resolves.
|
|
15
15
|
*/
|
|
16
16
|
export function OxyOAuthCallback({ redirectTo = '/' }: OxyOAuthCallbackProps) {
|
|
17
|
-
const { isAuthResolved
|
|
17
|
+
const { isAuthResolved } = useAuth();
|
|
18
18
|
|
|
19
19
|
useEffect(() => {
|
|
20
20
|
if (!isAuthResolved) return;
|
|
@@ -24,11 +24,11 @@ export function OxyOAuthCallback({ redirectTo = '/' }: OxyOAuthCallbackProps) {
|
|
|
24
24
|
const params = new URLSearchParams(location.search);
|
|
25
25
|
if (!params.has('code') && !params.has('error')) return;
|
|
26
26
|
|
|
27
|
-
const target =
|
|
27
|
+
const target = redirectTo;
|
|
28
28
|
if (location.pathname + location.search !== target) {
|
|
29
29
|
window.location.replace(target);
|
|
30
30
|
}
|
|
31
|
-
}, [isAuthResolved,
|
|
31
|
+
}, [isAuthResolved, redirectTo]);
|
|
32
32
|
|
|
33
33
|
return (
|
|
34
34
|
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
|
|
@@ -598,9 +598,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
|
|
|
598
598
|
{
|
|
599
599
|
sessionId: session.sessionId,
|
|
600
600
|
accessToken: session.accessToken,
|
|
601
|
-
|
|
602
|
-
// even though `SessionLoginResponse` does not type it.
|
|
603
|
-
deviceSecret: (session as { deviceSecret?: string }).deviceSecret,
|
|
601
|
+
deviceSecret: session.deviceSecret,
|
|
604
602
|
deviceId: session.deviceId,
|
|
605
603
|
expiresAt: session.expiresAt,
|
|
606
604
|
userId: session.user.id,
|
|
@@ -140,9 +140,8 @@ export const useAuthOperations = ({
|
|
|
140
140
|
// internally; when the response also carries the zero-cookie device
|
|
141
141
|
// credential (`deviceId` + `deviceSecret`), persist the durable blob so the
|
|
142
142
|
// next cold boot re-mints an access token from it. Best-effort — a failed
|
|
143
|
-
// persist never fails the sign-in.
|
|
144
|
-
|
|
145
|
-
const deviceSecret = (sessionResponse as { deviceSecret?: string }).deviceSecret;
|
|
143
|
+
// persist never fails the sign-in.
|
|
144
|
+
const deviceSecret = sessionResponse.deviceSecret;
|
|
146
145
|
if (sessionResponse.deviceId && deviceSecret) {
|
|
147
146
|
try {
|
|
148
147
|
await store.save({
|
|
@@ -83,7 +83,7 @@ export function useOxyAccountGraph({
|
|
|
83
83
|
{
|
|
84
84
|
sessionId: result.sessionId,
|
|
85
85
|
accessToken: result.accessToken,
|
|
86
|
-
deviceSecret:
|
|
86
|
+
deviceSecret: result.deviceSecret,
|
|
87
87
|
deviceId: result.deviceId,
|
|
88
88
|
expiresAt: result.expiresAt,
|
|
89
89
|
userId: result.user.id,
|
|
@@ -9,7 +9,8 @@ import {
|
|
|
9
9
|
TouchableOpacity,
|
|
10
10
|
} from 'react-native';
|
|
11
11
|
import { Ionicons } from '@expo/vector-icons';
|
|
12
|
-
import type { AccountKind, CreateAccountInput } from '@oxyhq/core';
|
|
12
|
+
import type { AccountKind, CreateAccountInput, OrganizationCategory } from '@oxyhq/core';
|
|
13
|
+
import { ORGANIZATION_CATEGORIES } from '@oxyhq/core';
|
|
13
14
|
import type { BaseScreenProps } from '../types/navigation';
|
|
14
15
|
import Header from '../components/Header';
|
|
15
16
|
import { useI18n } from '../hooks/useI18n';
|
|
@@ -72,6 +73,24 @@ const kindDescription = (
|
|
|
72
73
|
}
|
|
73
74
|
};
|
|
74
75
|
|
|
76
|
+
const organizationCategoryLabel = (
|
|
77
|
+
t: (key: string, vars?: Record<string, string | number>) => string,
|
|
78
|
+
category: OrganizationCategory,
|
|
79
|
+
): string => {
|
|
80
|
+
switch (category) {
|
|
81
|
+
case 'agency':
|
|
82
|
+
return t('accounts.organizationCategory.agency') || 'Real estate agency';
|
|
83
|
+
case 'cooperative':
|
|
84
|
+
return t('accounts.organizationCategory.cooperative') || 'Housing cooperative';
|
|
85
|
+
case 'landlord':
|
|
86
|
+
return t('accounts.organizationCategory.landlord') || 'Landlord / property manager';
|
|
87
|
+
default:
|
|
88
|
+
return t('accounts.organizationCategory.other') || 'Other organization';
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const ORGANIZATION_CATEGORY_OPTIONS: OrganizationCategory[] = [...ORGANIZATION_CATEGORIES];
|
|
93
|
+
|
|
75
94
|
/**
|
|
76
95
|
* Create a new account in the unified account graph (an organization, project,
|
|
77
96
|
* or bot). The caller becomes its owner. Optionally nested under a parent
|
|
@@ -90,6 +109,7 @@ const CreateAccountScreen: React.FC<BaseScreenProps> = ({
|
|
|
90
109
|
const parentId = typeof parentAccountId === 'string' ? parentAccountId : undefined;
|
|
91
110
|
|
|
92
111
|
const [kind, setKind] = useState<CreatableAccountKind>('project');
|
|
112
|
+
const [organizationCategory, setOrganizationCategory] = useState<OrganizationCategory>('agency');
|
|
93
113
|
const [username, setUsername] = useState('');
|
|
94
114
|
const [displayName, setDisplayName] = useState('');
|
|
95
115
|
const [bio, setBio] = useState('');
|
|
@@ -175,6 +195,7 @@ const CreateAccountScreen: React.FC<BaseScreenProps> = ({
|
|
|
175
195
|
username,
|
|
176
196
|
name: { first: firstName, last: lastName },
|
|
177
197
|
bio: bio.trim() || undefined,
|
|
198
|
+
...(kind === 'organization' ? { organizationCategory } : null),
|
|
178
199
|
...(parentId ? { parentAccountId: parentId } : null),
|
|
179
200
|
};
|
|
180
201
|
const account = await createAccount(input);
|
|
@@ -197,7 +218,7 @@ const CreateAccountScreen: React.FC<BaseScreenProps> = ({
|
|
|
197
218
|
} finally {
|
|
198
219
|
setIsCreating(false);
|
|
199
220
|
}
|
|
200
|
-
}, [canCreate, kind, username, displayName, bio, parentId, createAccount, switchToAccount, onClose, t]);
|
|
221
|
+
}, [canCreate, kind, organizationCategory, username, displayName, bio, parentId, createAccount, switchToAccount, onClose, t]);
|
|
201
222
|
|
|
202
223
|
// Status icon + color shown alongside the username field message
|
|
203
224
|
const usernameIsInvalid = usernameStatus === 'taken' || usernameStatus === 'invalid';
|
|
@@ -285,6 +306,42 @@ const CreateAccountScreen: React.FC<BaseScreenProps> = ({
|
|
|
285
306
|
})}
|
|
286
307
|
</View>
|
|
287
308
|
|
|
309
|
+
{kind === 'organization' ? (
|
|
310
|
+
<View className="gap-space-8">
|
|
311
|
+
<Text className="text-body font-bodyBold text-text">
|
|
312
|
+
{t('accounts.create.organizationCategory.label') || 'Organization type'}
|
|
313
|
+
</Text>
|
|
314
|
+
<View className="flex-row flex-wrap gap-space-8">
|
|
315
|
+
{ORGANIZATION_CATEGORY_OPTIONS.map((option) => {
|
|
316
|
+
const selected = option === organizationCategory;
|
|
317
|
+
return (
|
|
318
|
+
<TouchableOpacity
|
|
319
|
+
key={option}
|
|
320
|
+
accessibilityRole="radio"
|
|
321
|
+
accessibilityState={{ selected }}
|
|
322
|
+
accessibilityLabel={organizationCategoryLabel(t, option)}
|
|
323
|
+
onPress={() => setOrganizationCategory(option)}
|
|
324
|
+
activeOpacity={0.7}
|
|
325
|
+
className="px-space-12 py-space-8 rounded-radius-full"
|
|
326
|
+
style={{
|
|
327
|
+
backgroundColor: selected ? bloomTheme.colors.primarySubtle : bloomTheme.colors.card,
|
|
328
|
+
borderWidth: 1,
|
|
329
|
+
borderColor: selected ? bloomTheme.colors.primary : bloomTheme.colors.border,
|
|
330
|
+
}}
|
|
331
|
+
>
|
|
332
|
+
<Text
|
|
333
|
+
className="text-caption font-captionBold"
|
|
334
|
+
style={{ color: selected ? bloomTheme.colors.primary : bloomTheme.colors.text }}
|
|
335
|
+
>
|
|
336
|
+
{organizationCategoryLabel(t, option)}
|
|
337
|
+
</Text>
|
|
338
|
+
</TouchableOpacity>
|
|
339
|
+
);
|
|
340
|
+
})}
|
|
341
|
+
</View>
|
|
342
|
+
</View>
|
|
343
|
+
) : null}
|
|
344
|
+
|
|
288
345
|
{/* Form Content */}
|
|
289
346
|
<View className="gap-space-16 p-space-16 rounded-radius-20 bg-fill">
|
|
290
347
|
{/* Username */}
|
|
@@ -97,5 +97,34 @@ function stripOAuthParamsFromUrl(): void {
|
|
|
97
97
|
const url = new URL(location.href);
|
|
98
98
|
url.searchParams.delete('code');
|
|
99
99
|
url.searchParams.delete('state');
|
|
100
|
+
url.searchParams.delete('error');
|
|
101
|
+
url.searchParams.delete('error_description');
|
|
102
|
+
url.searchParams.delete('hub_sync');
|
|
100
103
|
history.replaceState(history.state, '', `${url.pathname}${url.search}${url.hash}`);
|
|
101
104
|
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* When auth.oxy.so hub-sync redeem fails, the IdP redirects back with
|
|
108
|
+
* `?hub_sync=failed`. Strip the param and log so cold boot can continue
|
|
109
|
+
* without leaving a stale query string.
|
|
110
|
+
*/
|
|
111
|
+
export function consumeHubSyncFailure(): boolean {
|
|
112
|
+
if (!isWebBrowser()) return false;
|
|
113
|
+
const location = (globalThis as { location?: Location; history?: History }).location;
|
|
114
|
+
const history = (globalThis as { history?: History }).history;
|
|
115
|
+
if (!location) return false;
|
|
116
|
+
|
|
117
|
+
const params = new URLSearchParams(location.search);
|
|
118
|
+
if (params.get('hub_sync') !== 'failed') return false;
|
|
119
|
+
|
|
120
|
+
logger.warn('Hub sync failed — IdP device session may be out of sync', {
|
|
121
|
+
component: 'hubSync',
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
if (history?.replaceState) {
|
|
125
|
+
const url = new URL(location.href);
|
|
126
|
+
url.searchParams.delete('hub_sync');
|
|
127
|
+
history.replaceState(history.state, '', `${url.pathname}${url.search}${url.hash}`);
|
|
128
|
+
}
|
|
129
|
+
return true;
|
|
130
|
+
}
|