@rezless/vm 0.4.0 → 0.5.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.
- package/dist/builtins/base64.d.ts.map +1 -1
- package/dist/builtins/base64.js +29 -2
- package/dist/builtins/base64.js.map +1 -1
- package/dist/builtins/chat.d.ts +7 -1
- package/dist/builtins/chat.d.ts.map +1 -1
- package/dist/builtins/chat.js +26 -29
- package/dist/builtins/chat.js.map +1 -1
- package/dist/builtins/dataserver.d.ts +2 -1
- package/dist/builtins/dataserver.d.ts.map +1 -1
- package/dist/builtins/dataserver.js +5 -4
- package/dist/builtins/dataserver.js.map +1 -1
- package/dist/builtins/debug.d.ts +4 -0
- package/dist/builtins/debug.d.ts.map +1 -0
- package/dist/builtins/debug.js +7 -0
- package/dist/builtins/debug.js.map +1 -0
- package/dist/builtins/http.d.ts +8 -1
- package/dist/builtins/http.d.ts.map +1 -1
- package/dist/builtins/http.js +87 -9
- package/dist/builtins/http.js.map +1 -1
- package/dist/builtins/identity.d.ts +2 -0
- package/dist/builtins/identity.d.ts.map +1 -1
- package/dist/builtins/identity.js +9 -1
- package/dist/builtins/identity.js.map +1 -1
- package/dist/builtins/index.d.ts.map +1 -1
- package/dist/builtins/index.js +29 -7
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/inventory.d.ts +13 -2
- package/dist/builtins/inventory.d.ts.map +1 -1
- package/dist/builtins/inventory.js +82 -43
- package/dist/builtins/inventory.js.map +1 -1
- package/dist/builtins/json.d.ts.map +1 -1
- package/dist/builtins/json.js +11 -36
- package/dist/builtins/json.js.map +1 -1
- package/dist/builtins/link-info.d.ts +1 -1
- package/dist/builtins/link-info.d.ts.map +1 -1
- package/dist/builtins/link-info.js +2 -2
- package/dist/builtins/link-info.js.map +1 -1
- package/dist/builtins/linksetdata.d.ts.map +1 -1
- package/dist/builtins/linksetdata.js +298 -31
- package/dist/builtins/linksetdata.js.map +1 -1
- package/dist/builtins/listen.d.ts +3 -1
- package/dist/builtins/listen.d.ts.map +1 -1
- package/dist/builtins/listen.js +9 -1
- package/dist/builtins/listen.js.map +1 -1
- package/dist/builtins/lists.d.ts +21 -0
- package/dist/builtins/lists.d.ts.map +1 -1
- package/dist/builtins/lists.js +82 -38
- package/dist/builtins/lists.js.map +1 -1
- package/dist/builtins/math.d.ts +27 -4
- package/dist/builtins/math.d.ts.map +1 -1
- package/dist/builtins/math.js +118 -41
- package/dist/builtins/math.js.map +1 -1
- package/dist/builtins/permissions.d.ts +18 -0
- package/dist/builtins/permissions.d.ts.map +1 -0
- package/dist/builtins/permissions.js +17 -0
- package/dist/builtins/permissions.js.map +1 -0
- package/dist/builtins/prim-accessors.d.ts +1 -0
- package/dist/builtins/prim-accessors.d.ts.map +1 -1
- package/dist/builtins/prim-accessors.js +44 -42
- package/dist/builtins/prim-accessors.js.map +1 -1
- package/dist/builtins/prim-params.d.ts +1 -1
- package/dist/builtins/prim-params.d.ts.map +1 -1
- package/dist/builtins/prim-params.js +19 -11
- package/dist/builtins/prim-params.js.map +1 -1
- package/dist/builtins/strings.d.ts.map +1 -1
- package/dist/builtins/strings.js +37 -33
- package/dist/builtins/strings.js.map +1 -1
- package/dist/builtins/time.d.ts +2 -0
- package/dist/builtins/time.d.ts.map +1 -1
- package/dist/builtins/time.js +2 -0
- package/dist/builtins/time.js.map +1 -1
- package/dist/clock.d.ts +23 -9
- package/dist/clock.d.ts.map +1 -1
- package/dist/clock.js +40 -13
- package/dist/clock.js.map +1 -1
- package/dist/dispatch.d.ts.map +1 -1
- package/dist/dispatch.js +10 -3
- package/dist/dispatch.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interpreter.js +2 -2
- package/dist/interpreter.js.map +1 -1
- package/dist/inventory.d.ts +2 -0
- package/dist/inventory.d.ts.map +1 -1
- package/dist/inventory.js +4 -0
- package/dist/inventory.js.map +1 -1
- package/dist/keys.d.ts +6 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +20 -0
- package/dist/keys.js.map +1 -0
- package/dist/linkset.d.ts +28 -3
- package/dist/linkset.d.ts.map +1 -1
- package/dist/linkset.js +66 -7
- package/dist/linkset.js.map +1 -1
- package/dist/prim-params.d.ts +5 -0
- package/dist/prim-params.d.ts.map +1 -1
- package/dist/prim-params.js +187 -107
- package/dist/prim-params.js.map +1 -1
- package/dist/prim.d.ts +6 -1
- package/dist/prim.d.ts.map +1 -1
- package/dist/prim.js +23 -3
- package/dist/prim.js.map +1 -1
- package/dist/runtime.d.ts +11 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/script.d.ts +27 -2
- package/dist/script.d.ts.map +1 -1
- package/dist/script.js +89 -27
- package/dist/script.js.map +1 -1
- package/dist/values/coerce.d.ts +11 -0
- package/dist/values/coerce.d.ts.map +1 -1
- package/dist/values/coerce.js +65 -38
- package/dist/values/coerce.js.map +1 -1
- package/dist/values/format.d.ts +24 -16
- package/dist/values/format.d.ts.map +1 -1
- package/dist/values/format.js +42 -25
- package/dist/values/format.js.map +1 -1
- package/dist/values/ops.d.ts +2 -1
- package/dist/values/ops.d.ts.map +1 -1
- package/dist/values/ops.js +13 -5
- package/dist/values/ops.js.map +1 -1
- package/dist/values/utf8.d.ts +3 -0
- package/dist/values/utf8.d.ts.map +1 -0
- package/dist/values/utf8.js +14 -0
- package/dist/values/utf8.js.map +1 -0
- package/dist/world.d.ts +29 -0
- package/dist/world.d.ts.map +1 -0
- package/dist/world.js +29 -0
- package/dist/world.js.map +1 -0
- 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,
|
|
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"}
|
package/dist/builtins/base64.js
CHANGED
|
@@ -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
|
-
|
|
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":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C;;;;GAIG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IAC1D,MAAM,CAAC,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAClD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IAC1D,MAAM,CAAC,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAC/C,
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/builtins/base64.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C;;;;GAIG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IAC1D,MAAM,CAAC,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAClD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IAC1D,MAAM,CAAC,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAC/C,OAAO,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;AACpD,CAAC,CAAA;AAED,8EAA8E;AAC9E,SAAS,iBAAiB,CAAC,KAAiB;IAC1C,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzE,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;QACnB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChH,IAAI,EAAE,GAAkB,IAAI,CAAA;QAC5B,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,EAAE,GAAG,IAAI,CAAA;YACX,CAAC;QACH,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,GAAG,IAAI,GAAG,CAAA;YACV,CAAC,IAAI,CAAC,CAAA;QACR,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;YAC7B,CAAC,IAAI,GAAG,CAAA;QACV,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IAC3D,MAAM,CAAC,GAAG,OAAO,CAAE,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC,CAAC,CAAA;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACtB,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC/B,CAAC,CAAA;AAED,MAAM,eAAe,GACnB,kEAAkE,CAAA;AAEpE;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,CAAS;IACnC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACrC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAK;QAChB,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAA;QACjC,KAAK,IAAI,CAAC,CAAA;QACV,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,KAAK,IAAI,CAAC,CAAA;YACV,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IACrD,MAAM,IAAI,GAAG,kBAAkB,CAAE,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAC,CAAA;IACtE,MAAM,GAAG,GAAG,kBAAkB,CAAE,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAC,CAAA;IACrE,MAAM,GAAG,GACP,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAE,CAAC,CAAA;IAC9E,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IAC3D,MAAM,CAAC,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IACpC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAA;IAC5B,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;AAC3B,CAAC,CAAA"}
|
package/dist/builtins/chat.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/builtins/chat.js
CHANGED
|
@@ -1,36 +1,33 @@
|
|
|
1
1
|
import { PUBLIC_CHANNEL } from '../generated/constants.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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;
|
|
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;
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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 =
|
|
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":"
|
|
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 @@
|
|
|
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"}
|
package/dist/builtins/http.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/builtins/http.js
CHANGED
|
@@ -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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
|
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":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EACL,WAAW,EACX,aAAa,EACb,kBAAkB,
|
|
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;
|
|
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.
|
|
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;
|
|
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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builtins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAmPhD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CA0O/D,CAAA"}
|
package/dist/builtins/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
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
11
|
import { llRequestAgentData, llRequestInventoryData, llRequestSimulatorData, llRequestUsername, llRequestDisplayName, } from './dataserver.js';
|
|
12
12
|
import { llDetectedKey, llDetectedName, llDetectedOwner, llDetectedGroup, llDetectedPos, llDetectedRot, llDetectedVel, llDetectedType, llDetectedLinkNumber, llDetectedGrab, llDetectedTouchPos, } from './detected.js';
|
|
@@ -14,11 +14,12 @@ import { llMD5String, llSHA1String, llSHA256String, llHMAC } from './hash.js';
|
|
|
14
14
|
import { llStringToBase64, llBase64ToString, llIntegerToBase64, llBase64ToInteger, llXorBase64, } from './base64.js';
|
|
15
15
|
import { llSetText, llSetObjectDesc, llGetObjectDesc, llDie, llResetScript, } from './object.js';
|
|
16
16
|
import { llGetLinkNumber, llGetNumberOfPrims, llGetLinkKey, llGetLinkName, } from './link-info.js';
|
|
17
|
-
import { llGetInventoryNumber, llGetInventoryName, llGetInventoryType, llGetInventoryKey, llGetInventoryCreator, llGetInventoryDesc, llGetInventoryAcquireTime, llGetInventoryPermMask, llGetNotecardLine, llGetNumberOfNotecardLines, } from './inventory.js';
|
|
17
|
+
import { llGetInventoryNumber, llGetInventoryName, llGetInventoryType, llGetInventoryKey, llGetInventoryCreator, llGetInventoryDesc, llGetInventoryAcquireTime, llGetInventoryPermMask, llGetNotecardLine, llGetNumberOfNotecardLines, llRemoveInventory, } from './inventory.js';
|
|
18
|
+
import { llRequestPermissions, llGetPermissions, llGetPermissionsKey } from './permissions.js';
|
|
18
19
|
import { llResetOtherScript, llSetScriptState, llGetScriptState, } from './script-control.js';
|
|
19
20
|
import { llLinksetDataWrite, llLinksetDataWriteProtected, llLinksetDataRead, llLinksetDataReadProtected, llLinksetDataDelete, llLinksetDataDeleteProtected, llLinksetDataDeleteFound, llLinksetDataReset, llLinksetDataAvailable, llLinksetDataCountKeys, llLinksetDataListKeys, llLinksetDataFindKeys, llLinksetDataCountFound, } from './linksetdata.js';
|
|
20
21
|
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';
|
|
22
|
+
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
23
|
/**
|
|
23
24
|
* Map of `ll*` name → real implementation. Anything not in this map falls
|
|
24
25
|
* through to the auto-generated stub (returns the documented default value
|
|
@@ -29,6 +30,9 @@ export const REAL_BUILTINS = {
|
|
|
29
30
|
llShout,
|
|
30
31
|
llWhisper,
|
|
31
32
|
llOwnerSay,
|
|
33
|
+
llRegionSay,
|
|
34
|
+
llRegionSayTo,
|
|
35
|
+
llInstantMessage,
|
|
32
36
|
llSetTimerEvent,
|
|
33
37
|
llSleep,
|
|
34
38
|
llGetTime,
|
|
@@ -37,6 +41,7 @@ export const REAL_BUILTINS = {
|
|
|
37
41
|
llGetUnixTime,
|
|
38
42
|
llGetTimestamp,
|
|
39
43
|
llGetDate,
|
|
44
|
+
llGetRegionTimeDilation,
|
|
40
45
|
llHTTPRequest,
|
|
41
46
|
llHTTPResponse,
|
|
42
47
|
llListen,
|
|
@@ -64,6 +69,13 @@ export const REAL_BUILTINS = {
|
|
|
64
69
|
llVecDist,
|
|
65
70
|
llRot2Euler,
|
|
66
71
|
llEuler2Rot,
|
|
72
|
+
llRot2Fwd,
|
|
73
|
+
llRot2Left,
|
|
74
|
+
llRot2Up,
|
|
75
|
+
llRot2Axis,
|
|
76
|
+
llRot2Angle,
|
|
77
|
+
llAxisAngle2Rot,
|
|
78
|
+
llRotBetween,
|
|
67
79
|
// strings
|
|
68
80
|
llStringLength,
|
|
69
81
|
llSubStringIndex,
|
|
@@ -96,6 +108,9 @@ export const REAL_BUILTINS = {
|
|
|
96
108
|
llParseString2List,
|
|
97
109
|
llParseStringKeepNulls,
|
|
98
110
|
llListSort,
|
|
111
|
+
llList2ListStrided,
|
|
112
|
+
llList2ListSlice,
|
|
113
|
+
llListRandomize,
|
|
99
114
|
// json
|
|
100
115
|
llJson2List,
|
|
101
116
|
llJsonGetValue,
|
|
@@ -110,6 +125,7 @@ export const REAL_BUILTINS = {
|
|
|
110
125
|
llGetObjectName,
|
|
111
126
|
llSetObjectName,
|
|
112
127
|
llGetScriptName,
|
|
128
|
+
llGenerateKey,
|
|
113
129
|
// linked
|
|
114
130
|
llMessageLinked,
|
|
115
131
|
// dataserver
|
|
@@ -163,6 +179,11 @@ export const REAL_BUILTINS = {
|
|
|
163
179
|
llGetInventoryPermMask,
|
|
164
180
|
llGetNotecardLine,
|
|
165
181
|
llGetNumberOfNotecardLines,
|
|
182
|
+
llRemoveInventory,
|
|
183
|
+
// permissions
|
|
184
|
+
llRequestPermissions,
|
|
185
|
+
llGetPermissions,
|
|
186
|
+
llGetPermissionsKey,
|
|
166
187
|
// script control
|
|
167
188
|
llResetOtherScript,
|
|
168
189
|
llSetScriptState,
|
|
@@ -202,6 +223,7 @@ export const REAL_BUILTINS = {
|
|
|
202
223
|
llScaleByFactor,
|
|
203
224
|
llGetMaxScaleFactor,
|
|
204
225
|
llGetMinScaleFactor,
|
|
226
|
+
llGetNumberOfSides,
|
|
205
227
|
llSetColor,
|
|
206
228
|
llGetColor,
|
|
207
229
|
llSetAlpha,
|