@rezless/vm 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/dist/builtins/agents.d.ts +14 -0
  2. package/dist/builtins/agents.d.ts.map +1 -0
  3. package/dist/builtins/agents.js +117 -0
  4. package/dist/builtins/agents.js.map +1 -0
  5. package/dist/builtins/animation.d.ts +46 -0
  6. package/dist/builtins/animation.d.ts.map +1 -0
  7. package/dist/builtins/animation.js +316 -0
  8. package/dist/builtins/animation.js.map +1 -0
  9. package/dist/builtins/attachments.d.ts +9 -0
  10. package/dist/builtins/attachments.d.ts.map +1 -0
  11. package/dist/builtins/attachments.js +127 -0
  12. package/dist/builtins/attachments.js.map +1 -0
  13. package/dist/builtins/base64.d.ts +8 -0
  14. package/dist/builtins/base64.d.ts.map +1 -1
  15. package/dist/builtins/base64.js +1 -1
  16. package/dist/builtins/base64.js.map +1 -1
  17. package/dist/builtins/camera.d.ts +35 -0
  18. package/dist/builtins/camera.d.ts.map +1 -0
  19. package/dist/builtins/camera.js +104 -0
  20. package/dist/builtins/camera.js.map +1 -0
  21. package/dist/builtins/collision.d.ts +21 -0
  22. package/dist/builtins/collision.d.ts.map +1 -0
  23. package/dist/builtins/collision.js +44 -0
  24. package/dist/builtins/collision.js.map +1 -0
  25. package/dist/builtins/controls.d.ts +19 -0
  26. package/dist/builtins/controls.d.ts.map +1 -0
  27. package/dist/builtins/controls.js +27 -0
  28. package/dist/builtins/controls.js.map +1 -0
  29. package/dist/builtins/damage.d.ts +24 -0
  30. package/dist/builtins/damage.d.ts.map +1 -0
  31. package/dist/builtins/damage.js +166 -0
  32. package/dist/builtins/damage.js.map +1 -0
  33. package/dist/builtins/detected.d.ts +22 -1
  34. package/dist/builtins/detected.d.ts.map +1 -1
  35. package/dist/builtins/detected.js +27 -1
  36. package/dist/builtins/detected.js.map +1 -1
  37. package/dist/builtins/dialog.d.ts +23 -0
  38. package/dist/builtins/dialog.d.ts.map +1 -0
  39. package/dist/builtins/dialog.js +69 -0
  40. package/dist/builtins/dialog.js.map +1 -0
  41. package/dist/builtins/email.d.ts +61 -0
  42. package/dist/builtins/email.d.ts.map +1 -0
  43. package/dist/builtins/email.js +121 -0
  44. package/dist/builtins/email.js.map +1 -0
  45. package/dist/builtins/environment.d.ts +27 -0
  46. package/dist/builtins/environment.d.ts.map +1 -0
  47. package/dist/builtins/environment.js +126 -0
  48. package/dist/builtins/environment.js.map +1 -0
  49. package/dist/builtins/experience.d.ts +51 -0
  50. package/dist/builtins/experience.d.ts.map +1 -0
  51. package/dist/builtins/experience.js +202 -0
  52. package/dist/builtins/experience.js.map +1 -0
  53. package/dist/builtins/game-control.d.ts +17 -0
  54. package/dist/builtins/game-control.d.ts.map +1 -0
  55. package/dist/builtins/game-control.js +21 -0
  56. package/dist/builtins/game-control.js.map +1 -0
  57. package/dist/builtins/give.d.ts +16 -0
  58. package/dist/builtins/give.d.ts.map +1 -0
  59. package/dist/builtins/give.js +137 -0
  60. package/dist/builtins/give.js.map +1 -0
  61. package/dist/builtins/ground.d.ts +18 -0
  62. package/dist/builtins/ground.d.ts.map +1 -0
  63. package/dist/builtins/ground.js +83 -0
  64. package/dist/builtins/ground.js.map +1 -0
  65. package/dist/builtins/http.d.ts +99 -4
  66. package/dist/builtins/http.d.ts.map +1 -1
  67. package/dist/builtins/http.js +216 -6
  68. package/dist/builtins/http.js.map +1 -1
  69. package/dist/builtins/index.d.ts.map +1 -1
  70. package/dist/builtins/index.js +235 -10
  71. package/dist/builtins/index.js.map +1 -1
  72. package/dist/builtins/inventory.d.ts +1 -0
  73. package/dist/builtins/inventory.d.ts.map +1 -1
  74. package/dist/builtins/inventory.js +1 -1
  75. package/dist/builtins/inventory.js.map +1 -1
  76. package/dist/builtins/land.d.ts +29 -0
  77. package/dist/builtins/land.d.ts.map +1 -0
  78. package/dist/builtins/land.js +339 -0
  79. package/dist/builtins/land.js.map +1 -0
  80. package/dist/builtins/links.d.ts +20 -0
  81. package/dist/builtins/links.d.ts.map +1 -0
  82. package/dist/builtins/links.js +53 -0
  83. package/dist/builtins/links.js.map +1 -0
  84. package/dist/builtins/linksetdata.d.ts +5 -0
  85. package/dist/builtins/linksetdata.d.ts.map +1 -1
  86. package/dist/builtins/linksetdata.js +16 -0
  87. package/dist/builtins/linksetdata.js.map +1 -1
  88. package/dist/builtins/lists.d.ts +6 -0
  89. package/dist/builtins/lists.d.ts.map +1 -1
  90. package/dist/builtins/lists.js +19 -6
  91. package/dist/builtins/lists.js.map +1 -1
  92. package/dist/builtins/math.d.ts +16 -0
  93. package/dist/builtins/math.d.ts.map +1 -1
  94. package/dist/builtins/math.js +74 -0
  95. package/dist/builtins/math.js.map +1 -1
  96. package/dist/builtins/media.d.ts +8 -0
  97. package/dist/builtins/media.d.ts.map +1 -0
  98. package/dist/builtins/media.js +167 -0
  99. package/dist/builtins/media.js.map +1 -0
  100. package/dist/builtins/motion.d.ts +79 -0
  101. package/dist/builtins/motion.d.ts.map +1 -0
  102. package/dist/builtins/motion.js +396 -0
  103. package/dist/builtins/motion.js.map +1 -0
  104. package/dist/builtins/notecard-search.d.ts +15 -0
  105. package/dist/builtins/notecard-search.d.ts.map +1 -0
  106. package/dist/builtins/notecard-search.js +374 -0
  107. package/dist/builtins/notecard-search.js.map +1 -0
  108. package/dist/builtins/object-animation.d.ts +21 -0
  109. package/dist/builtins/object-animation.d.ts.map +1 -0
  110. package/dist/builtins/object-animation.js +193 -0
  111. package/dist/builtins/object-animation.js.map +1 -0
  112. package/dist/builtins/object-reads.d.ts +39 -0
  113. package/dist/builtins/object-reads.d.ts.map +1 -0
  114. package/dist/builtins/object-reads.js +332 -0
  115. package/dist/builtins/object-reads.js.map +1 -0
  116. package/dist/builtins/object.d.ts +6 -0
  117. package/dist/builtins/object.d.ts.map +1 -1
  118. package/dist/builtins/object.js +19 -3
  119. package/dist/builtins/object.js.map +1 -1
  120. package/dist/builtins/particles.d.ts +4 -0
  121. package/dist/builtins/particles.d.ts.map +1 -0
  122. package/dist/builtins/particles.js +65 -0
  123. package/dist/builtins/particles.js.map +1 -0
  124. package/dist/builtins/pathfinding.d.ts +39 -0
  125. package/dist/builtins/pathfinding.d.ts.map +1 -0
  126. package/dist/builtins/pathfinding.js +83 -0
  127. package/dist/builtins/pathfinding.js.map +1 -0
  128. package/dist/builtins/permissions.d.ts.map +1 -1
  129. package/dist/builtins/permissions.js +6 -0
  130. package/dist/builtins/permissions.js.map +1 -1
  131. package/dist/builtins/physics.d.ts +49 -0
  132. package/dist/builtins/physics.d.ts.map +1 -0
  133. package/dist/builtins/physics.js +47 -0
  134. package/dist/builtins/physics.js.map +1 -0
  135. package/dist/builtins/prim-accessors.d.ts +3 -0
  136. package/dist/builtins/prim-accessors.d.ts.map +1 -1
  137. package/dist/builtins/prim-accessors.js +27 -7
  138. package/dist/builtins/prim-accessors.js.map +1 -1
  139. package/dist/builtins/raycast.d.ts +3 -0
  140. package/dist/builtins/raycast.d.ts.map +1 -0
  141. package/dist/builtins/raycast.js +65 -0
  142. package/dist/builtins/raycast.js.map +1 -0
  143. package/dist/builtins/region.d.ts +31 -0
  144. package/dist/builtins/region.d.ts.map +1 -0
  145. package/dist/builtins/region.js +125 -0
  146. package/dist/builtins/region.js.map +1 -0
  147. package/dist/builtins/remote-load.d.ts +3 -0
  148. package/dist/builtins/remote-load.d.ts.map +1 -0
  149. package/dist/builtins/remote-load.js +53 -0
  150. package/dist/builtins/remote-load.js.map +1 -0
  151. package/dist/builtins/rez.d.ts +10 -0
  152. package/dist/builtins/rez.d.ts.map +1 -0
  153. package/dist/builtins/rez.js +255 -0
  154. package/dist/builtins/rez.js.map +1 -0
  155. package/dist/builtins/rsa.d.ts +4 -0
  156. package/dist/builtins/rsa.d.ts.map +1 -0
  157. package/dist/builtins/rsa.js +44 -0
  158. package/dist/builtins/rsa.js.map +1 -0
  159. package/dist/builtins/script-control.d.ts +6 -2
  160. package/dist/builtins/script-control.d.ts.map +1 -1
  161. package/dist/builtins/script-control.js +9 -4
  162. package/dist/builtins/script-control.js.map +1 -1
  163. package/dist/builtins/sensor.d.ts +11 -0
  164. package/dist/builtins/sensor.d.ts.map +1 -0
  165. package/dist/builtins/sensor.js +145 -0
  166. package/dist/builtins/sensor.js.map +1 -0
  167. package/dist/builtins/sit.d.ts +23 -0
  168. package/dist/builtins/sit.d.ts.map +1 -0
  169. package/dist/builtins/sit.js +150 -0
  170. package/dist/builtins/sit.js.map +1 -0
  171. package/dist/builtins/sound.d.ts +19 -0
  172. package/dist/builtins/sound.d.ts.map +1 -0
  173. package/dist/builtins/sound.js +113 -0
  174. package/dist/builtins/sound.js.map +1 -0
  175. package/dist/builtins/targets.d.ts +12 -0
  176. package/dist/builtins/targets.d.ts.map +1 -0
  177. package/dist/builtins/targets.js +121 -0
  178. package/dist/builtins/targets.js.map +1 -0
  179. package/dist/builtins/time.d.ts +12 -0
  180. package/dist/builtins/time.d.ts.map +1 -1
  181. package/dist/builtins/time.js +32 -4
  182. package/dist/builtins/time.js.map +1 -1
  183. package/dist/builtins/vehicles.d.ts +22 -0
  184. package/dist/builtins/vehicles.d.ts.map +1 -0
  185. package/dist/builtins/vehicles.js +78 -0
  186. package/dist/builtins/vehicles.js.map +1 -0
  187. package/dist/builtins/viewer.d.ts +39 -0
  188. package/dist/builtins/viewer.d.ts.map +1 -0
  189. package/dist/builtins/viewer.js +74 -0
  190. package/dist/builtins/viewer.js.map +1 -0
  191. package/dist/clock.d.ts +29 -1
  192. package/dist/clock.d.ts.map +1 -1
  193. package/dist/clock.js +89 -5
  194. package/dist/clock.js.map +1 -1
  195. package/dist/experience.d.ts +39 -0
  196. package/dist/experience.d.ts.map +1 -0
  197. package/dist/experience.js +38 -0
  198. package/dist/experience.js.map +1 -0
  199. package/dist/index.d.ts +20 -3
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +1 -0
  202. package/dist/index.js.map +1 -1
  203. package/dist/interpreter.d.ts +0 -1
  204. package/dist/interpreter.d.ts.map +1 -1
  205. package/dist/interpreter.js.map +1 -1
  206. package/dist/inventory.d.ts +2 -0
  207. package/dist/inventory.d.ts.map +1 -1
  208. package/dist/inventory.js +2 -0
  209. package/dist/inventory.js.map +1 -1
  210. package/dist/linkset.d.ts +139 -11
  211. package/dist/linkset.d.ts.map +1 -1
  212. package/dist/linkset.js +376 -24
  213. package/dist/linkset.js.map +1 -1
  214. package/dist/prim-params.d.ts.map +1 -1
  215. package/dist/prim-params.js +11 -3
  216. package/dist/prim-params.js.map +1 -1
  217. package/dist/prim.d.ts +94 -4
  218. package/dist/prim.d.ts.map +1 -1
  219. package/dist/prim.js +94 -5
  220. package/dist/prim.js.map +1 -1
  221. package/dist/runtime.d.ts +41 -0
  222. package/dist/runtime.d.ts.map +1 -1
  223. package/dist/script.d.ts +147 -2
  224. package/dist/script.d.ts.map +1 -1
  225. package/dist/script.js +373 -19
  226. package/dist/script.js.map +1 -1
  227. package/dist/values/ops.d.ts +3 -0
  228. package/dist/values/ops.d.ts.map +1 -1
  229. package/dist/values/ops.js +2 -2
  230. package/dist/values/ops.js.map +1 -1
  231. package/dist/world.d.ts +247 -1
  232. package/dist/world.d.ts.map +1 -1
  233. package/dist/world.js +318 -6
  234. package/dist/world.js.map +1 -1
  235. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"give.js","sourceRoot":"","sources":["../../src/builtins/give.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { BuiltinImpl } from '../runtime.js';
2
+ /** llGround(vector offset) — bilinear between the four whole-metre grid heights around the point. */
3
+ export declare const llGround: BuiltinImpl;
4
+ /** llGroundNormal(vector offset) */
5
+ export declare const llGroundNormal: BuiltinImpl;
6
+ /** llGroundSlope(vector offset) — the normal's x and y, with z -(x² + y²). */
7
+ export declare const llGroundSlope: BuiltinImpl;
8
+ /** llGroundContour(vector offset) — the slope turned a quarter left, flat. */
9
+ export declare const llGroundContour: BuiltinImpl;
10
+ /** llWater(vector offset) — one water height for the whole region. */
11
+ export declare const llWater: BuiltinImpl;
12
+ /** llWind(vector offset) */
13
+ export declare const llWind: BuiltinImpl;
14
+ /** llModifyLand(integer action, integer brush). No terraform rights are modelled. */
15
+ export declare const llModifyLand: BuiltinImpl;
16
+ /** llSetGroundTexture(list changes). No estate management rights are modelled. */
17
+ export declare const llSetGroundTexture: BuiltinImpl;
18
+ //# sourceMappingURL=ground.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground.d.ts","sourceRoot":"","sources":["../../src/builtins/ground.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,eAAe,CAAA;AAqC7D,qGAAqG;AACrG,eAAO,MAAM,QAAQ,EAAE,WAUtB,CAAA;AAiBD,oCAAoC;AACpC,eAAO,MAAM,cAAc,EAAE,WAA8C,CAAA;AAE3E,8EAA8E;AAC9E,eAAO,MAAM,aAAa,EAAE,WAG3B,CAAA;AAED,8EAA8E;AAC9E,eAAO,MAAM,eAAe,EAAE,WAG7B,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,OAAO,EAAE,WAA2D,CAAA;AAEjF,4BAA4B;AAC5B,eAAO,MAAM,MAAM,EAAE,WAMpB,CAAA;AAGD,qFAAqF;AACrF,eAAO,MAAM,YAAY,EAAE,WAA6B,CAAA;AAExD,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,EAAE,WAGhC,CAAA"}
@@ -0,0 +1,83 @@
1
+ import { toFloat32, vec } from '../values/types.js';
2
+ import { sayError } from './debug.js';
3
+ // Measured in SLua Tombolo and SLua Tideland on Aditi (2026-10-31).
4
+ const DEFAULT_GROUND = 22;
5
+ const DEFAULT_WATER = 20;
6
+ // llWind(ZERO_VECTOR) under the SLua Tideland platform. Real regions simulate their own wind.
7
+ const DEFAULT_WIND = vec(-0.654923, -2.482508, 0);
8
+ function settings(ctx) {
9
+ const { world, region } = ctx.linkset;
10
+ return world ? world.region(region) : {};
11
+ }
12
+ /**
13
+ * The region x and y the call reads: the prim's position plus the offset's x
14
+ * and y, held between -1 and 256. The terrain grid has a line of heights
15
+ * just outside the west and south edges, and one along the east and north.
16
+ */
17
+ function point(ctx, args) {
18
+ const offset = args[0] ?? { x: 0, y: 0, z: 0 };
19
+ const pos = ctx.prim.regionPosition();
20
+ return [clamp(pos.x + offset.x), clamp(pos.y + offset.y)];
21
+ }
22
+ const clamp = (v) => Math.min(Math.max(v, -1), 256);
23
+ function heights(r) {
24
+ const ground = r.ground ?? DEFAULT_GROUND;
25
+ return typeof ground === 'number' ? () => ground : (x, y) => ground(clamp(x), clamp(y));
26
+ }
27
+ /** llGround(vector offset) — bilinear between the four whole-metre grid heights around the point. */
28
+ export const llGround = (ctx, args) => {
29
+ const h = heights(settings(ctx));
30
+ const [x, y] = point(ctx, args);
31
+ const fx = Math.floor(x);
32
+ const fy = Math.floor(y);
33
+ const u = x - fx;
34
+ const v = y - fy;
35
+ const south = h(fx, fy) * (1 - u) + h(fx + 1, fy) * u;
36
+ const north = h(fx, fy + 1) * (1 - u) + h(fx + 1, fy + 1) * u;
37
+ return toFloat32(south * (1 - v) + north * v);
38
+ };
39
+ /**
40
+ * The ground normal, not unit length: its x is the height drop across the
41
+ * point's cell along the nearest grid row, its y the drop along the nearest
42
+ * grid column, and its z 1.
43
+ */
44
+ function normal(ctx, args) {
45
+ const h = heights(settings(ctx));
46
+ const [x, y] = point(ctx, args);
47
+ const fx = Math.floor(x);
48
+ const fy = Math.floor(y);
49
+ const rx = Math.round(x);
50
+ const ry = Math.round(y);
51
+ return vec(h(fx, ry) - h(fx + 1, ry) + 0, h(rx, fy) - h(rx, fy + 1) + 0, 1);
52
+ }
53
+ /** llGroundNormal(vector offset) */
54
+ export const llGroundNormal = (ctx, args) => normal(ctx, args);
55
+ /** llGroundSlope(vector offset) — the normal's x and y, with z -(x² + y²). */
56
+ export const llGroundSlope = (ctx, args) => {
57
+ const n = normal(ctx, args);
58
+ return vec(n.x, n.y, -(n.x * n.x + n.y * n.y) + 0);
59
+ };
60
+ /** llGroundContour(vector offset) — the slope turned a quarter left, flat. */
61
+ export const llGroundContour = (ctx, args) => {
62
+ const n = normal(ctx, args);
63
+ return vec(-n.y + 0, n.x, 0);
64
+ };
65
+ /** llWater(vector offset) — one water height for the whole region. */
66
+ export const llWater = (ctx) => settings(ctx).water ?? DEFAULT_WATER;
67
+ /** llWind(vector offset) */
68
+ export const llWind = (ctx, args) => {
69
+ const wind = settings(ctx).wind ?? DEFAULT_WIND;
70
+ if (typeof wind !== 'function')
71
+ return vec(wind.x, wind.y, wind.z);
72
+ const [x, y] = point(ctx, args);
73
+ const w = wind(x, y);
74
+ return vec(w.x, w.y, w.z);
75
+ };
76
+ /** llModifyLand(integer action, integer brush). No terraform rights are modelled. */
77
+ export const llModifyLand = () => undefined;
78
+ /** llSetGroundTexture(list changes). No estate management rights are modelled. */
79
+ export const llSetGroundTexture = (ctx) => {
80
+ sayError(ctx, 'llSetGroundTexture object owner must be able to manage estate.');
81
+ return 0;
82
+ };
83
+ //# sourceMappingURL=ground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground.js","sourceRoot":"","sources":["../../src/builtins/ground.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,15 @@
1
- import type { BuiltinImpl } from '../runtime.js';
1
+ import type { BuiltinImpl, ScriptState } from '../runtime.js';
2
+ import type { Script } from '../script.js';
2
3
  import type { LslValue } from '../values/types.js';
3
4
  import { NULL_KEY } from '../values/types.js';
4
5
  /** Response bodies longer than this are cut unless HTTP_BODY_MAXLENGTH says otherwise. */
5
6
  export declare const DEFAULT_HTTP_BODY_MAXLENGTH = 2048;
7
+ /** URLs a region has free before any script takes one. */
8
+ export declare const DEFAULT_FREE_URLS = 20000;
9
+ /** An incoming request nobody answers gets the timeout response after this long. */
10
+ export declare const HTTP_IN_TIMEOUT_MS = 25000;
11
+ /** Incoming request bodies are cut to this many bytes. */
12
+ export declare const MAX_INCOMING_BODY_BYTES = 2048;
6
13
  /**
7
14
  * Captured outgoing HTTP request, exposed via Script.httpRequests so tests
8
15
  * can assert on what the script fired off, and reply to it via
@@ -37,11 +44,99 @@ export interface HttpRequestEntry {
37
44
  * returns a key and answers with an http_response error instead.
38
45
  */
39
46
  export declare const llHTTPRequest: BuiltinImpl;
47
+ /** The answer a script gave an incoming request with llHTTPResponse. */
48
+ export interface IncomingHttpResponse {
49
+ readonly status: number;
50
+ readonly body: string;
51
+ /** The Content-Type header the response is sent with. */
52
+ readonly contentType: string;
53
+ }
54
+ /** What a test sends to a script's URL with `script.sendHttpRequest`. */
55
+ export interface IncomingHttpInit {
56
+ /** Default `GET`. */
57
+ readonly method?: string;
58
+ /**
59
+ * Request headers. The script can read only `User-Agent` with
60
+ * llGetHTTPHeader; an `X-Forwarded-For` is put in front of the sender's
61
+ * address in `x-remote-ip`. Names are case-insensitive.
62
+ */
63
+ readonly headers?: Readonly<Record<string, string>>;
64
+ /**
65
+ * Sent as UTF-8. The script reads it as UTF-8 only when the Content-Type
66
+ * header has `charset=utf-8`; otherwise each byte becomes one character.
67
+ */
68
+ readonly body?: string;
69
+ /** The sender's address, read through `x-remote-ip`. Default `127.0.0.1`. */
70
+ readonly remoteIp?: string;
71
+ }
72
+ /** A request sent to one of a script's URLs, and the response it got. */
73
+ export declare class IncomingHttpRequest {
74
+ /** The request_id the script sees in http_request. */
75
+ readonly key: string;
76
+ /** The full URL the request went to, path and query included. */
77
+ readonly url: string;
78
+ readonly method: string;
79
+ /** The body the script receives, cut to MAX_INCOMING_BODY_BYTES. */
80
+ readonly body: string;
81
+ /** Request headers as llGetHTTPHeader reads them, names in lowercase. */
82
+ readonly headers: ReadonlyMap<string, string>;
83
+ private readonly clock;
84
+ /** Virtual time the request arrived. */
85
+ readonly sentAt: number;
86
+ /** Content type llSetContentType chose, as a CONTENT_TYPE_* value. */
87
+ contentType: number;
88
+ private answer;
89
+ constructor(
90
+ /** The request_id the script sees in http_request. */
91
+ key: string,
92
+ /** The full URL the request went to, path and query included. */
93
+ url: string, method: string,
94
+ /** The body the script receives, cut to MAX_INCOMING_BODY_BYTES. */
95
+ body: string,
96
+ /** Request headers as llGetHTTPHeader reads them, names in lowercase. */
97
+ headers: ReadonlyMap<string, string>, clock: {
98
+ readonly now: number;
99
+ },
100
+ /** Virtual time the request arrived. */
101
+ sentAt: number);
102
+ /**
103
+ * The script's llHTTPResponse, or the timeout response once
104
+ * HTTP_IN_TIMEOUT_MS has passed without one; undefined while it's pending.
105
+ */
106
+ get response(): IncomingHttpResponse | undefined;
107
+ /** Whether the request can still be answered. */
108
+ get open(): boolean;
109
+ respond(response: IncomingHttpResponse): void;
110
+ private get timedOut();
111
+ }
112
+ /**
113
+ * llRequestURL() → key. Grants the script a new URL, or denies it after
114
+ * `script.denyUrls()` or when no URLs are free, through an http_request
115
+ * event with method URL_REQUEST_GRANTED or URL_REQUEST_DENIED.
116
+ */
117
+ export declare const llRequestURL: BuiltinImpl;
118
+ /** llRequestSecureURL() → key. As llRequestURL, with an https URL. */
119
+ export declare const llRequestSecureURL: BuiltinImpl;
120
+ /** llReleaseURL(string url). Frees one of the script's URLs; later requests to it fail. */
121
+ export declare const llReleaseURL: BuiltinImpl;
122
+ /** llGetFreeURLs() → integer. URLs the region has left, after every script's held URLs. */
123
+ export declare const llGetFreeURLs: BuiltinImpl;
124
+ /** llGetHTTPHeader(key request_id, string header) → string. "" once the request is answered or timed out. */
125
+ export declare const llGetHTTPHeader: BuiltinImpl;
126
+ /** llSetContentType(key request_id, integer content_type). */
127
+ export declare const llSetContentType: BuiltinImpl;
40
128
  /**
41
- * llHTTPResponse(key request_id, integer status, string body) — used by
42
- * scripts that hold an inbound HTTP request from llRequestURL. Captured
43
- * but not otherwise modelled (no inbound URL feature in this PR).
129
+ * llHTTPResponse(key request_id, integer status, string body). Answers an
130
+ * incoming request once; later answers and unknown keys do nothing. A
131
+ * status below 100 is sent as 200.
44
132
  */
45
133
  export declare const llHTTPResponse: BuiltinImpl;
134
+ /**
135
+ * Deliver a test's request to the script holding `url` (the URL itself, or
136
+ * it followed by a path and query) as an http_request event. A URL the
137
+ * script doesn't hold gets a 404, and a method the region doesn't pass on
138
+ * gets the region's own answer, without the script seeing either.
139
+ */
140
+ export declare function sendIncomingHttp(script: Script, state: ScriptState, url: string, init: IncomingHttpInit): IncomingHttpRequest;
46
141
  export { NULL_KEY as HTTP_NULL_KEY };
47
142
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/builtins/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,eAAe,CAAA;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAW7C,0FAA0F;AAC1F,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAO/C;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACvE,4FAA4F;IAC5F,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC5C,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAA;CACnB;AA8ED;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE,WA0D3B,CAAA;AA4BD;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,WAE5B,CAAA;AAED,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/builtins/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,WAAW,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAwB7C,0FAA0F;AAC1F,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAK/C,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,QAAQ,CAAA;AACtC,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,QAAS,CAAA;AACxC,0DAA0D;AAC1D,eAAO,MAAM,uBAAuB,OAAO,CAAA;AAqB3C;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACvE,4FAA4F;IAC5F,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC5C,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAA;CACnB;AA8ED;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE,WA0D3B,CAAA;AA4BD,wEAAwE;AACxE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,yDAAyD;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,qBAAqB;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,yEAAyE;AACzE,qBAAa,mBAAmB;IAM5B,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,iEAAiE;IACjE,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAhBzB,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAoB;IACvC,OAAO,CAAC,MAAM,CAAkC;IAEhD;IACE,sDAAsD;IAC7C,GAAG,EAAE,MAAM;IACpB,iEAAiE;IACxD,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM;IACvB,oEAAoE;IAC3D,IAAI,EAAE,MAAM;IACrB,yEAAyE;IAChE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,KAAK,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAChD,wCAAwC;IAC/B,MAAM,EAAE,MAAM,EACrB;IAEJ;;;OAGG;IACH,IAAI,QAAQ,IAAI,oBAAoB,GAAG,SAAS,CAI/C;IAED,iDAAiD;IACjD,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,OAAO,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAE5C;IAED,OAAO,KAAK,QAAQ,GAEnB;CACF;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,WAA6C,CAAA;AAExE,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,EAAE,WAA4C,CAAA;AAmB7E,2FAA2F;AAC3F,eAAO,MAAM,YAAY,EAAE,WAK1B,CAAA;AAED,2FAA2F;AAC3F,eAAO,MAAM,aAAa,EAAE,WAAoC,CAAA;AAUhE,6GAA6G;AAC7G,eAAO,MAAM,eAAe,EAAE,WAG7B,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,EAAE,WAI9B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,WAU5B,CAAA;AAOD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,gBAAgB,GACrB,mBAAmB,CAwCrB;AAgBD,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,CAAA"}
@@ -1,6 +1,8 @@
1
1
  import { NULL_KEY } from '../values/types.js';
2
- import { HTTP_METHOD, HTTP_MIMETYPE, HTTP_CUSTOM_HEADER, HTTP_BODY_MAXLENGTH, HTTP_EXTENDED_ERROR, } from '../generated/constants.js';
3
- import { requestKey } from '../keys.js';
2
+ import { HTTP_METHOD, HTTP_MIMETYPE, HTTP_CUSTOM_HEADER, HTTP_BODY_MAXLENGTH, HTTP_EXTENDED_ERROR, CONTENT_TYPE_TEXT, CONTENT_TYPE_HTML, CONTENT_TYPE_XML, CONTENT_TYPE_XHTML, CONTENT_TYPE_ATOM, CONTENT_TYPE_JSON, CONTENT_TYPE_LLSD, CONTENT_TYPE_FORM, CONTENT_TYPE_RSS, URL_REQUEST_GRANTED, URL_REQUEST_DENIED, } from '../generated/constants.js';
3
+ import { truncateUtf8 } from '../values/utf8.js';
4
+ import { llGetSimulatorHostname } from './region.js';
5
+ import { deterministicKey, requestKey } from '../keys.js';
4
6
  import { sayError } from './debug.js';
5
7
  /** Response bodies longer than this are cut unless HTTP_BODY_MAXLENGTH says otherwise. */
6
8
  export const DEFAULT_HTTP_BODY_MAXLENGTH = 2048;
@@ -8,6 +10,30 @@ const MAX_HTTP_BODY_MAXLENGTH = 16384;
8
10
  /** Requests allowed per object within HTTP_THROTTLE_WINDOW_MS. */
9
11
  const HTTP_THROTTLE_REQUESTS = 25;
10
12
  const HTTP_THROTTLE_WINDOW_MS = 20_000;
13
+ /** URLs a region has free before any script takes one. */
14
+ export const DEFAULT_FREE_URLS = 20000;
15
+ /** An incoming request nobody answers gets the timeout response after this long. */
16
+ export const HTTP_IN_TIMEOUT_MS = 25_000;
17
+ /** Incoming request bodies are cut to this many bytes. */
18
+ export const MAX_INCOMING_BODY_BYTES = 2048;
19
+ /** Methods the region passes on to the script. */
20
+ const INCOMING_METHODS = new Set(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']);
21
+ const TIMEOUT_RESPONSE = {
22
+ status: 504,
23
+ body: 'Timed out waiting for response from internal server.',
24
+ contentType: 'text/plain',
25
+ };
26
+ const CONTENT_TYPES = {
27
+ [CONTENT_TYPE_TEXT]: 'text/plain',
28
+ [CONTENT_TYPE_HTML]: 'text/plain',
29
+ [CONTENT_TYPE_XML]: 'application/xml',
30
+ [CONTENT_TYPE_XHTML]: 'application/xhtml+xml',
31
+ [CONTENT_TYPE_ATOM]: 'application/atom+xml',
32
+ [CONTENT_TYPE_JSON]: 'application/json',
33
+ [CONTENT_TYPE_LLSD]: 'application/llsd+xml',
34
+ [CONTENT_TYPE_FORM]: 'application/x-www-form-urlencoded',
35
+ [CONTENT_TYPE_RSS]: 'application/rss+xml',
36
+ };
11
37
  const HTTP_METHODS = new Set(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD']);
12
38
  function parseOptions(raw) {
13
39
  const out = {
@@ -153,13 +179,197 @@ function isValidUrl(url) {
153
179
  return false;
154
180
  }
155
181
  }
182
+ /** A request sent to one of a script's URLs, and the response it got. */
183
+ export class IncomingHttpRequest {
184
+ key;
185
+ url;
186
+ method;
187
+ body;
188
+ headers;
189
+ clock;
190
+ sentAt;
191
+ /** Content type llSetContentType chose, as a CONTENT_TYPE_* value. */
192
+ contentType = CONTENT_TYPE_TEXT;
193
+ answer;
194
+ constructor(
195
+ /** The request_id the script sees in http_request. */
196
+ key,
197
+ /** The full URL the request went to, path and query included. */
198
+ url, method,
199
+ /** The body the script receives, cut to MAX_INCOMING_BODY_BYTES. */
200
+ body,
201
+ /** Request headers as llGetHTTPHeader reads them, names in lowercase. */
202
+ headers, clock,
203
+ /** Virtual time the request arrived. */
204
+ sentAt) {
205
+ this.key = key;
206
+ this.url = url;
207
+ this.method = method;
208
+ this.body = body;
209
+ this.headers = headers;
210
+ this.clock = clock;
211
+ this.sentAt = sentAt;
212
+ }
213
+ /**
214
+ * The script's llHTTPResponse, or the timeout response once
215
+ * HTTP_IN_TIMEOUT_MS has passed without one; undefined while it's pending.
216
+ */
217
+ get response() {
218
+ if (this.answer)
219
+ return this.answer;
220
+ if (this.timedOut)
221
+ return TIMEOUT_RESPONSE;
222
+ return undefined;
223
+ }
224
+ /** Whether the request can still be answered. */
225
+ get open() {
226
+ return this.answer === undefined && !this.timedOut;
227
+ }
228
+ respond(response) {
229
+ this.answer = response;
230
+ }
231
+ get timedOut() {
232
+ return this.clock.now >= this.sentAt + HTTP_IN_TIMEOUT_MS;
233
+ }
234
+ }
235
+ /**
236
+ * llRequestURL() → key. Grants the script a new URL, or denies it after
237
+ * `script.denyUrls()` or when no URLs are free, through an http_request
238
+ * event with method URL_REQUEST_GRANTED or URL_REQUEST_DENIED.
239
+ */
240
+ export const llRequestURL = (ctx) => requestUrl(ctx, false);
241
+ /** llRequestSecureURL() → key. As llRequestURL, with an https URL. */
242
+ export const llRequestSecureURL = (ctx) => requestUrl(ctx, true);
243
+ function requestUrl(ctx, secure) {
244
+ const key = nextKey(ctx);
245
+ const state = ctx.state;
246
+ let method = URL_REQUEST_DENIED;
247
+ let body = '';
248
+ if (state.urlPolicy === 'grant' && freeUrls(ctx) > 0) {
249
+ state.urlCounter += 1;
250
+ const host = llGetSimulatorHostname(ctx, []);
251
+ const cap = requestKey(ctx, 'url', state.urlCounter);
252
+ body = secure ? `https://${host}:12043/cap/${cap}` : `http://${host}:12046/cap/${cap}`;
253
+ state.urls.push(body);
254
+ method = URL_REQUEST_GRANTED;
255
+ }
256
+ ctx.state.clock.schedule(ctx.state.clock.now, 'http_request', { request_id: key, method, body });
257
+ return key;
258
+ }
259
+ /** llReleaseURL(string url). Frees one of the script's URLs; later requests to it fail. */
260
+ export const llReleaseURL = (ctx, args) => {
261
+ const url = args[0] ?? '';
262
+ const at = ctx.state.urls.indexOf(url);
263
+ if (at >= 0)
264
+ ctx.state.urls.splice(at, 1);
265
+ return undefined;
266
+ };
267
+ /** llGetFreeURLs() → integer. URLs the region has left, after every script's held URLs. */
268
+ export const llGetFreeURLs = (ctx) => freeUrls(ctx);
269
+ function freeUrls(ctx) {
270
+ const { peers, region } = ctx.linkset;
271
+ const linksets = peers.filter((l) => l.region === region);
272
+ let held = 0;
273
+ for (const l of linksets)
274
+ for (const s of l.allScripts())
275
+ held += s.urls.length;
276
+ return Math.max(0, DEFAULT_FREE_URLS - held);
277
+ }
278
+ /** llGetHTTPHeader(key request_id, string header) → string. "" once the request is answered or timed out. */
279
+ export const llGetHTTPHeader = (ctx, args) => {
280
+ const req = openRequest(ctx, args[0]);
281
+ return req?.headers.get(args[1] ?? '') ?? '';
282
+ };
283
+ /** llSetContentType(key request_id, integer content_type). */
284
+ export const llSetContentType = (ctx, args) => {
285
+ const req = openRequest(ctx, args[0]);
286
+ if (req)
287
+ req.contentType = args[1] ?? CONTENT_TYPE_TEXT;
288
+ return undefined;
289
+ };
156
290
  /**
157
- * llHTTPResponse(key request_id, integer status, string body) — used by
158
- * scripts that hold an inbound HTTP request from llRequestURL. Captured
159
- * but not otherwise modelled (no inbound URL feature in this PR).
291
+ * llHTTPResponse(key request_id, integer status, string body). Answers an
292
+ * incoming request once; later answers and unknown keys do nothing. A
293
+ * status below 100 is sent as 200.
160
294
  */
161
- export const llHTTPResponse = () => {
295
+ export const llHTTPResponse = (ctx, args) => {
296
+ const req = openRequest(ctx, args[0]);
297
+ if (!req)
298
+ return undefined;
299
+ const status = args[1] ?? 0;
300
+ req.respond({
301
+ status: status < 100 ? 200 : status,
302
+ body: args[2] ?? '',
303
+ contentType: `${CONTENT_TYPES[req.contentType] ?? 'text/plain'}; charset=utf-8`,
304
+ });
162
305
  return undefined;
163
306
  };
307
+ function openRequest(ctx, key) {
308
+ const req = ctx.state.incomingHttp.find((r) => r.key === key);
309
+ return req?.open ? req : undefined;
310
+ }
311
+ /**
312
+ * Deliver a test's request to the script holding `url` (the URL itself, or
313
+ * it followed by a path and query) as an http_request event. A URL the
314
+ * script doesn't hold gets a 404, and a method the region doesn't pass on
315
+ * gets the region's own answer, without the script seeing either.
316
+ */
317
+ export function sendIncomingHttp(script, state, url, init) {
318
+ const clock = script.linkset.clock;
319
+ const method = init.method ?? 'GET';
320
+ const base = state.urls.find((u) => url === u || url.startsWith(u + '/') || url.startsWith(u + '?'));
321
+ const answered = (response) => {
322
+ const req = new IncomingHttpRequest('', url, method, init.body ?? '', new Map(), clock, clock.now);
323
+ req.respond(response);
324
+ return req;
325
+ };
326
+ if (!base) {
327
+ const cap = /\/cap\/([^/?]*)/.exec(url)?.[1] ?? '';
328
+ return answered({ status: 404, body: `cap not found: '${cap}'\n`, contentType: '' });
329
+ }
330
+ if (!INCOMING_METHODS.has(method)) {
331
+ if (method === 'OPTIONS')
332
+ return answered({ status: 200, body: 'OK', contentType: 'text/plain' });
333
+ if (method === 'HEAD')
334
+ return answered({ status: 400, body: '', contentType: '' });
335
+ return answered({ status: 501, body: '', contentType: 'text/html; charset=iso-8859-1' });
336
+ }
337
+ const rest = url.slice(base.length);
338
+ const q = rest.indexOf('?');
339
+ const given = new Map();
340
+ for (const [name, value] of Object.entries(init.headers ?? {}))
341
+ given.set(name.toLowerCase(), value);
342
+ const remoteIp = init.remoteIp ?? '127.0.0.1';
343
+ const forwarded = given.get('x-forwarded-for');
344
+ const headers = new Map([
345
+ ['x-script-url', base],
346
+ ['x-path-info', q < 0 ? rest : rest.slice(0, q)],
347
+ ['x-query-string', q < 0 ? '' : rest.slice(q + 1)],
348
+ ['x-remote-ip', forwarded ? `${forwarded}, ${remoteIp}` : remoteIp],
349
+ ['user-agent', given.get('user-agent') ?? ''],
350
+ ]);
351
+ state.httpInCounter += 1;
352
+ const key = deterministicKey(`${script.host.key}/${script.scriptName}/http-in/${state.httpInCounter}`);
353
+ const body = method === 'DELETE' ? '' : incomingBody(init.body ?? '', given.get('content-type') ?? '');
354
+ const req = new IncomingHttpRequest(key, url, method, body, headers, clock, clock.now);
355
+ state.incomingHttp.push(req);
356
+ const started = script.handles('http_request') ? [script] : [];
357
+ script.clockView.schedule(clock.now, 'http_request', { request_id: key, method, body });
358
+ script.linkset.settle(started);
359
+ return req;
360
+ }
361
+ /**
362
+ * The body as the script receives it. Without `charset=utf-8` in its
363
+ * Content-Type, each byte of the body becomes one character. The result is
364
+ * cut to MAX_INCOMING_BODY_BYTES, and a character the cut splits becomes "?".
365
+ */
366
+ function incomingBody(body, contentType) {
367
+ const text = /charset\s*=\s*utf-8/i.test(contentType)
368
+ ? body
369
+ : Buffer.from(body, 'utf8').toString('latin1');
370
+ const cut = truncateUtf8(text, MAX_INCOMING_BODY_BYTES);
371
+ const split = cut.length < text.length && Buffer.byteLength(cut, 'utf8') < MAX_INCOMING_BODY_BYTES;
372
+ return split ? cut + '?' : cut;
373
+ }
164
374
  export { NULL_KEY as HTTP_NULL_KEY };
165
375
  //# sourceMappingURL=http.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/builtins/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/builtins/http.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builtins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAqQhD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CA4P/D,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builtins/index.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AA2XhD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAyb/D,CAAA"}