@multiplatform.one/core 7.83.1 → 7.83.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.
Files changed (136) hide show
  1. package/dist/cjs/app/CreateApp.cjs +233 -0
  2. package/dist/cjs/app/CreateApp.native.js +253 -0
  3. package/dist/cjs/app/CreateApp.native.js.map +1 -0
  4. package/dist/cjs/app/CreateRootLayout.cjs +181 -0
  5. package/dist/cjs/app/CreateRootLayout.native.js +115 -0
  6. package/dist/cjs/app/CreateRootLayout.native.js.map +1 -0
  7. package/dist/cjs/app/RuntimePublicConfigScript.cjs +40 -0
  8. package/dist/cjs/app/RuntimePublicConfigScript.native.js +48 -0
  9. package/dist/cjs/app/RuntimePublicConfigScript.native.js.map +1 -0
  10. package/dist/cjs/app/TanstackDevtools.cjs +145 -0
  11. package/dist/cjs/app/TanstackDevtools.native.js +163 -0
  12. package/dist/cjs/app/TanstackDevtools.native.js.map +1 -0
  13. package/dist/cjs/app/TanstackProvider.cjs +81 -0
  14. package/dist/cjs/app/TanstackProvider.native.js +56 -0
  15. package/dist/cjs/app/TanstackProvider.native.js.map +1 -0
  16. package/dist/cjs/app/deepLinkPath.cjs +41 -0
  17. package/dist/cjs/app/deepLinkPath.native.js +46 -0
  18. package/dist/cjs/app/deepLinkPath.native.js.map +1 -0
  19. package/dist/cjs/app/devtoolsTrigger.cjs +281 -0
  20. package/dist/cjs/app/devtoolsTrigger.native.js +338 -0
  21. package/dist/cjs/app/devtoolsTrigger.native.js.map +1 -0
  22. package/dist/cjs/app/frappeSocketPort.cjs +40 -0
  23. package/dist/cjs/app/frappeSocketPort.native.js +45 -0
  24. package/dist/cjs/app/frappeSocketPort.native.js.map +1 -0
  25. package/dist/cjs/app/frappeSyncOptions.cjs +43 -0
  26. package/dist/cjs/app/frappeSyncOptions.native.js +46 -0
  27. package/dist/cjs/app/frappeSyncOptions.native.js.map +1 -0
  28. package/dist/cjs/app/index.cjs +22 -0
  29. package/dist/cjs/app/index.native.js +25 -0
  30. package/dist/cjs/app/index.native.js.map +1 -0
  31. package/dist/cjs/app/loadWalletProvider.cjs +32 -0
  32. package/dist/cjs/app/loadWalletProvider.native.js +44 -0
  33. package/dist/cjs/app/loadWalletProvider.native.js.map +1 -0
  34. package/dist/cjs/app/oneFrappeNavigation.cjs +45 -0
  35. package/dist/cjs/app/oneFrappeNavigation.native.js +52 -0
  36. package/dist/cjs/app/oneFrappeNavigation.native.js.map +1 -0
  37. package/dist/cjs/app/rootLayoutShared.cjs +18 -0
  38. package/dist/cjs/app/rootLayoutShared.native.js +21 -0
  39. package/dist/cjs/app/rootLayoutShared.native.js.map +1 -0
  40. package/dist/cjs/app/runtimePublicConfigMiddleware.cjs +50 -0
  41. package/dist/cjs/app/runtimePublicConfigMiddleware.native.js +55 -0
  42. package/dist/cjs/app/runtimePublicConfigMiddleware.native.js.map +1 -0
  43. package/dist/cjs/app/useNativeDeepLinks.cjs +28 -0
  44. package/dist/cjs/app/useNativeDeepLinks.native.js +56 -0
  45. package/dist/cjs/app/useNativeDeepLinks.native.js.map +1 -0
  46. package/dist/cjs/healthz.cjs +32 -0
  47. package/dist/cjs/healthz.native.js +35 -0
  48. package/dist/cjs/healthz.native.js.map +1 -0
  49. package/dist/cjs/index.cjs +21 -0
  50. package/dist/cjs/index.native.js +24 -0
  51. package/dist/cjs/index.native.js.map +1 -0
  52. package/dist/cjs/layouts/CreateDefaultLayout.cjs +99 -0
  53. package/dist/cjs/layouts/CreateDefaultLayout.native.js +105 -0
  54. package/dist/cjs/layouts/CreateDefaultLayout.native.js.map +1 -0
  55. package/dist/cjs/layouts/index.cjs +28 -0
  56. package/dist/cjs/layouts/index.native.js +31 -0
  57. package/dist/cjs/layouts/index.native.js.map +1 -0
  58. package/dist/esm/app/CreateApp.mjs +196 -0
  59. package/dist/esm/app/CreateApp.mjs.map +1 -0
  60. package/dist/esm/app/CreateApp.native.js +213 -0
  61. package/dist/esm/app/CreateApp.native.js.map +1 -0
  62. package/dist/esm/app/CreateRootLayout.mjs +145 -0
  63. package/dist/esm/app/CreateRootLayout.mjs.map +1 -0
  64. package/dist/esm/app/CreateRootLayout.native.js +76 -0
  65. package/dist/esm/app/CreateRootLayout.native.js.map +1 -0
  66. package/dist/esm/app/RuntimePublicConfigScript.mjs +15 -0
  67. package/dist/esm/app/RuntimePublicConfigScript.mjs.map +1 -0
  68. package/dist/esm/app/RuntimePublicConfigScript.native.js +20 -0
  69. package/dist/esm/app/RuntimePublicConfigScript.native.js.map +1 -0
  70. package/dist/esm/app/TanstackDevtools.mjs +109 -0
  71. package/dist/esm/app/TanstackDevtools.mjs.map +1 -0
  72. package/dist/esm/app/TanstackDevtools.native.js +124 -0
  73. package/dist/esm/app/TanstackDevtools.native.js.map +1 -0
  74. package/dist/esm/app/TanstackProvider.mjs +45 -0
  75. package/dist/esm/app/TanstackProvider.mjs.map +1 -0
  76. package/dist/esm/app/TanstackProvider.native.js +28 -0
  77. package/dist/esm/app/TanstackProvider.native.js.map +1 -0
  78. package/dist/esm/app/deepLinkPath.mjs +16 -0
  79. package/dist/esm/app/deepLinkPath.mjs.map +1 -0
  80. package/dist/esm/app/deepLinkPath.native.js +18 -0
  81. package/dist/esm/app/deepLinkPath.native.js.map +1 -0
  82. package/dist/esm/app/devtoolsTrigger.mjs +238 -0
  83. package/dist/esm/app/devtoolsTrigger.mjs.map +1 -0
  84. package/dist/esm/app/devtoolsTrigger.native.js +292 -0
  85. package/dist/esm/app/devtoolsTrigger.native.js.map +1 -0
  86. package/dist/esm/app/frappeSocketPort.mjs +15 -0
  87. package/dist/esm/app/frappeSocketPort.mjs.map +1 -0
  88. package/dist/esm/app/frappeSocketPort.native.js +17 -0
  89. package/dist/esm/app/frappeSocketPort.native.js.map +1 -0
  90. package/dist/esm/app/frappeSyncOptions.mjs +18 -0
  91. package/dist/esm/app/frappeSyncOptions.mjs.map +1 -0
  92. package/dist/esm/app/frappeSyncOptions.native.js +18 -0
  93. package/dist/esm/app/frappeSyncOptions.native.js.map +1 -0
  94. package/dist/esm/app/index.mjs +4 -0
  95. package/dist/esm/app/index.mjs.map +1 -0
  96. package/dist/esm/app/index.native.js +4 -0
  97. package/dist/esm/app/index.native.js.map +1 -0
  98. package/dist/esm/app/loadWalletProvider.mjs +7 -0
  99. package/dist/esm/app/loadWalletProvider.mjs.map +1 -0
  100. package/dist/esm/app/loadWalletProvider.native.js +16 -0
  101. package/dist/esm/app/loadWalletProvider.native.js.map +1 -0
  102. package/dist/esm/app/oneFrappeNavigation.mjs +20 -0
  103. package/dist/esm/app/oneFrappeNavigation.mjs.map +1 -0
  104. package/dist/esm/app/oneFrappeNavigation.native.js +24 -0
  105. package/dist/esm/app/oneFrappeNavigation.native.js.map +1 -0
  106. package/dist/esm/app/rootLayoutShared.mjs +2 -0
  107. package/dist/esm/app/rootLayoutShared.mjs.map +1 -0
  108. package/dist/esm/app/rootLayoutShared.native.js +2 -0
  109. package/dist/esm/app/rootLayoutShared.native.js.map +1 -0
  110. package/dist/esm/app/runtimePublicConfigMiddleware.mjs +25 -0
  111. package/dist/esm/app/runtimePublicConfigMiddleware.mjs.map +1 -0
  112. package/dist/esm/app/runtimePublicConfigMiddleware.native.js +27 -0
  113. package/dist/esm/app/runtimePublicConfigMiddleware.native.js.map +1 -0
  114. package/dist/esm/app/useNativeDeepLinks.mjs +3 -0
  115. package/dist/esm/app/useNativeDeepLinks.mjs.map +1 -0
  116. package/dist/esm/app/useNativeDeepLinks.native.js +28 -0
  117. package/dist/esm/app/useNativeDeepLinks.native.js.map +1 -0
  118. package/dist/esm/healthz.mjs +7 -0
  119. package/dist/esm/healthz.mjs.map +1 -0
  120. package/dist/esm/healthz.native.js +7 -0
  121. package/dist/esm/healthz.native.js.map +1 -0
  122. package/dist/esm/index.mjs +3 -0
  123. package/dist/esm/index.mjs.map +1 -0
  124. package/dist/esm/index.native.js +3 -0
  125. package/dist/esm/index.native.js.map +1 -0
  126. package/dist/esm/layouts/CreateDefaultLayout.mjs +74 -0
  127. package/dist/esm/layouts/CreateDefaultLayout.mjs.map +1 -0
  128. package/dist/esm/layouts/CreateDefaultLayout.native.js +77 -0
  129. package/dist/esm/layouts/CreateDefaultLayout.native.js.map +1 -0
  130. package/dist/esm/layouts/index.mjs +3 -0
  131. package/dist/esm/layouts/index.mjs.map +1 -0
  132. package/dist/esm/layouts/index.native.js +3 -0
  133. package/dist/esm/layouts/index.native.js.map +1 -0
  134. package/package.json +32 -16
  135. package/src/app/CreateApp.frappeAuth.spec.tsx +73 -0
  136. package/src/app/CreateApp.tsx +23 -23
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GET","_request","Response","JSON","stringify","status"],"sources":["../../src/healthz.ts"],"sourcesContent":[null],"mappings":"AACA,eAAsBA,IAAIC,QAAA,EAAmB;EAC3C,OAAO,IAAIC,QAAA,CAASC,IAAA,CAAKC,SAAA,CAAU;IAAEC,MAAA,EAAQ;EAAK,CAAC,CAAC;AACtD","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ async function GET(_request) {
2
+ return new Response(JSON.stringify({
3
+ status: "ok"
4
+ }));
5
+ }
6
+ export { GET };
7
+ //# sourceMappingURL=healthz.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GET","_request","Response","JSON","stringify","status"],"sources":["../../src/healthz.ts"],"sourcesContent":[null],"mappings":"AACA,eAAsBA,IAAIC,QAAA,EAAmB;EAC3C,OAAO,IAAIC,QAAA,CAASC,IAAA,CAAKC,SAAA,CAAU;IACrCC,MAAA","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export * from "./app/index.mjs";
2
+ export * from "./layouts/index.mjs";
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export * from "./app/index.native.js";
2
+ export * from "./layouts/index.native.js";
3
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ import { YStack } from "tamagui";
2
+ import { config } from "@multiplatform.one/platform";
3
+ import { createWithLayout } from "@multiplatform.one/platform";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ function createDefaultLayout(options = {}) {
6
+ const {
7
+ SafeAreaWrapper,
8
+ safeAreaEdges = ["top", "left", "right"],
9
+ safeAreaBackground = "$background",
10
+ KeyboardAvoidingWrapper,
11
+ background = "$background",
12
+ Toast,
13
+ debug = false,
14
+ extraLayouts = []
15
+ } = options;
16
+ function DefaultLayout({
17
+ children
18
+ }) {
19
+ let content = /* @__PURE__ */jsxs(YStack, {
20
+ position: "absolute",
21
+ top: 0,
22
+ right: 0,
23
+ bottom: 0,
24
+ left: 0,
25
+ backgroundColor: background,
26
+ children: [children, Toast && /* @__PURE__ */jsx(Toast, {})]
27
+ });
28
+ if (KeyboardAvoidingWrapper) {
29
+ content = /* @__PURE__ */jsx(KeyboardAvoidingWrapper, {
30
+ flex: 1,
31
+ children: content
32
+ });
33
+ }
34
+ if (SafeAreaWrapper) {
35
+ content = /* @__PURE__ */jsx(SafeAreaWrapper, {
36
+ edges: safeAreaEdges,
37
+ bg: safeAreaBackground,
38
+ children: content
39
+ });
40
+ }
41
+ return content;
42
+ }
43
+ const allExtraLayouts = [...extraLayouts];
44
+ if (debug) {
45
+ const DebugView = typeof debug === "function" ? debug : void 0;
46
+ const withDebug = createWithLayout(({
47
+ children
48
+ }) => {
49
+ if (config.get("DEBUG") !== "1") return /* @__PURE__ */jsx(Fragment, {
50
+ children
51
+ });
52
+ return /* @__PURE__ */jsxs(YStack, {
53
+ position: "absolute",
54
+ top: 0,
55
+ right: 0,
56
+ bottom: 0,
57
+ left: 0,
58
+ children: [children, DebugView && /* @__PURE__ */jsx(YStack, {
59
+ position: "absolute",
60
+ pointerEvents: "box-none",
61
+ children: /* @__PURE__ */jsx(DebugView, {})
62
+ })]
63
+ });
64
+ });
65
+ allExtraLayouts.push(withDebug);
66
+ }
67
+ const withDefaultLayout = createWithLayout(DefaultLayout, allExtraLayouts);
68
+ return {
69
+ DefaultLayout,
70
+ withDefaultLayout
71
+ };
72
+ }
73
+ export { createDefaultLayout };
74
+ //# sourceMappingURL=CreateDefaultLayout.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["YStack","config","createWithLayout","Fragment","jsx","jsxs","createDefaultLayout","options","SafeAreaWrapper","safeAreaEdges","safeAreaBackground","KeyboardAvoidingWrapper","background","Toast","debug","extraLayouts","DefaultLayout","children","content","position","top","right","bottom","left","backgroundColor","flex","edges","bg","allExtraLayouts","DebugView","withDebug","get","pointerEvents","push","withDefaultLayout"],"sources":["../../../src/layouts/CreateDefaultLayout.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,MAAA,QAAc;AACvB,SAASC,MAAA,QAAc;AACvB,SAASC,gBAAA,QAAyC;AA4E5C,SA6BwCC,QAAA,EApB5BC,GAAA,EATZC,IAAA;AAdC,SAASC,oBAAoBC,OAAA,GAAsC,CAAC,GAAG;EAC5E,MAAM;IACJC,eAAA;IACAC,aAAA,GAAgB,CAAC,OAAO,QAAQ,OAAO;IACvCC,kBAAA,GAAqB;IACrBC,uBAAA;IACAC,UAAA,GAAa;IACbC,KAAA;IACAC,KAAA,GAAQ;IACRC,YAAA,GAAe;EACjB,IAAIR,OAAA;EAEJ,SAASS,cAAc;IAAEC;EAAS,GAAuB;IACvD,IAAIC,OAAA,GACF,eAAAb,IAAA,CAACL,MAAA;MACCmB,QAAA,EAAS;MACTC,GAAA,EAAK;MACLC,KAAA,EAAO;MACPC,MAAA,EAAQ;MACRC,IAAA,EAAM;MACNC,eAAA,EAAiBZ,UAAA;MAEhBK,QAAA,GAAAA,QAAA,EACAJ,KAAA,IAAS,eAAAT,GAAA,CAACS,KAAA,IAAM;IAAA,CACnB;IAEF,IAAIF,uBAAA,EAAyB;MAC3BO,OAAA,GAAU,eAAAd,GAAA,CAACO,uBAAA;QAAwBc,IAAA,EAAM;QAAIR,QAAA,EAAAC;MAAA,CAAQ;IACvD;IACA,IAAIV,eAAA,EAAiB;MACnBU,OAAA,GACE,eAAAd,GAAA,CAACI,eAAA;QAAgBkB,KAAA,EAAOjB,aAAA;QAAekB,EAAA,EAAIjB,kBAAA;QACxCO,QAAA,EAAAC;MAAA,CACH;IAEJ;IACA,OAAOA,OAAA;EACT;EAEA,MAAMU,eAAA,GAAkB,CAAC,GAAGb,YAAY;EACxC,IAAID,KAAA,EAAO;IACT,MAAMe,SAAA,GAAY,OAAOf,KAAA,KAAU,aAAaA,KAAA,GAAQ;IACxD,MAAMgB,SAAA,GAAY5B,gBAAA,CAAiB,CAAC;MAAEe;IAAS,MAA+B;MAC5E,IAAIhB,MAAA,CAAO8B,GAAA,CAAI,OAAO,MAAM,KAAK,OAAO,eAAA3B,GAAA,CAAAD,QAAA;QAAGc;MAAA,CAAS;MACpD,OACE,eAAAZ,IAAA,CAACL,MAAA;QAAOmB,QAAA,EAAS;QAAWC,GAAA,EAAK;QAAGC,KAAA,EAAO;QAAGC,MAAA,EAAQ;QAAGC,IAAA,EAAM;QAC5DN,QAAA,GAAAA,QAAA,EACAY,SAAA,IACC,eAAAzB,GAAA,CAACJ,MAAA;UAAOmB,QAAA,EAAS;UAAWa,aAAA,EAAc;UACxCf,QAAA,iBAAAb,GAAA,CAACyB,SAAA,IAAU;QAAA,CACb;MAAA,CAEJ;IAEJ,CAAC;IACDD,eAAA,CAAgBK,IAAA,CAAKH,SAAS;EAChC;EAEA,MAAMI,iBAAA,GAAoBhC,gBAAA,CAAiBc,aAAA,EAAeY,eAAe;EAEzE,OAAO;IAAEZ,aAAA;IAAekB;EAAkB;AAC5C","ignoreList":[]}
@@ -0,0 +1,77 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { YStack } from "tamagui";
3
+ import { config } from "@multiplatform.one/platform";
4
+ import { createWithLayout } from "@multiplatform.one/platform";
5
+ function createDefaultLayout() {
6
+ var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
7
+ var {
8
+ SafeAreaWrapper,
9
+ safeAreaEdges = ["top", "left", "right"],
10
+ safeAreaBackground = "$background",
11
+ KeyboardAvoidingWrapper,
12
+ background = "$background",
13
+ Toast,
14
+ debug = false,
15
+ extraLayouts = []
16
+ } = options;
17
+ function DefaultLayout(param) {
18
+ var {
19
+ children
20
+ } = param;
21
+ var content = /* @__PURE__ */_jsxs(YStack, {
22
+ position: "absolute",
23
+ top: 0,
24
+ right: 0,
25
+ bottom: 0,
26
+ left: 0,
27
+ backgroundColor: background,
28
+ children: [children, Toast && /* @__PURE__ */_jsx(Toast, {})]
29
+ });
30
+ if (KeyboardAvoidingWrapper) {
31
+ content = /* @__PURE__ */_jsx(KeyboardAvoidingWrapper, {
32
+ flex: 1,
33
+ children: content
34
+ });
35
+ }
36
+ if (SafeAreaWrapper) {
37
+ content = /* @__PURE__ */_jsx(SafeAreaWrapper, {
38
+ edges: safeAreaEdges,
39
+ bg: safeAreaBackground,
40
+ children: content
41
+ });
42
+ }
43
+ return content;
44
+ }
45
+ var allExtraLayouts = [...extraLayouts];
46
+ if (debug) {
47
+ var DebugView = typeof debug === "function" ? debug : void 0;
48
+ var withDebug = createWithLayout(function (param) {
49
+ var {
50
+ children
51
+ } = param;
52
+ if (config.get("DEBUG") !== "1") return /* @__PURE__ */_jsx(_Fragment, {
53
+ children
54
+ });
55
+ return /* @__PURE__ */_jsxs(YStack, {
56
+ position: "absolute",
57
+ top: 0,
58
+ right: 0,
59
+ bottom: 0,
60
+ left: 0,
61
+ children: [children, DebugView && /* @__PURE__ */_jsx(YStack, {
62
+ position: "absolute",
63
+ pointerEvents: "box-none",
64
+ children: /* @__PURE__ */_jsx(DebugView, {})
65
+ })]
66
+ });
67
+ });
68
+ allExtraLayouts.push(withDebug);
69
+ }
70
+ var withDefaultLayout = createWithLayout(DefaultLayout, allExtraLayouts);
71
+ return {
72
+ DefaultLayout,
73
+ withDefaultLayout
74
+ };
75
+ }
76
+ export { createDefaultLayout };
77
+ //# sourceMappingURL=CreateDefaultLayout.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","YStack","config","createWithLayout","createDefaultLayout","options","arguments","length","SafeAreaWrapper","safeAreaEdges","safeAreaBackground","KeyboardAvoidingWrapper","background","Toast","debug","extraLayouts","DefaultLayout","param","children","content","position","top","right","bottom","left","backgroundColor","flex","edges","bg","allExtraLayouts","DebugView","withDebug","get"],"sources":["../../../src/layouts/CreateDefaultLayout.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,GAAA,IAAAC,IAAA,EAAAC,IAAc,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AACvB,SAASC,MAAA,QAAc;AACvB,SAASC,MAAA,qCAAyC;AA4E5C,SA6BwCC,gBA7BxC;AAdC,SAASC,oBAAA,EAAoB;EAClC,IAAAC,OAAM,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;EAAA,IACJ;IAAAE,eAAA;IAAAC,aAAA,IACA,OACA,QACA;IACAC,kBAAa;IAAAC,uBAAA;IAAAC,UAAA;IAAAC,KAAA;IAAAC,KAAA;IAAAC,YAAA;EAAA,IAAAV,OAAA;EAAA,SACbW,cAAAC,KAAA;IACA;MAAAC;IAAQ,IAAAD,KAAA;IACR,IAAAE,OAAA,kBAAgBrB,KAAA,CAAAG,MAAA;MACdmB,QAAA;MAEJC,GAAA,EAAS;MACPC,KAAI;MACDC,MAAA;MAAAC,IAAA;MAAAC,eACU,EAAAb,UAAA;MAAAM,QACJ,GACLA,QAAO,EACPL,KAAA,IAAQ,eAAAjB,IAAA,CAAAiB,KAAA;IACF;IACW,IAEhBF,uBAAA;MAAAQ,OAAA,kBAAAvB,IAAA,CAAAe,uBAAA;QAAAe,IACA;QAAgBR,QAAA,EAAAC;MAAA;IACnB;IAEF,IAAIX,eAAA;MACFW,OAAA,GAAU,eAAAvB,IAAC,CAAAY,eAAA;QACbmB,KAAA,EAAAlB,aAAA;QACImB,EAAA,EAAAlB,kBAAiB;QACnBQ,QACE,EAAAC;MAIJ;IACA;IACF,OAAAA,OAAA;EAEA;EACA,IAAIU,eAAO,IACT,GAAAd,YAAM,CACN;EACE,IAAAD,KAAI;IACJ,IAAAgB,SACE,UAAAhB,KAAA,KAAC,UAAO,GAAAA,KAAS;IACd,IAAAiB,SAAA,GAAA5B,gBAAA,WAAAc,KAAA;MAAA,IACA;QAAAC;MACC,IAAAD,KAAA;MAEA,IAEJf,MAAA,CAAA8B,GAAA,yCAAApC,IAAA,CAAAI,SAAA;QAEHkB;MACD;MACF,sBAAApB,KAAA,CAAAG,MAAA;QAEMmB,QAAA,YAAoB;QAE1BC,GAAS;QACXC,KAAA","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import { createDefaultLayout } from "./CreateDefaultLayout.mjs";
2
+ export { createDefaultLayout };
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createDefaultLayout"],"sources":["../../../src/layouts/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,mBAAA,QAA2B","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import { createDefaultLayout } from "./CreateDefaultLayout.native.js";
2
+ export { createDefaultLayout };
3
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createDefaultLayout"],"sources":["../../../src/layouts/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,mBAAA,QAA2B","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/core",
3
- "version": "7.83.1",
3
+ "version": "7.83.2",
4
4
  "description": "Core framework shell, provider composition, and layout factories for multiplatform.one",
5
5
  "keywords": [
6
6
  "app",
@@ -16,6 +16,7 @@
16
16
  },
17
17
  "source": "src/index.ts",
18
18
  "files": [
19
+ "dist",
19
20
  "src",
20
21
  "types",
21
22
  "!types/.tsbuildinfo"
@@ -27,25 +28,39 @@
27
28
  "exports": {
28
29
  "./package.json": "./package.json",
29
30
  "./healthz": {
30
- "types": "./types/healthz.d.ts",
31
31
  "source": "./src/healthz.ts",
32
- "default": "./src/healthz.ts"
32
+ "types": "./types/healthz.d.ts",
33
+ "react-native": {
34
+ "types": "./types/healthz.d.ts",
35
+ "import": "./dist/esm/healthz.native.js",
36
+ "require": "./dist/cjs/healthz.native.js"
37
+ },
38
+ "import": "./dist/esm/healthz.mjs",
39
+ "require": "./dist/cjs/healthz.cjs",
40
+ "default": "./dist/esm/healthz.mjs"
33
41
  },
34
42
  ".": {
35
43
  "source": "./src/index.ts",
36
44
  "types": "./types/index.d.ts",
37
- "default": "./src/index.ts"
45
+ "react-native": {
46
+ "types": "./types/index.d.ts",
47
+ "import": "./dist/esm/index.native.js",
48
+ "require": "./dist/cjs/index.native.js"
49
+ },
50
+ "import": "./dist/esm/index.mjs",
51
+ "require": "./dist/cjs/index.cjs",
52
+ "default": "./dist/esm/index.mjs"
38
53
  }
39
54
  },
40
55
  "publishConfig": {
41
56
  "access": "public"
42
57
  },
43
58
  "dependencies": {
44
- "@multiplatform.one/i18n": "^7.83.1",
45
- "@multiplatform.one/logger": "^7.83.1",
46
- "@multiplatform.one/platform": "^7.83.1",
47
- "@multiplatform.one/store": "^7.83.1",
48
- "@multiplatform.one/theme": "^7.83.1",
59
+ "@multiplatform.one/i18n": "^7.83.2",
60
+ "@multiplatform.one/logger": "^7.83.2",
61
+ "@multiplatform.one/platform": "^7.83.2",
62
+ "@multiplatform.one/store": "^7.83.2",
63
+ "@multiplatform.one/theme": "^7.83.2",
49
64
  "@tanstack/devtools-utils": "^0.4.0",
50
65
  "@tanstack/pacer-devtools": "1.6.0",
51
66
  "@tanstack/react-devtools": "0.10.13",
@@ -53,9 +68,10 @@
53
68
  "react-cookie": "^8.1.2"
54
69
  },
55
70
  "devDependencies": {
56
- "@multiplatform.one/frappe": "7.83.1",
57
- "@multiplatform.one/web3": "7.83.1",
71
+ "@multiplatform.one/frappe": "7.83.2",
72
+ "@multiplatform.one/web3": "7.83.2",
58
73
  "@sentry/react": "^10.51.0",
74
+ "@tamagui/build": "2.7.6",
59
75
  "@tanstack/react-query": "^5.104.3",
60
76
  "@tanstack/react-query-devtools": "^5.104.3",
61
77
  "@vxrn/color-scheme": "~1.16.5",
@@ -72,10 +88,10 @@
72
88
  "vitest": "^4.1.5"
73
89
  },
74
90
  "peerDependencies": {
75
- "@multiplatform.one/frappe": "^7.83.1",
76
- "@multiplatform.one/frappe-ui": "^7.83.1",
77
- "@multiplatform.one/keycloak": "^7.83.1",
78
- "@multiplatform.one/web3": "^7.83.1",
91
+ "@multiplatform.one/frappe": "^7.83.2",
92
+ "@multiplatform.one/frappe-ui": "^7.83.2",
93
+ "@multiplatform.one/keycloak": "^7.83.2",
94
+ "@multiplatform.one/web3": "^7.83.2",
79
95
  "@sentry/react": "^9.0.0 || ^10.0.0",
80
96
  "@tanstack/react-query": "^5.0.0",
81
97
  "@tanstack/react-query-devtools": "^5.0.0",
@@ -114,7 +130,7 @@
114
130
  },
115
131
  "scripts": {
116
132
  "typecheck": "tsgo --noEmit",
117
- "build": "rm -rf types 2>/dev/null && tsc -p tsconfig.build.json",
133
+ "build": "rm -rf dist types 2>/dev/null && tamagui-build --ts-project ./tsconfig.build.json --exclude '\\.spec\\.|\\.test\\.|\\.stories\\.'",
118
134
  "test": "vitest run"
119
135
  }
120
136
  }
@@ -0,0 +1,73 @@
1
+ // @vitest-environment happy-dom
2
+ import { act, cleanup, render, screen } from "@testing-library/react";
3
+ import type { PropsWithChildren } from "react";
4
+ import { afterEach, describe, expect, it, vi } from "vitest";
5
+ import { createApp } from "./CreateApp";
6
+
7
+ const { env, provided } = vi.hoisted(() => ({
8
+ env: {} as Record<string, string>,
9
+ provided: { auths: [] as unknown[] },
10
+ }));
11
+ vi.mock("@multiplatform.one/platform", () => ({
12
+ config: { get: (key: string) => env[key] },
13
+ isDev: false,
14
+ isWeb: true,
15
+ }));
16
+ vi.mock("@multiplatform.one/theme", () => ({
17
+ ThemeProvider: ({ children }: PropsWithChildren) => children,
18
+ }));
19
+ vi.mock("@multiplatform.one/frappe-ui", () => ({
20
+ FrappeProvider: ({ children, auth }: PropsWithChildren<{ auth?: unknown }>) => {
21
+ provided.auths.push(auth);
22
+ return children;
23
+ },
24
+ }));
25
+ vi.mock("./TanstackProvider", () => ({ createTanstackProvider: vi.fn() }));
26
+ vi.mock("./loadWalletProvider", () => ({ default: () => null }));
27
+ vi.mock("one", () => ({ usePathname: () => "/", useRouter: () => ({ push: vi.fn() }) }));
28
+ vi.mock("@multiplatform.one/keycloak", () => ({
29
+ getKeycloakBearerToken: async () => undefined,
30
+ KeycloakProvider: ({ children }: PropsWithChildren) => (
31
+ <>
32
+ <span data-testid="keycloak">keycloak</span>
33
+ {children}
34
+ </>
35
+ ),
36
+ }));
37
+
38
+ afterEach(() => {
39
+ cleanup();
40
+ provided.auths = [];
41
+ for (const key of Object.keys(env)) delete env[key];
42
+ });
43
+
44
+ describe("createApp frappe auth (FZ-7374)", () => {
45
+ it("hands FrappeProvider the same auth on every re-render, so its config holds", async () => {
46
+ env.BASE_URL = "https://app.test";
47
+ const { AppProvider } = createApp({
48
+ keycloak: { enabled: true },
49
+ frappe: { enabled: true, baseURL: "https://bench.test", realtime: false },
50
+ });
51
+ let view: ReturnType<typeof render> | undefined;
52
+ await act(async () => {
53
+ view = render(
54
+ <AppProvider>
55
+ <span>0</span>
56
+ </AppProvider>,
57
+ );
58
+ });
59
+ await screen.findByTestId("keycloak");
60
+ for (const pass of [1, 2]) {
61
+ await act(async () => {
62
+ view?.rerender(
63
+ <AppProvider>
64
+ <span>{pass}</span>
65
+ </AppProvider>,
66
+ );
67
+ });
68
+ }
69
+ expect(provided.auths.length).toBeGreaterThanOrEqual(3);
70
+ expect(provided.auths[0]).toBeTruthy();
71
+ expect(new Set(provided.auths).size).toBe(1);
72
+ });
73
+ });
@@ -400,6 +400,29 @@ export function createApp(appConfig: CreateAppConfig) {
400
400
  if (appConfig.frappe) {
401
401
  const cfg: FrappeConfig = appConfig.frappe === true ? {} : appConfig.frappe;
402
402
 
403
+ // Keycloak auth uses ONE transport on every platform: the HttpClient
404
+ // and the Socket.IO handshake send `Authorization: Bearer <keycloak
405
+ // access token>`, fetched lazily from better-auth's /get-access-token
406
+ // (which refreshes server-side; SecureStore jar on native, session
407
+ // cookie on web). The bench's frappe_keycloak auth hook validates the
408
+ // JWT. Cookies alone can't cover realtime: frappe's socketio middleware
409
+ // only accepts a frappe `sid` cookie or an Authorization header, so the
410
+ // better-auth account cookie never authenticated the socket on web.
411
+ // When signed out the getter resolves undefined and requests fall back
412
+ // to guest.
413
+ const auth =
414
+ cfg.auth ??
415
+ (appConfig.keycloak
416
+ ? {
417
+ useToken: true,
418
+ type: "Bearer",
419
+ token: async () => {
420
+ const mod = await import("@multiplatform.one/keycloak");
421
+ return (await mod.getKeycloakBearerToken()) || "";
422
+ },
423
+ }
424
+ : undefined);
425
+
403
426
  function FrappeProviderWrapper({ children }: PropsWithChildren) {
404
427
  const configuredCatchUp = config.get("FRAPPE_CATCH_UP_STRATEGY");
405
428
  const configuredWrite = config.get("FRAPPE_WRITE_STRATEGY");
@@ -424,29 +447,6 @@ export function createApp(appConfig: CreateAppConfig) {
424
447
  const socketPort =
425
448
  cfg.socketPort ?? frappeSocketPort(config.get("FRAPPE_SOCKETIO_PORT"), baseURL);
426
449
 
427
- // Keycloak auth uses ONE transport on every platform: the HttpClient
428
- // and the Socket.IO handshake send `Authorization: Bearer <keycloak
429
- // access token>`, fetched lazily from better-auth's /get-access-token
430
- // (which refreshes server-side; SecureStore jar on native, session
431
- // cookie on web). The bench's frappe_keycloak auth hook validates the
432
- // JWT. Cookies alone can't cover realtime: frappe's socketio middleware
433
- // only accepts a frappe `sid` cookie or an Authorization header, so the
434
- // better-auth account cookie never authenticated the socket on web.
435
- // When signed out the getter resolves undefined and requests fall back
436
- // to guest.
437
- const auth =
438
- cfg.auth ??
439
- (appConfig.keycloak
440
- ? {
441
- useToken: true,
442
- type: "Bearer",
443
- token: async () => {
444
- const mod = await import("@multiplatform.one/keycloak");
445
- return (await mod.getKeycloakBearerToken()) || "";
446
- },
447
- }
448
- : undefined);
449
-
450
450
  return (
451
451
  <FrappeProvider
452
452
  baseURL={baseURL}