@vishalsharma7nov/react-native-proto 0.2.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 (190) hide show
  1. package/android/src/main/java/com/vishalsharma7nov/reactnativeproto/ReactNativeProtoNativeGrpcModule.java +142 -0
  2. package/app.plugin.js +63 -0
  3. package/bin/react-native-proto.js +956 -0
  4. package/ios/ReactNativeProtoNativeGrpc.m +129 -0
  5. package/lib/commonjs/auth.js +72 -0
  6. package/lib/commonjs/auth.js.map +1 -0
  7. package/lib/commonjs/client-factory.js +81 -0
  8. package/lib/commonjs/client-factory.js.map +1 -0
  9. package/lib/commonjs/codecs.js +41 -0
  10. package/lib/commonjs/codecs.js.map +1 -0
  11. package/lib/commonjs/connect/envelope.js +100 -0
  12. package/lib/commonjs/connect/envelope.js.map +1 -0
  13. package/lib/commonjs/connect/errors.js +71 -0
  14. package/lib/commonjs/connect/errors.js.map +1 -0
  15. package/lib/commonjs/errors.js +54 -0
  16. package/lib/commonjs/errors.js.map +1 -0
  17. package/lib/commonjs/generated/create-api.js +29 -0
  18. package/lib/commonjs/generated/create-api.js.map +1 -0
  19. package/lib/commonjs/generated/message-types.js +2 -0
  20. package/lib/commonjs/generated/message-types.js.map +1 -0
  21. package/lib/commonjs/generated/messages.js +47 -0
  22. package/lib/commonjs/generated/messages.js.map +1 -0
  23. package/lib/commonjs/generated/messages.pb.js +2787 -0
  24. package/lib/commonjs/generated/messages.pb.js.map +1 -0
  25. package/lib/commonjs/generated/method-map.js +68 -0
  26. package/lib/commonjs/generated/method-map.js.map +1 -0
  27. package/lib/commonjs/index.js +283 -0
  28. package/lib/commonjs/index.js.map +1 -0
  29. package/lib/commonjs/interceptors.js +19 -0
  30. package/lib/commonjs/interceptors.js.map +1 -0
  31. package/lib/commonjs/logging.js +54 -0
  32. package/lib/commonjs/logging.js.map +1 -0
  33. package/lib/commonjs/metro/index.js +35 -0
  34. package/lib/commonjs/metro/index.js.map +1 -0
  35. package/lib/commonjs/metro/transformer.js +33 -0
  36. package/lib/commonjs/metro/transformer.js.map +1 -0
  37. package/lib/commonjs/mock-server/index.js +125 -0
  38. package/lib/commonjs/mock-server/index.js.map +1 -0
  39. package/lib/commonjs/native-grpc/index.js +242 -0
  40. package/lib/commonjs/native-grpc/index.js.map +1 -0
  41. package/lib/commonjs/offline-queue.js +137 -0
  42. package/lib/commonjs/offline-queue.js.map +1 -0
  43. package/lib/commonjs/package.json +1 -0
  44. package/lib/commonjs/path-templates.js +44 -0
  45. package/lib/commonjs/path-templates.js.map +1 -0
  46. package/lib/commonjs/react-query/index.js +30 -0
  47. package/lib/commonjs/react-query/index.js.map +1 -0
  48. package/lib/commonjs/streaming.js +251 -0
  49. package/lib/commonjs/streaming.js.map +1 -0
  50. package/lib/commonjs/transport.js +323 -0
  51. package/lib/commonjs/transport.js.map +1 -0
  52. package/lib/commonjs/types.js +6 -0
  53. package/lib/commonjs/types.js.map +1 -0
  54. package/lib/commonjs/validation/zod.js +48 -0
  55. package/lib/commonjs/validation/zod.js.map +1 -0
  56. package/lib/commonjs/version-check.js +102 -0
  57. package/lib/commonjs/version-check.js.map +1 -0
  58. package/lib/module/auth.js +67 -0
  59. package/lib/module/auth.js.map +1 -0
  60. package/lib/module/client-factory.js +77 -0
  61. package/lib/module/client-factory.js.map +1 -0
  62. package/lib/module/codecs.js +36 -0
  63. package/lib/module/codecs.js.map +1 -0
  64. package/lib/module/connect/envelope.js +93 -0
  65. package/lib/module/connect/envelope.js.map +1 -0
  66. package/lib/module/connect/errors.js +65 -0
  67. package/lib/module/connect/errors.js.map +1 -0
  68. package/lib/module/errors.js +46 -0
  69. package/lib/module/errors.js.map +1 -0
  70. package/lib/module/generated/create-api.js +13 -0
  71. package/lib/module/generated/create-api.js.map +1 -0
  72. package/lib/module/generated/message-types.js +2 -0
  73. package/lib/module/generated/message-types.js.map +1 -0
  74. package/lib/module/generated/messages.js +43 -0
  75. package/lib/module/generated/messages.js.map +1 -0
  76. package/lib/module/generated/messages.pb.js +2787 -0
  77. package/lib/module/generated/messages.pb.js.map +1 -0
  78. package/lib/module/generated/method-map.js +64 -0
  79. package/lib/module/generated/method-map.js.map +1 -0
  80. package/lib/module/index.js +53 -0
  81. package/lib/module/index.js.map +1 -0
  82. package/lib/module/interceptors.js +15 -0
  83. package/lib/module/interceptors.js.map +1 -0
  84. package/lib/module/logging.js +50 -0
  85. package/lib/module/logging.js.map +1 -0
  86. package/lib/module/metro/index.js +25 -0
  87. package/lib/module/metro/index.js.map +1 -0
  88. package/lib/module/metro/transformer.js +29 -0
  89. package/lib/module/metro/transformer.js.map +1 -0
  90. package/lib/module/mock-server/index.js +120 -0
  91. package/lib/module/mock-server/index.js.map +1 -0
  92. package/lib/module/native-grpc/index.js +233 -0
  93. package/lib/module/native-grpc/index.js.map +1 -0
  94. package/lib/module/offline-queue.js +132 -0
  95. package/lib/module/offline-queue.js.map +1 -0
  96. package/lib/module/package.json +1 -0
  97. package/lib/module/path-templates.js +39 -0
  98. package/lib/module/path-templates.js.map +1 -0
  99. package/lib/module/react-query/index.js +25 -0
  100. package/lib/module/react-query/index.js.map +1 -0
  101. package/lib/module/streaming.js +246 -0
  102. package/lib/module/streaming.js.map +1 -0
  103. package/lib/module/transport.js +316 -0
  104. package/lib/module/transport.js.map +1 -0
  105. package/lib/module/types.js +4 -0
  106. package/lib/module/types.js.map +1 -0
  107. package/lib/module/validation/zod.js +43 -0
  108. package/lib/module/validation/zod.js.map +1 -0
  109. package/lib/module/version-check.js +93 -0
  110. package/lib/module/version-check.js.map +1 -0
  111. package/lib/typescript/src/auth.d.ts +26 -0
  112. package/lib/typescript/src/auth.d.ts.map +1 -0
  113. package/lib/typescript/src/client-factory.d.ts +7 -0
  114. package/lib/typescript/src/client-factory.d.ts.map +1 -0
  115. package/lib/typescript/src/codecs.d.ts +5 -0
  116. package/lib/typescript/src/codecs.d.ts.map +1 -0
  117. package/lib/typescript/src/connect/envelope.d.ts +18 -0
  118. package/lib/typescript/src/connect/envelope.d.ts.map +1 -0
  119. package/lib/typescript/src/connect/errors.d.ts +11 -0
  120. package/lib/typescript/src/connect/errors.d.ts.map +1 -0
  121. package/lib/typescript/src/errors.d.ts +21 -0
  122. package/lib/typescript/src/errors.d.ts.map +1 -0
  123. package/lib/typescript/src/generated/create-api.d.ts +34 -0
  124. package/lib/typescript/src/generated/create-api.d.ts.map +1 -0
  125. package/lib/typescript/src/generated/message-types.d.ts +54 -0
  126. package/lib/typescript/src/generated/message-types.d.ts.map +1 -0
  127. package/lib/typescript/src/generated/messages.d.ts +17 -0
  128. package/lib/typescript/src/generated/messages.d.ts.map +1 -0
  129. package/lib/typescript/src/generated/method-map.d.ts +7 -0
  130. package/lib/typescript/src/generated/method-map.d.ts.map +1 -0
  131. package/lib/typescript/src/index.d.ts +53 -0
  132. package/lib/typescript/src/index.d.ts.map +1 -0
  133. package/lib/typescript/src/interceptors.d.ts +17 -0
  134. package/lib/typescript/src/interceptors.d.ts.map +1 -0
  135. package/lib/typescript/src/logging.d.ts +16 -0
  136. package/lib/typescript/src/logging.d.ts.map +1 -0
  137. package/lib/typescript/src/metro/index.d.ts +15 -0
  138. package/lib/typescript/src/metro/index.d.ts.map +1 -0
  139. package/lib/typescript/src/metro/transformer.d.ts +16 -0
  140. package/lib/typescript/src/metro/transformer.d.ts.map +1 -0
  141. package/lib/typescript/src/mock-server/index.d.ts +27 -0
  142. package/lib/typescript/src/mock-server/index.d.ts.map +1 -0
  143. package/lib/typescript/src/native-grpc/index.d.ts +36 -0
  144. package/lib/typescript/src/native-grpc/index.d.ts.map +1 -0
  145. package/lib/typescript/src/offline-queue.d.ts +47 -0
  146. package/lib/typescript/src/offline-queue.d.ts.map +1 -0
  147. package/lib/typescript/src/path-templates.d.ts +17 -0
  148. package/lib/typescript/src/path-templates.d.ts.map +1 -0
  149. package/lib/typescript/src/react-query/index.d.ts +14 -0
  150. package/lib/typescript/src/react-query/index.d.ts.map +1 -0
  151. package/lib/typescript/src/streaming.d.ts +10 -0
  152. package/lib/typescript/src/streaming.d.ts.map +1 -0
  153. package/lib/typescript/src/transport.d.ts +19 -0
  154. package/lib/typescript/src/transport.d.ts.map +1 -0
  155. package/lib/typescript/src/types.d.ts +78 -0
  156. package/lib/typescript/src/types.d.ts.map +1 -0
  157. package/lib/typescript/src/validation/zod.d.ts +33 -0
  158. package/lib/typescript/src/validation/zod.d.ts.map +1 -0
  159. package/lib/typescript/src/version-check.d.ts +40 -0
  160. package/lib/typescript/src/version-check.d.ts.map +1 -0
  161. package/metro/index.js +23 -0
  162. package/metro/transformer.js +21 -0
  163. package/package.json +144 -0
  164. package/react-native-proto.podspec +15 -0
  165. package/src/auth.ts +97 -0
  166. package/src/client-factory.ts +109 -0
  167. package/src/codecs.ts +42 -0
  168. package/src/connect/envelope.ts +112 -0
  169. package/src/connect/errors.ts +86 -0
  170. package/src/errors.ts +81 -0
  171. package/src/generated/create-api.ts +40 -0
  172. package/src/generated/message-types.ts +63 -0
  173. package/src/generated/messages.pb.js +3207 -0
  174. package/src/generated/messages.ts +45 -0
  175. package/src/generated/method-map.ts +71 -0
  176. package/src/index.ts +113 -0
  177. package/src/interceptors.ts +32 -0
  178. package/src/logging.ts +67 -0
  179. package/src/metro/index.ts +27 -0
  180. package/src/metro/transformer.ts +38 -0
  181. package/src/mock-server/index.ts +164 -0
  182. package/src/native-grpc/index.ts +302 -0
  183. package/src/offline-queue.ts +160 -0
  184. package/src/path-templates.ts +65 -0
  185. package/src/react-query/index.ts +40 -0
  186. package/src/streaming.ts +326 -0
  187. package/src/transport.ts +427 -0
  188. package/src/types.ts +94 -0
  189. package/src/validation/zod.ts +75 -0
  190. package/src/version-check.ts +121 -0
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createProtoMetroConfig = createProtoMetroConfig;
7
+ Object.defineProperty(exports, "transform", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _transformer.transform;
11
+ }
12
+ });
13
+ var _transformer = require("./transformer");
14
+ /**
15
+ * Metro helper: treat .proto files as raw text assets for tooling/debug.
16
+ * Prefer `react-native-proto generate` for production clients.
17
+ */
18
+ function createProtoMetroConfig(baseConfig) {
19
+ const resolver = baseConfig.resolver ?? {};
20
+ const sourceExts = new Set([...(resolver.sourceExts ?? []), 'proto']);
21
+ const assetExts = (resolver.assetExts ?? []).filter(ext => ext !== 'proto');
22
+ return {
23
+ ...baseConfig,
24
+ resolver: {
25
+ ...resolver,
26
+ sourceExts: Array.from(sourceExts),
27
+ assetExts
28
+ },
29
+ transformer: {
30
+ ...baseConfig.transformer,
31
+ babelTransformerPath: require.resolve('./transformer')
32
+ }
33
+ };
34
+ }
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_transformer","require","createProtoMetroConfig","baseConfig","resolver","sourceExts","Set","assetExts","filter","ext","Array","from","transformer","babelTransformerPath","resolve"],"sourceRoot":"../../../src","sources":["metro/index.ts"],"mappings":";;;;;;;;;;;;AA0BA,IAAAA,YAAA,GAAAC,OAAA;AA1BA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CAACC,UAGtC,EAAqB;EACpB,MAAMC,QAAQ,GAAGD,UAAU,CAACC,QAAQ,IAAI,CAAC,CAAC;EAC1C,MAAMC,UAAU,GAAG,IAAIC,GAAG,CAAC,CAAC,IAAIF,QAAQ,CAACC,UAAU,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;EACrE,MAAME,SAAS,GAAG,CAACH,QAAQ,CAACG,SAAS,IAAI,EAAE,EAAEC,MAAM,CAAEC,GAAG,IAAKA,GAAG,KAAK,OAAO,CAAC;EAE7E,OAAO;IACL,GAAGN,UAAU;IACbC,QAAQ,EAAE;MACR,GAAGA,QAAQ;MACXC,UAAU,EAAEK,KAAK,CAACC,IAAI,CAACN,UAAU,CAAC;MAClCE;IACF,CAAC;IACDK,WAAW,EAAE;MACX,GAAGT,UAAU,CAACS,WAAW;MACzBC,oBAAoB,EAAEZ,OAAO,CAACa,OAAO,CAAC,eAAe;IACvD;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.transform = transform;
7
+ /**
8
+ * Minimal Metro transformer for .proto files.
9
+ * Non-proto files fall through to the upstream Babel transformer when present.
10
+ */
11
+ async function transform(args) {
12
+ const {
13
+ filename,
14
+ src
15
+ } = args;
16
+ if (!filename.endsWith('.proto')) {
17
+ try {
18
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
19
+ const upstream = require('@react-native/metro-babel-transformer');
20
+ if (upstream && typeof upstream.transform === 'function') {
21
+ return upstream.transform(args);
22
+ }
23
+ } catch {
24
+ // Fall through to identity JS export of source text
25
+ }
26
+ }
27
+ const escaped = JSON.stringify(src);
28
+ return {
29
+ code: `module.exports = ${escaped};`,
30
+ map: null
31
+ };
32
+ }
33
+ //# sourceMappingURL=transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["transform","args","filename","src","endsWith","upstream","require","escaped","JSON","stringify","code","map"],"sourceRoot":"../../../src","sources":["metro/transformer.ts"],"mappings":";;;;;;AAWA;AACA;AACA;AACA;AACO,eAAeA,SAASA,CAC7BC,IAAmB,EACO;EAC1B,MAAM;IAAEC,QAAQ;IAAEC;EAAI,CAAC,GAAGF,IAAI;EAE9B,IAAI,CAACC,QAAQ,CAACE,QAAQ,CAAC,QAAQ,CAAC,EAAE;IAChC,IAAI;MACF;MACA,MAAMC,QAAQ,GAAGC,OAAO,CAAC,uCAAuC,CAAC;MACjE,IAAID,QAAQ,IAAI,OAAOA,QAAQ,CAACL,SAAS,KAAK,UAAU,EAAE;QACxD,OAAOK,QAAQ,CAACL,SAAS,CAACC,IAAI,CAAC;MACjC;IACF,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;EAEA,MAAMM,OAAO,GAAGC,IAAI,CAACC,SAAS,CAACN,GAAG,CAAC;EACnC,OAAO;IACLO,IAAI,EAAE,oBAAoBH,OAAO,GAAG;IACpCI,GAAG,EAAE;EACP,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createMockServer = createMockServer;
7
+ var _http = _interopRequireDefault(require("http"));
8
+ var _errors = require("../errors");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ function matchEntry(methodMap, urlPath) {
11
+ const normalized = urlPath.replace(/^\//, "");
12
+ for (let i = 0; i < methodMap.length; i += 1) {
13
+ const entry = methodMap[i];
14
+ if (!entry) continue;
15
+ const connectPath = `${entry.packageName ? `${entry.packageName}.` : ""}${entry.serviceName}/${entry.methodName}`;
16
+ if (normalized === connectPath || normalized === entry.rpcPath || urlPath.endsWith(`/${entry.methodName}`)) {
17
+ return entry;
18
+ }
19
+ }
20
+ return undefined;
21
+ }
22
+ async function readRequestBody(req) {
23
+ const chunks = [];
24
+ for await (const chunk of req) {
25
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
26
+ }
27
+ return Buffer.concat(chunks);
28
+ }
29
+
30
+ /**
31
+ * Tiny local protobuf HTTP mock driven by the same method map + codecs as the client.
32
+ * Useful for demos and integration tests.
33
+ */
34
+ function createMockServer(options) {
35
+ const host = options.host ?? "127.0.0.1";
36
+ const port = options.port ?? 0;
37
+ const contentType = options.contentType ?? "application/x-protobuf";
38
+ const handlers = options.handlers ?? {};
39
+ const server = _http.default.createServer(async (req, res) => {
40
+ try {
41
+ if (req.method !== "POST" || !req.url) {
42
+ res.writeHead(404);
43
+ res.end("Not found");
44
+ return;
45
+ }
46
+ const url = new URL(req.url, `http://${host}`);
47
+ const entry = matchEntry(options.methodMap, url.pathname);
48
+ if (!entry) {
49
+ res.writeHead(404, {
50
+ "Content-Type": "text/plain"
51
+ });
52
+ res.end(`Unknown RPC path: ${url.pathname}`);
53
+ return;
54
+ }
55
+ const requestCodec = options.codecs.get(entry.requestType);
56
+ const responseCodec = options.codecs.get(entry.responseType);
57
+ if (!requestCodec || !responseCodec) {
58
+ res.writeHead(500);
59
+ res.end("Missing codecs");
60
+ return;
61
+ }
62
+ const raw = await readRequestBody(req);
63
+ const decoded = requestCodec.decode(new Uint8Array(raw));
64
+ const handler = handlers[entry.rpcPath] || handlers[entry.methodName] || handlers[`${entry.serviceName}/${entry.methodName}`];
65
+ let result;
66
+ if (handler) {
67
+ const maybe = await handler(decoded, entry);
68
+ const asyncIter = maybe;
69
+ if (maybe && typeof maybe === "object" && typeof asyncIter[Symbol.asyncIterator] === "function") {
70
+ let first;
71
+ for await (const msg of asyncIter) {
72
+ first = msg;
73
+ break;
74
+ }
75
+ result = first ?? {};
76
+ } else {
77
+ result = maybe ?? {};
78
+ }
79
+ } else {
80
+ result = {};
81
+ }
82
+ const bytes = responseCodec.encode(result);
83
+ res.writeHead(200, {
84
+ "Content-Type": contentType,
85
+ "Content-Length": String(bytes.byteLength)
86
+ });
87
+ res.end(Buffer.from(bytes));
88
+ } catch (error) {
89
+ const message = error instanceof Error ? error.message : "Mock server error";
90
+ res.writeHead(500, {
91
+ "Content-Type": "text/plain"
92
+ });
93
+ res.end(message);
94
+ }
95
+ });
96
+ return {
97
+ server,
98
+ listen() {
99
+ return new Promise((resolve, reject) => {
100
+ server.once("error", reject);
101
+ server.listen(port, host, () => {
102
+ const address = server.address();
103
+ if (!address || typeof address === "string") {
104
+ reject(new _errors.ProtoClientError({
105
+ code: "INTERNAL",
106
+ message: "Failed to bind mock server"
107
+ }));
108
+ return;
109
+ }
110
+ resolve({
111
+ host: address.address,
112
+ port: address.port,
113
+ baseUrl: `http://${address.address}:${address.port}`
114
+ });
115
+ });
116
+ });
117
+ },
118
+ close() {
119
+ return new Promise((resolve, reject) => {
120
+ server.close(err => err ? reject(err) : resolve());
121
+ });
122
+ }
123
+ };
124
+ }
125
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_http","_interopRequireDefault","require","_errors","e","__esModule","default","matchEntry","methodMap","urlPath","normalized","replace","i","length","entry","connectPath","packageName","serviceName","methodName","rpcPath","endsWith","undefined","readRequestBody","req","chunks","chunk","push","Buffer","isBuffer","from","concat","createMockServer","options","host","port","contentType","handlers","server","http","createServer","res","method","url","writeHead","end","URL","pathname","requestCodec","codecs","get","requestType","responseCodec","responseType","raw","decoded","decode","Uint8Array","handler","result","maybe","asyncIter","Symbol","asyncIterator","first","msg","bytes","encode","String","byteLength","error","message","Error","listen","Promise","resolve","reject","once","address","ProtoClientError","code","baseUrl","close","err"],"sourceRoot":"../../../src","sources":["mock-server/index.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.base64ToBytes = base64ToBytes;
7
+ exports.bytesToBase64 = bytesToBase64;
8
+ exports.installNativeGrpcBridgeFromNativeModule = installNativeGrpcBridgeFromNativeModule;
9
+ exports.isNativeGrpcAvailable = isNativeGrpcAvailable;
10
+ exports.nativeGrpcStream = nativeGrpcStream;
11
+ exports.nativeGrpcUnary = nativeGrpcUnary;
12
+ var _errors = require("../errors");
13
+ function getGlobalBuffer() {
14
+ const candidate = globalThis.Buffer;
15
+ return typeof candidate?.from === 'function' ? candidate : undefined;
16
+ }
17
+
18
+ /** Encode bytes to base64 without requiring a Buffer polyfill on RN. */
19
+ function bytesToBase64(bytes) {
20
+ const BufferCtor = getGlobalBuffer();
21
+ if (BufferCtor) {
22
+ return BufferCtor.from(bytes).toString('base64');
23
+ }
24
+ let binary = '';
25
+ for (let i = 0; i < bytes.length; i += 1) {
26
+ binary += String.fromCharCode(bytes[i]);
27
+ }
28
+ if (typeof btoa !== 'function') {
29
+ throw new Error('base64 encode unavailable (no Buffer or btoa)');
30
+ }
31
+ return btoa(binary);
32
+ }
33
+
34
+ /** Decode base64 to bytes without requiring a Buffer polyfill on RN. */
35
+ function base64ToBytes(base64) {
36
+ const BufferCtor = getGlobalBuffer();
37
+ if (BufferCtor) {
38
+ const buf = BufferCtor.from(base64, 'base64');
39
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
40
+ }
41
+ if (typeof atob !== 'function') {
42
+ throw new Error('base64 decode unavailable (no Buffer or atob)');
43
+ }
44
+ const binary = atob(base64);
45
+ const out = new Uint8Array(binary.length);
46
+ for (let i = 0; i < binary.length; i += 1) {
47
+ out[i] = binary.charCodeAt(i);
48
+ }
49
+ return out;
50
+ }
51
+ function getNativeModule() {
52
+ try {
53
+ // Optional peer — do not hard-depend at module load time.
54
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
55
+ const rn = require('react-native');
56
+ const mod = rn.NativeModules?.ReactNativeProtoNativeGrpc;
57
+ if (mod && typeof mod.unary === 'function') {
58
+ return mod;
59
+ }
60
+ } catch {
61
+ // Not running in React Native, or NativeModules unavailable.
62
+ }
63
+ return undefined;
64
+ }
65
+ function createBridgeFromNativeModule(mod) {
66
+ return {
67
+ async unary({
68
+ baseUrl,
69
+ rpcPath,
70
+ requestBytes,
71
+ headers,
72
+ timeoutMs
73
+ }) {
74
+ const responseBase64 = await mod.unary(baseUrl, rpcPath, bytesToBase64(requestBytes), JSON.stringify(headers ?? {}), timeoutMs);
75
+ if (typeof responseBase64 !== 'string') {
76
+ throw new Error('Native unary did not return a base64 string');
77
+ }
78
+ return base64ToBytes(responseBase64);
79
+ }
80
+ };
81
+ }
82
+
83
+ /**
84
+ * Wire `NativeModules.ReactNativeProtoNativeGrpc` into
85
+ * `global.__REACT_NATIVE_PROTO_NATIVE_GRPC__` for the JS transport layer.
86
+ * Returns true when the bridge was installed.
87
+ */
88
+ function installNativeGrpcBridgeFromNativeModule() {
89
+ const mod = getNativeModule();
90
+ if (!mod) {
91
+ return false;
92
+ }
93
+ globalThis.__REACT_NATIVE_PROTO_NATIVE_GRPC__ = createBridgeFromNativeModule(mod);
94
+ return true;
95
+ }
96
+ function getBridge() {
97
+ const existing = globalThis.__REACT_NATIVE_PROTO_NATIVE_GRPC__;
98
+ if (existing && typeof existing.unary === 'function') {
99
+ return existing;
100
+ }
101
+ if (installNativeGrpcBridgeFromNativeModule()) {
102
+ const installed = globalThis.__REACT_NATIVE_PROTO_NATIVE_GRPC__;
103
+ if (installed && typeof installed.unary === 'function') {
104
+ return installed;
105
+ }
106
+ }
107
+ throw new _errors.ProtoClientError({
108
+ code: 'UNSUPPORTED',
109
+ message: 'Native gRPC bridge is not installed. Link the native module or use transport "http" / "connect".'
110
+ });
111
+ }
112
+ async function headersFromConfig(config, rpcPath) {
113
+ if (!config.getHeaders) {
114
+ return {};
115
+ }
116
+ try {
117
+ return await config.getHeaders();
118
+ } catch (cause) {
119
+ throw new _errors.ProtoClientError({
120
+ code: 'INVALID_ARGUMENT',
121
+ message: 'getHeaders() failed',
122
+ rpcPath,
123
+ cause
124
+ });
125
+ }
126
+ }
127
+ async function nativeGrpcUnary(config, codecs, input) {
128
+ const bridge = getBridge();
129
+ const {
130
+ entry,
131
+ request
132
+ } = input;
133
+ const requestCodec = codecs.get(entry.requestType);
134
+ const responseCodec = codecs.get(entry.responseType);
135
+ if (!requestCodec || !responseCodec) {
136
+ throw new _errors.ProtoClientError({
137
+ code: 'INVALID_ARGUMENT',
138
+ message: `Missing codec for ${entry.requestType} or ${entry.responseType}`,
139
+ rpcPath: entry.rpcPath
140
+ });
141
+ }
142
+ let requestBytes;
143
+ try {
144
+ requestBytes = requestCodec.encode(request ?? {});
145
+ } catch (cause) {
146
+ throw new _errors.ProtoClientError({
147
+ code: 'INVALID_ARGUMENT',
148
+ message: `Failed to encode request for ${entry.rpcPath}`,
149
+ rpcPath: entry.rpcPath,
150
+ cause
151
+ });
152
+ }
153
+ const headers = await headersFromConfig(config, entry.rpcPath);
154
+ let responseBytes;
155
+ try {
156
+ responseBytes = await bridge.unary({
157
+ baseUrl: config.baseUrl,
158
+ rpcPath: entry.rpcPath,
159
+ requestBytes,
160
+ headers,
161
+ timeoutMs: config.timeoutMs
162
+ });
163
+ } catch (cause) {
164
+ throw new _errors.ProtoClientError({
165
+ code: 'RPC',
166
+ message: `Native gRPC call failed for ${entry.rpcPath}`,
167
+ rpcPath: entry.rpcPath,
168
+ cause,
169
+ retryable: true
170
+ });
171
+ }
172
+ if (responseBytes.byteLength > config.maxResponseBytes) {
173
+ throw new _errors.ProtoClientError({
174
+ code: 'PAYLOAD_TOO_LARGE',
175
+ message: `Native response exceeds maxResponseBytes ${config.maxResponseBytes}`,
176
+ rpcPath: entry.rpcPath
177
+ });
178
+ }
179
+ try {
180
+ return responseCodec.decode(responseBytes);
181
+ } catch (cause) {
182
+ throw new _errors.ProtoClientError({
183
+ code: 'DECODE',
184
+ message: `Failed to decode native gRPC response for ${entry.rpcPath}`,
185
+ rpcPath: entry.rpcPath,
186
+ cause
187
+ });
188
+ }
189
+ }
190
+ async function* nativeGrpcStream(config, codecs, input) {
191
+ const bridge = getBridge();
192
+ if (typeof bridge.stream !== 'function') {
193
+ throw new _errors.ProtoClientError({
194
+ code: 'UNSUPPORTED',
195
+ message: 'Native gRPC bridge does not implement streaming',
196
+ rpcPath: input.entry.rpcPath
197
+ });
198
+ }
199
+ const {
200
+ entry,
201
+ request
202
+ } = input;
203
+ const requestCodec = codecs.get(entry.requestType);
204
+ const responseCodec = codecs.get(entry.responseType);
205
+ if (!requestCodec || !responseCodec) {
206
+ throw new _errors.ProtoClientError({
207
+ code: 'INVALID_ARGUMENT',
208
+ message: `Missing codec for ${entry.requestType} or ${entry.responseType}`,
209
+ rpcPath: entry.rpcPath
210
+ });
211
+ }
212
+ const requestBytes = requestCodec.encode(request ?? {});
213
+ const headers = await headersFromConfig(config, entry.rpcPath);
214
+ const frames = bridge.stream({
215
+ baseUrl: config.baseUrl,
216
+ rpcPath: entry.rpcPath,
217
+ requestBytes,
218
+ headers,
219
+ timeoutMs: config.timeoutMs
220
+ });
221
+ for await (const frame of frames) {
222
+ if (frame.byteLength > config.maxResponseBytes) {
223
+ throw new _errors.ProtoClientError({
224
+ code: 'PAYLOAD_TOO_LARGE',
225
+ message: 'Native stream frame exceeds maxResponseBytes',
226
+ rpcPath: entry.rpcPath
227
+ });
228
+ }
229
+ const message = responseCodec.decode(frame);
230
+ if (input.onMessage) {
231
+ input.onMessage(message);
232
+ }
233
+ yield message;
234
+ }
235
+ }
236
+ function isNativeGrpcAvailable() {
237
+ if (typeof globalThis.__REACT_NATIVE_PROTO_NATIVE_GRPC__?.unary === 'function') {
238
+ return true;
239
+ }
240
+ return getNativeModule() != null;
241
+ }
242
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_errors","require","getGlobalBuffer","candidate","globalThis","Buffer","from","undefined","bytesToBase64","bytes","BufferCtor","toString","binary","i","length","String","fromCharCode","btoa","Error","base64ToBytes","base64","buf","Uint8Array","buffer","byteOffset","byteLength","atob","out","charCodeAt","getNativeModule","rn","mod","NativeModules","ReactNativeProtoNativeGrpc","unary","createBridgeFromNativeModule","baseUrl","rpcPath","requestBytes","headers","timeoutMs","responseBase64","JSON","stringify","installNativeGrpcBridgeFromNativeModule","__REACT_NATIVE_PROTO_NATIVE_GRPC__","getBridge","existing","installed","ProtoClientError","code","message","headersFromConfig","config","getHeaders","cause","nativeGrpcUnary","codecs","input","bridge","entry","request","requestCodec","get","requestType","responseCodec","responseType","encode","responseBytes","retryable","maxResponseBytes","decode","nativeGrpcStream","stream","frames","frame","onMessage","isNativeGrpcAvailable"],"sourceRoot":"../../../src","sources":["native-grpc/index.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OfflineMutationQueue = void 0;
7
+ var _errors = require("./errors");
8
+ /**
9
+ * Queue failed (or deferred) mutations and flush when back online.
10
+ * Does not auto-detect network — call `setOnline(true/false)` or `flush()` yourself.
11
+ */
12
+ class OfflineMutationQueue {
13
+ items = [];
14
+ online = true;
15
+ flushing = false;
16
+ constructor(options = {}) {
17
+ this.maxSize = options.maxSize ?? 50;
18
+ this.onChange = options.onChange;
19
+ this.storage = options.storage;
20
+ }
21
+ async hydrate() {
22
+ if (!this.storage) return;
23
+ const loaded = await this.storage.load();
24
+ this.items = Array.isArray(loaded) ? loaded.slice(0, this.maxSize) : [];
25
+ this.emit();
26
+ }
27
+ setOnline(online) {
28
+ this.online = online;
29
+ if (online) {
30
+ void this.flush();
31
+ }
32
+ }
33
+ isOnline() {
34
+ return this.online;
35
+ }
36
+ size() {
37
+ return this.items.length;
38
+ }
39
+
40
+ /**
41
+ * Run immediately when online; otherwise enqueue and resolve after flush.
42
+ */
43
+ async runOrEnqueue(label, run) {
44
+ if (this.online) {
45
+ return run();
46
+ }
47
+ return new Promise((resolve, reject) => {
48
+ if (this.items.length >= this.maxSize) {
49
+ reject(new _errors.ProtoClientError({
50
+ code: 'INVALID_ARGUMENT',
51
+ message: `Offline queue is full (max ${this.maxSize})`
52
+ }));
53
+ return;
54
+ }
55
+ const id = `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
56
+ this.items.push({
57
+ id,
58
+ label,
59
+ enqueuedAt: Date.now(),
60
+ run: async () => {
61
+ const result = await run();
62
+ resolve(result);
63
+ return result;
64
+ }
65
+ });
66
+ this.emit();
67
+ void this.persist();
68
+ });
69
+ }
70
+ enqueue(label, run) {
71
+ if (this.items.length >= this.maxSize) {
72
+ throw new _errors.ProtoClientError({
73
+ code: 'INVALID_ARGUMENT',
74
+ message: `Offline queue is full (max ${this.maxSize})`
75
+ });
76
+ }
77
+ const id = `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
78
+ this.items.push({
79
+ id,
80
+ label,
81
+ run,
82
+ enqueuedAt: Date.now()
83
+ });
84
+ this.emit();
85
+ void this.persist();
86
+ return id;
87
+ }
88
+ async flush() {
89
+ if (this.flushing) {
90
+ return {
91
+ ok: 0,
92
+ failed: 0
93
+ };
94
+ }
95
+ this.flushing = true;
96
+ let ok = 0;
97
+ let failed = 0;
98
+ try {
99
+ while (this.items.length > 0 && this.online) {
100
+ const item = this.items[0];
101
+ if (!item) break;
102
+ try {
103
+ await item.run();
104
+ this.items.shift();
105
+ ok += 1;
106
+ this.emit();
107
+ await this.persist();
108
+ } catch {
109
+ failed += 1;
110
+ break;
111
+ }
112
+ }
113
+ } finally {
114
+ this.flushing = false;
115
+ }
116
+ return {
117
+ ok,
118
+ failed
119
+ };
120
+ }
121
+ clear() {
122
+ this.items = [];
123
+ this.emit();
124
+ void this.persist();
125
+ }
126
+ emit() {
127
+ if (this.onChange) {
128
+ this.onChange(this.items.length);
129
+ }
130
+ }
131
+ async persist() {
132
+ if (!this.storage) return;
133
+ await this.storage.save(this.items);
134
+ }
135
+ }
136
+ exports.OfflineMutationQueue = OfflineMutationQueue;
137
+ //# sourceMappingURL=offline-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_errors","require","OfflineMutationQueue","items","online","flushing","constructor","options","maxSize","onChange","storage","hydrate","loaded","load","Array","isArray","slice","emit","setOnline","flush","isOnline","size","length","runOrEnqueue","label","run","Promise","resolve","reject","ProtoClientError","code","message","id","Date","now","Math","random","toString","push","enqueuedAt","result","persist","enqueue","ok","failed","item","shift","clear","save","exports"],"sourceRoot":"../../src","sources":["offline-queue.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createPathForMethod = createPathForMethod;
7
+ exports.pathFromTemplate = pathFromTemplate;
8
+ function packagePrefix(entry) {
9
+ return entry.packageName ? `${entry.packageName}.` : '';
10
+ }
11
+ function lowerFirst(value) {
12
+ if (!value) return value;
13
+ return value.charAt(0).toLowerCase() + value.slice(1);
14
+ }
15
+
16
+ /**
17
+ * Built-in path builders for common gateways and proxies.
18
+ *
19
+ * - connect / grpc-web / envoy: `/{package}.{Service}/{Method}`
20
+ * - grpc-gateway: `/{package}.{Service}/{Method}` (HTTP body RPC style)
21
+ * - restish: `/v1/{service}/{method}` (lowercase camel segments)
22
+ */
23
+ function createPathForMethod(preset = 'connect') {
24
+ switch (preset) {
25
+ case 'restish':
26
+ return entry => `/v1/${lowerFirst(entry.serviceName)}/${lowerFirst(entry.methodName)}`;
27
+ case 'grpc-gateway':
28
+ case 'connect':
29
+ case 'grpc-web':
30
+ case 'envoy':
31
+ default:
32
+ return entry => `/${packagePrefix(entry)}${entry.serviceName}/${entry.methodName}`;
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Custom template. Placeholders:
38
+ * `{package}` `{service}` `{method}` `{rpcPath}`
39
+ * `{serviceCamel}` `{methodCamel}`
40
+ */
41
+ function pathFromTemplate(template) {
42
+ return entry => template.split('{package}').join(entry.packageName).split('{service}').join(entry.serviceName).split('{method}').join(entry.methodName).split('{rpcPath}').join(entry.rpcPath).split('{serviceCamel}').join(lowerFirst(entry.serviceName)).split('{methodCamel}').join(lowerFirst(entry.methodName));
43
+ }
44
+ //# sourceMappingURL=path-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["packagePrefix","entry","packageName","lowerFirst","value","charAt","toLowerCase","slice","createPathForMethod","preset","serviceName","methodName","pathFromTemplate","template","split","join","rpcPath"],"sourceRoot":"../../src","sources":["path-templates.ts"],"mappings":";;;;;;;AASA,SAASA,aAAaA,CAACC,KAAqB,EAAU;EACpD,OAAOA,KAAK,CAACC,WAAW,GAAG,GAAGD,KAAK,CAACC,WAAW,GAAG,GAAG,EAAE;AACzD;AAEA,SAASC,UAAUA,CAACC,KAAa,EAAU;EACzC,IAAI,CAACA,KAAK,EAAE,OAAOA,KAAK;EACxB,OAAOA,KAAK,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGF,KAAK,CAACG,KAAK,CAAC,CAAC,CAAC;AACvD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,mBAAmBA,CACjCC,MAA0B,GAAG,SAAS,EACH;EACnC,QAAQA,MAAM;IACZ,KAAK,SAAS;MACZ,OAAQR,KAAK,IACX,OAAOE,UAAU,CAACF,KAAK,CAACS,WAAW,CAAC,IAAIP,UAAU,CAACF,KAAK,CAACU,UAAU,CAAC,EAAE;IAC1E,KAAK,cAAc;IACnB,KAAK,SAAS;IACd,KAAK,UAAU;IACf,KAAK,OAAO;IACZ;MACE,OAAQV,KAAK,IACX,IAAID,aAAa,CAACC,KAAK,CAAC,GAAGA,KAAK,CAACS,WAAW,IAAIT,KAAK,CAACU,UAAU,EAAE;EACxE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAC9BC,QAAgB,EACmB;EACnC,OAAQZ,KAAK,IACXY,QAAQ,CACLC,KAAK,CAAC,WAAW,CAAC,CAClBC,IAAI,CAACd,KAAK,CAACC,WAAW,CAAC,CACvBY,KAAK,CAAC,WAAW,CAAC,CAClBC,IAAI,CAACd,KAAK,CAACS,WAAW,CAAC,CACvBI,KAAK,CAAC,UAAU,CAAC,CACjBC,IAAI,CAACd,KAAK,CAACU,UAAU,CAAC,CACtBG,KAAK,CAAC,WAAW,CAAC,CAClBC,IAAI,CAACd,KAAK,CAACe,OAAO,CAAC,CACnBF,KAAK,CAAC,gBAAgB,CAAC,CACvBC,IAAI,CAACZ,UAAU,CAACF,KAAK,CAACS,WAAW,CAAC,CAAC,CACnCI,KAAK,CAAC,eAAe,CAAC,CACtBC,IAAI,CAACZ,UAAU,CAACF,KAAK,CAACU,UAAU,CAAC,CAAC;AACzC","ignoreList":[]}