@oxy.so/services 1.2.0 → 2.0.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/README.md +1 -1
- package/lib/commonjs/ui/components/BenefitList.js +93 -0
- package/lib/commonjs/ui/components/BenefitList.js.map +1 -0
- package/lib/commonjs/ui/components/FollowTargetButton.js +1 -1
- package/lib/commonjs/ui/components/FollowTargetButton.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +1 -17
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/passkeyFlow.js +2 -28
- package/lib/commonjs/ui/context/passkeyFlow.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js +10 -10
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +6 -6
- package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +5 -5
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js +13 -13
- package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -1
- package/lib/module/ui/components/BenefitList.js +89 -0
- package/lib/module/ui/components/BenefitList.js.map +1 -0
- package/lib/module/ui/components/FollowTargetButton.js +1 -1
- package/lib/module/ui/components/FollowTargetButton.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +2 -18
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/passkeyFlow.js +2 -27
- package/lib/module/ui/context/passkeyFlow.js.map +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js +6 -6
- package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +6 -6
- package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js +1 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustAboutScreen.js +7 -7
- package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -1
- package/lib/typescript/commonjs/ui/components/BenefitList.d.ts +25 -0
- package/lib/typescript/commonjs/ui/components/BenefitList.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +0 -8
- package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/passkeyFlow.d.ts +2 -21
- package/lib/typescript/commonjs/ui/context/passkeyFlow.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/BenefitList.d.ts +25 -0
- package/lib/typescript/module/ui/components/BenefitList.d.ts.map +1 -0
- package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +0 -8
- package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/passkeyFlow.d.ts +2 -21
- package/lib/typescript/module/ui/context/passkeyFlow.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/ui/components/BenefitList.tsx +111 -0
- package/src/ui/components/FollowTargetButton.tsx +1 -1
- package/src/ui/context/OxyContext.tsx +1 -19
- package/src/ui/context/__tests__/passkeyFlow.test.ts +2 -65
- package/src/ui/context/oxyContextTypes.ts +0 -6
- package/src/ui/context/passkeyFlow.ts +2 -39
- package/src/ui/screens/AccountVerificationScreen.tsx +6 -6
- package/src/ui/screens/LearnMoreUsernamesScreen.tsx +6 -6
- package/src/ui/screens/PremiumSubscriptionScreen.tsx +1 -1
- package/src/ui/screens/trust/TrustAboutScreen.tsx +7 -7
|
@@ -4,7 +4,7 @@ import { View } from 'react-native';
|
|
|
4
4
|
import { useTheme } from '@oxy.so/bloom/theme';
|
|
5
5
|
import { H4, Text } from '@oxy.so/bloom/typography';
|
|
6
6
|
import { IconCircle } from '@oxy.so/bloom/icon-circle';
|
|
7
|
-
import { BenefitList, BenefitRow } from
|
|
7
|
+
import { BenefitList, BenefitRow } from "../../components/BenefitList.js";
|
|
8
8
|
import * as Icons from '@oxy.so/bloom/icons';
|
|
9
9
|
import { useI18n } from "../../hooks/useI18n.js";
|
|
10
10
|
import { useSurfaceHeader } from "../../hooks/useSurfaceHeader.js";
|
|
@@ -24,7 +24,7 @@ const TrustAboutScreen = () => {
|
|
|
24
24
|
children: [/*#__PURE__*/_jsxs(View, {
|
|
25
25
|
className: "items-center py-space-24 gap-space-12",
|
|
26
26
|
children: [/*#__PURE__*/_jsx(IconCircle, {
|
|
27
|
-
icon: Icons.
|
|
27
|
+
icon: Icons.RiShieldCheckLine
|
|
28
28
|
}), /*#__PURE__*/_jsx(Text, {
|
|
29
29
|
className: "font-sans text-body text-text-secondary text-center",
|
|
30
30
|
children: t('trust.about.intro') || 'Oxy Trust is a recognition of your positive actions in the Oxy Ecosystem. Reputation cannot be sent or received directly, only earned by contributing to the community.'
|
|
@@ -36,7 +36,7 @@ const TrustAboutScreen = () => {
|
|
|
36
36
|
className: "mb-space-24",
|
|
37
37
|
accessibilityLabel: t('trust.about.how.title') || 'How to Earn Reputation',
|
|
38
38
|
children: [/*#__PURE__*/_jsx(BenefitRow, {
|
|
39
|
-
icon: /*#__PURE__*/_jsx(Icons.
|
|
39
|
+
icon: /*#__PURE__*/_jsx(Icons.RiAccountCircleLine, {
|
|
40
40
|
size: "sm",
|
|
41
41
|
style: {
|
|
42
42
|
color: iconColor
|
|
@@ -44,7 +44,7 @@ const TrustAboutScreen = () => {
|
|
|
44
44
|
}),
|
|
45
45
|
label: t('trust.about.how.help') || 'Helping other users'
|
|
46
46
|
}), /*#__PURE__*/_jsx(BenefitRow, {
|
|
47
|
-
icon: /*#__PURE__*/_jsx(Icons.
|
|
47
|
+
icon: /*#__PURE__*/_jsx(Icons.RiFlagLine, {
|
|
48
48
|
size: "sm",
|
|
49
49
|
style: {
|
|
50
50
|
color: iconColor
|
|
@@ -52,7 +52,7 @@ const TrustAboutScreen = () => {
|
|
|
52
52
|
}),
|
|
53
53
|
label: t('trust.about.how.report') || 'Reporting bugs'
|
|
54
54
|
}), /*#__PURE__*/_jsx(BenefitRow, {
|
|
55
|
-
icon: /*#__PURE__*/_jsx(Icons.
|
|
55
|
+
icon: /*#__PURE__*/_jsx(Icons.RiEditLine, {
|
|
56
56
|
size: "sm",
|
|
57
57
|
style: {
|
|
58
58
|
color: iconColor
|
|
@@ -60,7 +60,7 @@ const TrustAboutScreen = () => {
|
|
|
60
60
|
}),
|
|
61
61
|
label: t('trust.about.how.contribute') || 'Contributing content'
|
|
62
62
|
}), /*#__PURE__*/_jsx(BenefitRow, {
|
|
63
|
-
icon: /*#__PURE__*/_jsx(Icons.
|
|
63
|
+
icon: /*#__PURE__*/_jsx(Icons.RiCalendarLine, {
|
|
64
64
|
size: "sm",
|
|
65
65
|
style: {
|
|
66
66
|
color: iconColor
|
|
@@ -68,7 +68,7 @@ const TrustAboutScreen = () => {
|
|
|
68
68
|
}),
|
|
69
69
|
label: t('trust.about.how.participate') || 'Participating in events'
|
|
70
70
|
}), /*#__PURE__*/_jsx(BenefitRow, {
|
|
71
|
-
icon: /*#__PURE__*/_jsx(Icons.
|
|
71
|
+
icon: /*#__PURE__*/_jsx(Icons.RiSparklingLine, {
|
|
72
72
|
size: "sm",
|
|
73
73
|
style: {
|
|
74
74
|
color: iconColor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["View","useTheme","H4","Text","IconCircle","BenefitList","BenefitRow","Icons","useI18n","useSurfaceHeader","jsx","_jsx","jsxs","_jsxs","TrustAboutScreen","t","bloomTheme","iconColor","colors","primary","title","subtitle","className","children","icon","
|
|
1
|
+
{"version":3,"names":["View","useTheme","H4","Text","IconCircle","BenefitList","BenefitRow","Icons","useI18n","useSurfaceHeader","jsx","_jsx","jsxs","_jsxs","TrustAboutScreen","t","bloomTheme","iconColor","colors","primary","title","subtitle","className","children","icon","RiShieldCheckLine","accessibilityLabel","RiAccountCircleLine","size","style","color","label","RiFlagLine","RiEditLine","RiCalendarLine","RiSparklingLine"],"sourceRoot":"../../../../../src","sources":["ui/screens/trust/TrustAboutScreen.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
import { type StyleProp, type TextStyle, type ViewStyle } from 'react-native';
|
|
3
|
+
export interface BenefitRowProps {
|
|
4
|
+
/** Leading icon element, rendered inside a rounded tertiary-fill square. */
|
|
5
|
+
icon: React.ReactNode;
|
|
6
|
+
/** Caption text. Provide either `label` or `children`. */
|
|
7
|
+
label?: string;
|
|
8
|
+
/** Caption content as children (alternative to `label`). */
|
|
9
|
+
children?: React.ReactNode;
|
|
10
|
+
/** Accessibility label for the row (defaults to string content). */
|
|
11
|
+
accessibilityLabel?: string;
|
|
12
|
+
className?: string;
|
|
13
|
+
style?: StyleProp<ViewStyle>;
|
|
14
|
+
textStyle?: StyleProp<TextStyle>;
|
|
15
|
+
}
|
|
16
|
+
export declare const BenefitRow: React.FC<BenefitRowProps>;
|
|
17
|
+
export interface BenefitListProps {
|
|
18
|
+
/** `BenefitRow`s (or any nodes) stacked with consistent spacing. */
|
|
19
|
+
children: React.ReactNode;
|
|
20
|
+
accessibilityLabel?: string;
|
|
21
|
+
className?: string;
|
|
22
|
+
style?: StyleProp<ViewStyle>;
|
|
23
|
+
}
|
|
24
|
+
export declare const BenefitList: React.FC<BenefitListProps>;
|
|
25
|
+
//# sourceMappingURL=BenefitList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BenefitList.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/BenefitList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAkBpF,MAAM,WAAW,eAAe;IAC5B,4EAA4E;IAC5E,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAkDhD,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC7B,oEAAoE;IACpE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAChC;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAiBlD,CAAC"}
|
|
@@ -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;AAsF/B,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EAExB,MAAM,mBAAmB,CAAC;AAgB3B,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAIhG,KAAK,0BAA0B,GAAG,IAAI,CACpC,eAAe,EACb,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,CACtB,CAAC;AAIF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,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;AAsF/B,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EAExB,MAAM,mBAAmB,CAAC;AAgB3B,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAIhG,KAAK,0BAA0B,GAAG,IAAI,CACpC,eAAe,EACb,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,CACtB,CAAC;AAIF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA4tChE,CAAC;AAMF,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,0BAA0B;;CAMxC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,QAAO,eAMzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAAO,eAAe,GAAG,IAAqC,CAAC;AAE1F,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,QAAO,0BAMpC,CAAC"}
|
|
@@ -84,14 +84,6 @@ export interface OxyContextState {
|
|
|
84
84
|
deviceName?: string;
|
|
85
85
|
deviceFingerprint?: string;
|
|
86
86
|
}) => Promise<void>;
|
|
87
|
-
/**
|
|
88
|
-
* Create a brand-new account whose first authentication method is a passkey.
|
|
89
|
-
* WEB-ONLY — throws on native or an unsupported browser.
|
|
90
|
-
*/
|
|
91
|
-
registerWithPasskey: (params: {
|
|
92
|
-
username: string;
|
|
93
|
-
deviceName?: string;
|
|
94
|
-
}) => Promise<void>;
|
|
95
87
|
/**
|
|
96
88
|
* Add a passkey to the already-signed-in account (bearer present). Does NOT
|
|
97
89
|
* commit a new session; refreshes the linked auth-methods list on success.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxyContextTypes.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/oxyContextTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9M,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EACV,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B;;;;;;;;;OASG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB;;;;;;;;;OASG;IACH,WAAW,EAAE,WAAW,CAAC;IACzB,wFAAwF;IACxF,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,uHAAuH;IACvH,eAAe,EAAE,MAAM,CAAC;IACxB,4GAA4G;IAC5G,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,uBAAuB,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,UAAU,CAAC,CAAC;IAC9E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yBAAyB,EAAE,MAAM,CAAC;IAElC,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE3C,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAElE;;;;;;;;OAQG;IACH,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB
|
|
1
|
+
{"version":3,"file":"oxyContextTypes.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/oxyContextTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Extracted from `OxyContext` so the fixed `options → ceremony → verify → commit`
|
|
5
5
|
* ordering is unit-testable with injected deps — the exact pattern
|
|
6
6
|
* `commitSessionFlow.ts` (`commitDeviceSetAndResolve`) uses. The context methods
|
|
7
|
-
* (`signInWithPasskey` / `
|
|
7
|
+
* (`signInWithPasskey` / `addPasskey`) are thin wrappers
|
|
8
8
|
* that supply the real deps: the core `webauthn*` methods, the platform ceremony
|
|
9
9
|
* client (`webauthn/passkeyClient`), and the internal `commitSession` funnel.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
11
|
+
* Both GATE on `isSupported()` first (the platform client returns `false`
|
|
12
12
|
* off the web) so an unsupported surface fails loudly before touching a ceremony.
|
|
13
13
|
*/
|
|
14
14
|
import type { LoginResult } from '@oxy.so/contracts';
|
|
@@ -56,25 +56,6 @@ export interface RunPasskeyLoginDeps {
|
|
|
56
56
|
* resolves to a completed session.
|
|
57
57
|
*/
|
|
58
58
|
export declare function runPasskeyLogin(deps: RunPasskeyLoginDeps): Promise<void>;
|
|
59
|
-
/** Injected dependencies for {@link runPasskeyRegister}. */
|
|
60
|
-
export interface RunPasskeyRegisterDeps {
|
|
61
|
-
isSupported: () => boolean;
|
|
62
|
-
getRegisterOptions: (username: string) => Promise<unknown>;
|
|
63
|
-
runCeremony: (optionsJSON: unknown) => Promise<unknown>;
|
|
64
|
-
registerVerify: (response: unknown, envelope: {
|
|
65
|
-
username: string;
|
|
66
|
-
deviceName?: string;
|
|
67
|
-
}) => Promise<PasskeyRegisterVerifyResult>;
|
|
68
|
-
commit: (input: CommitInput) => Promise<void>;
|
|
69
|
-
username: string;
|
|
70
|
-
deviceName?: string;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Passkey SIGNUP: create a brand-new account whose first auth method is a
|
|
74
|
-
* passkey. The verify signup branch mints a session (a {@link LoginSessionResult}
|
|
75
|
-
* carrying `sessionId`), which is committed exactly like a password signup.
|
|
76
|
-
*/
|
|
77
|
-
export declare function runPasskeyRegister(deps: RunPasskeyRegisterDeps): Promise<void>;
|
|
78
59
|
/** Injected dependencies for {@link runPasskeyAdd}. */
|
|
79
60
|
export interface RunPasskeyAddDeps {
|
|
80
61
|
isSupported: () => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkeyFlow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/passkeyFlow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAAC;AAE3F,qFAAqF;AACrF,eAAO,MAAM,2BAA2B,gFACuC,CAAC;AAehF,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,WAAW,EAAE,CACX,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAC7E,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9E;AAED,
|
|
1
|
+
{"version":3,"file":"passkeyFlow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/passkeyFlow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAAC;AAE3F,qFAAqF;AACrF,eAAO,MAAM,2BAA2B,gFACuC,CAAC;AAehF,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,WAAW,EAAE,CACX,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAC7E,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9E;AAED,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,kBAAkB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,cAAc,EAAE,CACd,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,KAC9B,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
import { type StyleProp, type TextStyle, type ViewStyle } from 'react-native';
|
|
3
|
+
export interface BenefitRowProps {
|
|
4
|
+
/** Leading icon element, rendered inside a rounded tertiary-fill square. */
|
|
5
|
+
icon: React.ReactNode;
|
|
6
|
+
/** Caption text. Provide either `label` or `children`. */
|
|
7
|
+
label?: string;
|
|
8
|
+
/** Caption content as children (alternative to `label`). */
|
|
9
|
+
children?: React.ReactNode;
|
|
10
|
+
/** Accessibility label for the row (defaults to string content). */
|
|
11
|
+
accessibilityLabel?: string;
|
|
12
|
+
className?: string;
|
|
13
|
+
style?: StyleProp<ViewStyle>;
|
|
14
|
+
textStyle?: StyleProp<TextStyle>;
|
|
15
|
+
}
|
|
16
|
+
export declare const BenefitRow: React.FC<BenefitRowProps>;
|
|
17
|
+
export interface BenefitListProps {
|
|
18
|
+
/** `BenefitRow`s (or any nodes) stacked with consistent spacing. */
|
|
19
|
+
children: React.ReactNode;
|
|
20
|
+
accessibilityLabel?: string;
|
|
21
|
+
className?: string;
|
|
22
|
+
style?: StyleProp<ViewStyle>;
|
|
23
|
+
}
|
|
24
|
+
export declare const BenefitList: React.FC<BenefitListProps>;
|
|
25
|
+
//# sourceMappingURL=BenefitList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BenefitList.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/BenefitList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAkBpF,MAAM,WAAW,eAAe;IAC5B,4EAA4E;IAC5E,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAkDhD,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC7B,oEAAoE;IACpE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAChC;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAiBlD,CAAC"}
|
|
@@ -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;AAsF/B,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EAExB,MAAM,sBAAmB,CAAC;AAgB3B,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAmB,CAAC;AAIhG,KAAK,0BAA0B,GAAG,IAAI,CACpC,eAAe,EACb,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,CACtB,CAAC;AAIF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,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;AAsF/B,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EAExB,MAAM,sBAAmB,CAAC;AAgB3B,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAmB,CAAC;AAIhG,KAAK,0BAA0B,GAAG,IAAI,CACpC,eAAe,EACb,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,CACtB,CAAC;AAIF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA4tChE,CAAC;AAMF,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,0BAA0B;;CAMxC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,QAAO,eAMzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAAO,eAAe,GAAG,IAAqC,CAAC;AAE1F,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,QAAO,0BAMpC,CAAC"}
|
|
@@ -84,14 +84,6 @@ export interface OxyContextState {
|
|
|
84
84
|
deviceName?: string;
|
|
85
85
|
deviceFingerprint?: string;
|
|
86
86
|
}) => Promise<void>;
|
|
87
|
-
/**
|
|
88
|
-
* Create a brand-new account whose first authentication method is a passkey.
|
|
89
|
-
* WEB-ONLY — throws on native or an unsupported browser.
|
|
90
|
-
*/
|
|
91
|
-
registerWithPasskey: (params: {
|
|
92
|
-
username: string;
|
|
93
|
-
deviceName?: string;
|
|
94
|
-
}) => Promise<void>;
|
|
95
87
|
/**
|
|
96
88
|
* Add a passkey to the already-signed-in account (bearer present). Does NOT
|
|
97
89
|
* commit a new session; refreshes the linked auth-methods list on success.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxyContextTypes.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/oxyContextTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9M,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAA+B,CAAC;AAChF,OAAO,KAAK,EACV,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,kCAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAAyB,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B;;;;;;;;;OASG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB;;;;;;;;;OASG;IACH,WAAW,EAAE,WAAW,CAAC;IACzB,wFAAwF;IACxF,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,uHAAuH;IACvH,eAAe,EAAE,MAAM,CAAC;IACxB,4GAA4G;IAC5G,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,uBAAuB,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,UAAU,CAAC,CAAC;IAC9E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yBAAyB,EAAE,MAAM,CAAC;IAElC,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE3C,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAElE;;;;;;;;OAQG;IACH,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB
|
|
1
|
+
{"version":3,"file":"oxyContextTypes.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/oxyContextTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Extracted from `OxyContext` so the fixed `options → ceremony → verify → commit`
|
|
5
5
|
* ordering is unit-testable with injected deps — the exact pattern
|
|
6
6
|
* `commitSessionFlow.ts` (`commitDeviceSetAndResolve`) uses. The context methods
|
|
7
|
-
* (`signInWithPasskey` / `
|
|
7
|
+
* (`signInWithPasskey` / `addPasskey`) are thin wrappers
|
|
8
8
|
* that supply the real deps: the core `webauthn*` methods, the platform ceremony
|
|
9
9
|
* client (`webauthn/passkeyClient`), and the internal `commitSession` funnel.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
11
|
+
* Both GATE on `isSupported()` first (the platform client returns `false`
|
|
12
12
|
* off the web) so an unsupported surface fails loudly before touching a ceremony.
|
|
13
13
|
*/
|
|
14
14
|
import type { LoginResult } from '@oxy.so/contracts';
|
|
@@ -56,25 +56,6 @@ export interface RunPasskeyLoginDeps {
|
|
|
56
56
|
* resolves to a completed session.
|
|
57
57
|
*/
|
|
58
58
|
export declare function runPasskeyLogin(deps: RunPasskeyLoginDeps): Promise<void>;
|
|
59
|
-
/** Injected dependencies for {@link runPasskeyRegister}. */
|
|
60
|
-
export interface RunPasskeyRegisterDeps {
|
|
61
|
-
isSupported: () => boolean;
|
|
62
|
-
getRegisterOptions: (username: string) => Promise<unknown>;
|
|
63
|
-
runCeremony: (optionsJSON: unknown) => Promise<unknown>;
|
|
64
|
-
registerVerify: (response: unknown, envelope: {
|
|
65
|
-
username: string;
|
|
66
|
-
deviceName?: string;
|
|
67
|
-
}) => Promise<PasskeyRegisterVerifyResult>;
|
|
68
|
-
commit: (input: CommitInput) => Promise<void>;
|
|
69
|
-
username: string;
|
|
70
|
-
deviceName?: string;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Passkey SIGNUP: create a brand-new account whose first auth method is a
|
|
74
|
-
* passkey. The verify signup branch mints a session (a {@link LoginSessionResult}
|
|
75
|
-
* carrying `sessionId`), which is committed exactly like a password signup.
|
|
76
|
-
*/
|
|
77
|
-
export declare function runPasskeyRegister(deps: RunPasskeyRegisterDeps): Promise<void>;
|
|
78
59
|
/** Injected dependencies for {@link runPasskeyAdd}. */
|
|
79
60
|
export interface RunPasskeyAddDeps {
|
|
80
61
|
isSupported: () => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkeyFlow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/passkeyFlow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAmB,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAAC;AAE3F,qFAAqF;AACrF,eAAO,MAAM,2BAA2B,gFACuC,CAAC;AAehF,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,WAAW,EAAE,CACX,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAC7E,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9E;AAED,
|
|
1
|
+
{"version":3,"file":"passkeyFlow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/passkeyFlow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAmB,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAAC;AAE3F,qFAAqF;AACrF,eAAO,MAAM,2BAA2B,gFACuC,CAAC;AAehF,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,WAAW,EAAE,CACX,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAC7E,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9E;AAED,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,kBAAkB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,cAAc,EAAE,CACd,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,KAC9B,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxy.so/services",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "OxyHQ Expo/React Native SDK — UI components, screens, and native features",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
"@types/jest": "^30.0.0",
|
|
180
180
|
"@types/node": "^20.19.43",
|
|
181
181
|
"@types/react": "*",
|
|
182
|
-
"@oxy.so/bloom": "^
|
|
182
|
+
"@oxy.so/bloom": "^2.0.0",
|
|
183
183
|
"copyfiles": "^2.4.1",
|
|
184
184
|
"expo-constants": "~57.0.5",
|
|
185
185
|
"expo-file-system": "~57.0.1",
|
|
@@ -212,10 +212,10 @@
|
|
|
212
212
|
"typescript": "^5.9.2",
|
|
213
213
|
"zustand": "^5.0.14"
|
|
214
214
|
},
|
|
215
|
-
"//@oxy.so/bloom": "RE-RAISE THIS FLOOR ON EVERY BREAKING BLOOM RELEASE, in the same commit as the root package.json catalog entry and the code that requires it. Bloom is now at or above
|
|
215
|
+
"//@oxy.so/bloom": "RE-RAISE THIS FLOOR ON EVERY BREAKING BLOOM RELEASE, in the same commit as the root package.json catalog entry and the code that requires it. Bloom is now at or above 2.0.0, so the breaking position is the MAJOR and `^2.0.0` means `>=2.0.0 <3.0.0`: 2.x minors are admitted on semver's additive promise, and Bloom 3.0.0 is refused until someone raises this deliberately. The floor was raised from `^1.0.0` for Bloom 2.0.0, which removed every hand-drawn icon (now Remix `Ri*` names) and the `benefit-list` and `profile-card` subpaths this package imported. The CAP is the part that is load-bearing. An earlier revision of this key recorded the opposite trade -- an uncapped `>=` floor, accepted so that intentionally-breaking Bloom 0.x minors would not be blocked -- and that trade is now closed by evidence rather than by preference: an unbounded range is exactly what let `bun install` pair this package with Bloom 1.0.0 and emit no warning at all, and 1.0.0 broke it four ways (a deleted provider, a renamed confirm option, a renamed Chip fill, and two REMOVED SUBPATHS that fail at bundle time, before any typecheck runs). A floor is a claim about what was measured; a cap is the claim that nothing beyond it was.",
|
|
216
216
|
"peerDependencies": {
|
|
217
217
|
"@expo/vector-icons": "^15.0.3",
|
|
218
|
-
"@oxy.so/bloom": "^
|
|
218
|
+
"@oxy.so/bloom": "^2.0.0",
|
|
219
219
|
"@oxy.so/core": "^1.0.1",
|
|
220
220
|
"@react-native-async-storage/async-storage": "^2.0.0",
|
|
221
221
|
"@react-native-community/netinfo": ">=11.4.1",
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
import { View, type StyleProp, type TextStyle, type ViewStyle } from 'react-native';
|
|
3
|
+
import { Card } from '@oxy.so/bloom/card';
|
|
4
|
+
import { RADIUS, SPACING, TYPOGRAPHY } from '@oxy.so/bloom/design-tokens';
|
|
5
|
+
import { useTheme } from '@oxy.so/bloom/theme';
|
|
6
|
+
import { Text } from '@oxy.so/bloom/typography';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* BenefitList / BenefitRow — a bordered card stacking "icon + caption" rows,
|
|
10
|
+
* used by the verification, trust and premium screens.
|
|
11
|
+
*
|
|
12
|
+
* Bloom 2.0 removed its `benefit-list` family with no replacement, so the SDK
|
|
13
|
+
* keeps this small local copy built from Bloom primitives (`Card`, `Text`,
|
|
14
|
+
* design tokens) with the same props its call sites already use.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/** Side of the rounded icon square. */
|
|
18
|
+
const ICON_SQUARE_SIZE = 36;
|
|
19
|
+
|
|
20
|
+
export interface BenefitRowProps {
|
|
21
|
+
/** Leading icon element, rendered inside a rounded tertiary-fill square. */
|
|
22
|
+
icon: React.ReactNode;
|
|
23
|
+
/** Caption text. Provide either `label` or `children`. */
|
|
24
|
+
label?: string;
|
|
25
|
+
/** Caption content as children (alternative to `label`). */
|
|
26
|
+
children?: React.ReactNode;
|
|
27
|
+
/** Accessibility label for the row (defaults to string content). */
|
|
28
|
+
accessibilityLabel?: string;
|
|
29
|
+
className?: string;
|
|
30
|
+
style?: StyleProp<ViewStyle>;
|
|
31
|
+
textStyle?: StyleProp<TextStyle>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const BenefitRow: React.FC<BenefitRowProps> = ({
|
|
35
|
+
icon,
|
|
36
|
+
label,
|
|
37
|
+
children,
|
|
38
|
+
accessibilityLabel,
|
|
39
|
+
className,
|
|
40
|
+
style,
|
|
41
|
+
textStyle,
|
|
42
|
+
}) => {
|
|
43
|
+
const { colors } = useTheme();
|
|
44
|
+
const content = children ?? label;
|
|
45
|
+
const a11y = accessibilityLabel ?? (typeof content === 'string' ? content : undefined);
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<View
|
|
49
|
+
className={className}
|
|
50
|
+
style={[{ flexDirection: 'row', alignItems: 'center', gap: SPACING['space-12'] }, style]}
|
|
51
|
+
accessibilityLabel={a11y}
|
|
52
|
+
{...(a11y ? { accessibilityRole: 'text' as const } : {})}
|
|
53
|
+
>
|
|
54
|
+
<View
|
|
55
|
+
style={{
|
|
56
|
+
width: ICON_SQUARE_SIZE,
|
|
57
|
+
height: ICON_SQUARE_SIZE,
|
|
58
|
+
borderRadius: RADIUS['radius-12'],
|
|
59
|
+
alignItems: 'center',
|
|
60
|
+
justifyContent: 'center',
|
|
61
|
+
backgroundColor: colors.backgroundTertiary,
|
|
62
|
+
}}
|
|
63
|
+
accessibilityElementsHidden
|
|
64
|
+
aria-hidden
|
|
65
|
+
>
|
|
66
|
+
{icon}
|
|
67
|
+
</View>
|
|
68
|
+
<Text
|
|
69
|
+
style={[
|
|
70
|
+
{
|
|
71
|
+
flex: 1,
|
|
72
|
+
fontSize: TYPOGRAPHY.caption.size,
|
|
73
|
+
lineHeight: TYPOGRAPHY.caption.lineHeight,
|
|
74
|
+
fontWeight: TYPOGRAPHY.caption.weight,
|
|
75
|
+
color: colors.textSecondary,
|
|
76
|
+
},
|
|
77
|
+
textStyle,
|
|
78
|
+
]}
|
|
79
|
+
>
|
|
80
|
+
{content}
|
|
81
|
+
</Text>
|
|
82
|
+
</View>
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export interface BenefitListProps {
|
|
87
|
+
/** `BenefitRow`s (or any nodes) stacked with consistent spacing. */
|
|
88
|
+
children: React.ReactNode;
|
|
89
|
+
accessibilityLabel?: string;
|
|
90
|
+
className?: string;
|
|
91
|
+
style?: StyleProp<ViewStyle>;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export const BenefitList: React.FC<BenefitListProps> = ({
|
|
95
|
+
children,
|
|
96
|
+
accessibilityLabel,
|
|
97
|
+
className,
|
|
98
|
+
style,
|
|
99
|
+
}) => (
|
|
100
|
+
<Card
|
|
101
|
+
variant="outlined"
|
|
102
|
+
radius="radius-20"
|
|
103
|
+
border="hairline"
|
|
104
|
+
elevation="s"
|
|
105
|
+
className={className}
|
|
106
|
+
style={[{ padding: SPACING['space-16'], gap: SPACING['space-16'], overflow: 'visible' }, style]}
|
|
107
|
+
accessibilityLabel={accessibilityLabel}
|
|
108
|
+
>
|
|
109
|
+
{children}
|
|
110
|
+
</Card>
|
|
111
|
+
);
|
|
@@ -36,7 +36,7 @@ import type { FollowApplicationMode, FollowStatus } from '@oxy.so/contracts';
|
|
|
36
36
|
import type { StyleProp, ViewStyle } from 'react-native';
|
|
37
37
|
import { View } from 'react-native';
|
|
38
38
|
import { Button } from '@oxy.so/bloom/button';
|
|
39
|
-
import {
|
|
39
|
+
import { RiArrowDownSLine as ChevronDown } from '@oxy.so/bloom/icons';
|
|
40
40
|
import {
|
|
41
41
|
DropdownMenu,
|
|
42
42
|
DropdownMenuContent,
|
|
@@ -95,7 +95,7 @@ import { DEFAULT_SESSION_VALIDITY_MS } from './oxyContextHelpers';
|
|
|
95
95
|
// never dereferenced at module scope here.
|
|
96
96
|
import { useFollow } from '../hooks/useFollow';
|
|
97
97
|
import { commitDeviceSetAndResolve } from './commitSessionFlow';
|
|
98
|
-
import { runPasskeyLogin,
|
|
98
|
+
import { runPasskeyLogin, runPasskeyAdd } from './passkeyFlow';
|
|
99
99
|
import {
|
|
100
100
|
isPasskeySupported,
|
|
101
101
|
runRegistrationCeremony,
|
|
@@ -959,22 +959,6 @@ export const OxyRuntimeProvider: React.FC<OxyRuntimeProviderProps> = ({
|
|
|
959
959
|
[oxyServices, authStore, commitSession],
|
|
960
960
|
);
|
|
961
961
|
|
|
962
|
-
// Create a brand-new account whose first auth method is a passkey.
|
|
963
|
-
const registerWithPasskey = useCallback(
|
|
964
|
-
async (params: { username: string; deviceName?: string }): Promise<void> => {
|
|
965
|
-
await runPasskeyRegister({
|
|
966
|
-
isSupported: isPasskeySupported,
|
|
967
|
-
getRegisterOptions: (username) => oxyServices.webauthnRegisterOptions(username),
|
|
968
|
-
runCeremony: runRegistrationCeremony,
|
|
969
|
-
registerVerify: (response, envelope) => oxyServices.webauthnRegisterVerify(response, envelope),
|
|
970
|
-
commit: (input) => commitSession(input, { activate: true }),
|
|
971
|
-
username: params.username,
|
|
972
|
-
deviceName: params.deviceName,
|
|
973
|
-
});
|
|
974
|
-
},
|
|
975
|
-
[oxyServices, commitSession],
|
|
976
|
-
);
|
|
977
|
-
|
|
978
962
|
// Add a passkey to the already-signed-in account (bearer present). No new
|
|
979
963
|
// session is committed — just refresh the linked auth-methods list.
|
|
980
964
|
const addPasskey = useCallback(
|
|
@@ -1265,7 +1249,6 @@ export const OxyRuntimeProvider: React.FC<OxyRuntimeProviderProps> = ({
|
|
|
1265
1249
|
getPublicKey,
|
|
1266
1250
|
signIn,
|
|
1267
1251
|
signInWithPasskey,
|
|
1268
|
-
registerWithPasskey,
|
|
1269
1252
|
addPasskey,
|
|
1270
1253
|
removePasskey,
|
|
1271
1254
|
revokeSuspiciousSignIn,
|
|
@@ -1323,7 +1306,6 @@ export const OxyRuntimeProvider: React.FC<OxyRuntimeProviderProps> = ({
|
|
|
1323
1306
|
getPublicKey,
|
|
1324
1307
|
signIn,
|
|
1325
1308
|
signInWithPasskey,
|
|
1326
|
-
registerWithPasskey,
|
|
1327
1309
|
addPasskey,
|
|
1328
1310
|
removePasskey,
|
|
1329
1311
|
revokeSuspiciousSignIn,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `passkeyFlow` — the pure, deps-injected passkey (WebAuthn) orchestration that
|
|
3
|
-
* backs `useOxy().signInWithPasskey` / `
|
|
3
|
+
* backs `useOxy().signInWithPasskey` / `addPasskey`.
|
|
4
4
|
*
|
|
5
5
|
* These tests assert the fixed `options → ceremony → verify → commit` ordering,
|
|
6
6
|
* the exact `commitSession` input projected from a session-arm login result, the
|
|
@@ -12,11 +12,9 @@
|
|
|
12
12
|
import type { LoginSessionResult } from '@oxy.so/contracts';
|
|
13
13
|
import {
|
|
14
14
|
runPasskeyLogin,
|
|
15
|
-
|
|
16
|
-
runPasskeyAdd,
|
|
15
|
+
runPasskeyAdd,
|
|
17
16
|
PASSKEY_UNSUPPORTED_MESSAGE,
|
|
18
17
|
type RunPasskeyLoginDeps,
|
|
19
|
-
type RunPasskeyRegisterDeps,
|
|
20
18
|
type RunPasskeyAddDeps,
|
|
21
19
|
type PasskeyRegisterVerifyResult,
|
|
22
20
|
} from '../passkeyFlow';
|
|
@@ -122,67 +120,6 @@ describe('runPasskeyLogin', () => {
|
|
|
122
120
|
});
|
|
123
121
|
});
|
|
124
122
|
|
|
125
|
-
describe('runPasskeyRegister', () => {
|
|
126
|
-
const buildDeps = (
|
|
127
|
-
order: string[],
|
|
128
|
-
overrides: Partial<RunPasskeyRegisterDeps> = {},
|
|
129
|
-
): RunPasskeyRegisterDeps => ({
|
|
130
|
-
isSupported: jest.fn(() => true),
|
|
131
|
-
getRegisterOptions: jest.fn(async (username) => {
|
|
132
|
-
order.push('getRegisterOptions');
|
|
133
|
-
expect(username).toBe('newuser');
|
|
134
|
-
return { challenge: 'reg-opts' };
|
|
135
|
-
}),
|
|
136
|
-
runCeremony: jest.fn(async () => {
|
|
137
|
-
order.push('runCeremony');
|
|
138
|
-
return { id: 'attestation' };
|
|
139
|
-
}),
|
|
140
|
-
registerVerify: jest.fn(async () => {
|
|
141
|
-
order.push('registerVerify');
|
|
142
|
-
return sessionResult;
|
|
143
|
-
}),
|
|
144
|
-
commit: jest.fn(async () => {
|
|
145
|
-
order.push('commit');
|
|
146
|
-
}),
|
|
147
|
-
username: 'newuser',
|
|
148
|
-
deviceName: 'My Laptop',
|
|
149
|
-
...overrides,
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it('creates the account (signup branch) and commits the minted session', async () => {
|
|
153
|
-
const order: string[] = [];
|
|
154
|
-
const deps = buildDeps(order);
|
|
155
|
-
|
|
156
|
-
await runPasskeyRegister(deps);
|
|
157
|
-
|
|
158
|
-
expect(order).toEqual(['getRegisterOptions', 'runCeremony', 'registerVerify', 'commit']);
|
|
159
|
-
expect(deps.registerVerify).toHaveBeenCalledWith(
|
|
160
|
-
{ id: 'attestation' },
|
|
161
|
-
{ username: 'newuser', deviceName: 'My Laptop' },
|
|
162
|
-
);
|
|
163
|
-
expect(deps.commit).toHaveBeenCalledWith(expectedCommitInput);
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
it('throws (no commit) when verify returns a link branch instead of a session', async () => {
|
|
167
|
-
const order: string[] = [];
|
|
168
|
-
const deps = buildDeps(order, {
|
|
169
|
-
registerVerify: jest.fn(async () => linkResult),
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
await expect(runPasskeyRegister(deps)).rejects.toThrow(/did not establish a session/i);
|
|
173
|
-
expect(deps.commit).not.toHaveBeenCalled();
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
it('throws and touches nothing when passkeys are unsupported', async () => {
|
|
177
|
-
const order: string[] = [];
|
|
178
|
-
const deps = buildDeps(order, { isSupported: jest.fn(() => false) });
|
|
179
|
-
|
|
180
|
-
await expect(runPasskeyRegister(deps)).rejects.toThrow(PASSKEY_UNSUPPORTED_MESSAGE);
|
|
181
|
-
expect(deps.getRegisterOptions).not.toHaveBeenCalled();
|
|
182
|
-
expect(deps.commit).not.toHaveBeenCalled();
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
|
|
186
123
|
describe('runPasskeyAdd', () => {
|
|
187
124
|
const buildDeps = (
|
|
188
125
|
order: string[],
|