@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,233 @@
1
+ "use strict";
2
+
3
+ import { ProtoClientError } from '../errors';
4
+ function getGlobalBuffer() {
5
+ const candidate = globalThis.Buffer;
6
+ return typeof candidate?.from === 'function' ? candidate : undefined;
7
+ }
8
+
9
+ /** Encode bytes to base64 without requiring a Buffer polyfill on RN. */
10
+ export function bytesToBase64(bytes) {
11
+ const BufferCtor = getGlobalBuffer();
12
+ if (BufferCtor) {
13
+ return BufferCtor.from(bytes).toString('base64');
14
+ }
15
+ let binary = '';
16
+ for (let i = 0; i < bytes.length; i += 1) {
17
+ binary += String.fromCharCode(bytes[i]);
18
+ }
19
+ if (typeof btoa !== 'function') {
20
+ throw new Error('base64 encode unavailable (no Buffer or btoa)');
21
+ }
22
+ return btoa(binary);
23
+ }
24
+
25
+ /** Decode base64 to bytes without requiring a Buffer polyfill on RN. */
26
+ export function base64ToBytes(base64) {
27
+ const BufferCtor = getGlobalBuffer();
28
+ if (BufferCtor) {
29
+ const buf = BufferCtor.from(base64, 'base64');
30
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
31
+ }
32
+ if (typeof atob !== 'function') {
33
+ throw new Error('base64 decode unavailable (no Buffer or atob)');
34
+ }
35
+ const binary = atob(base64);
36
+ const out = new Uint8Array(binary.length);
37
+ for (let i = 0; i < binary.length; i += 1) {
38
+ out[i] = binary.charCodeAt(i);
39
+ }
40
+ return out;
41
+ }
42
+ function getNativeModule() {
43
+ try {
44
+ // Optional peer — do not hard-depend at module load time.
45
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
46
+ const rn = require('react-native');
47
+ const mod = rn.NativeModules?.ReactNativeProtoNativeGrpc;
48
+ if (mod && typeof mod.unary === 'function') {
49
+ return mod;
50
+ }
51
+ } catch {
52
+ // Not running in React Native, or NativeModules unavailable.
53
+ }
54
+ return undefined;
55
+ }
56
+ function createBridgeFromNativeModule(mod) {
57
+ return {
58
+ async unary({
59
+ baseUrl,
60
+ rpcPath,
61
+ requestBytes,
62
+ headers,
63
+ timeoutMs
64
+ }) {
65
+ const responseBase64 = await mod.unary(baseUrl, rpcPath, bytesToBase64(requestBytes), JSON.stringify(headers ?? {}), timeoutMs);
66
+ if (typeof responseBase64 !== 'string') {
67
+ throw new Error('Native unary did not return a base64 string');
68
+ }
69
+ return base64ToBytes(responseBase64);
70
+ }
71
+ };
72
+ }
73
+
74
+ /**
75
+ * Wire `NativeModules.ReactNativeProtoNativeGrpc` into
76
+ * `global.__REACT_NATIVE_PROTO_NATIVE_GRPC__` for the JS transport layer.
77
+ * Returns true when the bridge was installed.
78
+ */
79
+ export function installNativeGrpcBridgeFromNativeModule() {
80
+ const mod = getNativeModule();
81
+ if (!mod) {
82
+ return false;
83
+ }
84
+ globalThis.__REACT_NATIVE_PROTO_NATIVE_GRPC__ = createBridgeFromNativeModule(mod);
85
+ return true;
86
+ }
87
+ function getBridge() {
88
+ const existing = globalThis.__REACT_NATIVE_PROTO_NATIVE_GRPC__;
89
+ if (existing && typeof existing.unary === 'function') {
90
+ return existing;
91
+ }
92
+ if (installNativeGrpcBridgeFromNativeModule()) {
93
+ const installed = globalThis.__REACT_NATIVE_PROTO_NATIVE_GRPC__;
94
+ if (installed && typeof installed.unary === 'function') {
95
+ return installed;
96
+ }
97
+ }
98
+ throw new ProtoClientError({
99
+ code: 'UNSUPPORTED',
100
+ message: 'Native gRPC bridge is not installed. Link the native module or use transport "http" / "connect".'
101
+ });
102
+ }
103
+ async function headersFromConfig(config, rpcPath) {
104
+ if (!config.getHeaders) {
105
+ return {};
106
+ }
107
+ try {
108
+ return await config.getHeaders();
109
+ } catch (cause) {
110
+ throw new ProtoClientError({
111
+ code: 'INVALID_ARGUMENT',
112
+ message: 'getHeaders() failed',
113
+ rpcPath,
114
+ cause
115
+ });
116
+ }
117
+ }
118
+ export async function nativeGrpcUnary(config, codecs, input) {
119
+ const bridge = getBridge();
120
+ const {
121
+ entry,
122
+ request
123
+ } = input;
124
+ const requestCodec = codecs.get(entry.requestType);
125
+ const responseCodec = codecs.get(entry.responseType);
126
+ if (!requestCodec || !responseCodec) {
127
+ throw new ProtoClientError({
128
+ code: 'INVALID_ARGUMENT',
129
+ message: `Missing codec for ${entry.requestType} or ${entry.responseType}`,
130
+ rpcPath: entry.rpcPath
131
+ });
132
+ }
133
+ let requestBytes;
134
+ try {
135
+ requestBytes = requestCodec.encode(request ?? {});
136
+ } catch (cause) {
137
+ throw new ProtoClientError({
138
+ code: 'INVALID_ARGUMENT',
139
+ message: `Failed to encode request for ${entry.rpcPath}`,
140
+ rpcPath: entry.rpcPath,
141
+ cause
142
+ });
143
+ }
144
+ const headers = await headersFromConfig(config, entry.rpcPath);
145
+ let responseBytes;
146
+ try {
147
+ responseBytes = await bridge.unary({
148
+ baseUrl: config.baseUrl,
149
+ rpcPath: entry.rpcPath,
150
+ requestBytes,
151
+ headers,
152
+ timeoutMs: config.timeoutMs
153
+ });
154
+ } catch (cause) {
155
+ throw new ProtoClientError({
156
+ code: 'RPC',
157
+ message: `Native gRPC call failed for ${entry.rpcPath}`,
158
+ rpcPath: entry.rpcPath,
159
+ cause,
160
+ retryable: true
161
+ });
162
+ }
163
+ if (responseBytes.byteLength > config.maxResponseBytes) {
164
+ throw new ProtoClientError({
165
+ code: 'PAYLOAD_TOO_LARGE',
166
+ message: `Native response exceeds maxResponseBytes ${config.maxResponseBytes}`,
167
+ rpcPath: entry.rpcPath
168
+ });
169
+ }
170
+ try {
171
+ return responseCodec.decode(responseBytes);
172
+ } catch (cause) {
173
+ throw new ProtoClientError({
174
+ code: 'DECODE',
175
+ message: `Failed to decode native gRPC response for ${entry.rpcPath}`,
176
+ rpcPath: entry.rpcPath,
177
+ cause
178
+ });
179
+ }
180
+ }
181
+ export async function* nativeGrpcStream(config, codecs, input) {
182
+ const bridge = getBridge();
183
+ if (typeof bridge.stream !== 'function') {
184
+ throw new ProtoClientError({
185
+ code: 'UNSUPPORTED',
186
+ message: 'Native gRPC bridge does not implement streaming',
187
+ rpcPath: input.entry.rpcPath
188
+ });
189
+ }
190
+ const {
191
+ entry,
192
+ request
193
+ } = input;
194
+ const requestCodec = codecs.get(entry.requestType);
195
+ const responseCodec = codecs.get(entry.responseType);
196
+ if (!requestCodec || !responseCodec) {
197
+ throw new ProtoClientError({
198
+ code: 'INVALID_ARGUMENT',
199
+ message: `Missing codec for ${entry.requestType} or ${entry.responseType}`,
200
+ rpcPath: entry.rpcPath
201
+ });
202
+ }
203
+ const requestBytes = requestCodec.encode(request ?? {});
204
+ const headers = await headersFromConfig(config, entry.rpcPath);
205
+ const frames = bridge.stream({
206
+ baseUrl: config.baseUrl,
207
+ rpcPath: entry.rpcPath,
208
+ requestBytes,
209
+ headers,
210
+ timeoutMs: config.timeoutMs
211
+ });
212
+ for await (const frame of frames) {
213
+ if (frame.byteLength > config.maxResponseBytes) {
214
+ throw new ProtoClientError({
215
+ code: 'PAYLOAD_TOO_LARGE',
216
+ message: 'Native stream frame exceeds maxResponseBytes',
217
+ rpcPath: entry.rpcPath
218
+ });
219
+ }
220
+ const message = responseCodec.decode(frame);
221
+ if (input.onMessage) {
222
+ input.onMessage(message);
223
+ }
224
+ yield message;
225
+ }
226
+ }
227
+ export function isNativeGrpcAvailable() {
228
+ if (typeof globalThis.__REACT_NATIVE_PROTO_NATIVE_GRPC__?.unary === 'function') {
229
+ return true;
230
+ }
231
+ return getNativeModule() != null;
232
+ }
233
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ProtoClientError","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","require","mod","NativeModules","ReactNativeProtoNativeGrpc","unary","createBridgeFromNativeModule","baseUrl","rpcPath","requestBytes","headers","timeoutMs","responseBase64","JSON","stringify","installNativeGrpcBridgeFromNativeModule","__REACT_NATIVE_PROTO_NATIVE_GRPC__","getBridge","existing","installed","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,132 @@
1
+ "use strict";
2
+
3
+ import { ProtoClientError } from './errors';
4
+ /**
5
+ * Queue failed (or deferred) mutations and flush when back online.
6
+ * Does not auto-detect network — call `setOnline(true/false)` or `flush()` yourself.
7
+ */
8
+ export class OfflineMutationQueue {
9
+ items = [];
10
+ online = true;
11
+ flushing = false;
12
+ constructor(options = {}) {
13
+ this.maxSize = options.maxSize ?? 50;
14
+ this.onChange = options.onChange;
15
+ this.storage = options.storage;
16
+ }
17
+ async hydrate() {
18
+ if (!this.storage) return;
19
+ const loaded = await this.storage.load();
20
+ this.items = Array.isArray(loaded) ? loaded.slice(0, this.maxSize) : [];
21
+ this.emit();
22
+ }
23
+ setOnline(online) {
24
+ this.online = online;
25
+ if (online) {
26
+ void this.flush();
27
+ }
28
+ }
29
+ isOnline() {
30
+ return this.online;
31
+ }
32
+ size() {
33
+ return this.items.length;
34
+ }
35
+
36
+ /**
37
+ * Run immediately when online; otherwise enqueue and resolve after flush.
38
+ */
39
+ async runOrEnqueue(label, run) {
40
+ if (this.online) {
41
+ return run();
42
+ }
43
+ return new Promise((resolve, reject) => {
44
+ if (this.items.length >= this.maxSize) {
45
+ reject(new ProtoClientError({
46
+ code: 'INVALID_ARGUMENT',
47
+ message: `Offline queue is full (max ${this.maxSize})`
48
+ }));
49
+ return;
50
+ }
51
+ const id = `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
52
+ this.items.push({
53
+ id,
54
+ label,
55
+ enqueuedAt: Date.now(),
56
+ run: async () => {
57
+ const result = await run();
58
+ resolve(result);
59
+ return result;
60
+ }
61
+ });
62
+ this.emit();
63
+ void this.persist();
64
+ });
65
+ }
66
+ enqueue(label, run) {
67
+ if (this.items.length >= this.maxSize) {
68
+ throw new ProtoClientError({
69
+ code: 'INVALID_ARGUMENT',
70
+ message: `Offline queue is full (max ${this.maxSize})`
71
+ });
72
+ }
73
+ const id = `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
74
+ this.items.push({
75
+ id,
76
+ label,
77
+ run,
78
+ enqueuedAt: Date.now()
79
+ });
80
+ this.emit();
81
+ void this.persist();
82
+ return id;
83
+ }
84
+ async flush() {
85
+ if (this.flushing) {
86
+ return {
87
+ ok: 0,
88
+ failed: 0
89
+ };
90
+ }
91
+ this.flushing = true;
92
+ let ok = 0;
93
+ let failed = 0;
94
+ try {
95
+ while (this.items.length > 0 && this.online) {
96
+ const item = this.items[0];
97
+ if (!item) break;
98
+ try {
99
+ await item.run();
100
+ this.items.shift();
101
+ ok += 1;
102
+ this.emit();
103
+ await this.persist();
104
+ } catch {
105
+ failed += 1;
106
+ break;
107
+ }
108
+ }
109
+ } finally {
110
+ this.flushing = false;
111
+ }
112
+ return {
113
+ ok,
114
+ failed
115
+ };
116
+ }
117
+ clear() {
118
+ this.items = [];
119
+ this.emit();
120
+ void this.persist();
121
+ }
122
+ emit() {
123
+ if (this.onChange) {
124
+ this.onChange(this.items.length);
125
+ }
126
+ }
127
+ async persist() {
128
+ if (!this.storage) return;
129
+ await this.storage.save(this.items);
130
+ }
131
+ }
132
+ //# sourceMappingURL=offline-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ProtoClientError","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","code","message","id","Date","now","Math","random","toString","push","enqueuedAt","result","persist","enqueue","ok","failed","item","shift","clear","save"],"sourceRoot":"../../src","sources":["offline-queue.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ function packagePrefix(entry) {
4
+ return entry.packageName ? `${entry.packageName}.` : '';
5
+ }
6
+ function lowerFirst(value) {
7
+ if (!value) return value;
8
+ return value.charAt(0).toLowerCase() + value.slice(1);
9
+ }
10
+
11
+ /**
12
+ * Built-in path builders for common gateways and proxies.
13
+ *
14
+ * - connect / grpc-web / envoy: `/{package}.{Service}/{Method}`
15
+ * - grpc-gateway: `/{package}.{Service}/{Method}` (HTTP body RPC style)
16
+ * - restish: `/v1/{service}/{method}` (lowercase camel segments)
17
+ */
18
+ export function createPathForMethod(preset = 'connect') {
19
+ switch (preset) {
20
+ case 'restish':
21
+ return entry => `/v1/${lowerFirst(entry.serviceName)}/${lowerFirst(entry.methodName)}`;
22
+ case 'grpc-gateway':
23
+ case 'connect':
24
+ case 'grpc-web':
25
+ case 'envoy':
26
+ default:
27
+ return entry => `/${packagePrefix(entry)}${entry.serviceName}/${entry.methodName}`;
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Custom template. Placeholders:
33
+ * `{package}` `{service}` `{method}` `{rpcPath}`
34
+ * `{serviceCamel}` `{methodCamel}`
35
+ */
36
+ export function pathFromTemplate(template) {
37
+ 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));
38
+ }
39
+ //# 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;AACA,OAAO,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;AACA,OAAO,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":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ import { useMutation, useQuery } from '@tanstack/react-query';
4
+ /**
5
+ * Thin React Query wrapper around a generated unary client method.
6
+ */
7
+ export function useProtoQuery(method, request, options) {
8
+ const queryKey = options?.queryKey ?? ['proto', method.name, request];
9
+ return useQuery({
10
+ ...options,
11
+ queryKey,
12
+ queryFn: () => method(request)
13
+ });
14
+ }
15
+
16
+ /**
17
+ * Thin React Query mutation wrapper around a generated unary client method.
18
+ */
19
+ export function useProtoMutation(method, options) {
20
+ return useMutation({
21
+ ...options,
22
+ mutationFn: request => method(request)
23
+ });
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMutation","useQuery","useProtoQuery","method","request","options","queryKey","name","queryFn","useProtoMutation","mutationFn"],"sourceRoot":"../../../src","sources":["react-query/index.ts"],"mappings":";;AAKA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,uBAAuB;AAI7D;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAC3BC,MAA2B,EAC3BC,OAAa,EACbC,OAG2B,EAC3B;EACA,MAAMC,QAAQ,GAAGD,OAAO,EAAEC,QAAQ,IAAI,CAAC,OAAO,EAAEH,MAAM,CAACI,IAAI,EAAEH,OAAO,CAAC;EACrE,OAAOH,QAAQ,CAAC;IACd,GAAGI,OAAO;IACVC,QAAQ;IACRE,OAAO,EAAEA,CAAA,KAAML,MAAM,CAACC,OAAO;EAC/B,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA,OAAO,SAASK,gBAAgBA,CAC9BN,MAA2B,EAC3BE,OAA+C,EAC/C;EACA,OAAOL,WAAW,CAAC;IACjB,GAAGK,OAAO;IACVK,UAAU,EAAGN,OAAa,IAAKD,MAAM,CAACC,OAAO;EAC/C,CAAC,CAAC;AACJ","ignoreList":[]}