@openclaw/signal 2026.9.3 → 2026.9.5
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/assets/activity.svg +40 -0
- package/assets/icon.png +0 -0
- package/dist/{accounts-DO4HMqaK.js → .setup/accounts-BV6tDOTc.mjs} +20 -5
- package/dist/.setup/api-Cu01dJRP.mjs +12 -0
- package/dist/.setup/api-DbdeJVQ8.mjs +17 -0
- package/dist/{approval-auth-pNCKKotV.js → .setup/approval-auth-BBI9BTRm.mjs} +3 -3
- package/dist/{approval-handler.runtime-X6DXgK_3.js → .setup/approval-handler.runtime-Clf_1IZj.mjs} +11 -11
- package/dist/{approval-reactions-Cub0slPC.js → .setup/approval-reactions-B25QoVJc.mjs} +14 -14
- package/dist/{channel-DJQccJtU.js → .setup/channel-gMpZmqLx.mjs} +67 -46
- package/dist/{channel.runtime-QerbTca6.js → .setup/channel.runtime-Dqc18A1e.mjs} +4 -4
- package/dist/{client-B3C0ciqU.js → .setup/client-BseAt7F7.mjs} +311 -41
- package/dist/{client-adapter-CNc5wzzs.js → .setup/client-adapter-dvFa47YL.mjs} +1 -1
- package/dist/{config-schema-DfEbpMVQ.js → .setup/config-schema-aQwwMGUj.mjs} +19 -3
- package/dist/{doctor-contract-api-D0SnglP4.js → .setup/doctor-contract-api-Rbq_sRTI.mjs} +79 -15
- package/dist/{install-signal-cli-QlEIfWBv.js → .setup/install-signal-cli-bXeTrTyL.mjs} +3 -4
- package/dist/{monitor-CokYfKOk.js → .setup/monitor-DAMQw1pZ.mjs} +63 -88
- package/dist/{probe-Bh9f0rRO.js → .setup/probe-IKCS9D-z.mjs} +3 -3
- package/dist/{question-reactions-B06vyt3T.js → .setup/question-reactions-DSNAD0cd.mjs} +3 -3
- package/dist/{reaction-runtime-api-CWqDv5-q.js → .setup/reaction-runtime-api-BnQGHcrB.mjs} +6 -5
- package/dist/{rpc-context-dXSy4NtF.js → .setup/rpc-context-CwwADZ1b.mjs} +1 -1
- package/dist/{send-BvWSfyNf.js → .setup/send-CcetN4rk.mjs} +7 -6
- package/dist/{send.runtime-BNQ0x-2k.js → .setup/send.runtime-B7C4IP23.mjs} +1 -1
- package/dist/{transport-detection-BD__qywn.js → .setup/transport-detection-CqyR2vG8.mjs} +51 -21
- package/dist/{transport-detection.runtime-c9q3r3AM.js → .setup/transport-detection.runtime-CW1lp2d9.mjs} +1 -1
- package/dist/{transport-policy-DxvSMHp9.js → .setup/transport-policy-5VSnj5ma.mjs} +2 -33
- package/dist/.setup/transport-probes.runtime-WprAyBbL.mjs +2 -0
- package/dist/.setup/transport-url-CAC0JcuI.mjs +55 -0
- package/dist/api.js +11 -16
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/contract-api.js +4 -4
- package/dist/doctor-contract-api.js +1 -1
- package/dist/reaction-runtime-api.js +1 -1
- package/dist/runtime-api.js +9 -9
- package/dist/setup-entry.js +2 -1
- package/node_modules/zod/README.md +27 -0
- package/node_modules/zod/compile.cjs +77 -0
- package/node_modules/zod/compile.d.cts +1 -0
- package/node_modules/zod/compile.d.ts +1 -0
- package/node_modules/zod/compile.js +52 -0
- package/node_modules/zod/index.cjs +2 -2
- package/node_modules/zod/index.d.cts +1 -2
- package/node_modules/zod/index.d.ts +1 -2
- package/node_modules/zod/index.js +5 -2
- package/node_modules/zod/package.json +13 -2
- package/node_modules/zod/src/compile.ts +56 -0
- package/node_modules/zod/src/index.ts +5 -2
- package/node_modules/zod/src/v3/ZodError.ts +22 -12
- package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
- package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
- package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
- package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
- package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
- package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
- package/node_modules/zod/src/v3/types.ts +5 -5
- package/node_modules/zod/src/v4/classic/checks.ts +1 -0
- package/node_modules/zod/src/v4/classic/compat.ts +26 -18
- package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
- package/node_modules/zod/src/v4/classic/errors.ts +59 -44
- package/node_modules/zod/src/v4/classic/external.ts +12 -9
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +140 -78
- package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
- package/node_modules/zod/src/v4/classic/index.ts +2 -2
- package/node_modules/zod/src/v4/classic/iso.ts +2 -72
- package/node_modules/zod/src/v4/classic/parse.ts +10 -4
- package/node_modules/zod/src/v4/classic/schemas.ts +452 -262
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +135 -0
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +30 -1
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
- package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
- package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +720 -0
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
- package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
- package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
- package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +155 -13
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +11 -0
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +274 -6
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +425 -10
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
- package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
- package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
- package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +281 -0
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +47 -0
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
- package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +183 -0
- package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +46 -9
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +245 -12
- package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +234 -0
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
- package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +33 -2
- package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +127 -5
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +11 -2
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1585 -173
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
- package/node_modules/zod/src/v4/classic/tests/validate.test.ts +76 -0
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
- package/node_modules/zod/src/v4/core/api.ts +48 -12
- package/node_modules/zod/src/v4/core/checks.ts +57 -44
- package/node_modules/zod/src/v4/core/compile.ts +2188 -0
- package/node_modules/zod/src/v4/core/core.ts +98 -19
- package/node_modules/zod/src/v4/core/doc.ts +11 -7
- package/node_modules/zod/src/v4/core/errors.ts +115 -24
- package/node_modules/zod/src/v4/core/index.ts +3 -0
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +6 -1
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +257 -93
- package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
- package/node_modules/zod/src/v4/core/memoizer.ts +284 -0
- package/node_modules/zod/src/v4/core/parse.ts +131 -38
- package/node_modules/zod/src/v4/core/regexes.ts +30 -13
- package/node_modules/zod/src/v4/core/registries.ts +2 -2
- package/node_modules/zod/src/v4/core/schemas.ts +759 -461
- package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +969 -0
- package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
- package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
- package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
- package/node_modules/zod/src/v4/core/tests/compile.test.ts +1639 -0
- package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
- package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
- package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
- package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
- package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
- package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +31 -0
- package/node_modules/zod/src/v4/core/to-json-schema.ts +275 -42
- package/node_modules/zod/src/v4/core/util.ts +268 -42
- package/node_modules/zod/src/v4/core/versions.ts +2 -2
- package/node_modules/zod/src/v4/core/visit.ts +193 -0
- package/node_modules/zod/src/v4/index.ts +3 -3
- package/node_modules/zod/src/v4/locales/ar.ts +3 -0
- package/node_modules/zod/src/v4/locales/az.ts +3 -0
- package/node_modules/zod/src/v4/locales/be.ts +10 -0
- package/node_modules/zod/src/v4/locales/bg.ts +3 -0
- package/node_modules/zod/src/v4/locales/bn.ts +121 -0
- package/node_modules/zod/src/v4/locales/ca.ts +3 -0
- package/node_modules/zod/src/v4/locales/ckb.ts +138 -0
- package/node_modules/zod/src/v4/locales/cs.ts +3 -0
- package/node_modules/zod/src/v4/locales/da.ts +5 -2
- package/node_modules/zod/src/v4/locales/de.ts +3 -0
- package/node_modules/zod/src/v4/locales/el.ts +1 -0
- package/node_modules/zod/src/v4/locales/en.ts +15 -4
- package/node_modules/zod/src/v4/locales/eo.ts +3 -0
- package/node_modules/zod/src/v4/locales/es.ts +2 -0
- package/node_modules/zod/src/v4/locales/fa.ts +3 -0
- package/node_modules/zod/src/v4/locales/fi.ts +3 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +3 -0
- package/node_modules/zod/src/v4/locales/fr.ts +19 -14
- package/node_modules/zod/src/v4/locales/gu.ts +121 -0
- package/node_modules/zod/src/v4/locales/he.ts +6 -1
- package/node_modules/zod/src/v4/locales/hi.ts +124 -0
- package/node_modules/zod/src/v4/locales/hr.ts +2 -0
- package/node_modules/zod/src/v4/locales/hu.ts +3 -0
- package/node_modules/zod/src/v4/locales/hy.ts +9 -0
- package/node_modules/zod/src/v4/locales/id.ts +3 -0
- package/node_modules/zod/src/v4/locales/index.ts +10 -0
- package/node_modules/zod/src/v4/locales/is.ts +3 -0
- package/node_modules/zod/src/v4/locales/it.ts +3 -0
- package/node_modules/zod/src/v4/locales/ja.ts +3 -0
- package/node_modules/zod/src/v4/locales/ka.ts +3 -0
- package/node_modules/zod/src/v4/locales/km.ts +3 -0
- package/node_modules/zod/src/v4/locales/kn.ts +124 -0
- package/node_modules/zod/src/v4/locales/ko.ts +3 -0
- package/node_modules/zod/src/v4/locales/lt.ts +2 -0
- package/node_modules/zod/src/v4/locales/mk.ts +3 -0
- package/node_modules/zod/src/v4/locales/ms.ts +3 -0
- package/node_modules/zod/src/v4/locales/ne.ts +126 -0
- package/node_modules/zod/src/v4/locales/nl.ts +3 -0
- package/node_modules/zod/src/v4/locales/nn.ts +119 -0
- package/node_modules/zod/src/v4/locales/no.ts +5 -2
- package/node_modules/zod/src/v4/locales/ota.ts +3 -0
- package/node_modules/zod/src/v4/locales/pl.ts +3 -0
- package/node_modules/zod/src/v4/locales/ps.ts +3 -0
- package/node_modules/zod/src/v4/locales/pt-BR.ts +159 -0
- package/node_modules/zod/src/v4/locales/pt.ts +99 -58
- package/node_modules/zod/src/v4/locales/ro.ts +1 -0
- package/node_modules/zod/src/v4/locales/ru.ts +10 -0
- package/node_modules/zod/src/v4/locales/sk.ts +121 -0
- package/node_modules/zod/src/v4/locales/sl.ts +3 -0
- package/node_modules/zod/src/v4/locales/sv.ts +5 -2
- package/node_modules/zod/src/v4/locales/ta.ts +3 -0
- package/node_modules/zod/src/v4/locales/th.ts +3 -0
- package/node_modules/zod/src/v4/locales/tk.ts +111 -0
- package/node_modules/zod/src/v4/locales/tr.ts +3 -0
- package/node_modules/zod/src/v4/locales/uk.ts +3 -0
- package/node_modules/zod/src/v4/locales/ur.ts +3 -0
- package/node_modules/zod/src/v4/locales/uz.ts +1 -0
- package/node_modules/zod/src/v4/locales/vi.ts +3 -0
- package/node_modules/zod/src/v4/locales/yo.ts +3 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +3 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +3 -0
- package/node_modules/zod/src/v4/mini/checks.ts +1 -0
- package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
- package/node_modules/zod/src/v4/mini/external.ts +10 -1
- package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
- package/node_modules/zod/src/v4/mini/parse.ts +2 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +135 -56
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
- package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
- package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +72 -5
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +21 -0
- package/node_modules/zod/v3/ZodError.cjs +22 -12
- package/node_modules/zod/v3/ZodError.d.cts +1 -1
- package/node_modules/zod/v3/ZodError.d.ts +1 -1
- package/node_modules/zod/v3/ZodError.js +22 -12
- package/node_modules/zod/v3/types.cjs +7 -5
- package/node_modules/zod/v3/types.js +7 -5
- package/node_modules/zod/v4/classic/checks.cjs +2 -1
- package/node_modules/zod/v4/classic/checks.d.cts +1 -1
- package/node_modules/zod/v4/classic/checks.d.ts +1 -1
- package/node_modules/zod/v4/classic/checks.js +1 -1
- package/node_modules/zod/v4/classic/compat.d.cts +9 -11
- package/node_modules/zod/v4/classic/compat.d.ts +9 -11
- package/node_modules/zod/v4/classic/deep-partial.cjs +39 -0
- package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
- package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
- package/node_modules/zod/v4/classic/deep-partial.js +13 -0
- package/node_modules/zod/v4/classic/errors.cjs +43 -34
- package/node_modules/zod/v4/classic/errors.d.cts +3 -4
- package/node_modules/zod/v4/classic/errors.d.ts +3 -4
- package/node_modules/zod/v4/classic/errors.js +43 -34
- package/node_modules/zod/v4/classic/external.cjs +30 -27
- package/node_modules/zod/v4/classic/external.d.cts +5 -2
- package/node_modules/zod/v4/classic/external.d.ts +5 -2
- package/node_modules/zod/v4/classic/external.js +5 -8
- package/node_modules/zod/v4/classic/from-json-schema.cjs +136 -75
- package/node_modules/zod/v4/classic/from-json-schema.js +136 -75
- package/node_modules/zod/v4/classic/in-out.cjs +63 -0
- package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
- package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
- package/node_modules/zod/v4/classic/in-out.js +36 -0
- package/node_modules/zod/v4/classic/index.cjs +2 -2
- package/node_modules/zod/v4/classic/index.d.cts +1 -2
- package/node_modules/zod/v4/classic/index.d.ts +1 -2
- package/node_modules/zod/v4/classic/index.js +2 -2
- package/node_modules/zod/v4/classic/iso.cjs +11 -22
- package/node_modules/zod/v4/classic/iso.d.cts +2 -17
- package/node_modules/zod/v4/classic/iso.d.ts +2 -17
- package/node_modules/zod/v4/classic/iso.js +2 -17
- package/node_modules/zod/v4/classic/parse.cjs +4 -1
- package/node_modules/zod/v4/classic/parse.d.cts +17 -4
- package/node_modules/zod/v4/classic/parse.d.ts +17 -4
- package/node_modules/zod/v4/classic/parse.js +1 -0
- package/node_modules/zod/v4/classic/schemas.cjs +498 -398
- package/node_modules/zod/v4/classic/schemas.d.cts +53 -18
- package/node_modules/zod/v4/classic/schemas.d.ts +53 -18
- package/node_modules/zod/v4/classic/schemas.js +492 -396
- package/node_modules/zod/v4/core/api.cjs +23 -4
- package/node_modules/zod/v4/core/api.d.cts +13 -9
- package/node_modules/zod/v4/core/api.d.ts +13 -9
- package/node_modules/zod/v4/core/api.js +21 -4
- package/node_modules/zod/v4/core/checks.cjs +37 -31
- package/node_modules/zod/v4/core/checks.d.cts +13 -13
- package/node_modules/zod/v4/core/checks.d.ts +13 -13
- package/node_modules/zod/v4/core/checks.js +37 -31
- package/node_modules/zod/v4/core/compile.cjs +1813 -0
- package/node_modules/zod/v4/core/compile.d.cts +51 -0
- package/node_modules/zod/v4/core/compile.d.ts +51 -0
- package/node_modules/zod/v4/core/compile.js +1783 -0
- package/node_modules/zod/v4/core/core.cjs +81 -18
- package/node_modules/zod/v4/core/core.d.cts +16 -4
- package/node_modules/zod/v4/core/core.d.ts +16 -4
- package/node_modules/zod/v4/core/core.js +82 -19
- package/node_modules/zod/v4/core/doc.cjs +5 -7
- package/node_modules/zod/v4/core/doc.d.cts +3 -1
- package/node_modules/zod/v4/core/doc.d.ts +3 -1
- package/node_modules/zod/v4/core/doc.js +5 -7
- package/node_modules/zod/v4/core/errors.cjs +110 -25
- package/node_modules/zod/v4/core/errors.d.cts +4 -0
- package/node_modules/zod/v4/core/errors.d.ts +4 -0
- package/node_modules/zod/v4/core/errors.js +110 -25
- package/node_modules/zod/v4/core/index.cjs +5 -1
- package/node_modules/zod/v4/core/index.d.cts +3 -0
- package/node_modules/zod/v4/core/index.d.ts +3 -0
- package/node_modules/zod/v4/core/index.js +3 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +4 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
- package/node_modules/zod/v4/core/json-schema-generator.js +4 -0
- package/node_modules/zod/v4/core/json-schema-processors.cjs +264 -95
- package/node_modules/zod/v4/core/json-schema-processors.js +243 -97
- package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
- package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
- package/node_modules/zod/v4/core/memoizer.cjs +272 -0
- package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
- package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
- package/node_modules/zod/v4/core/memoizer.js +265 -0
- package/node_modules/zod/v4/core/parse.cjs +96 -34
- package/node_modules/zod/v4/core/parse.d.cts +14 -11
- package/node_modules/zod/v4/core/parse.d.ts +14 -11
- package/node_modules/zod/v4/core/parse.js +94 -33
- package/node_modules/zod/v4/core/regexes.cjs +27 -15
- package/node_modules/zod/v4/core/regexes.d.cts +2 -0
- package/node_modules/zod/v4/core/regexes.d.ts +2 -0
- package/node_modules/zod/v4/core/regexes.js +24 -13
- package/node_modules/zod/v4/core/registries.js +2 -2
- package/node_modules/zod/v4/core/schemas.cjs +537 -326
- package/node_modules/zod/v4/core/schemas.d.cts +100 -31
- package/node_modules/zod/v4/core/schemas.d.ts +100 -31
- package/node_modules/zod/v4/core/schemas.js +526 -325
- package/node_modules/zod/v4/core/to-json-schema.cjs +242 -39
- package/node_modules/zod/v4/core/to-json-schema.d.cts +42 -3
- package/node_modules/zod/v4/core/to-json-schema.d.ts +42 -3
- package/node_modules/zod/v4/core/to-json-schema.js +241 -39
- package/node_modules/zod/v4/core/util.cjs +212 -31
- package/node_modules/zod/v4/core/util.d.cts +58 -1
- package/node_modules/zod/v4/core/util.d.ts +58 -1
- package/node_modules/zod/v4/core/util.js +202 -30
- package/node_modules/zod/v4/core/versions.cjs +2 -2
- package/node_modules/zod/v4/core/versions.d.cts +1 -1
- package/node_modules/zod/v4/core/versions.d.ts +1 -1
- package/node_modules/zod/v4/core/versions.js +2 -2
- package/node_modules/zod/v4/core/visit.cjs +195 -0
- package/node_modules/zod/v4/core/visit.d.cts +30 -0
- package/node_modules/zod/v4/core/visit.d.ts +30 -0
- package/node_modules/zod/v4/core/visit.js +169 -0
- package/node_modules/zod/v4/index.cjs +15 -5
- package/node_modules/zod/v4/index.d.cts +2 -2
- package/node_modules/zod/v4/index.d.ts +2 -2
- package/node_modules/zod/v4/index.js +3 -2
- package/node_modules/zod/v4/locales/ar.cjs +3 -0
- package/node_modules/zod/v4/locales/ar.js +3 -0
- package/node_modules/zod/v4/locales/az.cjs +3 -0
- package/node_modules/zod/v4/locales/az.js +3 -0
- package/node_modules/zod/v4/locales/be.cjs +10 -0
- package/node_modules/zod/v4/locales/be.js +10 -0
- package/node_modules/zod/v4/locales/bg.cjs +3 -0
- package/node_modules/zod/v4/locales/bg.js +3 -0
- package/node_modules/zod/v4/locales/bn.cjs +138 -0
- package/node_modules/zod/v4/locales/bn.d.cts +5 -0
- package/node_modules/zod/v4/locales/bn.d.ts +4 -0
- package/node_modules/zod/v4/locales/bn.js +111 -0
- package/node_modules/zod/v4/locales/ca.cjs +3 -0
- package/node_modules/zod/v4/locales/ca.js +3 -0
- package/node_modules/zod/v4/locales/ckb.cjs +158 -0
- package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
- package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
- package/node_modules/zod/v4/locales/ckb.js +131 -0
- package/node_modules/zod/v4/locales/cs.cjs +3 -0
- package/node_modules/zod/v4/locales/cs.js +3 -0
- package/node_modules/zod/v4/locales/da.cjs +5 -2
- package/node_modules/zod/v4/locales/da.js +5 -2
- package/node_modules/zod/v4/locales/de.cjs +3 -0
- package/node_modules/zod/v4/locales/de.js +3 -0
- package/node_modules/zod/v4/locales/el.cjs +1 -0
- package/node_modules/zod/v4/locales/el.js +1 -0
- package/node_modules/zod/v4/locales/en.cjs +14 -4
- package/node_modules/zod/v4/locales/en.js +14 -4
- package/node_modules/zod/v4/locales/eo.cjs +3 -0
- package/node_modules/zod/v4/locales/eo.js +3 -0
- package/node_modules/zod/v4/locales/es.cjs +2 -0
- package/node_modules/zod/v4/locales/es.js +2 -0
- package/node_modules/zod/v4/locales/fa.cjs +3 -0
- package/node_modules/zod/v4/locales/fa.js +3 -0
- package/node_modules/zod/v4/locales/fi.cjs +3 -0
- package/node_modules/zod/v4/locales/fi.js +3 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +3 -0
- package/node_modules/zod/v4/locales/fr-CA.js +3 -0
- package/node_modules/zod/v4/locales/fr.cjs +16 -14
- package/node_modules/zod/v4/locales/fr.js +16 -14
- package/node_modules/zod/v4/locales/gu.cjs +138 -0
- package/node_modules/zod/v4/locales/gu.d.cts +5 -0
- package/node_modules/zod/v4/locales/gu.d.ts +4 -0
- package/node_modules/zod/v4/locales/gu.js +111 -0
- package/node_modules/zod/v4/locales/he.cjs +5 -0
- package/node_modules/zod/v4/locales/he.js +5 -0
- package/node_modules/zod/v4/locales/hi.cjs +136 -0
- package/node_modules/zod/v4/locales/hi.d.cts +5 -0
- package/node_modules/zod/v4/locales/hi.d.ts +4 -0
- package/node_modules/zod/v4/locales/hi.js +109 -0
- package/node_modules/zod/v4/locales/hr.cjs +2 -0
- package/node_modules/zod/v4/locales/hr.js +2 -0
- package/node_modules/zod/v4/locales/hu.cjs +3 -0
- package/node_modules/zod/v4/locales/hu.js +3 -0
- package/node_modules/zod/v4/locales/hy.cjs +9 -0
- package/node_modules/zod/v4/locales/hy.js +9 -0
- package/node_modules/zod/v4/locales/id.cjs +3 -0
- package/node_modules/zod/v4/locales/id.js +3 -0
- package/node_modules/zod/v4/locales/index.cjs +22 -2
- package/node_modules/zod/v4/locales/index.d.cts +10 -0
- package/node_modules/zod/v4/locales/index.d.ts +10 -0
- package/node_modules/zod/v4/locales/index.js +10 -0
- package/node_modules/zod/v4/locales/is.cjs +3 -0
- package/node_modules/zod/v4/locales/is.js +3 -0
- package/node_modules/zod/v4/locales/it.cjs +3 -0
- package/node_modules/zod/v4/locales/it.js +3 -0
- package/node_modules/zod/v4/locales/ja.cjs +3 -0
- package/node_modules/zod/v4/locales/ja.js +3 -0
- package/node_modules/zod/v4/locales/ka.cjs +3 -0
- package/node_modules/zod/v4/locales/ka.js +3 -0
- package/node_modules/zod/v4/locales/km.cjs +3 -0
- package/node_modules/zod/v4/locales/km.js +3 -0
- package/node_modules/zod/v4/locales/kn.cjs +141 -0
- package/node_modules/zod/v4/locales/kn.d.cts +5 -0
- package/node_modules/zod/v4/locales/kn.d.ts +4 -0
- package/node_modules/zod/v4/locales/kn.js +114 -0
- package/node_modules/zod/v4/locales/ko.cjs +3 -0
- package/node_modules/zod/v4/locales/ko.js +3 -0
- package/node_modules/zod/v4/locales/lt.cjs +2 -0
- package/node_modules/zod/v4/locales/lt.js +2 -0
- package/node_modules/zod/v4/locales/mk.cjs +3 -0
- package/node_modules/zod/v4/locales/mk.js +3 -0
- package/node_modules/zod/v4/locales/ms.cjs +3 -0
- package/node_modules/zod/v4/locales/ms.js +3 -0
- package/node_modules/zod/v4/locales/ne.cjs +136 -0
- package/node_modules/zod/v4/locales/ne.d.cts +5 -0
- package/node_modules/zod/v4/locales/ne.d.ts +4 -0
- package/node_modules/zod/v4/locales/ne.js +109 -0
- package/node_modules/zod/v4/locales/nl.cjs +3 -0
- package/node_modules/zod/v4/locales/nl.js +3 -0
- package/node_modules/zod/v4/locales/nn.cjs +138 -0
- package/node_modules/zod/v4/locales/nn.d.cts +5 -0
- package/node_modules/zod/v4/locales/nn.d.ts +4 -0
- package/node_modules/zod/v4/locales/nn.js +111 -0
- package/node_modules/zod/v4/locales/no.cjs +5 -2
- package/node_modules/zod/v4/locales/no.js +5 -2
- package/node_modules/zod/v4/locales/ota.cjs +3 -0
- package/node_modules/zod/v4/locales/ota.js +3 -0
- package/node_modules/zod/v4/locales/pl.cjs +3 -0
- package/node_modules/zod/v4/locales/pl.js +3 -0
- package/node_modules/zod/v4/locales/ps.cjs +3 -0
- package/node_modules/zod/v4/locales/ps.js +3 -0
- package/node_modules/zod/v4/locales/pt-BR.cjs +168 -0
- package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
- package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
- package/node_modules/zod/v4/locales/pt-BR.js +141 -0
- package/node_modules/zod/v4/locales/pt.cjs +87 -55
- package/node_modules/zod/v4/locales/pt.js +87 -55
- package/node_modules/zod/v4/locales/ro.cjs +1 -0
- package/node_modules/zod/v4/locales/ro.js +1 -0
- package/node_modules/zod/v4/locales/ru.cjs +10 -0
- package/node_modules/zod/v4/locales/ru.js +10 -0
- package/node_modules/zod/v4/locales/sk.cjs +141 -0
- package/node_modules/zod/v4/locales/sk.d.cts +5 -0
- package/node_modules/zod/v4/locales/sk.d.ts +4 -0
- package/node_modules/zod/v4/locales/sk.js +114 -0
- package/node_modules/zod/v4/locales/sl.cjs +3 -0
- package/node_modules/zod/v4/locales/sl.js +3 -0
- package/node_modules/zod/v4/locales/sv.cjs +5 -2
- package/node_modules/zod/v4/locales/sv.js +5 -2
- package/node_modules/zod/v4/locales/ta.cjs +3 -0
- package/node_modules/zod/v4/locales/ta.js +3 -0
- package/node_modules/zod/v4/locales/th.cjs +3 -0
- package/node_modules/zod/v4/locales/th.js +3 -0
- package/node_modules/zod/v4/locales/tk.cjs +132 -0
- package/node_modules/zod/v4/locales/tk.d.cts +5 -0
- package/node_modules/zod/v4/locales/tk.d.ts +4 -0
- package/node_modules/zod/v4/locales/tk.js +105 -0
- package/node_modules/zod/v4/locales/tr.cjs +3 -0
- package/node_modules/zod/v4/locales/tr.js +3 -0
- package/node_modules/zod/v4/locales/uk.cjs +3 -0
- package/node_modules/zod/v4/locales/uk.js +3 -0
- package/node_modules/zod/v4/locales/ur.cjs +3 -0
- package/node_modules/zod/v4/locales/ur.js +3 -0
- package/node_modules/zod/v4/locales/uz.cjs +1 -0
- package/node_modules/zod/v4/locales/uz.js +1 -0
- package/node_modules/zod/v4/locales/vi.cjs +3 -0
- package/node_modules/zod/v4/locales/vi.js +3 -0
- package/node_modules/zod/v4/locales/yo.cjs +3 -0
- package/node_modules/zod/v4/locales/yo.js +3 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +3 -0
- package/node_modules/zod/v4/locales/zh-CN.js +3 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +3 -0
- package/node_modules/zod/v4/locales/zh-TW.js +3 -0
- package/node_modules/zod/v4/mini/checks.cjs +2 -1
- package/node_modules/zod/v4/mini/checks.d.cts +1 -1
- package/node_modules/zod/v4/mini/checks.d.ts +1 -1
- package/node_modules/zod/v4/mini/checks.js +1 -1
- package/node_modules/zod/v4/mini/deep-partial.cjs +39 -0
- package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
- package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
- package/node_modules/zod/v4/mini/deep-partial.js +13 -0
- package/node_modules/zod/v4/mini/external.cjs +12 -1
- package/node_modules/zod/v4/mini/external.d.cts +5 -2
- package/node_modules/zod/v4/mini/external.d.ts +5 -2
- package/node_modules/zod/v4/mini/external.js +3 -1
- package/node_modules/zod/v4/mini/in-out.cjs +63 -0
- package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
- package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
- package/node_modules/zod/v4/mini/in-out.js +36 -0
- package/node_modules/zod/v4/mini/parse.cjs +3 -1
- package/node_modules/zod/v4/mini/parse.d.cts +1 -1
- package/node_modules/zod/v4/mini/parse.d.ts +1 -1
- package/node_modules/zod/v4/mini/parse.js +1 -1
- package/node_modules/zod/v4/mini/schemas.cjs +75 -47
- package/node_modules/zod/v4/mini/schemas.d.cts +43 -13
- package/node_modules/zod/v4/mini/schemas.d.ts +43 -13
- package/node_modules/zod/v4/mini/schemas.js +71 -45
- package/openclaw.plugin.json +38 -42
- package/package.json +8 -6
- package/dist/transport-probes.runtime-DV7x4VWu.js +0 -2
- package/node_modules/zod/src/v4/core/config.ts +0 -15
- /package/dist/{identity-YXPmgFMu.js → .setup/identity-YXPmgFMu.mjs} +0 -0
- /package/dist/{normalize-l_b99hap.js → .setup/normalize-l_b99hap.mjs} +0 -0
- /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
4
|
+
import net, { createConnection } from "node:net";
|
|
5
|
+
import path from "node:path";
|
|
2
6
|
import { detectMime, extractOriginalFilename, parseMediaContentLength } from "openclaw/plugin-sdk/media-runtime";
|
|
3
|
-
import { parseStrictNonNegativeInteger, resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
|
|
7
|
+
import { parseStrictNonNegativeInteger, resolvePositiveTimerTimeoutMs, resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
|
|
4
8
|
import { coerceErrorMessage, formatErrorMessage, toErrorObject } from "openclaw/plugin-sdk/error-runtime";
|
|
5
9
|
import { resolveFetch } from "openclaw/plugin-sdk/fetch-runtime";
|
|
6
10
|
import { readResponseTextPrefix, readResponseWithLimit } from "openclaw/plugin-sdk/response-limit-runtime";
|
|
7
11
|
import { readRegularFile } from "openclaw/plugin-sdk/security-runtime";
|
|
8
|
-
import path from "node:path";
|
|
9
12
|
import { Buffer as Buffer$1 } from "node:buffer";
|
|
10
13
|
import http from "node:http";
|
|
11
14
|
import https from "node:https";
|
|
12
15
|
import { generateSecureUuid } from "openclaw/plugin-sdk/core";
|
|
16
|
+
import { randomUUID } from "node:crypto";
|
|
17
|
+
import { execFile } from "node:child_process";
|
|
18
|
+
import { lstat, mkdir, rmdir, unlink } from "node:fs/promises";
|
|
19
|
+
import os from "node:os";
|
|
20
|
+
import { promisify } from "node:util";
|
|
13
21
|
//#region extensions/signal/src/ws-runtime.ts
|
|
14
22
|
const require = createRequire(import.meta.url);
|
|
15
23
|
const WebSocket = require(path.join(path.dirname(require.resolve("ws/package.json")), "index.js"));
|
|
@@ -22,7 +30,7 @@ const WebSocket = require(path.join(path.dirname(require.resolve("ws/package.jso
|
|
|
22
30
|
* This is a separate implementation from client.ts (native signal-cli)
|
|
23
31
|
* to keep the two modes cleanly isolated.
|
|
24
32
|
*/
|
|
25
|
-
const DEFAULT_TIMEOUT_MS$
|
|
33
|
+
const DEFAULT_TIMEOUT_MS$2 = 1e4;
|
|
26
34
|
const DEFAULT_ATTACHMENT_RESPONSE_MAX_BYTES = 1048576;
|
|
27
35
|
const SIGNAL_REST_ERROR_RESPONSE_MAX_BYTES = 16384;
|
|
28
36
|
const SIGNAL_REST_SUCCESS_RESPONSE_MAX_BYTES = 16777216;
|
|
@@ -58,7 +66,7 @@ function signalRestRequestTimeoutError() {
|
|
|
58
66
|
}
|
|
59
67
|
/** Keep one absolute deadline across headers and every bounded body reader. */
|
|
60
68
|
async function withSignalRestDeadline(timeoutMs, run) {
|
|
61
|
-
const safeTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$
|
|
69
|
+
const safeTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$2);
|
|
62
70
|
const deadlineAtMs = Date.now() + safeTimeoutMs;
|
|
63
71
|
const controller = new AbortController();
|
|
64
72
|
const timer = setTimeout(() => controller.abort(signalRestRequestTimeoutError()), safeTimeoutMs);
|
|
@@ -132,7 +140,7 @@ async function releaseUnreadResponseBody(res) {
|
|
|
132
140
|
/**
|
|
133
141
|
* Check if bbernhard container REST API is available.
|
|
134
142
|
*/
|
|
135
|
-
async function containerCheck(baseUrl, timeoutMs = DEFAULT_TIMEOUT_MS$
|
|
143
|
+
async function containerCheck(baseUrl, timeoutMs = DEFAULT_TIMEOUT_MS$2, account) {
|
|
136
144
|
const normalized = normalizeBaseUrl$1(baseUrl);
|
|
137
145
|
let res;
|
|
138
146
|
try {
|
|
@@ -162,7 +170,7 @@ async function containerCheck(baseUrl, timeoutMs = DEFAULT_TIMEOUT_MS$1, account
|
|
|
162
170
|
function containerReceiveCheck(normalizedBaseUrl, account, timeoutMs) {
|
|
163
171
|
const wsUrl = `${normalizedBaseUrl.replace(/^http/, "ws")}/v1/receive/${encodeURIComponent(account)}`;
|
|
164
172
|
return new Promise((resolve) => {
|
|
165
|
-
const safeTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$
|
|
173
|
+
const safeTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$2);
|
|
166
174
|
let settled = false;
|
|
167
175
|
let ws;
|
|
168
176
|
const timer = setTimeout(() => {
|
|
@@ -233,11 +241,12 @@ async function containerRestRequest(endpoint, opts, method = "GET", body) {
|
|
|
233
241
|
headers: { "Content-Type": "application/json" }
|
|
234
242
|
};
|
|
235
243
|
if (body) init.body = JSON.stringify(body);
|
|
236
|
-
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS$
|
|
237
|
-
const bodyIdleTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$
|
|
244
|
+
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS$2;
|
|
245
|
+
const bodyIdleTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$2);
|
|
238
246
|
const fetchImpl = resolveFetch();
|
|
239
247
|
if (!fetchImpl) throw new Error("fetch is not available");
|
|
240
248
|
return await withSignalRestDeadline(timeoutMs, async ({ signal, timeoutMs: bodyTimeoutMs }) => {
|
|
249
|
+
opts.assertDirectAdapterHandoff?.();
|
|
241
250
|
const res = await fetchImpl(url, {
|
|
242
251
|
...init,
|
|
243
252
|
signal
|
|
@@ -266,8 +275,8 @@ async function containerRestRequest(endpoint, opts, method = "GET", body) {
|
|
|
266
275
|
*/
|
|
267
276
|
async function containerFetchAttachment(attachmentId, opts) {
|
|
268
277
|
const url = `${normalizeBaseUrl$1(opts.baseUrl)}/v1/attachments/${encodeURIComponent(attachmentId)}`;
|
|
269
|
-
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS$
|
|
270
|
-
const bodyIdleTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$
|
|
278
|
+
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS$2;
|
|
279
|
+
const bodyIdleTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$2);
|
|
271
280
|
const fetchImpl = resolveFetch();
|
|
272
281
|
if (!fetchImpl) throw new Error("fetch is not available");
|
|
273
282
|
return await withSignalRestDeadline(timeoutMs, async ({ signal, timeoutMs: bodyTimeoutMs }) => {
|
|
@@ -328,7 +337,7 @@ async function streamContainerEvents(params) {
|
|
|
328
337
|
try {
|
|
329
338
|
ws = new WebSocket(wsUrl, {
|
|
330
339
|
maxPayload: WS_MAX_PAYLOAD,
|
|
331
|
-
handshakeTimeout: WS_HANDSHAKE_MS
|
|
340
|
+
handshakeTimeout: resolvePositiveTimerTimeoutMs(params.timeoutMs, WS_HANDSHAKE_MS)
|
|
332
341
|
});
|
|
333
342
|
} catch (err) {
|
|
334
343
|
logError(`[signal-ws] failed to create WebSocket: ${coerceErrorMessage(err)}`);
|
|
@@ -477,10 +486,7 @@ async function containerSendMessage(params) {
|
|
|
477
486
|
payload.quote_author = params.quoteAuthor;
|
|
478
487
|
payload.quote_message = params.quoteMessage ?? "";
|
|
479
488
|
}
|
|
480
|
-
const timestamp = parseContainerSendTimestamp((await containerRestRequest("/v2/send",
|
|
481
|
-
baseUrl: params.baseUrl,
|
|
482
|
-
timeoutMs: params.timeoutMs
|
|
483
|
-
}, "POST", payload))?.timestamp);
|
|
489
|
+
const timestamp = parseContainerSendTimestamp((await containerRestRequest("/v2/send", params, "POST", payload))?.timestamp);
|
|
484
490
|
return timestamp === void 0 ? {} : { timestamp };
|
|
485
491
|
}
|
|
486
492
|
/**
|
|
@@ -488,20 +494,14 @@ async function containerSendMessage(params) {
|
|
|
488
494
|
*/
|
|
489
495
|
async function containerSendTyping(params) {
|
|
490
496
|
const method = params.stop ? "DELETE" : "PUT";
|
|
491
|
-
await containerRestRequest(`/v1/typing-indicator/${encodeURIComponent(params.account)}`, {
|
|
492
|
-
baseUrl: params.baseUrl,
|
|
493
|
-
timeoutMs: params.timeoutMs
|
|
494
|
-
}, method, { recipient: params.recipient });
|
|
497
|
+
await containerRestRequest(`/v1/typing-indicator/${encodeURIComponent(params.account)}`, params, method, { recipient: params.recipient });
|
|
495
498
|
return true;
|
|
496
499
|
}
|
|
497
500
|
/**
|
|
498
501
|
* Send read receipt via bbernhard container REST API.
|
|
499
502
|
*/
|
|
500
503
|
async function containerSendReceipt(params) {
|
|
501
|
-
await containerRestRequest(`/v1/receipts/${encodeURIComponent(params.account)}`, {
|
|
502
|
-
baseUrl: params.baseUrl,
|
|
503
|
-
timeoutMs: params.timeoutMs
|
|
504
|
-
}, "POST", {
|
|
504
|
+
await containerRestRequest(`/v1/receipts/${encodeURIComponent(params.account)}`, params, "POST", {
|
|
505
505
|
recipient: params.recipient,
|
|
506
506
|
timestamp: params.timestamp,
|
|
507
507
|
receipt_type: params.type ?? "read"
|
|
@@ -519,10 +519,7 @@ async function containerSendReaction(params) {
|
|
|
519
519
|
timestamp: params.targetTimestamp
|
|
520
520
|
};
|
|
521
521
|
if (params.groupId) payload.group_id = params.groupId;
|
|
522
|
-
return await containerRestRequest(`/v1/reactions/${encodeURIComponent(params.account)}`, {
|
|
523
|
-
baseUrl: params.baseUrl,
|
|
524
|
-
timeoutMs: params.timeoutMs
|
|
525
|
-
}, params.remove ? "DELETE" : "POST", payload) ?? {};
|
|
522
|
+
return await containerRestRequest(`/v1/reactions/${encodeURIComponent(params.account)}`, params, params.remove ? "DELETE" : "POST", payload) ?? {};
|
|
526
523
|
}
|
|
527
524
|
/**
|
|
528
525
|
* Strip the "uuid:" prefix that native signal-cli accepts but the container API rejects.
|
|
@@ -565,39 +562,35 @@ async function containerRpcRequest(method, params, opts) {
|
|
|
565
562
|
const quoteTimestamp = normalizeContainerQuoteTimestamp(p.quoteTimestamp ?? p["quote-timestamp"]);
|
|
566
563
|
const quoteAuthor = normalizeContainerQuoteText(p.quoteAuthor ?? p["quote-author"]);
|
|
567
564
|
return await containerSendMessage({
|
|
568
|
-
|
|
565
|
+
...opts,
|
|
569
566
|
account: p.account ?? "",
|
|
570
567
|
recipients: finalRecipients,
|
|
571
568
|
message: p.message ?? "",
|
|
572
569
|
textStyles,
|
|
573
570
|
attachments: p.attachments,
|
|
574
|
-
maxAttachmentBytes: opts.maxAttachmentBytes,
|
|
575
571
|
quoteTimestamp,
|
|
576
572
|
quoteAuthor: quoteAuthor ? stripUuidPrefix(quoteAuthor) : void 0,
|
|
577
|
-
quoteMessage: normalizeContainerQuoteText(p.quoteMessage ?? p["quote-message"])
|
|
578
|
-
timeoutMs: opts.timeoutMs
|
|
573
|
+
quoteMessage: normalizeContainerQuoteText(p.quoteMessage ?? p["quote-message"])
|
|
579
574
|
});
|
|
580
575
|
}
|
|
581
576
|
case "sendTyping": {
|
|
582
577
|
const recipient = stripUuidPrefix(p.recipient?.[0] ?? (p.groupId ? formatGroupIdForContainer(p.groupId) : ""));
|
|
583
578
|
await containerSendTyping({
|
|
584
|
-
|
|
579
|
+
...opts,
|
|
585
580
|
account: p.account ?? "",
|
|
586
581
|
recipient,
|
|
587
|
-
stop: p.stop
|
|
588
|
-
timeoutMs: opts.timeoutMs
|
|
582
|
+
stop: p.stop
|
|
589
583
|
});
|
|
590
584
|
return;
|
|
591
585
|
}
|
|
592
586
|
case "sendReceipt": {
|
|
593
587
|
const recipient = stripUuidPrefix(p.recipient?.[0] ?? "");
|
|
594
588
|
await containerSendReceipt({
|
|
595
|
-
|
|
589
|
+
...opts,
|
|
596
590
|
account: p.account ?? "",
|
|
597
591
|
recipient,
|
|
598
592
|
timestamp: p.targetTimestamp,
|
|
599
|
-
type: p.type
|
|
600
|
-
timeoutMs: opts.timeoutMs
|
|
593
|
+
type: p.type
|
|
601
594
|
});
|
|
602
595
|
return;
|
|
603
596
|
}
|
|
@@ -607,14 +600,13 @@ async function containerRpcRequest(method, params, opts) {
|
|
|
607
600
|
const formattedGroupId = groupId ? formatGroupIdForContainer(groupId) : void 0;
|
|
608
601
|
const effectiveRecipient = formattedGroupId || recipient || "";
|
|
609
602
|
return await containerSendReaction({
|
|
610
|
-
|
|
603
|
+
...opts,
|
|
611
604
|
account: p.account ?? "",
|
|
612
605
|
recipient: effectiveRecipient,
|
|
613
606
|
emoji: p.emoji ?? "",
|
|
614
607
|
targetAuthor: stripUuidPrefix(p.targetAuthor ?? recipient),
|
|
615
608
|
targetTimestamp: p.targetTimestamp,
|
|
616
609
|
groupId: formattedGroupId,
|
|
617
|
-
timeoutMs: opts.timeoutMs,
|
|
618
610
|
remove: Boolean(p.remove)
|
|
619
611
|
});
|
|
620
612
|
}
|
|
@@ -636,6 +628,269 @@ async function containerRpcRequest(method, params, opts) {
|
|
|
636
628
|
}
|
|
637
629
|
}
|
|
638
630
|
//#endregion
|
|
631
|
+
//#region extensions/signal/src/socket-path.ts
|
|
632
|
+
const execFileAsync = promisify(execFile);
|
|
633
|
+
function socketOwner(socketPath) {
|
|
634
|
+
if (process.platform === "win32" || !process.getuid) throw new Error("Signal UNIX socket transport requires a POSIX host");
|
|
635
|
+
if (!path.isAbsolute(socketPath) || path.normalize(socketPath) !== socketPath || socketPath.includes("\0")) throw new Error("Signal socketPath must be a normalized absolute path without NUL bytes");
|
|
636
|
+
if (Buffer.byteLength(socketPath) > 103) throw new Error("Signal socketPath must be at most 103 UTF-8 bytes");
|
|
637
|
+
return process.getuid();
|
|
638
|
+
}
|
|
639
|
+
async function assertDarwinAclSafe(entryPath, ownerUid, rejectInheritedAllow) {
|
|
640
|
+
if (process.platform !== "darwin") return;
|
|
641
|
+
let stdout;
|
|
642
|
+
try {
|
|
643
|
+
({stdout} = await execFileAsync("/bin/ls", ["-lde", entryPath], { encoding: "utf8" }));
|
|
644
|
+
} catch {
|
|
645
|
+
throw new Error("Signal socketPath ACLs could not be inspected safely");
|
|
646
|
+
}
|
|
647
|
+
const ownerName = ownerUid === 0 ? "root" : os.userInfo().username;
|
|
648
|
+
for (const line of stdout.split("\n").slice(1)) {
|
|
649
|
+
if (!/^\s*\d+:\s+/.test(line) || !/\ballow\b/.test(line)) continue;
|
|
650
|
+
const ownerAllow = line.includes(`user:${ownerName} `);
|
|
651
|
+
const inheritable = /\b(file_inherit|directory_inherit|limit_inherit|only_inherit)\b/.test(line);
|
|
652
|
+
if (!ownerAllow || rejectInheritedAllow && inheritable) throw new Error("Signal socketPath must not grant ACL access to other users");
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
async function validateDirectories(directory, uid, privateParent, inspectAcl) {
|
|
656
|
+
const parts = path.resolve(directory).split(path.sep).filter(Boolean);
|
|
657
|
+
let current = path.parse(directory).root;
|
|
658
|
+
for (const part of parts) {
|
|
659
|
+
current = path.join(current, part);
|
|
660
|
+
const stat = await lstat(current);
|
|
661
|
+
if (!stat.isDirectory() || stat.isSymbolicLink()) throw new Error("Signal socketPath must not traverse symlinks or non-directories");
|
|
662
|
+
if (stat.uid !== uid && stat.uid !== 0) throw new Error("Signal socketPath ancestors must belong to the current user or root");
|
|
663
|
+
if ((stat.mode & 18) !== 0 && !(stat.uid === 0 && (stat.mode & 512) !== 0)) throw new Error("Signal socketPath ancestors must not be writable by other users");
|
|
664
|
+
if (privateParent && current === path.resolve(directory)) {
|
|
665
|
+
if (stat.uid !== uid || (stat.mode & 511) !== 448) throw new Error("Signal socketPath parent must belong to the current user with mode 0700");
|
|
666
|
+
}
|
|
667
|
+
if (inspectAcl) await assertDarwinAclSafe(current, stat.uid, true);
|
|
668
|
+
}
|
|
669
|
+
if (privateParent && parts.length === 0) throw new Error("Signal socketPath requires a private parent directory");
|
|
670
|
+
}
|
|
671
|
+
/** Validate the OS-user boundary before every connection, not only at startup. */
|
|
672
|
+
async function validateSignalSocketPath(socketPath) {
|
|
673
|
+
const uid = socketOwner(socketPath);
|
|
674
|
+
await validateDirectories(path.dirname(socketPath), uid, true, true);
|
|
675
|
+
}
|
|
676
|
+
async function assertSignalSocketEndpoint(socketPath) {
|
|
677
|
+
await validateSignalSocketPath(socketPath);
|
|
678
|
+
const stat = await lstat(socketPath);
|
|
679
|
+
if (!stat.isSocket() || stat.uid !== socketOwner(socketPath)) throw new Error("Signal socketPath must name a socket owned by the current user");
|
|
680
|
+
await assertDarwinAclSafe(socketPath, stat.uid, false);
|
|
681
|
+
}
|
|
682
|
+
async function isStaleSocket(socketPath, abortSignal) {
|
|
683
|
+
abortSignal?.throwIfAborted();
|
|
684
|
+
return new Promise((resolve, reject) => {
|
|
685
|
+
const socket = createConnection(socketPath);
|
|
686
|
+
const timer = setTimeout(() => finish(/* @__PURE__ */ new Error("Signal socket ownership probe timed out")), 1e3);
|
|
687
|
+
const onAbort = () => finish(/* @__PURE__ */ new Error("Signal socket ownership probe aborted"));
|
|
688
|
+
function finish(error, stale = false) {
|
|
689
|
+
clearTimeout(timer);
|
|
690
|
+
abortSignal?.removeEventListener("abort", onAbort);
|
|
691
|
+
socket.destroy();
|
|
692
|
+
if (error) reject(error);
|
|
693
|
+
else resolve(stale);
|
|
694
|
+
}
|
|
695
|
+
socket.once("connect", () => finish());
|
|
696
|
+
socket.once("error", (error) => {
|
|
697
|
+
if ("code" in error && error.code === "ECONNREFUSED") finish(void 0, true);
|
|
698
|
+
else finish(error);
|
|
699
|
+
});
|
|
700
|
+
abortSignal?.addEventListener("abort", onAbort, { once: true });
|
|
701
|
+
});
|
|
702
|
+
}
|
|
703
|
+
/** Recover crash leftovers without unlinking a live or replaced endpoint. */
|
|
704
|
+
async function prepareSignalSocketPath(socketPath, abortSignal) {
|
|
705
|
+
const uid = socketOwner(socketPath);
|
|
706
|
+
abortSignal?.throwIfAborted();
|
|
707
|
+
const parent = path.dirname(socketPath);
|
|
708
|
+
await validateDirectories(path.dirname(parent), uid, false, false);
|
|
709
|
+
let createdParent = false;
|
|
710
|
+
try {
|
|
711
|
+
await mkdir(parent, { mode: 448 });
|
|
712
|
+
createdParent = true;
|
|
713
|
+
} catch (error) {
|
|
714
|
+
if (!(error instanceof Error && "code" in error && error.code === "EEXIST")) throw error;
|
|
715
|
+
}
|
|
716
|
+
try {
|
|
717
|
+
await validateSignalSocketPath(socketPath);
|
|
718
|
+
let existing;
|
|
719
|
+
try {
|
|
720
|
+
existing = await lstat(socketPath);
|
|
721
|
+
} catch (error) {
|
|
722
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") return;
|
|
723
|
+
throw error;
|
|
724
|
+
}
|
|
725
|
+
if (existing.isSocket() && existing.uid === uid && await isStaleSocket(socketPath, abortSignal)) {
|
|
726
|
+
await validateSignalSocketPath(socketPath);
|
|
727
|
+
const current = await lstat(socketPath);
|
|
728
|
+
abortSignal?.throwIfAborted();
|
|
729
|
+
if (current.isSocket() && current.uid === uid && current.dev === existing.dev && current.ino === existing.ino) {
|
|
730
|
+
await unlink(socketPath);
|
|
731
|
+
return;
|
|
732
|
+
}
|
|
733
|
+
throw new Error("Signal socketPath changed during its ownership probe; retry startup");
|
|
734
|
+
}
|
|
735
|
+
throw new Error("Signal socketPath already exists; stop its owner or choose a different socket path before starting");
|
|
736
|
+
} catch (error) {
|
|
737
|
+
if (createdParent) try {
|
|
738
|
+
const stat = await lstat(parent);
|
|
739
|
+
if (stat.isDirectory() && !stat.isSymbolicLink() && stat.uid === uid) await rmdir(parent);
|
|
740
|
+
} catch {}
|
|
741
|
+
throw error;
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
//#endregion
|
|
745
|
+
//#region extensions/signal/src/client-unix.ts
|
|
746
|
+
const MAX_FRAME_BYTES = 1048576;
|
|
747
|
+
const DEFAULT_TIMEOUT_MS$1 = 1e4;
|
|
748
|
+
function socketPath(baseUrl) {
|
|
749
|
+
const url = new URL(baseUrl.trim());
|
|
750
|
+
if (url.protocol !== "unix:" || url.host || url.username || url.password || url.search || url.hash) throw new Error("Signal UNIX URL must contain only an absolute socket path");
|
|
751
|
+
return fileURLToPath(`file://${url.pathname}`);
|
|
752
|
+
}
|
|
753
|
+
function abortError() {
|
|
754
|
+
return Object.assign(/* @__PURE__ */ new Error("Signal UNIX stream aborted"), { name: "AbortError" });
|
|
755
|
+
}
|
|
756
|
+
async function openSocket(options, abortSignal) {
|
|
757
|
+
if (abortSignal?.aborted) throw abortError();
|
|
758
|
+
const path = socketPath(options.baseUrl);
|
|
759
|
+
await assertSignalSocketEndpoint(path);
|
|
760
|
+
if (abortSignal?.aborted) throw abortError();
|
|
761
|
+
const socket = net.createConnection({ path });
|
|
762
|
+
socket.on("error", () => {});
|
|
763
|
+
const timeoutMs = resolveTimerTimeoutMs(options.timeoutMs ?? DEFAULT_TIMEOUT_MS$1, DEFAULT_TIMEOUT_MS$1);
|
|
764
|
+
const deadline = setTimeout(() => {
|
|
765
|
+
socket.destroy(/* @__PURE__ */ new Error(`Signal UNIX RPC exceeded deadline after ${timeoutMs}ms`));
|
|
766
|
+
}, timeoutMs);
|
|
767
|
+
deadline.unref();
|
|
768
|
+
const onAbort = () => socket.destroy(abortError());
|
|
769
|
+
abortSignal?.addEventListener("abort", onAbort, { once: true });
|
|
770
|
+
return {
|
|
771
|
+
socket,
|
|
772
|
+
ready: () => clearTimeout(deadline),
|
|
773
|
+
close: () => {
|
|
774
|
+
clearTimeout(deadline);
|
|
775
|
+
abortSignal?.removeEventListener("abort", onAbort);
|
|
776
|
+
socket.destroy();
|
|
777
|
+
}
|
|
778
|
+
};
|
|
779
|
+
}
|
|
780
|
+
async function* messages(socket, maxBytes = MAX_FRAME_BYTES) {
|
|
781
|
+
let pending = Buffer$1.alloc(0);
|
|
782
|
+
for await (const chunk of socket) {
|
|
783
|
+
if (!Buffer$1.isBuffer(chunk)) throw new Error("Signal UNIX RPC expected a byte stream");
|
|
784
|
+
let offset = 0;
|
|
785
|
+
while (offset < chunk.length) {
|
|
786
|
+
const newline = chunk.indexOf(10, offset);
|
|
787
|
+
const end = newline < 0 ? chunk.length : newline;
|
|
788
|
+
const fragment = chunk.subarray(offset, end);
|
|
789
|
+
if (pending.length + fragment.length > maxBytes) throw new Error("Signal UNIX RPC frame exceeded size limit");
|
|
790
|
+
pending = Buffer$1.concat([pending, fragment]);
|
|
791
|
+
if (newline < 0) break;
|
|
792
|
+
const text = new TextDecoder("utf-8", { fatal: true }).decode(pending);
|
|
793
|
+
pending = Buffer$1.alloc(0);
|
|
794
|
+
offset = newline + 1;
|
|
795
|
+
let parsed;
|
|
796
|
+
try {
|
|
797
|
+
parsed = JSON.parse(text);
|
|
798
|
+
} catch {
|
|
799
|
+
throw new Error("Signal UNIX RPC returned malformed JSON");
|
|
800
|
+
}
|
|
801
|
+
if (!isRecord(parsed)) throw new Error("Signal UNIX RPC returned invalid response envelope");
|
|
802
|
+
yield parsed;
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
if (pending.length) throw new Error("Signal UNIX RPC closed with an incomplete frame");
|
|
806
|
+
}
|
|
807
|
+
const QUOTE_REJECTION_WORDS = [
|
|
808
|
+
"reject",
|
|
809
|
+
"invalid",
|
|
810
|
+
"unrecognized",
|
|
811
|
+
"unsupported",
|
|
812
|
+
"not found",
|
|
813
|
+
"no such",
|
|
814
|
+
"unknown"
|
|
815
|
+
];
|
|
816
|
+
function isQuoteMetadataRejection(code, rawMessage) {
|
|
817
|
+
if (code !== -32602) return false;
|
|
818
|
+
const normalized = rawMessage.toLowerCase();
|
|
819
|
+
return normalized.includes("quote") && QUOTE_REJECTION_WORDS.some((word) => normalized.includes(word));
|
|
820
|
+
}
|
|
821
|
+
function result(message) {
|
|
822
|
+
if (message.jsonrpc !== "2.0" || !Object.hasOwn(message, "result") && !message.error) throw new Error("Signal UNIX RPC returned invalid response envelope");
|
|
823
|
+
if (message.error) {
|
|
824
|
+
const error = isRecord(message.error) ? message.error : {};
|
|
825
|
+
const code = typeof error.code === "number" ? error.code : "unknown";
|
|
826
|
+
if (typeof error.message === "string" && isQuoteMetadataRejection(code, error.message)) throw new Error(`Signal RPC ${code}: quote metadata rejected (redacted)`);
|
|
827
|
+
throw new Error(`Signal RPC ${code}: remote error`);
|
|
828
|
+
}
|
|
829
|
+
return message.result;
|
|
830
|
+
}
|
|
831
|
+
async function signalUnixRpcRequest(method, params, options) {
|
|
832
|
+
const connection = await openSocket(options);
|
|
833
|
+
const id = randomUUID();
|
|
834
|
+
const maxBytes = typeof options.maxResponseBytes === "number" && Number.isFinite(options.maxResponseBytes) && options.maxResponseBytes >= 1 ? Math.floor(options.maxResponseBytes) : MAX_FRAME_BYTES;
|
|
835
|
+
try {
|
|
836
|
+
const frame = `${JSON.stringify({
|
|
837
|
+
jsonrpc: "2.0",
|
|
838
|
+
id,
|
|
839
|
+
method,
|
|
840
|
+
params
|
|
841
|
+
})}\n`;
|
|
842
|
+
options.assertDirectAdapterHandoff?.();
|
|
843
|
+
connection.socket.write(frame);
|
|
844
|
+
for await (const message of messages(connection.socket, maxBytes)) if (message.id === id) return result(message);
|
|
845
|
+
throw new Error("Signal UNIX RPC closed before response");
|
|
846
|
+
} finally {
|
|
847
|
+
connection.close();
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
async function streamSignalUnixEvents(params) {
|
|
851
|
+
const connection = await openSocket({
|
|
852
|
+
...params,
|
|
853
|
+
timeoutMs: params.timeoutMs === 0 ? DEFAULT_TIMEOUT_MS$1 : params.timeoutMs
|
|
854
|
+
}, params.abortSignal);
|
|
855
|
+
const id = randomUUID();
|
|
856
|
+
let subscribed = false;
|
|
857
|
+
let subscription;
|
|
858
|
+
try {
|
|
859
|
+
connection.socket.write(`${JSON.stringify({
|
|
860
|
+
jsonrpc: "2.0",
|
|
861
|
+
id,
|
|
862
|
+
method: "subscribeReceive",
|
|
863
|
+
params: params.account ? { account: params.account } : void 0
|
|
864
|
+
})}\n`);
|
|
865
|
+
for await (const message of messages(connection.socket)) {
|
|
866
|
+
if (params.abortSignal?.aborted) throw abortError();
|
|
867
|
+
if (message.id === id) {
|
|
868
|
+
const value = result(message);
|
|
869
|
+
if (typeof value !== "number" || !Number.isInteger(value) || value < 0) throw new Error("Signal UNIX RPC returned invalid receive subscription");
|
|
870
|
+
subscription = value;
|
|
871
|
+
subscribed = true;
|
|
872
|
+
connection.ready();
|
|
873
|
+
params.onStreamOpen?.();
|
|
874
|
+
continue;
|
|
875
|
+
}
|
|
876
|
+
if (message.jsonrpc !== "2.0" || message.method !== "receive" || !isRecord(message.params)) continue;
|
|
877
|
+
const notification = message.params;
|
|
878
|
+
if (subscription !== void 0 && notification.subscription !== subscription) continue;
|
|
879
|
+
const payload = notification.result;
|
|
880
|
+
if (!isRecord(payload)) continue;
|
|
881
|
+
const account = payload.account;
|
|
882
|
+
if (params.account && typeof account === "string" && account !== params.account) continue;
|
|
883
|
+
await params.onEvent({
|
|
884
|
+
event: "receive",
|
|
885
|
+
data: JSON.stringify(payload)
|
|
886
|
+
});
|
|
887
|
+
}
|
|
888
|
+
if (!subscribed) throw new Error("Signal UNIX RPC closed before receive subscription");
|
|
889
|
+
} finally {
|
|
890
|
+
connection.close();
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
//#endregion
|
|
639
894
|
//#region extensions/signal/src/client.ts
|
|
640
895
|
/** Thrown when the native SSE endpoint rejects the request with a non-2xx HTTP status. */
|
|
641
896
|
var SignalSseRejectionError = class extends Error {
|
|
@@ -699,6 +954,7 @@ function requestSignalHttp(url, options) {
|
|
|
699
954
|
assertSignalHttpProtocol(url, "HTTP");
|
|
700
955
|
const timeoutMs = resolveTimerTimeoutMs(options.timeoutMs, DEFAULT_TIMEOUT_MS);
|
|
701
956
|
const client = url.protocol === "https:" ? https : http;
|
|
957
|
+
options.assertDirectAdapterHandoff?.();
|
|
702
958
|
return new Promise((resolve, reject) => {
|
|
703
959
|
let settled = false;
|
|
704
960
|
const deadline = setTimeout(() => {
|
|
@@ -757,6 +1013,7 @@ function requestSignalHttp(url, options) {
|
|
|
757
1013
|
});
|
|
758
1014
|
}
|
|
759
1015
|
async function signalRpcRequest(method, params, opts) {
|
|
1016
|
+
if (opts.baseUrl.trim().startsWith("unix:")) return signalUnixRpcRequest(method, params, opts);
|
|
760
1017
|
const id = generateSecureUuid();
|
|
761
1018
|
const body = JSON.stringify({
|
|
762
1019
|
jsonrpc: "2.0",
|
|
@@ -772,7 +1029,8 @@ async function signalRpcRequest(method, params, opts) {
|
|
|
772
1029
|
},
|
|
773
1030
|
body,
|
|
774
1031
|
timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS,
|
|
775
|
-
maxResponseBytes: opts.maxResponseBytes
|
|
1032
|
+
maxResponseBytes: opts.maxResponseBytes,
|
|
1033
|
+
assertDirectAdapterHandoff: opts.assertDirectAdapterHandoff
|
|
776
1034
|
});
|
|
777
1035
|
if (res.status === 201) return;
|
|
778
1036
|
const text = new TextDecoder("utf-8", { fatal: true }).decode(res.body);
|
|
@@ -787,6 +1045,17 @@ async function signalRpcRequest(method, params, opts) {
|
|
|
787
1045
|
}
|
|
788
1046
|
async function signalCheck(baseUrl, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
789
1047
|
try {
|
|
1048
|
+
if (baseUrl.trim().startsWith("unix:")) {
|
|
1049
|
+
await signalUnixRpcRequest("version", void 0, {
|
|
1050
|
+
baseUrl,
|
|
1051
|
+
timeoutMs
|
|
1052
|
+
});
|
|
1053
|
+
return {
|
|
1054
|
+
ok: true,
|
|
1055
|
+
status: null,
|
|
1056
|
+
error: null
|
|
1057
|
+
};
|
|
1058
|
+
}
|
|
790
1059
|
const res = await requestSignalHttp(resolveSignalEndpointUrl(baseUrl, "/api/v1/check"), {
|
|
791
1060
|
method: "GET",
|
|
792
1061
|
timeoutMs
|
|
@@ -869,6 +1138,7 @@ function openSignalEventStream(url, abortSignal, timeoutMs = DEFAULT_TIMEOUT_MS)
|
|
|
869
1138
|
});
|
|
870
1139
|
}
|
|
871
1140
|
async function streamSignalEvents(params) {
|
|
1141
|
+
if (params.baseUrl.trim().startsWith("unix:")) return streamSignalUnixEvents(params);
|
|
872
1142
|
const url = resolveSignalEndpointUrl(params.baseUrl, "/api/v1/events");
|
|
873
1143
|
if (params.account) url.searchParams.set("account", params.account);
|
|
874
1144
|
const { response, cleanup } = await openSignalEventStream(url, params.abortSignal, params.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
@@ -939,4 +1209,4 @@ async function streamSignalEvents(params) {
|
|
|
939
1209
|
await flushEvent();
|
|
940
1210
|
}
|
|
941
1211
|
//#endregion
|
|
942
|
-
export {
|
|
1212
|
+
export { prepareSignalSocketPath as a, streamContainerEvents as c, streamSignalEvents as i, signalCheck as n, containerCheck as o, signalRpcRequest as r, containerRpcRequest as s, SignalSseRejectionError as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { c as streamContainerEvents, i as streamSignalEvents$1, n as signalCheck$1, o as containerCheck, r as signalRpcRequest$1, s as containerRpcRequest } from "./client-BseAt7F7.mjs";
|
|
2
2
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
3
3
|
//#region extensions/signal/src/client-adapter.ts
|
|
4
4
|
/**
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { o as resolveSignalAccountEntry, t as assertSignalSocketTransport } from "./transport-url-CAC0JcuI.mjs";
|
|
1
2
|
import { createChannelConfigUiHints } from "openclaw/plugin-sdk/channel-core";
|
|
2
3
|
import { isRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
3
|
-
import { DEFAULT_ACCOUNT_ID, normalizeAccountId
|
|
4
|
+
import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
|
|
4
5
|
import { ChannelDeliveryStreamingConfigSchema, ChannelSendReadReceiptsSchema, ExecutableTokenSchema, ReplyToModeSchema, buildChannelAccountSchemaParts, buildChannelConfigSchema, buildChannelReactionShape, buildGroupEntrySchema, refineChannelDmPolicy } from "openclaw/plugin-sdk/channel-config-schema";
|
|
5
6
|
import { z } from "zod";
|
|
6
7
|
//#region extensions/signal/src/config-ui-hints.ts
|
|
@@ -40,6 +41,10 @@ const signalChannelConfigUiHints = {
|
|
|
40
41
|
label: "Signal CLI Config Path",
|
|
41
42
|
help: "Optional directory passed to signal-cli via --config when the service needs a non-default signal-cli data path."
|
|
42
43
|
},
|
|
44
|
+
"transport.socketPath": {
|
|
45
|
+
label: "Signal UNIX Socket Path",
|
|
46
|
+
help: "Opt-in managed-native transport on POSIX. Use an absolute socket path in a private directory owned by the Gateway user (mode 0700). Excludes url, httpHost, httpPort, and receiveMode on-start. HTTP remains the default; socket failures never fall back to HTTP."
|
|
47
|
+
},
|
|
43
48
|
"transport.url": {
|
|
44
49
|
label: "Signal Transport URL",
|
|
45
50
|
help: "Base URL for an external-native or container transport, or the connection endpoint for a managed-native daemon when it differs from the bind address."
|
|
@@ -76,6 +81,7 @@ const SignalTransportSchema = z.discriminatedUnion("kind", [
|
|
|
76
81
|
z.object({
|
|
77
82
|
kind: z.literal("managed-native"),
|
|
78
83
|
configPath: z.string().optional(),
|
|
84
|
+
socketPath: z.string().regex(/^\/(?!\/)[^\0]*[^/\0]$/, "Expected an absolute POSIX socket file path").optional(),
|
|
79
85
|
url: SignalTransportUrlSchema.optional(),
|
|
80
86
|
httpHost: z.string().optional(),
|
|
81
87
|
httpPort: z.number().int().min(1).max(65535).optional(),
|
|
@@ -83,7 +89,17 @@ const SignalTransportSchema = z.discriminatedUnion("kind", [
|
|
|
83
89
|
startupTimeoutMs: z.number().int().min(1e3).max(12e4).optional(),
|
|
84
90
|
receiveMode: z.union([z.literal("on-start"), z.literal("manual")]).optional(),
|
|
85
91
|
ignoreStories: z.boolean().optional()
|
|
86
|
-
}).strict(),
|
|
92
|
+
}).strict().superRefine((transport, ctx) => {
|
|
93
|
+
try {
|
|
94
|
+
assertSignalSocketTransport(transport);
|
|
95
|
+
} catch (error) {
|
|
96
|
+
ctx.addIssue({
|
|
97
|
+
code: "custom",
|
|
98
|
+
path: ["socketPath"],
|
|
99
|
+
message: String(error instanceof Error ? error.message : error)
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}),
|
|
87
103
|
z.object({
|
|
88
104
|
kind: z.literal("external-native"),
|
|
89
105
|
url: SignalTransportUrlSchema
|
|
@@ -158,7 +174,7 @@ function validateSignalConfigAllowFrom(value, ctx) {
|
|
|
158
174
|
}
|
|
159
175
|
}
|
|
160
176
|
function validateSignalContainerAccounts(value, ctx) {
|
|
161
|
-
const defaultAccount =
|
|
177
|
+
const defaultAccount = resolveSignalAccountEntry(value.accounts, DEFAULT_ACCOUNT_ID);
|
|
162
178
|
const effectiveDefaultAccount = defaultAccount?.account === void 0 ? value.account : defaultAccount.account;
|
|
163
179
|
const channelEnabled = value.enabled !== false;
|
|
164
180
|
const defaultEnabled = defaultAccount?.enabled !== false;
|