@oxy.so/services 1.0.2 → 1.1.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/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/LanguageBridge.js +51 -0
- package/lib/commonjs/ui/components/LanguageBridge.js.map +1 -0
- package/lib/commonjs/ui/components/OxyConsentScreen.js +132 -2
- package/lib/commonjs/ui/components/OxyConsentScreen.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +19 -1
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/ProfileButton.js +20 -12
- package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/LanguageBridge.js +47 -0
- package/lib/module/ui/components/LanguageBridge.js.map +1 -0
- package/lib/module/ui/components/OxyConsentScreen.js +132 -2
- package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +19 -1
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/ProfileButton.js +20 -12
- package/lib/module/ui/components/ProfileButton.js.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +1 -1
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/LanguageBridge.d.ts +19 -0
- package/lib/typescript/commonjs/ui/components/LanguageBridge.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/OxyConsentScreen.d.ts +17 -1
- package/lib/typescript/commonjs/ui/components/OxyConsentScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts +14 -0
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/types/navigation.d.ts +29 -0
- package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +1 -1
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/LanguageBridge.d.ts +19 -0
- package/lib/typescript/module/ui/components/LanguageBridge.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/OxyConsentScreen.d.ts +17 -1
- package/lib/typescript/module/ui/components/OxyConsentScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyProvider.d.ts +14 -0
- package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/types/navigation.d.ts +29 -0
- package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
- package/package.json +5 -4
- package/src/index.ts +1 -0
- package/src/ui/components/LanguageBridge.tsx +44 -0
- package/src/ui/components/OxyConsentScreen.tsx +127 -0
- package/src/ui/components/OxyProvider.tsx +17 -0
- package/src/ui/components/ProfileButton.tsx +25 -11
- package/src/ui/components/__tests__/LanguageBridge.test.tsx +81 -0
- package/src/ui/components/__tests__/OxyConsentScreen.test.tsx +32 -0
- package/src/ui/types/navigation.ts +30 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyConsentScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyConsentScreen.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OxyConsentScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyConsentScreen.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAQ7D,oFAAoF;AACpF,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,YAAY,EAAE,mBAAmB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,WAAW,EAAE,qBAAqB,CAAC;IACnC,wEAAwE;IACxE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,wEAAwE;IACxE,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,kDAAkD;IAClD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAqHD,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EACX,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,MAAM,EACN,IAAY,EACZ,KAAY,GACb,EAAE,qBAAqB,+BA+OvB;AA+KD,eAAe,gBAAgB,CAAC"}
|
|
@@ -34,6 +34,20 @@ import type { OxyProviderProps } from '../types/navigation';
|
|
|
34
34
|
* return <Text>Welcome, {user?.username}!</Text>;
|
|
35
35
|
* }
|
|
36
36
|
* ```
|
|
37
|
+
*
|
|
38
|
+
* An app with its own translated UI passes a language config to follow the account's
|
|
39
|
+
* (or, signed out, the device/guest) resolved locale automatically — see ADR
|
|
40
|
+
* 0022 (`docs/adr/0022-app-i18n-follows-oxy-language.md`):
|
|
41
|
+
* ```tsx
|
|
42
|
+
* <OxyProvider
|
|
43
|
+
* baseURL="https://api.oxy.so"
|
|
44
|
+
* language={{
|
|
45
|
+
* supportedLocales: SUPPORTED_LANGUAGES, // this app's own catalog
|
|
46
|
+
* fallbackLocale: DEFAULT_LANGUAGE,
|
|
47
|
+
* onChange: (locale) => i18n.changeLanguage(locale),
|
|
48
|
+
* }}
|
|
49
|
+
* >
|
|
50
|
+
* ```
|
|
37
51
|
*/
|
|
38
52
|
declare const OxyProvider: FC<OxyProviderProps>;
|
|
39
53
|
export default OxyProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyProvider.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAI7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"OxyProvider.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAI7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAuB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAiMrC,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ProfileButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAGH,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAYtB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"ProfileButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ProfileButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAGH,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAYtB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AA+BhF,MAAM,WAAW,kBAAkB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C;;;;OAIG;IACH,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IACnC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAkQ/C,CAAC;AAiDF,eAAe,aAAa,CAAC"}
|
|
@@ -152,5 +152,34 @@ export interface OxyProviderProps {
|
|
|
152
152
|
* @default 'persistent'
|
|
153
153
|
*/
|
|
154
154
|
deviceCredentialStorage?: 'persistent' | 'ephemeral';
|
|
155
|
+
/**
|
|
156
|
+
* Wires the app's OWN i18n library to Oxy's resolved language, so the
|
|
157
|
+
* account (or, signed out, the device/guest locale) drives the app's
|
|
158
|
+
* translated UI directly — no app-local effect or "sync" component to
|
|
159
|
+
* remember to mount. Oxy decides WHICH language; the app keeps owning its
|
|
160
|
+
* own translation catalogs and library (i18next, FormatJS, or anything
|
|
161
|
+
* else) and is told through `onChange` when to switch.
|
|
162
|
+
*
|
|
163
|
+
* Omitted entirely (the default) when an app has no i18n of its own, or
|
|
164
|
+
* manages it independently of the account/device locale.
|
|
165
|
+
*/
|
|
166
|
+
language?: OxyLanguageConfig;
|
|
167
|
+
}
|
|
168
|
+
export interface OxyLanguageConfig {
|
|
169
|
+
/** The exact locales this app ships a translation catalog for. */
|
|
170
|
+
supportedLocales: readonly string[];
|
|
171
|
+
/**
|
|
172
|
+
* Used when Oxy's resolved language matches none of `supportedLocales`,
|
|
173
|
+
* not even by base language (Oxy's account-locale catalog is broader
|
|
174
|
+
* than any one app's translations).
|
|
175
|
+
*/
|
|
176
|
+
fallbackLocale: string;
|
|
177
|
+
/**
|
|
178
|
+
* Called whenever the resolved locale changes, coerced to the closest
|
|
179
|
+
* one in `supportedLocales`. May return a promise; a rejection is
|
|
180
|
+
* reported to `onError` instead of throwing into the app tree.
|
|
181
|
+
*/
|
|
182
|
+
onChange: (locale: string) => void | Promise<void>;
|
|
183
|
+
onError?: (error: unknown, locale: string) => void;
|
|
155
184
|
}
|
|
156
185
|
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../../../src/ui/types/navigation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../../../src/ui/types/navigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,7 +72,7 @@ export type { OxyAuthPromptProps } from './ui/components/OxyAuthPrompt.js';
|
|
|
72
72
|
export { OxyOAuthCallback } from './ui/components/OxyOAuthCallback.js';
|
|
73
73
|
export type { OxyOAuthCallbackProps } from './ui/components/OxyOAuthCallback.js';
|
|
74
74
|
export { OxyConsentScreen } from './ui/components/OxyConsentScreen.js';
|
|
75
|
-
export type { OxyConsentScreenProps, OxyConsentApplication, OxyConsentUser, } from './ui/components/OxyConsentScreen.js';
|
|
75
|
+
export type { OxyConsentScreenProps, OxyConsentApplication, OxyConsentUser, OxyConsentResource, } from './ui/components/OxyConsentScreen.js';
|
|
76
76
|
export { RequireOxyAuth } from './ui/components/RequireOxyAuth.js';
|
|
77
77
|
export type { RequireOxyAuthProps, RequireOxyAuthPrompt } from './ui/components/RequireOxyAuth.js';
|
|
78
78
|
export { default as FollowButton } from './ui/components/FollowButton.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAYH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gCAA6B,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAAyB,CAAC;AAIjD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,4BAAyB,CAAC;AAKlF,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,uBAAc,CAAC;AACtB,YAAY,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,uBAAc,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,MAAM,4BAAyB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAoB,CAAC;AAC7C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAoB,CAAC;AAC/F,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAiC,CAAC;AACjF,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oCAAiC,CAAC;AAIzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAA8B,CAAC;AAKzE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAAuB,CAAC;AACrD,OAAO,EACH,aAAa,EACb,SAAS,IAAI,cAAc,EAC3B,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACnB,MAAM,2BAAwB,CAAC;AAKhC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,yBAAsB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAA+B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,yBAAsB,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,0BAAuB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAAuB,CAAC;AAKjF,OAAO,EACH,cAAc,EACd,eAAe,EACf,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACnB,MAAM,yCAAsC,CAAC;AAC9C,OAAO,EACH,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,sBAAsB,GACzB,MAAM,0CAAuC,CAAC;AAC/C,OAAO,EACH,mBAAmB,EACnB,yBAAyB,EACzB,2BAA2B,GAC9B,MAAM,0CAAuC,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAmC,CAAC;AACnE,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,yBAAyB,GAC5B,MAAM,yCAAsC,CAAC;AAG9C,YAAY,EACR,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,EACP,MAAM,EACN,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,GAC7B,MAAM,oCAAiC,CAAC;AAKzC,OAAO,EACH,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,gCAAgC,EAChC,wBAAwB,EACxB,qBAAqB,EACrB,aAAa,GAChB,MAAM,6CAA0C,CAAC;AAClD,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,eAAe,GAClB,MAAM,8CAA2C,CAAC;AACnD,OAAO,EACH,qBAAqB,EACrB,qBAAqB,GACxB,MAAM,yCAAsC,CAAC;AAC9C,YAAY,EACR,qBAAqB,EACrB,qBAAqB,GACxB,MAAM,yCAAsC,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAmC,CAAC;AAQjE,OAAO,EACH,SAAS,EACT,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,GAC/B,MAAM,iCAA8B,CAAC;AAStC,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,8BAA8B,EAC9B,8BAA8B,GACjC,MAAM,iCAA8B,CAAC;AACtC,YAAY,EACR,aAAa,EACb,kBAAkB,EAClB,uBAAuB,GAC1B,MAAM,iCAA8B,CAAC;AAGtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAA8B,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,MAAM,iCAA8B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAAwB,CAAC;AAKrD,OAAO,EACH,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,6BAA0B,CAAC;AAClC,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA0B,CAAC;AAKvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAA6B,CAAC;AAC/D,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gCAA6B,CAAC;AA0B/E,OAAO,EACL,2BAA2B,EAC3B,mCAAmC,GACpC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oCAAiC,CAAC;AAC7E,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oCAAiC,CAAC;AAM5F,OAAO,EAAE,cAAc,EAAE,MAAM,0BAAuB,CAAC;AACvD,YAAY,EAAE,0BAA0B,EAAE,MAAM,oCAAiC,CAAC;AAClF,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,qBAAkB,CAAC;AAC1B,YAAY,EACV,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,oCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAA+B,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kCAA+B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAkC,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qCAAkC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAkC,CAAC;AACpE,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { OxyLanguageConfig } from '../types/navigation.js';
|
|
2
|
+
/**
|
|
3
|
+
* `OxyProvider`'s language config prop, realized. Oxy decides which
|
|
4
|
+
* language an account (or, signed out, the device/guest locale) should see;
|
|
5
|
+
* this is the ONE place that decision reaches the host app's own i18n library
|
|
6
|
+
* — so an app never re-derives or imperatively tracks a language of its own,
|
|
7
|
+
* and never mounts anything extra to get it. It owns only its translation
|
|
8
|
+
* catalogs.
|
|
9
|
+
*
|
|
10
|
+
* `currentLanguage` may name a locale the host app never shipped a catalog
|
|
11
|
+
* for — {@link coerceToSupportedLocale} narrows it to the closest one the app
|
|
12
|
+
* actually has (exact match, then same base language, then `fallbackLocale`).
|
|
13
|
+
*
|
|
14
|
+
* Renders nothing. Mounted by `OxyProvider` INSIDE `OxyRuntimeProvider` only
|
|
15
|
+
* when this config is supplied, so an app with no i18n of its own pays
|
|
16
|
+
* nothing.
|
|
17
|
+
*/
|
|
18
|
+
export declare function LanguageBridge({ supportedLocales, fallbackLocale, onChange, onError }: OxyLanguageConfig): null;
|
|
19
|
+
//# sourceMappingURL=LanguageBridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageBridge.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/LanguageBridge.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAE7D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,EAAE,gBAAgB,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAsB/G"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { McpOAuthWriteAction } from '@oxy.so/contracts';
|
|
1
2
|
/** The requesting application, resolved by the caller (never user-supplied raw). */
|
|
2
3
|
export interface OxyConsentApplication {
|
|
3
4
|
/** Display name of the requesting application. */
|
|
@@ -17,6 +18,8 @@ export interface OxyConsentApplication {
|
|
|
17
18
|
}
|
|
18
19
|
/** The account that will authorize the request (the currently signed-in user). */
|
|
19
20
|
export interface OxyConsentUser {
|
|
21
|
+
/** Exact effective account bound to the grant. */
|
|
22
|
+
accountId?: string;
|
|
20
23
|
/** Real display name, when the profile has one. */
|
|
21
24
|
displayName?: string;
|
|
22
25
|
/** Normalized handle — the sanctioned fallback when `displayName` is absent. */
|
|
@@ -24,6 +27,17 @@ export interface OxyConsentUser {
|
|
|
24
27
|
/** Avatar — a URL or bare file id passed straight to `<Avatar source>`. */
|
|
25
28
|
avatarUri?: string;
|
|
26
29
|
}
|
|
30
|
+
export interface OxyConsentResource {
|
|
31
|
+
/** Oxy application that owns the protected MCP resource. */
|
|
32
|
+
application: {
|
|
33
|
+
name: string;
|
|
34
|
+
iconUrl?: string;
|
|
35
|
+
};
|
|
36
|
+
/** Canonical protected-resource URI bound into the access token. */
|
|
37
|
+
uri: string;
|
|
38
|
+
/** Effectful tools enabled by the requested capabilities. */
|
|
39
|
+
writeActions: McpOAuthWriteAction[];
|
|
40
|
+
}
|
|
27
41
|
export interface OxyConsentScreenProps {
|
|
28
42
|
/** The resolved requesting application. */
|
|
29
43
|
application: OxyConsentApplication;
|
|
@@ -31,6 +45,8 @@ export interface OxyConsentScreenProps {
|
|
|
31
45
|
scopes: string[];
|
|
32
46
|
/** The account that will authorize the request, when known. */
|
|
33
47
|
user?: OxyConsentUser;
|
|
48
|
+
/** Exact protected resource for an external MCP connection. */
|
|
49
|
+
resource?: OxyConsentResource;
|
|
34
50
|
/** Approve handler — the caller mints the code / completes the flow. */
|
|
35
51
|
onAllow: () => void | Promise<void>;
|
|
36
52
|
/** Deny handler — the caller cancels the flow. */
|
|
@@ -40,6 +56,6 @@ export interface OxyConsentScreenProps {
|
|
|
40
56
|
/** A blocking error message for the request, when present. */
|
|
41
57
|
error?: string | null;
|
|
42
58
|
}
|
|
43
|
-
export declare function OxyConsentScreen({ application, scopes, user, onAllow, onDeny, busy, error, }: OxyConsentScreenProps): import("react").JSX.Element;
|
|
59
|
+
export declare function OxyConsentScreen({ application, scopes, user, resource, onAllow, onDeny, busy, error, }: OxyConsentScreenProps): import("react").JSX.Element;
|
|
44
60
|
export default OxyConsentScreen;
|
|
45
61
|
//# sourceMappingURL=OxyConsentScreen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyConsentScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyConsentScreen.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OxyConsentScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyConsentScreen.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAQ7D,oFAAoF;AACpF,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,YAAY,EAAE,mBAAmB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,WAAW,EAAE,qBAAqB,CAAC;IACnC,wEAAwE;IACxE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,wEAAwE;IACxE,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,kDAAkD;IAClD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAqHD,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EACX,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,MAAM,EACN,IAAY,EACZ,KAAY,GACb,EAAE,qBAAqB,+BA+OvB;AA+KD,eAAe,gBAAgB,CAAC"}
|
|
@@ -34,6 +34,20 @@ import type { OxyProviderProps } from '../types/navigation.js';
|
|
|
34
34
|
* return <Text>Welcome, {user?.username}!</Text>;
|
|
35
35
|
* }
|
|
36
36
|
* ```
|
|
37
|
+
*
|
|
38
|
+
* An app with its own translated UI passes a language config to follow the account's
|
|
39
|
+
* (or, signed out, the device/guest) resolved locale automatically — see ADR
|
|
40
|
+
* 0022 (`docs/adr/0022-app-i18n-follows-oxy-language.md`):
|
|
41
|
+
* ```tsx
|
|
42
|
+
* <OxyProvider
|
|
43
|
+
* baseURL="https://api.oxy.so"
|
|
44
|
+
* language={{
|
|
45
|
+
* supportedLocales: SUPPORTED_LANGUAGES, // this app's own catalog
|
|
46
|
+
* fallbackLocale: DEFAULT_LANGUAGE,
|
|
47
|
+
* onChange: (locale) => i18n.changeLanguage(locale),
|
|
48
|
+
* }}
|
|
49
|
+
* >
|
|
50
|
+
* ```
|
|
37
51
|
*/
|
|
38
52
|
declare const OxyProvider: FC<OxyProviderProps>;
|
|
39
53
|
export default OxyProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyProvider.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAI7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"OxyProvider.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAI7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAqB,CAAC;AAuB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAiMrC,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ProfileButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAGH,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAYtB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"ProfileButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ProfileButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAGH,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAYtB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAoC,CAAC;AA+BhF,MAAM,WAAW,kBAAkB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C;;;;OAIG;IACH,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IACnC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAkQ/C,CAAC;AAiDF,eAAe,aAAa,CAAC"}
|
|
@@ -152,5 +152,34 @@ export interface OxyProviderProps {
|
|
|
152
152
|
* @default 'persistent'
|
|
153
153
|
*/
|
|
154
154
|
deviceCredentialStorage?: 'persistent' | 'ephemeral';
|
|
155
|
+
/**
|
|
156
|
+
* Wires the app's OWN i18n library to Oxy's resolved language, so the
|
|
157
|
+
* account (or, signed out, the device/guest locale) drives the app's
|
|
158
|
+
* translated UI directly — no app-local effect or "sync" component to
|
|
159
|
+
* remember to mount. Oxy decides WHICH language; the app keeps owning its
|
|
160
|
+
* own translation catalogs and library (i18next, FormatJS, or anything
|
|
161
|
+
* else) and is told through `onChange` when to switch.
|
|
162
|
+
*
|
|
163
|
+
* Omitted entirely (the default) when an app has no i18n of its own, or
|
|
164
|
+
* manages it independently of the account/device locale.
|
|
165
|
+
*/
|
|
166
|
+
language?: OxyLanguageConfig;
|
|
167
|
+
}
|
|
168
|
+
export interface OxyLanguageConfig {
|
|
169
|
+
/** The exact locales this app ships a translation catalog for. */
|
|
170
|
+
supportedLocales: readonly string[];
|
|
171
|
+
/**
|
|
172
|
+
* Used when Oxy's resolved language matches none of `supportedLocales`,
|
|
173
|
+
* not even by base language (Oxy's account-locale catalog is broader
|
|
174
|
+
* than any one app's translations).
|
|
175
|
+
*/
|
|
176
|
+
fallbackLocale: string;
|
|
177
|
+
/**
|
|
178
|
+
* Called whenever the resolved locale changes, coerced to the closest
|
|
179
|
+
* one in `supportedLocales`. May return a promise; a rejection is
|
|
180
|
+
* reported to `onError` instead of throwing into the app tree.
|
|
181
|
+
*/
|
|
182
|
+
onChange: (locale: string) => void | Promise<void>;
|
|
183
|
+
onError?: (error: unknown, locale: string) => void;
|
|
155
184
|
}
|
|
156
185
|
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../../../src/ui/types/navigation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../../../src/ui/types/navigation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxy.so/services",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.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",
|
|
@@ -154,7 +154,8 @@
|
|
|
154
154
|
}
|
|
155
155
|
},
|
|
156
156
|
"dependencies": {
|
|
157
|
-
"@
|
|
157
|
+
"@expo/config-plugins": "57.0.9",
|
|
158
|
+
"@oxy.so/contracts": "1.1.1",
|
|
158
159
|
"@simplewebauthn/browser": "^13.3.0",
|
|
159
160
|
"color": "^4.2.3"
|
|
160
161
|
},
|
|
@@ -163,7 +164,7 @@
|
|
|
163
164
|
"@commitlint/cli": "^21.2.1",
|
|
164
165
|
"@commitlint/config-conventional": "^21.2.0",
|
|
165
166
|
"@expo/vector-icons": "^15.0.3",
|
|
166
|
-
"@oxy.so/core": "1.0
|
|
167
|
+
"@oxy.so/core": "1.2.0",
|
|
167
168
|
"@react-native-async-storage/async-storage": "^2.0.0",
|
|
168
169
|
"@react-native-community/netinfo": "^12.0.1",
|
|
169
170
|
"@react-native/babel-preset": "^0.86.2",
|
|
@@ -178,7 +179,7 @@
|
|
|
178
179
|
"@types/jest": "^30.0.0",
|
|
179
180
|
"@types/node": "^20.19.43",
|
|
180
181
|
"@types/react": "*",
|
|
181
|
-
"@oxy.so/bloom": "^1.0.
|
|
182
|
+
"@oxy.so/bloom": "^1.0.7",
|
|
182
183
|
"copyfiles": "^2.4.1",
|
|
183
184
|
"expo-constants": "~57.0.5",
|
|
184
185
|
"expo-file-system": "~57.0.1",
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useEffect, useMemo, useRef } from 'react';
|
|
2
|
+
import { coerceToSupportedLocale } from '@oxy.so/core';
|
|
3
|
+
import { useOxy } from '../context/OxyContext';
|
|
4
|
+
import type { OxyLanguageConfig } from '../types/navigation';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* `OxyProvider`'s language config prop, realized. Oxy decides which
|
|
8
|
+
* language an account (or, signed out, the device/guest locale) should see;
|
|
9
|
+
* this is the ONE place that decision reaches the host app's own i18n library
|
|
10
|
+
* — so an app never re-derives or imperatively tracks a language of its own,
|
|
11
|
+
* and never mounts anything extra to get it. It owns only its translation
|
|
12
|
+
* catalogs.
|
|
13
|
+
*
|
|
14
|
+
* `currentLanguage` may name a locale the host app never shipped a catalog
|
|
15
|
+
* for — {@link coerceToSupportedLocale} narrows it to the closest one the app
|
|
16
|
+
* actually has (exact match, then same base language, then `fallbackLocale`).
|
|
17
|
+
*
|
|
18
|
+
* Renders nothing. Mounted by `OxyProvider` INSIDE `OxyRuntimeProvider` only
|
|
19
|
+
* when this config is supplied, so an app with no i18n of its own pays
|
|
20
|
+
* nothing.
|
|
21
|
+
*/
|
|
22
|
+
export function LanguageBridge({ supportedLocales, fallbackLocale, onChange, onError }: OxyLanguageConfig): null {
|
|
23
|
+
const { currentLanguage } = useOxy();
|
|
24
|
+
const resolvedLocale = useMemo(
|
|
25
|
+
() => coerceToSupportedLocale(currentLanguage, supportedLocales, fallbackLocale),
|
|
26
|
+
[currentLanguage, supportedLocales, fallbackLocale],
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
// Refs, not effect dependencies: an inline `onChange`/`onError` (the common
|
|
30
|
+
// case) must not re-fire the effect on every render — only a genuine
|
|
31
|
+
// change in the RESOLVED locale should call it again.
|
|
32
|
+
const onChangeRef = useRef(onChange);
|
|
33
|
+
onChangeRef.current = onChange;
|
|
34
|
+
const onErrorRef = useRef(onError);
|
|
35
|
+
onErrorRef.current = onError;
|
|
36
|
+
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
Promise.resolve(onChangeRef.current(resolvedLocale)).catch((error: unknown) => {
|
|
39
|
+
onErrorRef.current?.(error, resolvedLocale);
|
|
40
|
+
});
|
|
41
|
+
}, [resolvedLocale]);
|
|
42
|
+
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
import { useCallback } from 'react';
|
|
22
22
|
import { Linking, Pressable, ScrollView, StyleSheet, View } from 'react-native';
|
|
23
23
|
import { logger } from '@oxy.so/core';
|
|
24
|
+
import type { McpOAuthWriteAction } from '@oxy.so/contracts';
|
|
24
25
|
import { Avatar } from '@oxy.so/bloom/avatar';
|
|
25
26
|
import { Button } from '@oxy.so/bloom/button';
|
|
26
27
|
import { Text } from '@oxy.so/bloom/typography';
|
|
@@ -48,6 +49,8 @@ export interface OxyConsentApplication {
|
|
|
48
49
|
|
|
49
50
|
/** The account that will authorize the request (the currently signed-in user). */
|
|
50
51
|
export interface OxyConsentUser {
|
|
52
|
+
/** Exact effective account bound to the grant. */
|
|
53
|
+
accountId?: string;
|
|
51
54
|
/** Real display name, when the profile has one. */
|
|
52
55
|
displayName?: string;
|
|
53
56
|
/** Normalized handle — the sanctioned fallback when `displayName` is absent. */
|
|
@@ -56,6 +59,18 @@ export interface OxyConsentUser {
|
|
|
56
59
|
avatarUri?: string;
|
|
57
60
|
}
|
|
58
61
|
|
|
62
|
+
export interface OxyConsentResource {
|
|
63
|
+
/** Oxy application that owns the protected MCP resource. */
|
|
64
|
+
application: {
|
|
65
|
+
name: string;
|
|
66
|
+
iconUrl?: string;
|
|
67
|
+
};
|
|
68
|
+
/** Canonical protected-resource URI bound into the access token. */
|
|
69
|
+
uri: string;
|
|
70
|
+
/** Effectful tools enabled by the requested capabilities. */
|
|
71
|
+
writeActions: McpOAuthWriteAction[];
|
|
72
|
+
}
|
|
73
|
+
|
|
59
74
|
export interface OxyConsentScreenProps {
|
|
60
75
|
/** The resolved requesting application. */
|
|
61
76
|
application: OxyConsentApplication;
|
|
@@ -63,6 +78,8 @@ export interface OxyConsentScreenProps {
|
|
|
63
78
|
scopes: string[];
|
|
64
79
|
/** The account that will authorize the request, when known. */
|
|
65
80
|
user?: OxyConsentUser;
|
|
81
|
+
/** Exact protected resource for an external MCP connection. */
|
|
82
|
+
resource?: OxyConsentResource;
|
|
66
83
|
/** Approve handler — the caller mints the code / completes the flow. */
|
|
67
84
|
onAllow: () => void | Promise<void>;
|
|
68
85
|
/** Deny handler — the caller cancels the flow. */
|
|
@@ -192,6 +209,7 @@ export function OxyConsentScreen({
|
|
|
192
209
|
application,
|
|
193
210
|
scopes,
|
|
194
211
|
user,
|
|
212
|
+
resource,
|
|
195
213
|
onAllow,
|
|
196
214
|
onDeny,
|
|
197
215
|
busy = false,
|
|
@@ -259,6 +277,40 @@ export function OxyConsentScreen({
|
|
|
259
277
|
) : null}
|
|
260
278
|
</View>
|
|
261
279
|
|
|
280
|
+
{resource ? (
|
|
281
|
+
<View style={styles.section}>
|
|
282
|
+
<Text style={[styles.sectionLabel, { color: theme.colors.textSecondary }]}>
|
|
283
|
+
{t('consent.resource.title')}
|
|
284
|
+
</Text>
|
|
285
|
+
<View
|
|
286
|
+
testID="consent-resource"
|
|
287
|
+
style={[styles.resourceCard, { borderColor: theme.colors.border, backgroundColor: theme.colors.card }]}
|
|
288
|
+
>
|
|
289
|
+
<Avatar
|
|
290
|
+
source={resource.application.iconUrl}
|
|
291
|
+
name={resource.application.name}
|
|
292
|
+
size={40}
|
|
293
|
+
/>
|
|
294
|
+
<View style={styles.resourceText}>
|
|
295
|
+
<Text
|
|
296
|
+
testID="consent-resource-app"
|
|
297
|
+
numberOfLines={1}
|
|
298
|
+
style={[styles.accountName, { color: theme.colors.text }]}
|
|
299
|
+
>
|
|
300
|
+
{resource.application.name}
|
|
301
|
+
</Text>
|
|
302
|
+
<Text
|
|
303
|
+
testID="consent-resource-uri"
|
|
304
|
+
numberOfLines={2}
|
|
305
|
+
style={[styles.resourceUri, { color: theme.colors.textSecondary }]}
|
|
306
|
+
>
|
|
307
|
+
{resource.uri}
|
|
308
|
+
</Text>
|
|
309
|
+
</View>
|
|
310
|
+
</View>
|
|
311
|
+
</View>
|
|
312
|
+
) : null}
|
|
313
|
+
|
|
262
314
|
{/* Requested permissions */}
|
|
263
315
|
<View style={styles.section}>
|
|
264
316
|
<Text style={[styles.sectionLabel, { color: theme.colors.textSecondary }]}>
|
|
@@ -285,6 +337,29 @@ export function OxyConsentScreen({
|
|
|
285
337
|
</View>
|
|
286
338
|
</View>
|
|
287
339
|
|
|
340
|
+
{resource && resource.writeActions.length > 0 ? (
|
|
341
|
+
<View style={styles.section}>
|
|
342
|
+
<Text style={[styles.sectionLabel, { color: theme.colors.textSecondary }]}>
|
|
343
|
+
{t('consent.writeActions.title')}
|
|
344
|
+
</Text>
|
|
345
|
+
<View style={[styles.card, { borderColor: theme.colors.border, backgroundColor: theme.colors.card }]}>
|
|
346
|
+
{resource.writeActions.map((action) => (
|
|
347
|
+
<View key={`${action.name}:${action.version}`} testID={`consent-write-action-${action.name}`} style={styles.actionRow}>
|
|
348
|
+
<View style={styles.actionCopy}>
|
|
349
|
+
<Text style={[styles.rowText, { color: theme.colors.text }]}>{action.description}</Text>
|
|
350
|
+
<Text style={[styles.actionName, { color: theme.colors.textSecondary }]}>{action.name}</Text>
|
|
351
|
+
</View>
|
|
352
|
+
<View style={[styles.effectBadge, { borderColor: theme.colors.border }]}>
|
|
353
|
+
<Text style={[styles.effectText, { color: theme.colors.textSecondary }]}>
|
|
354
|
+
{t(`consent.effects.${action.effect}`)}
|
|
355
|
+
</Text>
|
|
356
|
+
</View>
|
|
357
|
+
</View>
|
|
358
|
+
))}
|
|
359
|
+
</View>
|
|
360
|
+
</View>
|
|
361
|
+
) : null}
|
|
362
|
+
|
|
288
363
|
{/* Authorizing account */}
|
|
289
364
|
{user ? (
|
|
290
365
|
<View
|
|
@@ -305,6 +380,15 @@ export function OxyConsentScreen({
|
|
|
305
380
|
{user.handle}
|
|
306
381
|
</Text>
|
|
307
382
|
) : null}
|
|
383
|
+
{user.accountId ? (
|
|
384
|
+
<Text
|
|
385
|
+
testID="consent-account-id"
|
|
386
|
+
numberOfLines={1}
|
|
387
|
+
style={[styles.accountId, { color: theme.colors.textSecondary }]}
|
|
388
|
+
>
|
|
389
|
+
{t('consent.account.id', { id: user.accountId })}
|
|
390
|
+
</Text>
|
|
391
|
+
) : null}
|
|
308
392
|
</View>
|
|
309
393
|
</View>
|
|
310
394
|
) : null}
|
|
@@ -466,6 +550,49 @@ const styles = StyleSheet.create({
|
|
|
466
550
|
accountHandle: {
|
|
467
551
|
fontSize: 13,
|
|
468
552
|
},
|
|
553
|
+
accountId: {
|
|
554
|
+
fontSize: 11,
|
|
555
|
+
},
|
|
556
|
+
resourceCard: {
|
|
557
|
+
flexDirection: 'row',
|
|
558
|
+
alignItems: 'center',
|
|
559
|
+
gap: 12,
|
|
560
|
+
borderWidth: StyleSheet.hairlineWidth,
|
|
561
|
+
borderRadius: 16,
|
|
562
|
+
padding: 12,
|
|
563
|
+
},
|
|
564
|
+
resourceText: {
|
|
565
|
+
flex: 1,
|
|
566
|
+
minWidth: 0,
|
|
567
|
+
gap: 2,
|
|
568
|
+
},
|
|
569
|
+
resourceUri: {
|
|
570
|
+
fontSize: 12,
|
|
571
|
+
lineHeight: 17,
|
|
572
|
+
},
|
|
573
|
+
actionRow: {
|
|
574
|
+
flexDirection: 'row',
|
|
575
|
+
alignItems: 'center',
|
|
576
|
+
gap: 10,
|
|
577
|
+
},
|
|
578
|
+
actionCopy: {
|
|
579
|
+
flex: 1,
|
|
580
|
+
minWidth: 0,
|
|
581
|
+
gap: 2,
|
|
582
|
+
},
|
|
583
|
+
actionName: {
|
|
584
|
+
fontSize: 11,
|
|
585
|
+
},
|
|
586
|
+
effectBadge: {
|
|
587
|
+
borderWidth: StyleSheet.hairlineWidth,
|
|
588
|
+
borderRadius: 999,
|
|
589
|
+
paddingHorizontal: 8,
|
|
590
|
+
paddingVertical: 4,
|
|
591
|
+
},
|
|
592
|
+
effectText: {
|
|
593
|
+
fontSize: 10,
|
|
594
|
+
fontWeight: '600',
|
|
595
|
+
},
|
|
469
596
|
linksRow: {
|
|
470
597
|
flexDirection: 'row',
|
|
471
598
|
flexWrap: 'wrap',
|
|
@@ -14,6 +14,7 @@ import { createMemoryStorage, createPlatformStorage, type StorageInterface } fro
|
|
|
14
14
|
import { isNetConnectivityOnline } from '../utils/netConnectivity';
|
|
15
15
|
import { KeyboardBoundary } from './KeyboardBoundary';
|
|
16
16
|
import { ProductAnalyticsObserver } from '../analytics/productAnalytics';
|
|
17
|
+
import { LanguageBridge } from './LanguageBridge';
|
|
17
18
|
|
|
18
19
|
const bootStyles = StyleSheet.create({
|
|
19
20
|
providerRoot: {
|
|
@@ -58,6 +59,20 @@ const isWeb = Platform.OS === 'web';
|
|
|
58
59
|
* return <Text>Welcome, {user?.username}!</Text>;
|
|
59
60
|
* }
|
|
60
61
|
* ```
|
|
62
|
+
*
|
|
63
|
+
* An app with its own translated UI passes a language config to follow the account's
|
|
64
|
+
* (or, signed out, the device/guest) resolved locale automatically — see ADR
|
|
65
|
+
* 0022 (`docs/adr/0022-app-i18n-follows-oxy-language.md`):
|
|
66
|
+
* ```tsx
|
|
67
|
+
* <OxyProvider
|
|
68
|
+
* baseURL="https://api.oxy.so"
|
|
69
|
+
* language={{
|
|
70
|
+
* supportedLocales: SUPPORTED_LANGUAGES, // this app's own catalog
|
|
71
|
+
* fallbackLocale: DEFAULT_LANGUAGE,
|
|
72
|
+
* onChange: (locale) => i18n.changeLanguage(locale),
|
|
73
|
+
* }}
|
|
74
|
+
* >
|
|
75
|
+
* ```
|
|
61
76
|
*/
|
|
62
77
|
const OxyProvider: FC<OxyProviderProps> = ({
|
|
63
78
|
oxyServices,
|
|
@@ -76,6 +91,7 @@ const OxyProvider: FC<OxyProviderProps> = ({
|
|
|
76
91
|
requireAuth = 'off',
|
|
77
92
|
backgroundSession = false,
|
|
78
93
|
deviceCredentialStorage = 'persistent',
|
|
94
|
+
language,
|
|
79
95
|
}) => {
|
|
80
96
|
|
|
81
97
|
// Storage + persistence wiring.
|
|
@@ -229,6 +245,7 @@ const OxyProvider: FC<OxyProviderProps> = ({
|
|
|
229
245
|
onAuthStateChange={onAuthStateChange as OxyRuntimeProviderProps['onAuthStateChange']}
|
|
230
246
|
>
|
|
231
247
|
{productAnalytics ? <ProductAnalyticsObserver analytics={productAnalytics} /> : null}
|
|
248
|
+
{language ? <LanguageBridge {...language} /> : null}
|
|
232
249
|
<SurfaceProvider>
|
|
233
250
|
{requireAuth === 'off' ? (
|
|
234
251
|
children
|