@zlooks.cn/gateway-server 1.0.6 → 1.0.7

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 (148) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +3 -4
  3. package/.next/build-manifest.json +6 -6
  4. package/.next/next-minimal-server.js.nft.json +1 -1
  5. package/.next/next-server.js.nft.json +1 -1
  6. package/.next/prerender-manifest.json +3 -35
  7. package/.next/routes-manifest.json +0 -6
  8. package/.next/server/app/[pluginId]/[[...path]]/page.js +1 -1
  9. package/.next/server/app/[pluginId]/[[...path]]/page.js.nft.json +1 -1
  10. package/.next/server/app/[pluginId]/[[...path]]/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_global-error/page.js +2 -2
  12. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  13. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_global-error.html +1 -1
  15. package/.next/server/app/_global-error.rsc +7 -7
  16. package/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  17. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +6 -6
  18. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/server/app/_not-found/page.js +1 -1
  20. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  21. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/favicon.ico/route.js +1 -1
  23. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  24. package/.next/server/app/page.js +139 -139
  25. package/.next/server/app/page.js.nft.json +1 -1
  26. package/.next/server/app/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/robots.txt/route.js +2 -2
  28. package/.next/server/app/robots.txt/route.js.nft.json +1 -1
  29. package/.next/server/app-paths-manifest.json +3 -4
  30. package/.next/server/chunks/276.js +1 -0
  31. package/.next/server/chunks/357.js +48 -0
  32. package/.next/server/chunks/369.js +193 -0
  33. package/.next/server/chunks/379.js +1 -0
  34. package/.next/server/chunks/546.js +165 -0
  35. package/.next/server/chunks/724.js +2 -0
  36. package/.next/server/chunks/748.js +107 -0
  37. package/.next/server/chunks/952.js +1 -0
  38. package/.next/server/middleware-build-manifest.js +1 -1
  39. package/.next/server/pages/500.html +1 -1
  40. package/.next/server/server-reference-manifest.json +1 -1
  41. package/.next/server/webpack-runtime.js +1 -1
  42. package/.next/static/OCFIC7ZMtwfwR4zcBmvjf/_buildManifest.js +1 -0
  43. package/.next/static/chunks/319-5b1f2e1ec1373bd3.js +1 -0
  44. package/.next/static/chunks/387b3e19-762a698cb31f79da.js +1 -0
  45. package/.next/static/chunks/469-04a1d77222f210e8.js +2 -0
  46. package/.next/static/chunks/550-e8abc67c7a1edf41.js +52 -0
  47. package/.next/static/chunks/604-fdb1ff68d897d5a1.js +1 -0
  48. package/.next/static/chunks/{996-077fc2adb823b371.js → 608-65a4cc255f2a7adb.js} +127 -127
  49. package/.next/static/chunks/app/[pluginId]/[[...path]]/page-de70338ed93ae515.js +1 -0
  50. package/.next/static/chunks/app/_global-error/page-03b2fd80c99da229.js +1 -0
  51. package/.next/static/chunks/app/_not-found/page-f5adedd76e894f13.js +1 -0
  52. package/.next/static/chunks/app/favicon.ico/route-03b2fd80c99da229.js +1 -0
  53. package/.next/static/chunks/app/layout-b45fbd5ce2b54d96.js +1 -0
  54. package/.next/static/chunks/app/page-fa81d6b33c269d0c.js +1 -0
  55. package/.next/static/chunks/app/robots.txt/route-03b2fd80c99da229.js +1 -0
  56. package/.next/static/chunks/main-app-98c326aff6aa17c8.js +1 -0
  57. package/.next/static/chunks/main-babcc17d8873b132.js +5 -0
  58. package/.next/static/chunks/next/dist/client/components/builtin/app-error-03b2fd80c99da229.js +1 -0
  59. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-03b2fd80c99da229.js +1 -0
  60. package/.next/static/chunks/next/dist/client/components/builtin/global-error-d58b04831400099b.js +1 -0
  61. package/.next/static/chunks/next/dist/client/components/builtin/not-found-03b2fd80c99da229.js +1 -0
  62. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-03b2fd80c99da229.js +1 -0
  63. package/.next/static/chunks/{webpack-28b302404fb8c1d3.js → webpack-4b774bd4ebe1a8a1.js} +1 -1
  64. package/.next/trace +22 -22
  65. package/.next/trace-build +1 -1
  66. package/.next/types/routes.d.ts +1 -2
  67. package/.next/types/validator.ts +0 -9
  68. package/dist/browser-api.d.ts +1 -0
  69. package/dist/browser-api.d.ts.map +1 -1
  70. package/dist/browser-api.js +1 -0
  71. package/dist/browser-api.js.map +1 -1
  72. package/dist/config/schema.d.ts.map +1 -1
  73. package/dist/config/schema.js +36 -12
  74. package/dist/config/schema.js.map +1 -1
  75. package/dist/controllers/api/shell/navigation.controller.d.ts +3 -0
  76. package/dist/controllers/api/shell/navigation.controller.d.ts.map +1 -0
  77. package/dist/controllers/api/shell/navigation.controller.js +19 -0
  78. package/dist/controllers/api/shell/navigation.controller.js.map +1 -0
  79. package/dist/runtime/gateway-runtime.d.ts +0 -4
  80. package/dist/runtime/gateway-runtime.d.ts.map +1 -1
  81. package/dist/runtime/gateway-runtime.js +3 -22
  82. package/dist/runtime/gateway-runtime.js.map +1 -1
  83. package/dist/runtime/http-over-micro-controller.d.ts +45 -0
  84. package/dist/runtime/http-over-micro-controller.d.ts.map +1 -0
  85. package/dist/runtime/http-over-micro-controller.js +305 -0
  86. package/dist/runtime/http-over-micro-controller.js.map +1 -0
  87. package/dist/runtime/public-asset-discovery.d.ts.map +1 -1
  88. package/dist/runtime/public-asset-discovery.js +13 -5
  89. package/dist/runtime/public-asset-discovery.js.map +1 -1
  90. package/dist/runtime/public-asset-proxy.d.ts.map +1 -1
  91. package/dist/runtime/public-asset-proxy.js +22 -7
  92. package/dist/runtime/public-asset-proxy.js.map +1 -1
  93. package/dist/runtime/rsc-initial-context.d.ts.map +1 -1
  94. package/dist/runtime/rsc-initial-context.js +6 -22
  95. package/dist/runtime/rsc-initial-context.js.map +1 -1
  96. package/dist/runtime/sitemap-http.d.ts +12 -0
  97. package/dist/runtime/sitemap-http.d.ts.map +1 -0
  98. package/dist/runtime/sitemap-http.js +91 -0
  99. package/dist/runtime/sitemap-http.js.map +1 -0
  100. package/package.json +24 -22
  101. package/.next/server/app/api/shell/navigation/route.js +0 -1
  102. package/.next/server/app/api/shell/navigation/route.js.nft.json +0 -1
  103. package/.next/server/app/api/shell/navigation/route_client-reference-manifest.js +0 -1
  104. package/.next/server/app/robots.txt.body +0 -5
  105. package/.next/server/app/robots.txt.meta +0 -1
  106. package/.next/server/chunks/377.js +0 -1
  107. package/.next/server/chunks/512.js +0 -2
  108. package/.next/server/chunks/621.js +0 -193
  109. package/.next/server/chunks/694.js +0 -165
  110. package/.next/server/chunks/761.js +0 -48
  111. package/.next/server/chunks/919.js +0 -107
  112. package/.next/server/chunks/941.js +0 -1
  113. package/.next/server/chunks/991.js +0 -1
  114. package/.next/static/W7JvaJOxXMTBDe7uMIlWm/_buildManifest.js +0 -1
  115. package/.next/static/chunks/128-88463f5aa049370d.js +0 -52
  116. package/.next/static/chunks/130-85ed753dd2afbb75.js +0 -1
  117. package/.next/static/chunks/507-30d5ae064837325c.js +0 -2
  118. package/.next/static/chunks/906-02ebd3fcb9fc3f0c.js +0 -1
  119. package/.next/static/chunks/app/[pluginId]/[[...path]]/page-4dd303371bb755c7.js +0 -1
  120. package/.next/static/chunks/app/_global-error/page-a519e69f1dbe97c4.js +0 -1
  121. package/.next/static/chunks/app/_not-found/page-64cb1a71ce368904.js +0 -1
  122. package/.next/static/chunks/app/api/shell/navigation/route-a519e69f1dbe97c4.js +0 -1
  123. package/.next/static/chunks/app/favicon.ico/route-a519e69f1dbe97c4.js +0 -1
  124. package/.next/static/chunks/app/layout-8208d5ac4dfff885.js +0 -1
  125. package/.next/static/chunks/app/page-8ee7b33b33cd79ee.js +0 -1
  126. package/.next/static/chunks/app/robots.txt/route-a519e69f1dbe97c4.js +0 -1
  127. package/.next/static/chunks/d3784132-6a36432fedf3ff6f.js +0 -1
  128. package/.next/static/chunks/main-0e4f61a9c633109e.js +0 -5
  129. package/.next/static/chunks/main-app-200aa40fca166de6.js +0 -1
  130. package/.next/static/chunks/next/dist/client/components/builtin/app-error-a519e69f1dbe97c4.js +0 -1
  131. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-a519e69f1dbe97c4.js +0 -1
  132. package/.next/static/chunks/next/dist/client/components/builtin/global-error-4329fe5c7ae59296.js +0 -1
  133. package/.next/static/chunks/next/dist/client/components/builtin/not-found-a519e69f1dbe97c4.js +0 -1
  134. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-a519e69f1dbe97c4.js +0 -1
  135. package/.next/types/app/api/shell/navigation/route.ts +0 -353
  136. package/dist/runtime/browser-api-discovery-runtime.d.ts +0 -24
  137. package/dist/runtime/browser-api-discovery-runtime.d.ts.map +0 -1
  138. package/dist/runtime/browser-api-discovery-runtime.js +0 -158
  139. package/dist/runtime/browser-api-discovery-runtime.js.map +0 -1
  140. package/dist/runtime/browser-api-provider-catalog.d.ts +0 -34
  141. package/dist/runtime/browser-api-provider-catalog.d.ts.map +0 -1
  142. package/dist/runtime/browser-api-provider-catalog.js +0 -133
  143. package/dist/runtime/browser-api-provider-catalog.js.map +0 -1
  144. package/dist/runtime/micro-browser-api-proxy.d.ts +0 -22
  145. package/dist/runtime/micro-browser-api-proxy.d.ts.map +0 -1
  146. package/dist/runtime/micro-browser-api-proxy.js +0 -206
  147. package/dist/runtime/micro-browser-api-proxy.js.map +0 -1
  148. /package/.next/static/{W7JvaJOxXMTBDe7uMIlWm → OCFIC7ZMtwfwR4zcBmvjf}/_ssgManifest.js +0 -0
@@ -1,353 +0,0 @@
1
- // File: /Users/evioshen/code/github/cevio/www.zlooks.cn/packages/gateway-server/src/app/api/shell/navigation/route.ts
2
- import * as entry from '../../../../../../src/app/api/shell/navigation/route.js'
3
- import type { NextRequest } from 'next/server.js'
4
-
5
- import type { InstantConfigForTypeCheckInternal, Prefetch } from 'next/dist/build/segment-config/app/app-segment-config.js'
6
-
7
- type TEntry = typeof import('../../../../../../src/app/api/shell/navigation/route.js')
8
-
9
- type SegmentParams<T extends Object = any> = T extends Record<string, any>
10
- ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
11
- : T
12
-
13
- // Check that the entry is a valid entry
14
- checkFields<Diff<{
15
- GET?: Function
16
- HEAD?: Function
17
- OPTIONS?: Function
18
- POST?: Function
19
- PUT?: Function
20
- DELETE?: Function
21
- PATCH?: Function
22
- config?: {}
23
- generateStaticParams?: Function
24
- instant?: InstantConfigForTypeCheckInternal
25
- prefetch?: Prefetch
26
- unstable_dynamicStaleTime?: number
27
- revalidate?: RevalidateRange<TEntry> | false
28
- dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static'
29
- dynamicParams?: boolean
30
- fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache'
31
- /** @deprecated The `preferredRegion` config is deprecated. Remove this export. */
32
- preferredRegion?: 'auto' | 'global' | 'home' | string | string[]
33
- runtime?: 'nodejs' | 'experimental-edge' | 'edge'
34
- maxDuration?: number
35
-
36
- }, TEntry, ''>>()
37
-
38
- type RouteContext = { params: Promise<SegmentParams> }
39
- // Check the prop type of the entry function
40
- if ('GET' in entry) {
41
- checkFields<
42
- Diff<
43
- ParamCheck<Request | NextRequest>,
44
- {
45
- __tag__: 'GET'
46
- __param_position__: 'first'
47
- __param_type__: FirstArg<MaybeField<TEntry, 'GET'>>
48
- },
49
- 'GET'
50
- >
51
- >()
52
- checkFields<
53
- Diff<
54
- ParamCheck<RouteContext>,
55
- {
56
- __tag__: 'GET'
57
- __param_position__: 'second'
58
- __param_type__: SecondArg<MaybeField<TEntry, 'GET'>>
59
- },
60
- 'GET'
61
- >
62
- >()
63
-
64
- checkFields<
65
- Diff<
66
- {
67
- __tag__: 'GET',
68
- __return_type__: Response | void | never | Promise<Response | void | never>
69
- },
70
- {
71
- __tag__: 'GET',
72
- __return_type__: ReturnType<MaybeField<TEntry, 'GET'>>
73
- },
74
- 'GET'
75
- >
76
- >()
77
- }
78
- // Check the prop type of the entry function
79
- if ('HEAD' in entry) {
80
- checkFields<
81
- Diff<
82
- ParamCheck<Request | NextRequest>,
83
- {
84
- __tag__: 'HEAD'
85
- __param_position__: 'first'
86
- __param_type__: FirstArg<MaybeField<TEntry, 'HEAD'>>
87
- },
88
- 'HEAD'
89
- >
90
- >()
91
- checkFields<
92
- Diff<
93
- ParamCheck<RouteContext>,
94
- {
95
- __tag__: 'HEAD'
96
- __param_position__: 'second'
97
- __param_type__: SecondArg<MaybeField<TEntry, 'HEAD'>>
98
- },
99
- 'HEAD'
100
- >
101
- >()
102
-
103
- checkFields<
104
- Diff<
105
- {
106
- __tag__: 'HEAD',
107
- __return_type__: Response | void | never | Promise<Response | void | never>
108
- },
109
- {
110
- __tag__: 'HEAD',
111
- __return_type__: ReturnType<MaybeField<TEntry, 'HEAD'>>
112
- },
113
- 'HEAD'
114
- >
115
- >()
116
- }
117
- // Check the prop type of the entry function
118
- if ('OPTIONS' in entry) {
119
- checkFields<
120
- Diff<
121
- ParamCheck<Request | NextRequest>,
122
- {
123
- __tag__: 'OPTIONS'
124
- __param_position__: 'first'
125
- __param_type__: FirstArg<MaybeField<TEntry, 'OPTIONS'>>
126
- },
127
- 'OPTIONS'
128
- >
129
- >()
130
- checkFields<
131
- Diff<
132
- ParamCheck<RouteContext>,
133
- {
134
- __tag__: 'OPTIONS'
135
- __param_position__: 'second'
136
- __param_type__: SecondArg<MaybeField<TEntry, 'OPTIONS'>>
137
- },
138
- 'OPTIONS'
139
- >
140
- >()
141
-
142
- checkFields<
143
- Diff<
144
- {
145
- __tag__: 'OPTIONS',
146
- __return_type__: Response | void | never | Promise<Response | void | never>
147
- },
148
- {
149
- __tag__: 'OPTIONS',
150
- __return_type__: ReturnType<MaybeField<TEntry, 'OPTIONS'>>
151
- },
152
- 'OPTIONS'
153
- >
154
- >()
155
- }
156
- // Check the prop type of the entry function
157
- if ('POST' in entry) {
158
- checkFields<
159
- Diff<
160
- ParamCheck<Request | NextRequest>,
161
- {
162
- __tag__: 'POST'
163
- __param_position__: 'first'
164
- __param_type__: FirstArg<MaybeField<TEntry, 'POST'>>
165
- },
166
- 'POST'
167
- >
168
- >()
169
- checkFields<
170
- Diff<
171
- ParamCheck<RouteContext>,
172
- {
173
- __tag__: 'POST'
174
- __param_position__: 'second'
175
- __param_type__: SecondArg<MaybeField<TEntry, 'POST'>>
176
- },
177
- 'POST'
178
- >
179
- >()
180
-
181
- checkFields<
182
- Diff<
183
- {
184
- __tag__: 'POST',
185
- __return_type__: Response | void | never | Promise<Response | void | never>
186
- },
187
- {
188
- __tag__: 'POST',
189
- __return_type__: ReturnType<MaybeField<TEntry, 'POST'>>
190
- },
191
- 'POST'
192
- >
193
- >()
194
- }
195
- // Check the prop type of the entry function
196
- if ('PUT' in entry) {
197
- checkFields<
198
- Diff<
199
- ParamCheck<Request | NextRequest>,
200
- {
201
- __tag__: 'PUT'
202
- __param_position__: 'first'
203
- __param_type__: FirstArg<MaybeField<TEntry, 'PUT'>>
204
- },
205
- 'PUT'
206
- >
207
- >()
208
- checkFields<
209
- Diff<
210
- ParamCheck<RouteContext>,
211
- {
212
- __tag__: 'PUT'
213
- __param_position__: 'second'
214
- __param_type__: SecondArg<MaybeField<TEntry, 'PUT'>>
215
- },
216
- 'PUT'
217
- >
218
- >()
219
-
220
- checkFields<
221
- Diff<
222
- {
223
- __tag__: 'PUT',
224
- __return_type__: Response | void | never | Promise<Response | void | never>
225
- },
226
- {
227
- __tag__: 'PUT',
228
- __return_type__: ReturnType<MaybeField<TEntry, 'PUT'>>
229
- },
230
- 'PUT'
231
- >
232
- >()
233
- }
234
- // Check the prop type of the entry function
235
- if ('DELETE' in entry) {
236
- checkFields<
237
- Diff<
238
- ParamCheck<Request | NextRequest>,
239
- {
240
- __tag__: 'DELETE'
241
- __param_position__: 'first'
242
- __param_type__: FirstArg<MaybeField<TEntry, 'DELETE'>>
243
- },
244
- 'DELETE'
245
- >
246
- >()
247
- checkFields<
248
- Diff<
249
- ParamCheck<RouteContext>,
250
- {
251
- __tag__: 'DELETE'
252
- __param_position__: 'second'
253
- __param_type__: SecondArg<MaybeField<TEntry, 'DELETE'>>
254
- },
255
- 'DELETE'
256
- >
257
- >()
258
-
259
- checkFields<
260
- Diff<
261
- {
262
- __tag__: 'DELETE',
263
- __return_type__: Response | void | never | Promise<Response | void | never>
264
- },
265
- {
266
- __tag__: 'DELETE',
267
- __return_type__: ReturnType<MaybeField<TEntry, 'DELETE'>>
268
- },
269
- 'DELETE'
270
- >
271
- >()
272
- }
273
- // Check the prop type of the entry function
274
- if ('PATCH' in entry) {
275
- checkFields<
276
- Diff<
277
- ParamCheck<Request | NextRequest>,
278
- {
279
- __tag__: 'PATCH'
280
- __param_position__: 'first'
281
- __param_type__: FirstArg<MaybeField<TEntry, 'PATCH'>>
282
- },
283
- 'PATCH'
284
- >
285
- >()
286
- checkFields<
287
- Diff<
288
- ParamCheck<RouteContext>,
289
- {
290
- __tag__: 'PATCH'
291
- __param_position__: 'second'
292
- __param_type__: SecondArg<MaybeField<TEntry, 'PATCH'>>
293
- },
294
- 'PATCH'
295
- >
296
- >()
297
-
298
- checkFields<
299
- Diff<
300
- {
301
- __tag__: 'PATCH',
302
- __return_type__: Response | void | never | Promise<Response | void | never>
303
- },
304
- {
305
- __tag__: 'PATCH',
306
- __return_type__: ReturnType<MaybeField<TEntry, 'PATCH'>>
307
- },
308
- 'PATCH'
309
- >
310
- >()
311
- }
312
-
313
- // Check the arguments and return type of the generateStaticParams function
314
- if ('generateStaticParams' in entry) {
315
- checkFields<Diff<{ params: SegmentParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()
316
- checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()
317
- }
318
-
319
- export interface PageProps {
320
- params?: Promise<SegmentParams>
321
- searchParams?: Promise<any>
322
- }
323
- export interface LayoutProps {
324
- children?: React.ReactNode
325
-
326
- params?: Promise<SegmentParams>
327
- }
328
-
329
- // =============
330
- // Utility types
331
- type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never
332
-
333
- // If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>.
334
- type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K>
335
- type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message>
336
-
337
- type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never
338
- type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never
339
- type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never
340
-
341
- type ParamCheck<T> = {
342
- __tag__: string
343
- __param_position__: string
344
- __param_type__: T
345
- }
346
-
347
- function checkFields<_ extends { [k in keyof any]: never }>() {}
348
-
349
- // https://github.com/sindresorhus/type-fest
350
- type Numeric = number | bigint
351
- type Zero = 0 | 0n
352
- type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never
353
- type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__'
@@ -1,24 +0,0 @@
1
- import type { Application } from '@hile/micro';
2
- import { type BrowserApiRouteResolution } from './browser-api-provider-catalog.js';
3
- type DiscoveryApplication = Pick<Application, 'listRegistryTopicSnapshots'>;
4
- export interface BrowserApiDiscoveryRuntimeOptions {
5
- readonly application: DiscoveryApplication;
6
- readonly clock?: () => Date;
7
- readonly pollIntervalMs?: number;
8
- readonly maxCatalogStaleMs?: number;
9
- readonly maxLeaseMs?: number;
10
- readonly maxClockSkewMs?: number;
11
- readonly onRejected?: (topic: string, error: unknown) => void;
12
- readonly onError?: (error: unknown) => void;
13
- }
14
- export declare class BrowserApiDiscoveryRuntime {
15
- #private;
16
- private readonly options;
17
- constructor(options: BrowserApiDiscoveryRuntimeOptions);
18
- start(): Promise<void>;
19
- reconcileOnce(): Promise<void>;
20
- resolve(path: unknown, method: string): BrowserApiRouteResolution;
21
- close(): Promise<void>;
22
- }
23
- export {};
24
- //# sourceMappingURL=browser-api-discovery-runtime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-api-discovery-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/browser-api-discovery-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,gCAAgC,CAAC;AAExC,KAAK,oBAAoB,GAAG,IAAI,CAAC,WAAW,EAAE,4BAA4B,CAAC,CAAC;AAE5E,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAQD,qBAAa,0BAA0B;;IAelB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAA3C,YAAoC,OAAO,EAAE,iCAAiC,EAQ7E;IAEM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAU5B;IAgBM,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CASpC;IAEM,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,yBAAyB,CAUvE;IAEM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ5B;CAwDF"}
@@ -1,158 +0,0 @@
1
- import { BROWSER_API_PROVIDER_TOPIC_PREFIX, parseTrustedBrowserApiProviderSnapshot, } from '@zlooks.cn/browser-api';
2
- import { BrowserApiProviderCatalog, } from './browser-api-provider-catalog.js';
3
- const DEFAULT_POLL_INTERVAL_MS = 1_000;
4
- const DEFAULT_MAX_CATALOG_STALE_MS = 30_000;
5
- const DEFAULT_MAX_LEASE_MS = 30_000;
6
- const MAX_PROVIDER_SNAPSHOTS = 256;
7
- const MAX_PROVIDERS = 64;
8
- export class BrowserApiDiscoveryRuntime {
9
- options;
10
- #catalog = new BrowserApiProviderCatalog();
11
- #clock;
12
- #pollIntervalMs;
13
- #maxCatalogStaleMs;
14
- #maxLeaseMs;
15
- #maxClockSkewMs;
16
- #timer;
17
- #starting;
18
- #activeReconciliation;
19
- #activeController;
20
- #lastSuccessfulPollMs;
21
- #closed = false;
22
- #closing;
23
- constructor(options) {
24
- this.options = options;
25
- this.#clock = options.clock ?? (() => new Date());
26
- this.#pollIntervalMs = positiveInteger(options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS);
27
- this.#maxCatalogStaleMs = positiveInteger(options.maxCatalogStaleMs ?? DEFAULT_MAX_CATALOG_STALE_MS);
28
- this.#maxLeaseMs = positiveInteger(options.maxLeaseMs ?? DEFAULT_MAX_LEASE_MS);
29
- this.#maxClockSkewMs = nonNegativeInteger(options.maxClockSkewMs ?? 0);
30
- }
31
- start() {
32
- if (this.#closed)
33
- return Promise.reject(new Error('Browser API discovery is closed'));
34
- if (this.#timer)
35
- return Promise.resolve();
36
- if (this.#starting)
37
- return this.#starting;
38
- const operation = this.#start();
39
- this.#starting = operation;
40
- void operation.finally(() => {
41
- if (this.#starting === operation)
42
- this.#starting = undefined;
43
- }).catch(() => undefined);
44
- return operation;
45
- }
46
- async #start() {
47
- try {
48
- await this.reconcileOnce();
49
- }
50
- catch (error) {
51
- this.options.onError?.(error);
52
- throw error;
53
- }
54
- if (this.#closed)
55
- throw new Error('Browser API discovery is closed');
56
- this.#timer = setInterval(() => {
57
- void this.reconcileOnce().catch((error) => this.options.onError?.(error));
58
- }, this.#pollIntervalMs);
59
- this.#timer.unref();
60
- }
61
- reconcileOnce() {
62
- if (this.#closed)
63
- return Promise.reject(new Error('Browser API discovery is closed'));
64
- if (this.#activeReconciliation)
65
- return this.#activeReconciliation;
66
- const operation = this.#reconcile();
67
- this.#activeReconciliation = operation;
68
- void operation.finally(() => {
69
- if (this.#activeReconciliation === operation)
70
- this.#activeReconciliation = undefined;
71
- }).catch(() => undefined);
72
- return operation;
73
- }
74
- resolve(path, method) {
75
- const nowMs = this.#clock().getTime();
76
- const resolution = this.#catalog.resolve(path, method, nowMs, this.#maxClockSkewMs);
77
- if (resolution.status === 'none')
78
- return resolution;
79
- const lastSuccessfulPollMs = this.#lastSuccessfulPollMs;
80
- if (lastSuccessfulPollMs === undefined
81
- || nowMs - lastSuccessfulPollMs > this.#maxCatalogStaleMs) {
82
- return { status: 'unavailable' };
83
- }
84
- return resolution;
85
- }
86
- close() {
87
- if (this.#closing)
88
- return this.#closing;
89
- if (this.#closed)
90
- return Promise.resolve();
91
- const operation = this.#close();
92
- this.#closing = operation;
93
- return operation.finally(() => {
94
- if (this.#closing === operation)
95
- this.#closing = undefined;
96
- });
97
- }
98
- async #close() {
99
- this.#closed = true;
100
- if (this.#timer) {
101
- clearInterval(this.#timer);
102
- this.#timer = undefined;
103
- }
104
- this.#activeController?.abort(new Error('Browser API discovery is closed'));
105
- await this.#activeReconciliation?.catch(() => undefined);
106
- }
107
- async #reconcile() {
108
- const now = this.#clock();
109
- const controller = new AbortController();
110
- this.#activeController = controller;
111
- try {
112
- const registrySnapshots = await this.options.application.listRegistryTopicSnapshots(BROWSER_API_PROVIDER_TOPIC_PREFIX, { signal: controller.signal });
113
- if (this.#closed)
114
- throw new Error('Browser API discovery is closed');
115
- if (registrySnapshots.length > MAX_PROVIDER_SNAPSHOTS) {
116
- throw new Error('Browser API Provider snapshot limit exceeded');
117
- }
118
- const discovered = [];
119
- for (const snapshot of registrySnapshots) {
120
- try {
121
- if (!snapshot.hasData || snapshot.retained
122
- || snapshot.publisherCount !== 1 || snapshot.publishers.length !== 1) {
123
- throw new Error('Browser API Provider topic must have exactly one live dynamic publisher');
124
- }
125
- const parsed = parseTrustedBrowserApiProviderSnapshot({
126
- topic: snapshot.topic,
127
- payload: snapshot.payload,
128
- publishers: snapshot.publishers,
129
- }, now, this.#maxLeaseMs, this.#maxClockSkewMs);
130
- discovered.push(parsed);
131
- }
132
- catch (error) {
133
- this.options.onRejected?.(snapshot.topic, error);
134
- }
135
- }
136
- if (new Set(discovered.map(({ payload }) => payload.providerId)).size > MAX_PROVIDERS) {
137
- throw new Error('Browser API Provider limit exceeded');
138
- }
139
- this.#catalog.reconcile(discovered, now);
140
- this.#lastSuccessfulPollMs = now.getTime();
141
- }
142
- finally {
143
- if (this.#activeController === controller)
144
- this.#activeController = undefined;
145
- }
146
- }
147
- }
148
- function positiveInteger(value) {
149
- if (!Number.isSafeInteger(value) || value <= 0)
150
- throw new TypeError('Expected a positive integer');
151
- return value;
152
- }
153
- function nonNegativeInteger(value) {
154
- if (!Number.isSafeInteger(value) || value < 0)
155
- throw new TypeError('Expected a non-negative integer');
156
- return value;
157
- }
158
- //# sourceMappingURL=browser-api-discovery-runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-api-discovery-runtime.js","sourceRoot":"","sources":["../../src/runtime/browser-api-discovery-runtime.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import type { RegistryAddress } from '@hile/micro';
2
- import type { BrowserApiProviderAnnouncement } from '@zlooks.cn/browser-api';
3
- export interface BrowserApiDiscoverySnapshot {
4
- readonly topic: string;
5
- readonly payload: BrowserApiProviderAnnouncement;
6
- readonly publishers: readonly RegistryAddress[];
7
- }
8
- export interface ActiveBrowserApiProvider {
9
- readonly providerId: string;
10
- readonly namespace: string;
11
- readonly operation: string;
12
- readonly forwardCookieNames: readonly string[];
13
- readonly writableCookieNames: readonly string[];
14
- readonly address: RegistryAddress;
15
- readonly errors: BrowserApiProviderAnnouncement['errors'];
16
- }
17
- export type BrowserApiRouteResolution = Readonly<{
18
- status: 'none';
19
- } | {
20
- status: 'unavailable';
21
- } | {
22
- status: 'available';
23
- provider: ActiveBrowserApiProvider;
24
- }>;
25
- /**
26
- * Transport-independent, immutable-on-read Browser API discovery catalog.
27
- * Announcements have already crossed the trusted Registry parsing boundary.
28
- */
29
- export declare class BrowserApiProviderCatalog {
30
- #private;
31
- reconcile(snapshots: readonly BrowserApiDiscoverySnapshot[], _now: Date): void;
32
- resolve(path: unknown, method: string, nowMs?: number, maxClockSkewMs?: number): BrowserApiRouteResolution;
33
- }
34
- //# sourceMappingURL=browser-api-provider-catalog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-api-provider-catalog.d.ts","sourceRoot":"","sources":["../../src/runtime/browser-api-provider-catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EACV,8BAA8B,EAE/B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,8BAA8B,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC,QAAQ,CAAC,CAAC;CAC3D;AAED,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAC5C;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GACzB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,wBAAwB,CAAA;CAAE,CAC9D,CAAC;AASF;;;GAGG;AACH,qBAAa,yBAAyB;;IAK7B,SAAS,CACd,SAAS,EAAE,SAAS,2BAA2B,EAAE,EACjD,IAAI,EAAE,IAAI,GACT,IAAI,CAoCN;IAEM,OAAO,CACZ,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,cAAc,SAAI,GACjB,yBAAyB,CAiC3B;CACF"}