@rezless/vm 0.4.0 → 0.6.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 (148) hide show
  1. package/dist/builtins/base64.d.ts.map +1 -1
  2. package/dist/builtins/base64.js +29 -2
  3. package/dist/builtins/base64.js.map +1 -1
  4. package/dist/builtins/chat.d.ts +7 -1
  5. package/dist/builtins/chat.d.ts.map +1 -1
  6. package/dist/builtins/chat.js +26 -29
  7. package/dist/builtins/chat.js.map +1 -1
  8. package/dist/builtins/dataserver.d.ts +2 -1
  9. package/dist/builtins/dataserver.d.ts.map +1 -1
  10. package/dist/builtins/dataserver.js +5 -4
  11. package/dist/builtins/dataserver.js.map +1 -1
  12. package/dist/builtins/debug.d.ts +4 -0
  13. package/dist/builtins/debug.d.ts.map +1 -0
  14. package/dist/builtins/debug.js +7 -0
  15. package/dist/builtins/debug.js.map +1 -0
  16. package/dist/builtins/http.d.ts +8 -1
  17. package/dist/builtins/http.d.ts.map +1 -1
  18. package/dist/builtins/http.js +87 -9
  19. package/dist/builtins/http.js.map +1 -1
  20. package/dist/builtins/identity.d.ts +2 -0
  21. package/dist/builtins/identity.d.ts.map +1 -1
  22. package/dist/builtins/identity.js +9 -1
  23. package/dist/builtins/identity.js.map +1 -1
  24. package/dist/builtins/index.d.ts.map +1 -1
  25. package/dist/builtins/index.js +37 -7
  26. package/dist/builtins/index.js.map +1 -1
  27. package/dist/builtins/inventory.d.ts +13 -2
  28. package/dist/builtins/inventory.d.ts.map +1 -1
  29. package/dist/builtins/inventory.js +82 -43
  30. package/dist/builtins/inventory.js.map +1 -1
  31. package/dist/builtins/json.d.ts.map +1 -1
  32. package/dist/builtins/json.js +11 -36
  33. package/dist/builtins/json.js.map +1 -1
  34. package/dist/builtins/link-info.d.ts +1 -1
  35. package/dist/builtins/link-info.d.ts.map +1 -1
  36. package/dist/builtins/link-info.js +2 -2
  37. package/dist/builtins/link-info.js.map +1 -1
  38. package/dist/builtins/linksetdata.d.ts.map +1 -1
  39. package/dist/builtins/linksetdata.js +298 -31
  40. package/dist/builtins/linksetdata.js.map +1 -1
  41. package/dist/builtins/listen.d.ts +3 -1
  42. package/dist/builtins/listen.d.ts.map +1 -1
  43. package/dist/builtins/listen.js +9 -1
  44. package/dist/builtins/listen.js.map +1 -1
  45. package/dist/builtins/lists.d.ts +21 -0
  46. package/dist/builtins/lists.d.ts.map +1 -1
  47. package/dist/builtins/lists.js +82 -38
  48. package/dist/builtins/lists.js.map +1 -1
  49. package/dist/builtins/math.d.ts +27 -4
  50. package/dist/builtins/math.d.ts.map +1 -1
  51. package/dist/builtins/math.js +118 -41
  52. package/dist/builtins/math.js.map +1 -1
  53. package/dist/builtins/memory.d.ts +11 -0
  54. package/dist/builtins/memory.d.ts.map +1 -0
  55. package/dist/builtins/memory.js +17 -0
  56. package/dist/builtins/memory.js.map +1 -0
  57. package/dist/builtins/permissions.d.ts +18 -0
  58. package/dist/builtins/permissions.d.ts.map +1 -0
  59. package/dist/builtins/permissions.js +17 -0
  60. package/dist/builtins/permissions.js.map +1 -0
  61. package/dist/builtins/prim-accessors.d.ts +1 -0
  62. package/dist/builtins/prim-accessors.d.ts.map +1 -1
  63. package/dist/builtins/prim-accessors.js +44 -42
  64. package/dist/builtins/prim-accessors.js.map +1 -1
  65. package/dist/builtins/prim-params.d.ts +1 -1
  66. package/dist/builtins/prim-params.d.ts.map +1 -1
  67. package/dist/builtins/prim-params.js +19 -11
  68. package/dist/builtins/prim-params.js.map +1 -1
  69. package/dist/builtins/strings.d.ts.map +1 -1
  70. package/dist/builtins/strings.js +37 -33
  71. package/dist/builtins/strings.js.map +1 -1
  72. package/dist/builtins/time.d.ts +2 -0
  73. package/dist/builtins/time.d.ts.map +1 -1
  74. package/dist/builtins/time.js +2 -0
  75. package/dist/builtins/time.js.map +1 -1
  76. package/dist/clock.d.ts +23 -9
  77. package/dist/clock.d.ts.map +1 -1
  78. package/dist/clock.js +40 -13
  79. package/dist/clock.js.map +1 -1
  80. package/dist/dispatch.d.ts.map +1 -1
  81. package/dist/dispatch.js +10 -3
  82. package/dist/dispatch.js.map +1 -1
  83. package/dist/env.d.ts +14 -3
  84. package/dist/env.d.ts.map +1 -1
  85. package/dist/env.js +50 -10
  86. package/dist/env.js.map +1 -1
  87. package/dist/index.d.ts +2 -0
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +1 -0
  90. package/dist/index.js.map +1 -1
  91. package/dist/interpreter.d.ts.map +1 -1
  92. package/dist/interpreter.js +44 -23
  93. package/dist/interpreter.js.map +1 -1
  94. package/dist/inventory.d.ts +2 -0
  95. package/dist/inventory.d.ts.map +1 -1
  96. package/dist/inventory.js +4 -0
  97. package/dist/inventory.js.map +1 -1
  98. package/dist/keys.d.ts +6 -0
  99. package/dist/keys.d.ts.map +1 -0
  100. package/dist/keys.js +20 -0
  101. package/dist/keys.js.map +1 -0
  102. package/dist/linkset.d.ts +28 -3
  103. package/dist/linkset.d.ts.map +1 -1
  104. package/dist/linkset.js +66 -7
  105. package/dist/linkset.js.map +1 -1
  106. package/dist/memory.d.ts +55 -0
  107. package/dist/memory.d.ts.map +1 -0
  108. package/dist/memory.js +235 -0
  109. package/dist/memory.js.map +1 -0
  110. package/dist/prim-params.d.ts +5 -0
  111. package/dist/prim-params.d.ts.map +1 -1
  112. package/dist/prim-params.js +187 -107
  113. package/dist/prim-params.js.map +1 -1
  114. package/dist/prim.d.ts +6 -1
  115. package/dist/prim.d.ts.map +1 -1
  116. package/dist/prim.js +23 -3
  117. package/dist/prim.js.map +1 -1
  118. package/dist/runtime.d.ts +14 -1
  119. package/dist/runtime.d.ts.map +1 -1
  120. package/dist/script.d.ts +35 -2
  121. package/dist/script.d.ts.map +1 -1
  122. package/dist/script.js +127 -34
  123. package/dist/script.js.map +1 -1
  124. package/dist/values/coerce.d.ts +11 -0
  125. package/dist/values/coerce.d.ts.map +1 -1
  126. package/dist/values/coerce.js +65 -38
  127. package/dist/values/coerce.js.map +1 -1
  128. package/dist/values/format.d.ts +24 -16
  129. package/dist/values/format.d.ts.map +1 -1
  130. package/dist/values/format.js +42 -25
  131. package/dist/values/format.js.map +1 -1
  132. package/dist/values/list-types.d.ts +2 -0
  133. package/dist/values/list-types.d.ts.map +1 -1
  134. package/dist/values/list-types.js +4 -0
  135. package/dist/values/list-types.js.map +1 -1
  136. package/dist/values/ops.d.ts +2 -1
  137. package/dist/values/ops.d.ts.map +1 -1
  138. package/dist/values/ops.js +13 -5
  139. package/dist/values/ops.js.map +1 -1
  140. package/dist/values/utf8.d.ts +3 -0
  141. package/dist/values/utf8.d.ts.map +1 -0
  142. package/dist/values/utf8.js +14 -0
  143. package/dist/values/utf8.js.map +1 -0
  144. package/dist/world.d.ts +29 -0
  145. package/dist/world.d.ts.map +1 -0
  146. package/dist/world.js +29 -0
  147. package/dist/world.js.map +1 -0
  148. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/builtins/base64.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD;;;;GAIG;AAEH,eAAO,MAAM,gBAAgB,EAAE,WAG9B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,WAI9B,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAK/B,CAAA;AA6BD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,WAMzB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAK/B,CAAA"}
1
+ {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/builtins/base64.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD;;;;GAIG;AAEH,eAAO,MAAM,gBAAgB,EAAE,WAG9B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,WAG9B,CAAA;AA6BD;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAK/B,CAAA;AA6BD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,WAMzB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAK/B,CAAA"}
@@ -10,9 +10,36 @@ export const llStringToBase64 = (_ctx, args) => {
10
10
  };
11
11
  export const llBase64ToString = (_ctx, args) => {
12
12
  const s = args[0] ?? '';
13
- // LSL silently tolerates malformed input; Buffer does too.
14
- return Buffer.from(s, 'base64').toString('utf8');
13
+ return decodeUtf8Lenient(Buffer.from(s, 'base64'));
15
14
  };
15
+ /** UTF-8 decode where NUL and each byte of an invalid sequence become `?`. */
16
+ function decodeUtf8Lenient(bytes) {
17
+ const strict = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true });
18
+ let out = '';
19
+ let i = 0;
20
+ while (i < bytes.length) {
21
+ const b = bytes[i];
22
+ const len = b < 0x80 ? 1 : b >= 0xc2 && b < 0xe0 ? 2 : b >= 0xe0 && b < 0xf0 ? 3 : b >= 0xf0 && b < 0xf5 ? 4 : 0;
23
+ let ch = null;
24
+ if (len > 0 && i + len <= bytes.length) {
25
+ try {
26
+ ch = strict.decode(bytes.subarray(i, i + len));
27
+ }
28
+ catch {
29
+ ch = null;
30
+ }
31
+ }
32
+ if (ch === null) {
33
+ out += '?';
34
+ i += 1;
35
+ }
36
+ else {
37
+ out += ch === '\0' ? '?' : ch;
38
+ i += len;
39
+ }
40
+ }
41
+ return out;
42
+ }
16
43
  /**
17
44
  * llIntegerToBase64(integer x) — encodes the 32-bit big-endian
18
45
  * representation of x as 6 base64 chars (24 bits → 4 chars × 6 bits, padded
@@ -1 +1 @@
1
- {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/builtins/base64.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/builtins/base64.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { BuiltinImpl } from '../runtime.js';
2
- /** llSay(integer channel, string msg) — captures into ScriptState.chat. */
2
+ /** llSay(integer channel, string msg) — captures into ScriptState.chat and reaches other prims' listens. */
3
3
  export declare const llSay: BuiltinImpl;
4
4
  /** llShout(integer channel, string msg) */
5
5
  export declare const llShout: BuiltinImpl;
@@ -7,4 +7,10 @@ export declare const llShout: BuiltinImpl;
7
7
  export declare const llWhisper: BuiltinImpl;
8
8
  /** llOwnerSay(string msg) — channel 0 by convention; LSL routes it privately to the owner. */
9
9
  export declare const llOwnerSay: BuiltinImpl;
10
+ /** llRegionSay(integer channel, string msg) — channel 0 is refused with a DEBUG_CHANNEL error. */
11
+ export declare const llRegionSay: BuiltinImpl;
12
+ /** llRegionSayTo(key target, integer channel, string msg) — any channel, including 0. */
13
+ export declare const llRegionSayTo: BuiltinImpl;
14
+ /** llInstantMessage(key agent, string msg) — the 2 s forced delay comes from the function spec. */
15
+ export declare const llInstantMessage: BuiltinImpl;
10
16
  //# sourceMappingURL=chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/builtins/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,2EAA2E;AAC3E,eAAO,MAAM,KAAK,EAAE,WAKnB,CAAA;AAED,2CAA2C;AAC3C,eAAO,MAAM,OAAO,EAAE,WAOrB,CAAA;AAED,6CAA6C;AAC7C,eAAO,MAAM,SAAS,EAAE,WAOvB,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,UAAU,EAAE,WAOxB,CAAA"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/builtins/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,eAAe,CAAA;AAcvE,4GAA4G;AAC5G,eAAO,MAAM,KAAK,EAAE,WAC2E,CAAA;AAE/F,2CAA2C;AAC3C,eAAO,MAAM,OAAO,EAAE,WAC2E,CAAA;AAEjG,6CAA6C;AAC7C,eAAO,MAAM,SAAS,EAAE,WAC2E,CAAA;AAEnG,8FAA8F;AAC9F,eAAO,MAAM,UAAU,EAAE,WACqD,CAAA;AAE9E,kGAAkG;AAClG,eAAO,MAAM,WAAW,EAAE,WAOzB,CAAA;AAED,yFAAyF;AACzF,eAAO,MAAM,aAAa,EAAE,WAOzB,CAAA;AAEH,mGAAmG;AACnG,eAAO,MAAM,gBAAgB,EAAE,WACgF,CAAA"}
@@ -1,36 +1,33 @@
1
1
  import { PUBLIC_CHANNEL } from '../generated/constants.js';
2
- /** llSay(integer channel, string msg) — captures into ScriptState.chat. */
3
- export const llSay = (ctx, args) => {
4
- const channel = args[0] ?? 0;
5
- const text = args[1] ?? '';
6
- ctx.state.chat.push({ channel, text, type: 'say' });
2
+ import { truncateUtf8 } from '../values/utf8.js';
3
+ import { sayError } from './debug.js';
4
+ const MAX_CHAT_BYTES = 1024;
5
+ function emit(ctx, channel, text, type, to) {
6
+ const entry = { channel, text: truncateUtf8(text, MAX_CHAT_BYTES), type };
7
+ ctx.state.chat.push(to === undefined ? entry : { ...entry, to });
8
+ if (type !== 'ownerSay' && type !== 'im')
9
+ ctx.linkset.routeChat(ctx.prim, type, channel, entry.text, to);
7
10
  return undefined;
8
- };
11
+ }
12
+ /** llSay(integer channel, string msg) — captures into ScriptState.chat and reaches other prims' listens. */
13
+ export const llSay = (ctx, args) => emit(ctx, args[0] ?? 0, args[1] ?? '', 'say');
9
14
  /** llShout(integer channel, string msg) */
10
- export const llShout = (ctx, args) => {
11
- ctx.state.chat.push({
12
- channel: args[0] ?? 0,
13
- text: args[1] ?? '',
14
- type: 'shout',
15
- });
16
- return undefined;
17
- };
15
+ export const llShout = (ctx, args) => emit(ctx, args[0] ?? 0, args[1] ?? '', 'shout');
18
16
  /** llWhisper(integer channel, string msg) */
19
- export const llWhisper = (ctx, args) => {
20
- ctx.state.chat.push({
21
- channel: args[0] ?? 0,
22
- text: args[1] ?? '',
23
- type: 'whisper',
24
- });
25
- return undefined;
26
- };
17
+ export const llWhisper = (ctx, args) => emit(ctx, args[0] ?? 0, args[1] ?? '', 'whisper');
27
18
  /** llOwnerSay(string msg) — channel 0 by convention; LSL routes it privately to the owner. */
28
- export const llOwnerSay = (ctx, args) => {
29
- ctx.state.chat.push({
30
- channel: PUBLIC_CHANNEL,
31
- text: args[0] ?? '',
32
- type: 'ownerSay',
33
- });
34
- return undefined;
19
+ export const llOwnerSay = (ctx, args) => emit(ctx, PUBLIC_CHANNEL, args[0] ?? '', 'ownerSay');
20
+ /** llRegionSay(integer channel, string msg) — channel 0 is refused with a DEBUG_CHANNEL error. */
21
+ export const llRegionSay = (ctx, args) => {
22
+ const channel = args[0] ?? 0;
23
+ if (channel === PUBLIC_CHANNEL) {
24
+ sayError(ctx, 'Cannot use llRegionSay() on channel 0.');
25
+ return undefined;
26
+ }
27
+ return emit(ctx, channel, args[1] ?? '', 'regionSay');
35
28
  };
29
+ /** llRegionSayTo(key target, integer channel, string msg) — any channel, including 0. */
30
+ export const llRegionSayTo = (ctx, args) => emit(ctx, args[1] ?? 0, args[2] ?? '', 'regionSayTo', args[0] ?? '');
31
+ /** llInstantMessage(key agent, string msg) — the 2 s forced delay comes from the function spec. */
32
+ export const llInstantMessage = (ctx, args) => emit(ctx, PUBLIC_CHANNEL, args[1] ?? '', 'im', args[0] ?? '');
36
33
  //# sourceMappingURL=chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/builtins/chat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D,2EAA2E;AAC3E,MAAM,CAAC,MAAM,KAAK,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IAC9C,MAAM,OAAO,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC,CAAA;IACpD,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAClD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACnD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,OAAO,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IAChD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAClB,OAAO,EAAG,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC;QAC7C,IAAI,EAAG,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE;QAC3C,IAAI,EAAE,OAAO;KACd,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,6CAA6C;AAC7C,MAAM,CAAC,MAAM,SAAS,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IAClD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAClB,OAAO,EAAG,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC;QAC7C,IAAI,EAAG,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE;QAC3C,IAAI,EAAE,SAAS;KAChB,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,UAAU,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACnD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAClB,OAAO,EAAE,cAAc;QACvB,IAAI,EAAG,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE;QAC3C,IAAI,EAAE,UAAU;KACjB,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/builtins/chat.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { BuiltinImpl } from '../runtime.js';
1
+ import type { BuiltinImpl, CallContext } from '../runtime.js';
2
2
  /**
3
3
  * A pending dataserver request. LSL has a small zoo of llRequest*
4
4
  * functions that each return a key and later fire the `dataserver` event
@@ -13,6 +13,7 @@ export interface DataserverRequestEntry {
13
13
  readonly args: ReadonlyArray<unknown>;
14
14
  fulfilled: boolean;
15
15
  }
16
+ export declare function nextDataserverKey(ctx: CallContext): string;
16
17
  /** llRequestAgentData(key id, integer data) → request key */
17
18
  export declare const llRequestAgentData: BuiltinImpl;
18
19
  /** llRequestInventoryData(string name) → request key */
@@ -1 +1 @@
1
- {"version":3,"file":"dataserver.d.ts","sourceRoot":"","sources":["../../src/builtins/dataserver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACrC,SAAS,EAAE,OAAO,CAAA;CACnB;AAiBD,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,EAAE,WACc,CAAA;AAE/C,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,EAAE,WACK,CAAA;AAE1C,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,EAAE,WACc,CAAA;AAEnD,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,EAAE,WACI,CAAA;AAEpC,iDAAiD;AACjD,eAAO,MAAM,oBAAoB,EAAE,WACK,CAAA"}
1
+ {"version":3,"file":"dataserver.d.ts","sourceRoot":"","sources":["../../src/builtins/dataserver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG7D;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACrC,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAG1D;AAYD,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,EAAE,WACc,CAAA;AAE/C,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,EAAE,WACK,CAAA;AAE1C,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,EAAE,WACc,CAAA;AAEnD,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,EAAE,WACI,CAAA;AAEpC,iDAAiD;AACjD,eAAO,MAAM,oBAAoB,EAAE,WACK,CAAA"}
@@ -1,9 +1,10 @@
1
- function nextKey(state) {
2
- state.dataserverKeyCounter += 1;
3
- return `data-req-${String(state.dataserverKeyCounter).padStart(8, '0')}`;
1
+ import { requestKey } from '../keys.js';
2
+ export function nextDataserverKey(ctx) {
3
+ ctx.state.dataserverKeyCounter += 1;
4
+ return requestKey(ctx, 'dataserver', ctx.state.dataserverKeyCounter);
4
5
  }
5
6
  function record(ctx, source, args) {
6
- const key = nextKey(ctx.state);
7
+ const key = nextDataserverKey(ctx);
7
8
  ctx.state.dataserverRequests.push({ key, source, args, fulfilled: false });
8
9
  return key;
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dataserver.js","sourceRoot":"","sources":["../../src/builtins/dataserver.ts"],"names":[],"mappings":"AAiBA,SAAS,OAAO,CAAC,KAAuC;IACtD,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAA;IAC/B,OAAO,YAAY,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AAC1E,CAAC;AAED,SAAS,MAAM,CACb,GAA+B,EAC/B,MAAc,EACd,IAA4B;IAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC9B,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;IAC1E,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC3D,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/C,wDAAwD;AACxD,MAAM,CAAC,MAAM,sBAAsB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC/D,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE1C,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC/D,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEnD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC1D,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEpC,iDAAiD;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC7D,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"dataserver.js","sourceRoot":"","sources":["../../src/builtins/dataserver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAiBvC,MAAM,UAAU,iBAAiB,CAAC,GAAgB;IAChD,GAAG,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAA;IACnC,OAAO,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;AACtE,CAAC;AAED,SAAS,MAAM,CACb,GAAgB,EAChB,MAAc,EACd,IAA4B;IAE5B,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAClC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;IAC1E,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC3D,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/C,wDAAwD;AACxD,MAAM,CAAC,MAAM,sBAAsB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC/D,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE1C,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC/D,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEnD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC1D,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEpC,iDAAiD;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC7D,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { CallContext } from '../runtime.js';
2
+ /** Report a non-fatal script error the way the simulator does: a say on DEBUG_CHANNEL. */
3
+ export declare function sayError(ctx: CallContext, text: string): void;
4
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/builtins/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,0FAA0F;AAC1F,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAG7D"}
@@ -0,0 +1,7 @@
1
+ import { DEBUG_CHANNEL } from '../generated/constants.js';
2
+ /** Report a non-fatal script error the way the simulator does: a say on DEBUG_CHANNEL. */
3
+ export function sayError(ctx, text) {
4
+ ctx.state.chat.push({ channel: DEBUG_CHANNEL, text, type: 'say' });
5
+ ctx.linkset.routeChat(ctx.prim, 'say', DEBUG_CHANNEL, text);
6
+ }
7
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/builtins/debug.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,0FAA0F;AAC1F,MAAM,UAAU,QAAQ,CAAC,GAAgB,EAAE,IAAY;IACrD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAClE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;AAC7D,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import type { BuiltinImpl } from '../runtime.js';
2
2
  import type { LslValue } from '../values/types.js';
3
3
  import { NULL_KEY } from '../values/types.js';
4
+ /** Response bodies longer than this are cut unless HTTP_BODY_MAXLENGTH says otherwise. */
5
+ export declare const DEFAULT_HTTP_BODY_MAXLENGTH = 2048;
4
6
  /**
5
7
  * Captured outgoing HTTP request, exposed via Script.httpRequests so tests
6
8
  * can assert on what the script fired off, and reply to it via
@@ -17,6 +19,8 @@ export interface HttpRequestEntry {
17
19
  readonly mimetype: string;
18
20
  /** Custom headers from HTTP_CUSTOM_HEADER pairs in the options list. */
19
21
  readonly headers: ReadonlyArray<readonly [name: string, value: string]>;
22
+ /** Response bodies are cut to this many bytes. Default 2048; set by HTTP_BODY_MAXLENGTH. */
23
+ readonly bodyMaxLength: number;
20
24
  /** Raw, unparsed options list as passed to llHTTPRequest, for completeness. */
21
25
  readonly rawOptions: ReadonlyArray<LslValue>;
22
26
  /** Whether a response has been fed back to this request yet. */
@@ -27,7 +31,10 @@ export interface HttpRequestEntry {
27
31
  *
28
32
  * Captures the request into ScriptState.httpRequests and returns a
29
33
  * deterministic key. Tests respond via Script.respondToHttp(key, ...),
30
- * which schedules an http_response event.
34
+ * which schedules an http_response event. An invalid URL, method or
35
+ * HTTP_BODY_MAXLENGTH, or more than 25 requests per object in 20 seconds,
36
+ * says an error and returns NULL_KEY; with HTTP_EXTENDED_ERROR set it
37
+ * returns a key and answers with an http_response error instead.
31
38
  */
32
39
  export declare const llHTTPRequest: BuiltinImpl;
33
40
  /**
@@ -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;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAO7C;;;;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,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC5C,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAA;CACnB;AA0DD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,WAiB3B,CAAA;AAED;;;;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,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,15 +1,23 @@
1
1
  import { NULL_KEY } from '../values/types.js';
2
- import { HTTP_METHOD, HTTP_MIMETYPE, HTTP_CUSTOM_HEADER, } from '../generated/constants.js';
3
- /** Generate a deterministic request key. */
4
- function nextHttpKey(state) {
5
- state.httpKeyCounter += 1;
6
- return `http-req-${String(state.httpKeyCounter).padStart(8, '0')}`;
7
- }
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';
4
+ import { sayError } from './debug.js';
5
+ /** Response bodies longer than this are cut unless HTTP_BODY_MAXLENGTH says otherwise. */
6
+ export const DEFAULT_HTTP_BODY_MAXLENGTH = 2048;
7
+ const MAX_HTTP_BODY_MAXLENGTH = 16384;
8
+ /** Requests allowed per object within HTTP_THROTTLE_WINDOW_MS. */
9
+ const HTTP_THROTTLE_REQUESTS = 25;
10
+ const HTTP_THROTTLE_WINDOW_MS = 20_000;
11
+ const HTTP_METHODS = new Set(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD']);
8
12
  function parseOptions(raw) {
9
13
  const out = {
10
14
  method: 'GET',
11
15
  mimetype: 'text/plain;charset=utf-8',
12
16
  headers: [],
17
+ bodyMaxLength: DEFAULT_HTTP_BODY_MAXLENGTH,
18
+ extendedError: false,
19
+ methodAt: -1,
20
+ bodyMaxLengthAt: -1,
13
21
  };
14
22
  let i = 0;
15
23
  while (i < raw.length) {
@@ -21,8 +29,10 @@ function parseOptions(raw) {
21
29
  switch (code) {
22
30
  case HTTP_METHOD: {
23
31
  const v = raw[i + 1];
24
- if (typeof v === 'string')
32
+ if (typeof v === 'string') {
25
33
  out.method = v;
34
+ out.methodAt = i;
35
+ }
26
36
  i += 2;
27
37
  break;
28
38
  }
@@ -33,6 +43,20 @@ function parseOptions(raw) {
33
43
  i += 2;
34
44
  break;
35
45
  }
46
+ case HTTP_BODY_MAXLENGTH: {
47
+ const v = raw[i + 1];
48
+ if (typeof v === 'number') {
49
+ out.bodyMaxLength = v;
50
+ out.bodyMaxLengthAt = i;
51
+ }
52
+ i += 2;
53
+ break;
54
+ }
55
+ case HTTP_EXTENDED_ERROR: {
56
+ out.extendedError = raw[i + 1] !== 0;
57
+ i += 2;
58
+ break;
59
+ }
36
60
  case HTTP_CUSTOM_HEADER: {
37
61
  const name = raw[i + 1];
38
62
  const value = raw[i + 2];
@@ -55,14 +79,45 @@ function parseOptions(raw) {
55
79
  *
56
80
  * Captures the request into ScriptState.httpRequests and returns a
57
81
  * deterministic key. Tests respond via Script.respondToHttp(key, ...),
58
- * which schedules an http_response event.
82
+ * which schedules an http_response event. An invalid URL, method or
83
+ * HTTP_BODY_MAXLENGTH, or more than 25 requests per object in 20 seconds,
84
+ * says an error and returns NULL_KEY; with HTTP_EXTENDED_ERROR set it
85
+ * returns a key and answers with an http_response error instead.
59
86
  */
60
87
  export const llHTTPRequest = (ctx, args) => {
61
88
  const url = args[0] ?? '';
62
89
  const rawOptions = args[1] ?? [];
63
90
  const body = args[2] ?? '';
64
91
  const parsed = parseOptions(rawOptions);
65
- const key = nextHttpKey(ctx.state);
92
+ const reject = (error, status, title, detail) => {
93
+ sayError(ctx, error);
94
+ if (!parsed.extendedError)
95
+ return NULL_KEY;
96
+ const key = nextKey(ctx);
97
+ const payload = { request_id: key, status, metadata: [], body: extendedErrorBody(status, title, detail) };
98
+ for (const s of ctx.prim.scripts)
99
+ ctx.state.clock.scheduleOn(s, ctx.state.clock.now, 'http_response', payload);
100
+ return key;
101
+ };
102
+ if (!isValidUrl(url)) {
103
+ const message = 'URL passed to llHTTPRequest is not valid';
104
+ return reject(message, 471, 'llHTTPRequest URL is invalid.', message);
105
+ }
106
+ if (parsed.bodyMaxLength <= 0 || parsed.bodyMaxLength > MAX_HTTP_BODY_MAXLENGTH) {
107
+ return reject('HTTP_BODY_MAXLENGTH value is invalid', 472, 'llHTTPRequest parameter error.', `Maximum body length must be in the rage (0, ${MAX_HTTP_BODY_MAXLENGTH}] in position ${parsed.bodyMaxLengthAt}`);
108
+ }
109
+ if (!HTTP_METHODS.has(parsed.method)) {
110
+ return reject(`HTTP method ${parsed.method} is unsupported`, 405, 'Unrecognized HTTP Method.', `HTTP method ${parsed.method} is unsupported at position ${parsed.methodAt}.`);
111
+ }
112
+ const now = ctx.state.clock.now;
113
+ const recent = ctx.linkset.httpRequestTimes;
114
+ while (recent.length > 0 && recent[0] <= now - HTTP_THROTTLE_WINDOW_MS)
115
+ recent.shift();
116
+ if (recent.length >= HTTP_THROTTLE_REQUESTS) {
117
+ return reject('Too many HTTP requests too fast.', 420, 'llHTTPRequest is throttled.', 'Too many HTTP requests, made too quickly.');
118
+ }
119
+ recent.push(now);
120
+ const key = nextKey(ctx);
66
121
  ctx.state.httpRequests.push({
67
122
  key,
68
123
  url,
@@ -70,11 +125,34 @@ export const llHTTPRequest = (ctx, args) => {
70
125
  body,
71
126
  mimetype: parsed.mimetype,
72
127
  headers: parsed.headers,
128
+ bodyMaxLength: parsed.bodyMaxLength,
73
129
  rawOptions,
74
130
  fulfilled: false,
75
131
  });
76
132
  return key;
77
133
  };
134
+ function nextKey(ctx) {
135
+ ctx.state.httpKeyCounter += 1;
136
+ return requestKey(ctx, 'http', ctx.state.httpKeyCounter);
137
+ }
138
+ /** The JSON body Second Life sends in an HTTP_EXTENDED_ERROR http_response. */
139
+ function extendedErrorBody(status, title, detail) {
140
+ return ('{\n' +
141
+ ` "detail" : ${JSON.stringify(detail)},\n` +
142
+ ` "status" : ${status},\n` +
143
+ ` "title" : ${JSON.stringify(title)},\n` +
144
+ ' "type" : "http://wiki.secondlife.com/wiki/llHTTPRequest"\n' +
145
+ '}\n');
146
+ }
147
+ function isValidUrl(url) {
148
+ try {
149
+ const u = new URL(url);
150
+ return (u.protocol === 'http:' || u.protocol === 'https:') && u.hostname !== '';
151
+ }
152
+ catch {
153
+ return false;
154
+ }
155
+ }
78
156
  /**
79
157
  * llHTTPResponse(key request_id, integer status, string body) — used by
80
158
  * scripts that hold an inbound HTTP request from llRequestURL. Captured
@@ -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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"}
@@ -13,4 +13,6 @@ export declare const llGetOwnerKey: BuiltinImpl;
13
13
  export declare const llSetObjectName: BuiltinImpl;
14
14
  /** llGetScriptName() — the script's filename (e.g. "greeter.lsl"). */
15
15
  export declare const llGetScriptName: BuiltinImpl;
16
+ /** llGenerateKey() — a fresh random UUID from the script's seeded random source. */
17
+ export declare const llGenerateKey: BuiltinImpl;
16
18
  //# sourceMappingURL=identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/builtins/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAKhD,oDAAoD;AACpD,eAAO,MAAM,UAAU,EAAE,WAA+C,CAAA;AACxE,+DAA+D;AAC/D,eAAO,MAAM,YAAY,EAAE,WAA+C,CAAA;AAC1E,sEAAsE;AACtE,eAAO,MAAM,QAAQ,EAAE,WAAmD,CAAA;AAC1E,2CAA2C;AAC3C,eAAO,MAAM,eAAe,EAAE,WAAoD,CAAA;AAElF,yFAAyF;AACzF,eAAO,MAAM,aAAa,EAAE,WAO3B,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,eAAe,EAAE,WAAoD,CAAA"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/builtins/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAMhD,oDAAoD;AACpD,eAAO,MAAM,UAAU,EAAE,WAA+C,CAAA;AACxE,+DAA+D;AAC/D,eAAO,MAAM,YAAY,EAAE,WAA+C,CAAA;AAC1E,sEAAsE;AACtE,eAAO,MAAM,QAAQ,EAAE,WAAmD,CAAA;AAC1E,2CAA2C;AAC3C,eAAO,MAAM,eAAe,EAAE,WAAoD,CAAA;AAElF,yFAAyF;AACzF,eAAO,MAAM,aAAa,EAAE,WAO3B,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,eAAe,EAAE,WAAoD,CAAA;AAElF,oFAAoF;AACpF,eAAO,MAAM,aAAa,EAAE,WAI3B,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { NULL_KEY } from '../values/types.js';
2
+ import { PRIM_NAME } from '../generated/constants.js';
2
3
  const KEY_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
3
4
  /** llGetOwner() — script's configured owner key. */
4
5
  export const llGetOwner = (ctx) => ctx.state.identity.owner;
@@ -23,9 +24,16 @@ export const llGetOwnerKey = (ctx, args) => {
23
24
  /** llSetObjectName(string name) — mutates the prim's name. */
24
25
  export const llSetObjectName = (ctx, args) => {
25
26
  const name = args[0] ?? '';
26
- ctx.state.identity.objectName = name;
27
+ ctx.prim.setPrimParam(PRIM_NAME, [name], 0);
27
28
  return undefined;
28
29
  };
29
30
  /** llGetScriptName() — the script's filename (e.g. "greeter.lsl"). */
30
31
  export const llGetScriptName = (ctx) => ctx.state.identity.scriptName;
32
+ /** llGenerateKey() — a fresh random UUID from the script's seeded random source. */
33
+ export const llGenerateKey = (ctx) => {
34
+ let hex = '';
35
+ for (let i = 0; i < 4; i++)
36
+ hex += ctx.state.random.nextInt(0x100000000).toString(16).padStart(8, '0');
37
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
38
+ };
31
39
  //# sourceMappingURL=identity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/builtins/identity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,MAAM,WAAW,GAAG,iEAAiE,CAAA;AAErF,oDAAoD;AACpD,MAAM,CAAC,MAAM,UAAU,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAA;AACxE,+DAA+D;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAA;AAC1E,sEAAsE;AACtE,MAAM,CAAC,MAAM,QAAQ,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAA;AAC1E,2CAA2C;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAA;AAElF,yFAAyF;AACzF,MAAM,CAAC,MAAM,aAAa,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACtD,MAAM,EAAE,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAChD,IAAI,EAAE,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC1C,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;IAChC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAA;IAC5F,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACxD,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAClD,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAA;IACpC,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAA"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/builtins/identity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,MAAM,WAAW,GAAG,iEAAiE,CAAA;AAErF,oDAAoD;AACpD,MAAM,CAAC,MAAM,UAAU,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAA;AACxE,+DAA+D;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAA;AAC1E,sEAAsE;AACtE,MAAM,CAAC,MAAM,QAAQ,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAA;AAC1E,2CAA2C;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAA;AAElF,yFAAyF;AACzF,MAAM,CAAC,MAAM,aAAa,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACtD,MAAM,EAAE,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAChD,IAAI,EAAE,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC1C,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;IAChC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAA;IAC5F,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACxD,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAClD,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAA;AAElF,oFAAoF;AACpF,MAAM,CAAC,MAAM,aAAa,GAAgB,CAAC,GAAG,EAAE,EAAE;IAChD,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtG,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;AAC5G,CAAC,CAAA"}
@@ -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;AA4NhD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAqN/D,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builtins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AA2PhD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAiP/D,CAAA"}
@@ -1,24 +1,26 @@
1
- import { llSay, llShout, llWhisper, llOwnerSay } from './chat.js';
2
- import { llSetTimerEvent, llSleep, llGetTime, llGetAndResetTime, llResetTime, llGetUnixTime, llGetTimestamp, llGetDate, } from './time.js';
1
+ import { llSay, llShout, llWhisper, llOwnerSay, llRegionSay, llRegionSayTo, llInstantMessage, } from './chat.js';
2
+ import { llSetTimerEvent, llSleep, llGetTime, llGetAndResetTime, llResetTime, llGetUnixTime, llGetTimestamp, llGetDate, llGetRegionTimeDilation, } from './time.js';
3
3
  import { llHTTPRequest, llHTTPResponse } from './http.js';
4
4
  import { llListen, llListenRemove, llListenControl } from './listen.js';
5
- import { llAbs, llFabs, llRound, llCeil, llFloor, llPow, llSqrt, llSin, llCos, llTan, llAsin, llAcos, llAtan2, llLog, llLog10, llFrand, llVecMag, llVecNorm, llVecDist, llRot2Euler, llEuler2Rot, } from './math.js';
5
+ import { llAbs, llFabs, llRound, llCeil, llFloor, llPow, llSqrt, llSin, llCos, llTan, llAsin, llAcos, llAtan2, llLog, llLog10, llFrand, llVecMag, llVecNorm, llVecDist, llRot2Euler, llEuler2Rot, llRot2Fwd, llRot2Left, llRot2Up, llRot2Axis, llRot2Angle, llAxisAngle2Rot, llRotBetween, } from './math.js';
6
6
  import { llStringLength, llSubStringIndex, llGetSubString, llDeleteSubString, llInsertString, llStringTrim, llToLower, llToUpper, llReplaceSubString, llEscapeURL, llUnescapeURL, } from './strings.js';
7
- import { llGetListLength, llList2Integer, llList2Float, llList2String, llList2Key, llGetListEntryType, llList2Vector, llList2Rot, llList2List, llDeleteSubList, llListInsertList, llListReplaceList, llListFindList, llDumpList2String, llList2CSV, llCSV2List, llParseString2List, llParseStringKeepNulls, llListSort, } from './lists.js';
7
+ import { llGetListLength, llList2Integer, llList2Float, llList2String, llList2Key, llGetListEntryType, llList2Vector, llList2Rot, llList2List, llDeleteSubList, llListInsertList, llListReplaceList, llListFindList, llDumpList2String, llList2CSV, llCSV2List, llParseString2List, llParseStringKeepNulls, llListSort, llList2ListStrided, llList2ListSlice, llListRandomize, } from './lists.js';
8
8
  import { llJson2List, llJsonGetValue, llJsonSetValue, llJsonValueType, llList2Json, } from './json.js';
9
- import { llGetOwner, llGetOwnerKey, llGetCreator, llGetKey, llGetObjectName, llSetObjectName, llGetScriptName, } from './identity.js';
9
+ import { llGetOwner, llGetOwnerKey, llGetCreator, llGetKey, llGetObjectName, llSetObjectName, llGetScriptName, llGenerateKey, } from './identity.js';
10
10
  import { llMessageLinked } from './linked.js';
11
+ import { llGetUsedMemory, llGetFreeMemory, llGetMemoryLimit, llSetMemoryLimit, llScriptProfiler, llGetSPMaxMemory, } from './memory.js';
11
12
  import { llRequestAgentData, llRequestInventoryData, llRequestSimulatorData, llRequestUsername, llRequestDisplayName, } from './dataserver.js';
12
13
  import { llDetectedKey, llDetectedName, llDetectedOwner, llDetectedGroup, llDetectedPos, llDetectedRot, llDetectedVel, llDetectedType, llDetectedLinkNumber, llDetectedGrab, llDetectedTouchPos, } from './detected.js';
13
14
  import { llMD5String, llSHA1String, llSHA256String, llHMAC } from './hash.js';
14
15
  import { llStringToBase64, llBase64ToString, llIntegerToBase64, llBase64ToInteger, llXorBase64, } from './base64.js';
15
16
  import { llSetText, llSetObjectDesc, llGetObjectDesc, llDie, llResetScript, } from './object.js';
16
17
  import { llGetLinkNumber, llGetNumberOfPrims, llGetLinkKey, llGetLinkName, } from './link-info.js';
17
- import { llGetInventoryNumber, llGetInventoryName, llGetInventoryType, llGetInventoryKey, llGetInventoryCreator, llGetInventoryDesc, llGetInventoryAcquireTime, llGetInventoryPermMask, llGetNotecardLine, llGetNumberOfNotecardLines, } from './inventory.js';
18
+ import { llGetInventoryNumber, llGetInventoryName, llGetInventoryType, llGetInventoryKey, llGetInventoryCreator, llGetInventoryDesc, llGetInventoryAcquireTime, llGetInventoryPermMask, llGetNotecardLine, llGetNumberOfNotecardLines, llRemoveInventory, } from './inventory.js';
19
+ import { llRequestPermissions, llGetPermissions, llGetPermissionsKey } from './permissions.js';
18
20
  import { llResetOtherScript, llSetScriptState, llGetScriptState, } from './script-control.js';
19
21
  import { llLinksetDataWrite, llLinksetDataWriteProtected, llLinksetDataRead, llLinksetDataReadProtected, llLinksetDataDelete, llLinksetDataDeleteProtected, llLinksetDataDeleteFound, llLinksetDataReset, llLinksetDataAvailable, llLinksetDataCountKeys, llLinksetDataListKeys, llLinksetDataFindKeys, llLinksetDataCountFound, } from './linksetdata.js';
20
22
  import { llSetPrimitiveParams, llSetLinkPrimitiveParams, llSetLinkPrimitiveParamsFast, llGetPrimitiveParams, llGetLinkPrimitiveParams, } from './prim-params.js';
21
- import { llSetPos, llGetPos, llGetLocalPos, llGetRootPosition, llSetRot, llSetLocalRot, llGetRot, llGetLocalRot, llGetRootRotation, llSetScale, llGetScale, llScaleByFactor, llGetMaxScaleFactor, llGetMinScaleFactor, llSetColor, llGetColor, llSetAlpha, llGetAlpha, llSetTexture, llGetTexture, llGetTextureOffset, llGetTextureScale, llGetTextureRot, llScaleTexture, llOffsetTexture, llRotateTexture, llSetLinkColor, llSetLinkAlpha, llSetLinkTexture, llSetTextureAnim, llSetLinkTextureAnim, llSetLinkTextureAnimOverrideMe, llSetRenderMaterial, llGetRenderMaterial, llSetStatus, llGetStatus, llSetLinkStatus, llSetClickAction, llTargetOmega, llSetPhysicsMaterial, llGetPhysicsMaterial, llPassCollisions, llPassTouches, llSitTarget, llLinkSitTarget, llAvatarOnSitTarget, llAvatarOnLinkSitTarget, llSetLinkSitFlags, llGetLinkSitFlags, } from './prim-accessors.js';
23
+ import { llSetPos, llGetPos, llGetLocalPos, llGetRootPosition, llSetRot, llSetLocalRot, llGetRot, llGetLocalRot, llGetRootRotation, llSetScale, llGetScale, llScaleByFactor, llGetMaxScaleFactor, llGetMinScaleFactor, llGetNumberOfSides, llSetColor, llGetColor, llSetAlpha, llGetAlpha, llSetTexture, llGetTexture, llGetTextureOffset, llGetTextureScale, llGetTextureRot, llScaleTexture, llOffsetTexture, llRotateTexture, llSetLinkColor, llSetLinkAlpha, llSetLinkTexture, llSetTextureAnim, llSetLinkTextureAnim, llSetLinkTextureAnimOverrideMe, llSetRenderMaterial, llGetRenderMaterial, llSetStatus, llGetStatus, llSetLinkStatus, llSetClickAction, llTargetOmega, llSetPhysicsMaterial, llGetPhysicsMaterial, llPassCollisions, llPassTouches, llSitTarget, llLinkSitTarget, llAvatarOnSitTarget, llAvatarOnLinkSitTarget, llSetLinkSitFlags, llGetLinkSitFlags, } from './prim-accessors.js';
22
24
  /**
23
25
  * Map of `ll*` name → real implementation. Anything not in this map falls
24
26
  * through to the auto-generated stub (returns the documented default value
@@ -29,6 +31,9 @@ export const REAL_BUILTINS = {
29
31
  llShout,
30
32
  llWhisper,
31
33
  llOwnerSay,
34
+ llRegionSay,
35
+ llRegionSayTo,
36
+ llInstantMessage,
32
37
  llSetTimerEvent,
33
38
  llSleep,
34
39
  llGetTime,
@@ -37,6 +42,7 @@ export const REAL_BUILTINS = {
37
42
  llGetUnixTime,
38
43
  llGetTimestamp,
39
44
  llGetDate,
45
+ llGetRegionTimeDilation,
40
46
  llHTTPRequest,
41
47
  llHTTPResponse,
42
48
  llListen,
@@ -64,6 +70,13 @@ export const REAL_BUILTINS = {
64
70
  llVecDist,
65
71
  llRot2Euler,
66
72
  llEuler2Rot,
73
+ llRot2Fwd,
74
+ llRot2Left,
75
+ llRot2Up,
76
+ llRot2Axis,
77
+ llRot2Angle,
78
+ llAxisAngle2Rot,
79
+ llRotBetween,
67
80
  // strings
68
81
  llStringLength,
69
82
  llSubStringIndex,
@@ -96,6 +109,9 @@ export const REAL_BUILTINS = {
96
109
  llParseString2List,
97
110
  llParseStringKeepNulls,
98
111
  llListSort,
112
+ llList2ListStrided,
113
+ llList2ListSlice,
114
+ llListRandomize,
99
115
  // json
100
116
  llJson2List,
101
117
  llJsonGetValue,
@@ -110,6 +126,7 @@ export const REAL_BUILTINS = {
110
126
  llGetObjectName,
111
127
  llSetObjectName,
112
128
  llGetScriptName,
129
+ llGenerateKey,
113
130
  // linked
114
131
  llMessageLinked,
115
132
  // dataserver
@@ -163,6 +180,11 @@ export const REAL_BUILTINS = {
163
180
  llGetInventoryPermMask,
164
181
  llGetNotecardLine,
165
182
  llGetNumberOfNotecardLines,
183
+ llRemoveInventory,
184
+ // permissions
185
+ llRequestPermissions,
186
+ llGetPermissions,
187
+ llGetPermissionsKey,
166
188
  // script control
167
189
  llResetOtherScript,
168
190
  llSetScriptState,
@@ -202,6 +224,7 @@ export const REAL_BUILTINS = {
202
224
  llScaleByFactor,
203
225
  llGetMaxScaleFactor,
204
226
  llGetMinScaleFactor,
227
+ llGetNumberOfSides,
205
228
  llSetColor,
206
229
  llGetColor,
207
230
  llSetAlpha,
@@ -237,5 +260,12 @@ export const REAL_BUILTINS = {
237
260
  llAvatarOnLinkSitTarget,
238
261
  llSetLinkSitFlags,
239
262
  llGetLinkSitFlags,
263
+ // script memory
264
+ llGetUsedMemory,
265
+ llGetFreeMemory,
266
+ llGetMemoryLimit,
267
+ llSetMemoryLimit,
268
+ llScriptProfiler,
269
+ llGetSPMaxMemory,
240
270
  };
241
271
  //# sourceMappingURL=index.js.map