@signalapp/ringrtc 2.55.0 → 2.57.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/acknowledgments.md +312 -49
- package/dist/bin/virtual_audio.sh +204 -0
- package/dist/ringrtc/Service.d.ts +41 -41
- package/dist/ringrtc/Service.js +7 -7
- package/package.json +6 -3
package/dist/acknowledgments.md
CHANGED
|
@@ -669,7 +669,7 @@ For more information on this, and how to apply and follow the GNU AGPL, see
|
|
|
669
669
|
|
|
670
670
|
```
|
|
671
671
|
|
|
672
|
-
## libsignal-account-keys 0.1.0, libsignal-core 0.1.0, mrp 2.
|
|
672
|
+
## libsignal-account-keys 0.1.0, libsignal-core 0.1.0, mrp 2.57.0, protobuf 2.57.0, ringrtc 2.57.0, regex-aot 0.1.0, partial-default-derive 0.1.0
|
|
673
673
|
|
|
674
674
|
```
|
|
675
675
|
GNU AFFERO GENERAL PUBLIC LICENSE
|
|
@@ -3976,26 +3976,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
3976
3976
|
limitations under the License.
|
|
3977
3977
|
|
|
3978
3978
|
|
|
3979
|
-
```
|
|
3980
|
-
|
|
3981
|
-
## base64
|
|
3982
|
-
|
|
3983
|
-
```
|
|
3984
|
-
//*********************************************************************
|
|
3985
|
-
//* Base64 - a simple base64 encoder and decoder.
|
|
3986
|
-
//*
|
|
3987
|
-
//* Copyright (c) 1999, Bob Withers - bwit@pobox.com
|
|
3988
|
-
//*
|
|
3989
|
-
//* This code may be freely used for any purpose, either personal
|
|
3990
|
-
//* or commercial, provided the authors copyright notice remains
|
|
3991
|
-
//* intact.
|
|
3992
|
-
//*
|
|
3993
|
-
//* Enhancements by Stanley Yamane:
|
|
3994
|
-
//* o reverse lookup table for the decode function
|
|
3995
|
-
//* o reserve string buffer space in advance
|
|
3996
|
-
//*
|
|
3997
|
-
//*********************************************************************
|
|
3998
|
-
|
|
3999
3979
|
```
|
|
4000
3980
|
|
|
4001
3981
|
## boringssl
|
|
@@ -4240,39 +4220,322 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
4240
4220
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
4241
4221
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
4242
4222
|
|
|
4223
|
+
```
|
|
4243
4224
|
|
|
4244
|
-
|
|
4245
|
-
trybots etc. The scripts which manage this, and the script for generating build
|
|
4246
|
-
metadata, are under the Chromium license. Distributing code linked against
|
|
4247
|
-
BoringSSL does not trigger this license.
|
|
4225
|
+
## compiler-rt
|
|
4248
4226
|
|
|
4249
|
-
|
|
4227
|
+
```
|
|
4228
|
+
==============================================================================
|
|
4229
|
+
The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
|
|
4230
|
+
==============================================================================
|
|
4250
4231
|
|
|
4251
|
-
|
|
4252
|
-
|
|
4253
|
-
|
|
4232
|
+
Apache License
|
|
4233
|
+
Version 2.0, January 2004
|
|
4234
|
+
http://www.apache.org/licenses/
|
|
4254
4235
|
|
|
4255
|
-
|
|
4256
|
-
notice, this list of conditions and the following disclaimer.
|
|
4257
|
-
* Redistributions in binary form must reproduce the above
|
|
4258
|
-
copyright notice, this list of conditions and the following disclaimer
|
|
4259
|
-
in the documentation and/or other materials provided with the
|
|
4260
|
-
distribution.
|
|
4261
|
-
* Neither the name of Google Inc. nor the names of its
|
|
4262
|
-
contributors may be used to endorse or promote products derived from
|
|
4263
|
-
this software without specific prior written permission.
|
|
4236
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
4264
4237
|
|
|
4265
|
-
|
|
4266
|
-
|
|
4267
|
-
|
|
4268
|
-
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4238
|
+
1. Definitions.
|
|
4239
|
+
|
|
4240
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
4241
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
4242
|
+
|
|
4243
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
4244
|
+
the copyright owner that is granting the License.
|
|
4245
|
+
|
|
4246
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
4247
|
+
other entities that control, are controlled by, or are under common
|
|
4248
|
+
control with that entity. For the purposes of this definition,
|
|
4249
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
4250
|
+
direction or management of such entity, whether by contract or
|
|
4251
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
4252
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
4253
|
+
|
|
4254
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
4255
|
+
exercising permissions granted by this License.
|
|
4256
|
+
|
|
4257
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
4258
|
+
including but not limited to software source code, documentation
|
|
4259
|
+
source, and configuration files.
|
|
4260
|
+
|
|
4261
|
+
"Object" form shall mean any form resulting from mechanical
|
|
4262
|
+
transformation or translation of a Source form, including but
|
|
4263
|
+
not limited to compiled object code, generated documentation,
|
|
4264
|
+
and conversions to other media types.
|
|
4265
|
+
|
|
4266
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
4267
|
+
Object form, made available under the License, as indicated by a
|
|
4268
|
+
copyright notice that is included in or attached to the work
|
|
4269
|
+
(an example is provided in the Appendix below).
|
|
4270
|
+
|
|
4271
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
4272
|
+
form, that is based on (or derived from) the Work and for which the
|
|
4273
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
4274
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
4275
|
+
of this License, Derivative Works shall not include works that remain
|
|
4276
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
4277
|
+
the Work and Derivative Works thereof.
|
|
4278
|
+
|
|
4279
|
+
"Contribution" shall mean any work of authorship, including
|
|
4280
|
+
the original version of the Work and any modifications or additions
|
|
4281
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
4282
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
4283
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
4284
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
4285
|
+
means any form of electronic, verbal, or written communication sent
|
|
4286
|
+
to the Licensor or its representatives, including but not limited to
|
|
4287
|
+
communication on electronic mailing lists, source code control systems,
|
|
4288
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
4289
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
4290
|
+
excluding communication that is conspicuously marked or otherwise
|
|
4291
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
4292
|
+
|
|
4293
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
4294
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
4295
|
+
subsequently incorporated within the Work.
|
|
4296
|
+
|
|
4297
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
4298
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
4299
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
4300
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
4301
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
4302
|
+
Work and such Derivative Works in Source or Object form.
|
|
4303
|
+
|
|
4304
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
4305
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
4306
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
4307
|
+
(except as stated in this section) patent license to make, have made,
|
|
4308
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
4309
|
+
where such license applies only to those patent claims licensable
|
|
4310
|
+
by such Contributor that are necessarily infringed by their
|
|
4311
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
4312
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
4313
|
+
institute patent litigation against any entity (including a
|
|
4314
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
4315
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
4316
|
+
or contributory patent infringement, then any patent licenses
|
|
4317
|
+
granted to You under this License for that Work shall terminate
|
|
4318
|
+
as of the date such litigation is filed.
|
|
4319
|
+
|
|
4320
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
4321
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
4322
|
+
modifications, and in Source or Object form, provided that You
|
|
4323
|
+
meet the following conditions:
|
|
4324
|
+
|
|
4325
|
+
(a) You must give any other recipients of the Work or
|
|
4326
|
+
Derivative Works a copy of this License; and
|
|
4327
|
+
|
|
4328
|
+
(b) You must cause any modified files to carry prominent notices
|
|
4329
|
+
stating that You changed the files; and
|
|
4330
|
+
|
|
4331
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
4332
|
+
that You distribute, all copyright, patent, trademark, and
|
|
4333
|
+
attribution notices from the Source form of the Work,
|
|
4334
|
+
excluding those notices that do not pertain to any part of
|
|
4335
|
+
the Derivative Works; and
|
|
4336
|
+
|
|
4337
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
4338
|
+
distribution, then any Derivative Works that You distribute must
|
|
4339
|
+
include a readable copy of the attribution notices contained
|
|
4340
|
+
within such NOTICE file, excluding those notices that do not
|
|
4341
|
+
pertain to any part of the Derivative Works, in at least one
|
|
4342
|
+
of the following places: within a NOTICE text file distributed
|
|
4343
|
+
as part of the Derivative Works; within the Source form or
|
|
4344
|
+
documentation, if provided along with the Derivative Works; or,
|
|
4345
|
+
within a display generated by the Derivative Works, if and
|
|
4346
|
+
wherever such third-party notices normally appear. The contents
|
|
4347
|
+
of the NOTICE file are for informational purposes only and
|
|
4348
|
+
do not modify the License. You may add Your own attribution
|
|
4349
|
+
notices within Derivative Works that You distribute, alongside
|
|
4350
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
4351
|
+
that such additional attribution notices cannot be construed
|
|
4352
|
+
as modifying the License.
|
|
4353
|
+
|
|
4354
|
+
You may add Your own copyright statement to Your modifications and
|
|
4355
|
+
may provide additional or different license terms and conditions
|
|
4356
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
4357
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
4358
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
4359
|
+
the conditions stated in this License.
|
|
4360
|
+
|
|
4361
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
4362
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
4363
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
4364
|
+
this License, without any additional terms or conditions.
|
|
4365
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
4366
|
+
the terms of any separate license agreement you may have executed
|
|
4367
|
+
with Licensor regarding such Contributions.
|
|
4368
|
+
|
|
4369
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
4370
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
4371
|
+
except as required for reasonable and customary use in describing the
|
|
4372
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
4373
|
+
|
|
4374
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
4375
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
4376
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
4377
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
4378
|
+
implied, including, without limitation, any warranties or conditions
|
|
4379
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
4380
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
4381
|
+
appropriateness of using or redistributing the Work and assume any
|
|
4382
|
+
risks associated with Your exercise of permissions under this License.
|
|
4383
|
+
|
|
4384
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
4385
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
4386
|
+
unless required by applicable law (such as deliberate and grossly
|
|
4387
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
4388
|
+
liable to You for damages, including any direct, indirect, special,
|
|
4389
|
+
incidental, or consequential damages of any character arising as a
|
|
4390
|
+
result of this License or out of the use or inability to use the
|
|
4391
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
4392
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
4393
|
+
other commercial damages or losses), even if such Contributor
|
|
4394
|
+
has been advised of the possibility of such damages.
|
|
4395
|
+
|
|
4396
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
4397
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
4398
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
4399
|
+
or other liability obligations and/or rights consistent with this
|
|
4400
|
+
License. However, in accepting such obligations, You may act only
|
|
4401
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
4402
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
4403
|
+
defend, and hold each Contributor harmless for any liability
|
|
4404
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
4405
|
+
of your accepting any such warranty or additional liability.
|
|
4406
|
+
|
|
4407
|
+
END OF TERMS AND CONDITIONS
|
|
4408
|
+
|
|
4409
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
4410
|
+
|
|
4411
|
+
To apply the Apache License to your work, attach the following
|
|
4412
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
4413
|
+
replaced with your own identifying information. (Don't include
|
|
4414
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
4415
|
+
comment syntax for the file format. We also recommend that a
|
|
4416
|
+
file or class name and description of purpose be included on the
|
|
4417
|
+
same "printed page" as the copyright notice for easier
|
|
4418
|
+
identification within third-party archives.
|
|
4419
|
+
|
|
4420
|
+
Copyright [yyyy] [name of copyright owner]
|
|
4421
|
+
|
|
4422
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4423
|
+
you may not use this file except in compliance with the License.
|
|
4424
|
+
You may obtain a copy of the License at
|
|
4425
|
+
|
|
4426
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
4427
|
+
|
|
4428
|
+
Unless required by applicable law or agreed to in writing, software
|
|
4429
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
4430
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4431
|
+
See the License for the specific language governing permissions and
|
|
4432
|
+
limitations under the License.
|
|
4433
|
+
|
|
4434
|
+
|
|
4435
|
+
---- LLVM Exceptions to the Apache 2.0 License ----
|
|
4436
|
+
|
|
4437
|
+
As an exception, if, as a result of your compiling your source code, portions
|
|
4438
|
+
of this Software are embedded into an Object form of such source code, you
|
|
4439
|
+
may redistribute such embedded portions in such Object form without complying
|
|
4440
|
+
with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
|
|
4441
|
+
|
|
4442
|
+
In addition, if you combine or link compiled forms of this Software with
|
|
4443
|
+
software that is licensed under the GPLv2 ("Combined Software") and if a
|
|
4444
|
+
court of competent jurisdiction determines that the patent provision (Section
|
|
4445
|
+
3), the indemnity provision (Section 9) or other Section of the License
|
|
4446
|
+
conflicts with the conditions of the GPLv2, you may retroactively and
|
|
4447
|
+
prospectively choose to deem waived or otherwise exclude such Section(s) of
|
|
4448
|
+
the License, but only in their entirety and only with respect to the Combined
|
|
4449
|
+
Software.
|
|
4450
|
+
|
|
4451
|
+
==============================================================================
|
|
4452
|
+
Software from third parties included in the LLVM Project:
|
|
4453
|
+
==============================================================================
|
|
4454
|
+
The LLVM Project contains third party software which is under different license
|
|
4455
|
+
terms. All such code will be identified clearly using at least one of two
|
|
4456
|
+
mechanisms:
|
|
4457
|
+
1) It will be in a separate directory tree with its own `LICENSE.txt` or
|
|
4458
|
+
`LICENSE` file at the top containing the specific license and restrictions
|
|
4459
|
+
which apply to that software, or
|
|
4460
|
+
2) It will contain specific license and restriction terms at the top of every
|
|
4461
|
+
file.
|
|
4462
|
+
|
|
4463
|
+
==============================================================================
|
|
4464
|
+
Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy):
|
|
4465
|
+
==============================================================================
|
|
4466
|
+
|
|
4467
|
+
The compiler_rt library is dual licensed under both the University of Illinois
|
|
4468
|
+
"BSD-Like" license and the MIT license. As a user of this code you may choose
|
|
4469
|
+
to use it under either license. As a contributor, you agree to allow your code
|
|
4470
|
+
to be used under both.
|
|
4471
|
+
|
|
4472
|
+
Full text of the relevant licenses is included below.
|
|
4473
|
+
|
|
4474
|
+
==============================================================================
|
|
4475
|
+
|
|
4476
|
+
University of Illinois/NCSA
|
|
4477
|
+
Open Source License
|
|
4478
|
+
|
|
4479
|
+
Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT
|
|
4480
|
+
|
|
4481
|
+
All rights reserved.
|
|
4482
|
+
|
|
4483
|
+
Developed by:
|
|
4484
|
+
|
|
4485
|
+
LLVM Team
|
|
4486
|
+
|
|
4487
|
+
University of Illinois at Urbana-Champaign
|
|
4488
|
+
|
|
4489
|
+
http://llvm.org
|
|
4490
|
+
|
|
4491
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
4492
|
+
this software and associated documentation files (the "Software"), to deal with
|
|
4493
|
+
the Software without restriction, including without limitation the rights to
|
|
4494
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
4495
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
|
4496
|
+
so, subject to the following conditions:
|
|
4497
|
+
|
|
4498
|
+
* Redistributions of source code must retain the above copyright notice,
|
|
4499
|
+
this list of conditions and the following disclaimers.
|
|
4500
|
+
|
|
4501
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
4502
|
+
this list of conditions and the following disclaimers in the
|
|
4503
|
+
documentation and/or other materials provided with the distribution.
|
|
4504
|
+
|
|
4505
|
+
* Neither the names of the LLVM Team, University of Illinois at
|
|
4506
|
+
Urbana-Champaign, nor the names of its contributors may be used to
|
|
4507
|
+
endorse or promote products derived from this Software without specific
|
|
4508
|
+
prior written permission.
|
|
4509
|
+
|
|
4510
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
4511
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
4512
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
4513
|
+
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
4514
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
4515
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
|
4516
|
+
SOFTWARE.
|
|
4517
|
+
|
|
4518
|
+
==============================================================================
|
|
4519
|
+
|
|
4520
|
+
Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT
|
|
4521
|
+
|
|
4522
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4523
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
4524
|
+
in the Software without restriction, including without limitation the rights
|
|
4525
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
4526
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
4527
|
+
furnished to do so, subject to the following conditions:
|
|
4528
|
+
|
|
4529
|
+
The above copyright notice and this permission notice shall be included in
|
|
4530
|
+
all copies or substantial portions of the Software.
|
|
4531
|
+
|
|
4532
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
4533
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
4534
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
4535
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
4536
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
4537
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
4538
|
+
THE SOFTWARE.
|
|
4276
4539
|
|
|
4277
4540
|
```
|
|
4278
4541
|
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 Signal Messenger, LLC
|
|
4
|
+
# SPDX-License-Identifier: AGPL-3.0-only
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
set -eou pipefail
|
|
8
|
+
|
|
9
|
+
usage()
|
|
10
|
+
{
|
|
11
|
+
echo "usage: $0 [--setup|--teardown|--play|--stop] [--input-source <name>] [--output-sink <name>] [--input-file <path>] [--input-loops <count>] [--output-file <path>] [--start-pipewire-pulse]
|
|
12
|
+
where:
|
|
13
|
+
--setup: Set up the specified devices
|
|
14
|
+
--teardown: Tear down the specified devices.
|
|
15
|
+
--play: Start playing from and recording to specified files and devices.
|
|
16
|
+
--stop: Stop playing and recording to the specified devices.
|
|
17
|
+
--input-source: The name of the source your application will use.
|
|
18
|
+
NOTE: this script may create additional devices with this name as a suffix.
|
|
19
|
+
--output-sink: The name of the device your application will output to.
|
|
20
|
+
--input-file: The name of the file to play to your application (should be a .wav).
|
|
21
|
+
--input-loops: Optional. The number of times to loop |input|. Default 1.
|
|
22
|
+
--output-file: The name of the file to record your application to (should be a .wav).
|
|
23
|
+
|
|
24
|
+
--start-pipewire-pulse: Optional, linux only. Assume that there is no pulse server running and start one.
|
|
25
|
+
-h, --help: Display this usage text.
|
|
26
|
+
|
|
27
|
+
Examples:
|
|
28
|
+
# Setup 'my_spiffy_input_source' as an input and 'my_spiffy_output_sink' as an out, and start pipewire if needed.
|
|
29
|
+
$0 --setup --input-source my_spiffy_input_source --output-sink my_spiffy_output_sink --start-pipewire-pulse
|
|
30
|
+
# Start playing foo.wav to my_spiffy_input_source
|
|
31
|
+
$0 --play --input-source my_spiffy_input_source --output-sink my_spiffy_output_sink --input-file foo.wav
|
|
32
|
+
# Stop playing to my_spiffy_input_source
|
|
33
|
+
$0 --stop --input-source my_spiffy_input_source --output-sink my_spiffy_output_sink
|
|
34
|
+
# Destroy the specified virtual input devices.
|
|
35
|
+
$0 --teardown --input-source my_spiffy_input_source --output-sink my_spiffy_output_sink
|
|
36
|
+
|
|
37
|
+
"
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
TYPE=
|
|
41
|
+
INPUT_SOURCE=
|
|
42
|
+
INPUT_SINK=
|
|
43
|
+
OUTPUT_SINK=
|
|
44
|
+
INPUT_FILE=
|
|
45
|
+
INPUT_LOOPS=1
|
|
46
|
+
OUTPUT_FILE=
|
|
47
|
+
START_PIPEWIRE_PULSE=
|
|
48
|
+
|
|
49
|
+
while [[ $# -gt 0 ]]; do
|
|
50
|
+
case $1 in
|
|
51
|
+
--setup )
|
|
52
|
+
TYPE=setup
|
|
53
|
+
;;
|
|
54
|
+
--teardown )
|
|
55
|
+
TYPE=teardown
|
|
56
|
+
;;
|
|
57
|
+
--play )
|
|
58
|
+
TYPE=play
|
|
59
|
+
;;
|
|
60
|
+
--stop )
|
|
61
|
+
TYPE=stop
|
|
62
|
+
;;
|
|
63
|
+
--input-source )
|
|
64
|
+
INPUT_SOURCE="$2"
|
|
65
|
+
shift
|
|
66
|
+
;;
|
|
67
|
+
--output-sink )
|
|
68
|
+
OUTPUT_SINK="$2"
|
|
69
|
+
shift
|
|
70
|
+
;;
|
|
71
|
+
--input-file )
|
|
72
|
+
INPUT_FILE="$2"
|
|
73
|
+
shift
|
|
74
|
+
;;
|
|
75
|
+
--output-file )
|
|
76
|
+
OUTPUT_FILE="$2"
|
|
77
|
+
shift
|
|
78
|
+
;;
|
|
79
|
+
--input-loops )
|
|
80
|
+
INPUT_LOOPS="$2"
|
|
81
|
+
shift
|
|
82
|
+
;;
|
|
83
|
+
--start-pipewire-pulse )
|
|
84
|
+
START_PIPEWIRE_PULSE=y
|
|
85
|
+
;;
|
|
86
|
+
-h | --help )
|
|
87
|
+
usage
|
|
88
|
+
exit
|
|
89
|
+
;;
|
|
90
|
+
* )
|
|
91
|
+
echo "Did not recognize flag $1"
|
|
92
|
+
usage
|
|
93
|
+
exit 1
|
|
94
|
+
esac
|
|
95
|
+
shift
|
|
96
|
+
done
|
|
97
|
+
|
|
98
|
+
start_pipewire_pulse()
|
|
99
|
+
{
|
|
100
|
+
if pactl info | grep -q "Server Name: PulseAudio (on PipeWire"; then
|
|
101
|
+
echo "not re-initializing pulse/pipewire"
|
|
102
|
+
else
|
|
103
|
+
echo "Starting a new pipewire, wireplumber, and pipewire-pulse"
|
|
104
|
+
pipewire &
|
|
105
|
+
wireplumber &
|
|
106
|
+
pipewire-pulse &
|
|
107
|
+
fi
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
setup_linux()
|
|
111
|
+
{
|
|
112
|
+
pactl load-module module-null-sink sink_name="${INPUT_SINK}" \
|
|
113
|
+
format=s16 rate=48000 channels=2 > /dev/null # ignore module ID
|
|
114
|
+
# Use this as a dummy module to turn the monitor source, which Signal
|
|
115
|
+
# Desktop ignores, into a non-monitor source
|
|
116
|
+
pactl load-module module-remap-source source_name="${INPUT_SOURCE}" \
|
|
117
|
+
source_properties=device.description="${INPUT_SOURCE}" \
|
|
118
|
+
format=s16 rate=48000 channels=2 master="${INPUT_SINK}".monitor \
|
|
119
|
+
master_channel_map=front-left,front-right \
|
|
120
|
+
channel_map=front-left,front-right remix=false > /dev/null # ignore ID
|
|
121
|
+
pactl load-module module-null-sink sink_name="${OUTPUT_SINK}" \
|
|
122
|
+
sink_properties=device.description="${OUTPUT_SINK}" \
|
|
123
|
+
format=s16 rate=48000 channels=2 > /dev/null # ignore ID
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
teardown_linux()
|
|
127
|
+
{
|
|
128
|
+
# safe to ignore failures here
|
|
129
|
+
pactl unload-module module-null-sink || true
|
|
130
|
+
pactl unload-module module-remap-source || true
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
play_linux()
|
|
134
|
+
{
|
|
135
|
+
if [ -n "$INPUT_FILE" ] && [ -e "$INPUT_FILE" ]; then
|
|
136
|
+
(
|
|
137
|
+
for _ in $(seq 1 "${INPUT_LOOPS}"); do
|
|
138
|
+
paplay --device="${INPUT_SINK}" "$INPUT_FILE" || break # Exit early if requested
|
|
139
|
+
done
|
|
140
|
+
) &
|
|
141
|
+
fi
|
|
142
|
+
if [ -n "$OUTPUT_FILE" ]; then
|
|
143
|
+
parecord --format=s16 --rate=48000 --channels=2 \
|
|
144
|
+
--device="${OUTPUT_SINK}".monitor "${OUTPUT_FILE}" &
|
|
145
|
+
fi
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
stop_linux()
|
|
149
|
+
{
|
|
150
|
+
# Kill the recording process
|
|
151
|
+
pkill --full "parecord.*${OUTPUT_SINK}.monitor" || true
|
|
152
|
+
# Kill the play process
|
|
153
|
+
pkill --full "paplay.*${INPUT_SINK}" || true
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
if [ -z "$TYPE" ]; then
|
|
158
|
+
echo "One of --setup, --teardown, --play, --stop is required"
|
|
159
|
+
usage
|
|
160
|
+
exit 1
|
|
161
|
+
fi
|
|
162
|
+
|
|
163
|
+
if [ -z "$INPUT_SOURCE" ]; then
|
|
164
|
+
echo "--input-source is required"
|
|
165
|
+
usage
|
|
166
|
+
exit 1
|
|
167
|
+
fi
|
|
168
|
+
|
|
169
|
+
INPUT_SINK="sink_for_${INPUT_SOURCE}"
|
|
170
|
+
|
|
171
|
+
if [ -z "$OUTPUT_SINK" ]; then
|
|
172
|
+
echo "--output-sink is required"
|
|
173
|
+
usage
|
|
174
|
+
exit 1
|
|
175
|
+
fi
|
|
176
|
+
|
|
177
|
+
UNAME=$(uname)
|
|
178
|
+
|
|
179
|
+
if [ "$UNAME" = "Darwin" ]; then
|
|
180
|
+
echo "macOS is not yet supported"
|
|
181
|
+
exit 1
|
|
182
|
+
elif [ "$UNAME" = "Linux" ]; then
|
|
183
|
+
if [[ "$START_PIPEWIRE_PULSE" ]]; then
|
|
184
|
+
start_pipewire_pulse
|
|
185
|
+
fi
|
|
186
|
+
if [ "$TYPE" = "setup" ]; then
|
|
187
|
+
setup_linux
|
|
188
|
+
elif [ "$TYPE" = "teardown" ]; then
|
|
189
|
+
teardown_linux
|
|
190
|
+
elif [ "$TYPE" = "play" ]; then
|
|
191
|
+
if [ -z "$INPUT_FILE" ]; then
|
|
192
|
+
echo "--input-file was not specified with --play; assuming silence"
|
|
193
|
+
fi
|
|
194
|
+
if [ -z "$OUTPUT_FILE" ]; then
|
|
195
|
+
echo "--output-file was not specified with --play; will not record"
|
|
196
|
+
fi
|
|
197
|
+
play_linux
|
|
198
|
+
elif [ "$TYPE" = "stop" ]; then
|
|
199
|
+
stop_linux
|
|
200
|
+
fi
|
|
201
|
+
else
|
|
202
|
+
echo "$UNAME" is not yet supported
|
|
203
|
+
exit 1
|
|
204
|
+
fi
|
|
@@ -5,7 +5,7 @@ declare class Config {
|
|
|
5
5
|
field_trials: Record<string, string> | undefined;
|
|
6
6
|
}
|
|
7
7
|
type GroupId = Uint8Array;
|
|
8
|
-
type GroupCallUserId =
|
|
8
|
+
type GroupCallUserId = Uint8Array;
|
|
9
9
|
export interface PeekDeviceInfo {
|
|
10
10
|
demuxId: number;
|
|
11
11
|
userId?: GroupCallUserId;
|
|
@@ -99,14 +99,14 @@ export declare class RingRTCType {
|
|
|
99
99
|
handleLogMessage: ((level: CallLogLevel, fileName: string, line: number, message: string) => void) | null;
|
|
100
100
|
handleSendHttpRequest: ((requestId: number, url: string, method: HttpMethod, headers: {
|
|
101
101
|
[name: string]: string;
|
|
102
|
-
}, body:
|
|
103
|
-
handleSendCallMessage: ((recipientUuid:
|
|
104
|
-
handleSendCallMessageToGroup: ((groupId: GroupId, message:
|
|
105
|
-
handleGroupCallRingUpdate: ((groupId: GroupId, ringId: bigint, sender:
|
|
102
|
+
}, body: Uint8Array | undefined) => void) | null;
|
|
103
|
+
handleSendCallMessage: ((recipientUuid: Uint8Array, message: Uint8Array, urgency: CallMessageUrgency) => void) | null;
|
|
104
|
+
handleSendCallMessageToGroup: ((groupId: GroupId, message: Uint8Array, urgency: CallMessageUrgency, overrideRecipients: Array<Uint8Array>) => void) | null;
|
|
105
|
+
handleGroupCallRingUpdate: ((groupId: GroupId, ringId: bigint, sender: GroupCallUserId, update: RingUpdate) => void) | null;
|
|
106
106
|
handleRtcStatsReport: ((reportJson: string) => void) | null;
|
|
107
107
|
constructor();
|
|
108
108
|
setConfig(config: Config): void;
|
|
109
|
-
setSelfUuid(uuid:
|
|
109
|
+
setSelfUuid(uuid: Uint8Array): void;
|
|
110
110
|
startOutgoingCall(remoteUserId: UserId, isVideoCall: boolean, localDeviceId: DeviceId): Call;
|
|
111
111
|
cancelGroupRing(groupId: GroupId, ringId: bigint, reason: RingCancelReason | null): void;
|
|
112
112
|
onStartOutgoingCall(remoteUserId: UserId, callId: CallId): void;
|
|
@@ -121,9 +121,9 @@ export declare class RingRTCType {
|
|
|
121
121
|
onAudioLevels(remoteUserId: UserId, capturedLevel: RawAudioLevel, receivedLevel: RawAudioLevel): void;
|
|
122
122
|
onLowBandwidthForVideo(remoteUserId: UserId, recovered: boolean): void;
|
|
123
123
|
renderVideoFrame(width: number, height: number, buffer: Buffer): void;
|
|
124
|
-
onSendOffer(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, offerType: OfferType, opaque:
|
|
125
|
-
onSendAnswer(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, opaque:
|
|
126
|
-
onSendIceCandidates(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, candidates: Array<
|
|
124
|
+
onSendOffer(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, offerType: OfferType, opaque: Uint8Array): void;
|
|
125
|
+
onSendAnswer(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, opaque: Uint8Array): void;
|
|
126
|
+
onSendIceCandidates(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, candidates: Array<Uint8Array>): void;
|
|
127
127
|
onSendHangup(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, hangupType: HangupType, deviceId: DeviceId | null): void;
|
|
128
128
|
onSendBusy(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean): void;
|
|
129
129
|
private sendSignaling;
|
|
@@ -227,11 +227,11 @@ export declare class RingRTCType {
|
|
|
227
227
|
* @param adminPasskey - the passkey specified when the link was created
|
|
228
228
|
*/
|
|
229
229
|
deleteCallLink(sfuUrl: string, authCredentialPresentation: Uint8Array, linkRootKey: CallLinkRootKey, epoch: CallLinkEpoch | undefined, adminPasskey: Uint8Array): Promise<HttpResult<undefined>>;
|
|
230
|
-
receivedHttpResponse(requestId: number, status: number, body:
|
|
230
|
+
receivedHttpResponse(requestId: number, status: number, body: Uint8Array): void;
|
|
231
231
|
httpRequestFailed(requestId: number, debugInfo: string | undefined): void;
|
|
232
232
|
getGroupCall(groupId: GroupId, sfuUrl: string, hkdfExtraInfo: Uint8Array, audioLevelsIntervalMillis: number | undefined, observer: GroupCallObserver): GroupCall | undefined;
|
|
233
233
|
getCallLinkCall(sfuUrl: string, endorsementPublicKey: Uint8Array, authCredentialPresentation: Uint8Array, rootKey: CallLinkRootKey, epoch: CallLinkEpoch | undefined, adminPasskey: Uint8Array | undefined, hkdfExtraInfo: Uint8Array, audioLevelsIntervalMillis: number | undefined, observer: GroupCallObserver): GroupCall | undefined;
|
|
234
|
-
peekGroupCall(sfuUrl: string, membershipProof:
|
|
234
|
+
peekGroupCall(sfuUrl: string, membershipProof: Uint8Array, groupMembers: Array<GroupMemberInfo>): Promise<PeekInfo>;
|
|
235
235
|
peekCallLinkCall(sfuUrl: string, authCredentialPresentation: Uint8Array, rootKey: CallLinkRootKey, epoch: CallLinkEpoch | undefined): Promise<HttpResult<PeekInfo>>;
|
|
236
236
|
requestMembershipProof(clientId: GroupCallClientId): void;
|
|
237
237
|
requestGroupMembers(clientId: GroupCallClientId): void;
|
|
@@ -259,7 +259,7 @@ export declare class RingRTCType {
|
|
|
259
259
|
logInfo(message: string): void;
|
|
260
260
|
handleCallingMessage(message: CallingMessage, options: {
|
|
261
261
|
remoteUserId: UserId;
|
|
262
|
-
remoteUuid?:
|
|
262
|
+
remoteUuid?: Uint8Array;
|
|
263
263
|
remoteDeviceId: DeviceId;
|
|
264
264
|
localDeviceId: DeviceId;
|
|
265
265
|
ageSec: number;
|
|
@@ -270,9 +270,9 @@ export declare class RingRTCType {
|
|
|
270
270
|
}): void;
|
|
271
271
|
sendHttpRequest(requestId: number, url: string, method: HttpMethod, headers: {
|
|
272
272
|
[name: string]: string;
|
|
273
|
-
}, body:
|
|
274
|
-
sendCallMessage(recipientUuid:
|
|
275
|
-
sendCallMessageToGroup(groupId: GroupId, message:
|
|
273
|
+
}, body: Uint8Array | undefined): void;
|
|
274
|
+
sendCallMessage(recipientUuid: Uint8Array, message: Uint8Array, urgency: CallMessageUrgency): void;
|
|
275
|
+
sendCallMessageToGroup(groupId: GroupId, message: Uint8Array, urgency: CallMessageUrgency, overrideRecipients: Array<Uint8Array>): void;
|
|
276
276
|
get call(): Call | null;
|
|
277
277
|
getCall(callId: CallId): Call | null;
|
|
278
278
|
accept(callId: CallId): void;
|
|
@@ -473,7 +473,7 @@ export declare class LocalDeviceState {
|
|
|
473
473
|
}
|
|
474
474
|
export declare class RemoteDeviceState {
|
|
475
475
|
demuxId: number;
|
|
476
|
-
userId:
|
|
476
|
+
userId: Uint8Array;
|
|
477
477
|
mediaKeysReceived: boolean;
|
|
478
478
|
audioMuted: boolean | undefined;
|
|
479
479
|
videoMuted: boolean | undefined;
|
|
@@ -485,12 +485,12 @@ export declare class RemoteDeviceState {
|
|
|
485
485
|
speakerTime: string;
|
|
486
486
|
forwardingVideo: boolean | undefined;
|
|
487
487
|
isHigherResolutionPending: boolean;
|
|
488
|
-
constructor(demuxId: number, userId:
|
|
488
|
+
constructor(demuxId: number, userId: Uint8Array, addedTime: string, speakerTime: string, mediaKeysReceived: boolean);
|
|
489
489
|
}
|
|
490
490
|
export declare class GroupMemberInfo {
|
|
491
|
-
userId:
|
|
492
|
-
userIdCipherText:
|
|
493
|
-
constructor(userId:
|
|
491
|
+
userId: Uint8Array;
|
|
492
|
+
userIdCipherText: Uint8Array;
|
|
493
|
+
constructor(userId: Uint8Array, userIdCipherText: Uint8Array);
|
|
494
494
|
}
|
|
495
495
|
export declare class VideoRequest {
|
|
496
496
|
demuxId: number;
|
|
@@ -549,12 +549,12 @@ export declare class GroupCall {
|
|
|
549
549
|
resendMediaKeys(): void;
|
|
550
550
|
setDataMode(dataMode: DataMode): void;
|
|
551
551
|
requestVideo(resolutions: Array<VideoRequest>, activeSpeakerHeight: number): void;
|
|
552
|
-
approveUser(otherUserId:
|
|
553
|
-
denyUser(otherUserId:
|
|
552
|
+
approveUser(otherUserId: Uint8Array): void;
|
|
553
|
+
denyUser(otherUserId: Uint8Array): void;
|
|
554
554
|
removeClient(otherClientDemuxId: number): void;
|
|
555
555
|
blockClient(otherClientDemuxId: number): void;
|
|
556
556
|
setGroupMembers(members: Array<GroupMemberInfo>): void;
|
|
557
|
-
setMembershipProof(proof:
|
|
557
|
+
setMembershipProof(proof: Uint8Array): void;
|
|
558
558
|
requestMembershipProof(): void;
|
|
559
559
|
requestGroupMembers(): void;
|
|
560
560
|
handleConnectionStateChanged(connectionState: ConnectionState): void;
|
|
@@ -582,7 +582,7 @@ declare class GroupCallVideoFrameSource {
|
|
|
582
582
|
constructor(callManager: CallManager, groupCall: GroupCall, remoteDemuxId: number);
|
|
583
583
|
receiveVideoFrame(buffer: Buffer, maxWidth: number, maxHeight: number): [number, number] | undefined;
|
|
584
584
|
}
|
|
585
|
-
type ProtobufBuffer =
|
|
585
|
+
type ProtobufBuffer = Uint8Array | {
|
|
586
586
|
toArrayBuffer: () => ArrayBuffer;
|
|
587
587
|
};
|
|
588
588
|
export type UserId = string;
|
|
@@ -651,7 +651,7 @@ export declare enum RingCancelReason {
|
|
|
651
651
|
}
|
|
652
652
|
export interface CallManager {
|
|
653
653
|
setConfig(config: Config): void;
|
|
654
|
-
setSelfUuid(uuid:
|
|
654
|
+
setSelfUuid(uuid: Uint8Array): void;
|
|
655
655
|
createOutgoingCall(remoteUserId: UserId, isVideoCall: boolean, localDeviceId: DeviceId): CallId;
|
|
656
656
|
proceed(callId: CallId, iceServers: Array<IceServer>, hideIp: boolean, dataMode: DataMode, audioLevelsIntervalMillis: number): void;
|
|
657
657
|
accept(callId: CallId): void;
|
|
@@ -666,13 +666,13 @@ export interface CallManager {
|
|
|
666
666
|
updateDataMode(dataMode: DataMode): void;
|
|
667
667
|
sendVideoFrame(width: number, height: number, format: VideoPixelFormatEnum, buffer: Buffer): void;
|
|
668
668
|
receiveVideoFrame(buffer: Buffer, maxWidth: number, maxHeight: number): [number, number] | undefined;
|
|
669
|
-
receivedOffer(remoteUserId: UserId, remoteDeviceId: DeviceId, localDeviceId: DeviceId, messageAgeSec: number, callId: CallId, offerType: OfferType, opaque:
|
|
670
|
-
receivedAnswer(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, opaque:
|
|
671
|
-
receivedIceCandidates(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, candidates: Array<
|
|
669
|
+
receivedOffer(remoteUserId: UserId, remoteDeviceId: DeviceId, localDeviceId: DeviceId, messageAgeSec: number, callId: CallId, offerType: OfferType, opaque: Uint8Array, senderIdentityKey: Uint8Array, receiverIdentityKey: Uint8Array): void;
|
|
670
|
+
receivedAnswer(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, opaque: Uint8Array, senderIdentityKey: Uint8Array, receiverIdentityKey: Uint8Array): void;
|
|
671
|
+
receivedIceCandidates(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, candidates: Array<Uint8Array>): void;
|
|
672
672
|
receivedHangup(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, hangupType: HangupType, hangupDeviceId: DeviceId | null): void;
|
|
673
673
|
receivedBusy(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId): void;
|
|
674
|
-
receivedCallMessage(remoteUserId:
|
|
675
|
-
receivedHttpResponse(requestId: number, status: number, body:
|
|
674
|
+
receivedCallMessage(remoteUserId: Uint8Array, remoteDeviceId: DeviceId, localDeviceId: DeviceId, data: Uint8Array, messageAgeSec: number): void;
|
|
675
|
+
receivedHttpResponse(requestId: number, status: number, body: Uint8Array): void;
|
|
676
676
|
httpRequestFailed(requestId: number, debugInfo: string | undefined): void;
|
|
677
677
|
createGroupCallClient(groupId: GroupId, sfuUrl: string, hkdfExtraInfo: Uint8Array, audioLevelsIntervalMillis: number): GroupCallClientId;
|
|
678
678
|
createCallLinkCallClient(sfuUrl: string, endorsementPublicKey: Uint8Array, authCredentialPresentation: Uint8Array, linkRootKey: Uint8Array, epoch: number | undefined, adminPasskey: Uint8Array | undefined, hkdfExtraInfo: Uint8Array, audioLevelsIntervalMillis: number): GroupCallClientId;
|
|
@@ -687,25 +687,25 @@ export interface CallManager {
|
|
|
687
687
|
setOutgoingVideoMuted(clientId: GroupCallClientId, muted: boolean): void;
|
|
688
688
|
setPresenting(clientId: GroupCallClientId, presenting: boolean): void;
|
|
689
689
|
setOutgoingGroupCallVideoIsScreenShare(clientId: GroupCallClientId, isScreenShare: boolean): void;
|
|
690
|
-
groupRing(clientId: GroupCallClientId, recipient:
|
|
690
|
+
groupRing(clientId: GroupCallClientId, recipient: Uint8Array | undefined): void;
|
|
691
691
|
groupReact(clientId: GroupCallClientId, value: string): void;
|
|
692
692
|
groupRaiseHand(clientId: GroupCallClientId, raise: boolean): void;
|
|
693
693
|
resendMediaKeys(clientId: GroupCallClientId): void;
|
|
694
694
|
setDataMode(clientId: GroupCallClientId, dataMode: DataMode): void;
|
|
695
695
|
requestVideo(clientId: GroupCallClientId, resolutions: Array<VideoRequest>, activeSpeakerHeight: number): void;
|
|
696
|
-
approveUser(clientId: GroupCallClientId, otherUserId:
|
|
697
|
-
denyUser(clientId: GroupCallClientId, otherUserId:
|
|
696
|
+
approveUser(clientId: GroupCallClientId, otherUserId: Uint8Array): void;
|
|
697
|
+
denyUser(clientId: GroupCallClientId, otherUserId: Uint8Array): void;
|
|
698
698
|
removeClient(clientId: GroupCallClientId, otherClientDemuxId: number): void;
|
|
699
699
|
blockClient(clientId: GroupCallClientId, otherClientDemuxId: number): void;
|
|
700
700
|
setGroupMembers(clientId: GroupCallClientId, members: Array<GroupMemberInfo>): void;
|
|
701
|
-
setMembershipProof(clientId: GroupCallClientId, proof:
|
|
701
|
+
setMembershipProof(clientId: GroupCallClientId, proof: Uint8Array): void;
|
|
702
702
|
receiveGroupCallVideoFrame(clientId: GroupCallClientId, remoteDemuxId: number, buffer: Buffer, maxWidth: number, maxHeight: number): [number, number] | undefined;
|
|
703
703
|
setRtcStatsInterval(clientId: GroupCallClientId, intervalMillis: number): void;
|
|
704
704
|
readCallLink(requestId: number, sfuUrl: string, authCredentialPresentation: Uint8Array, linkRootKey: Uint8Array, epoch: number | undefined): void;
|
|
705
705
|
createCallLink(requestId: number, sfuUrl: string, createCredentialPresentation: Uint8Array, linkRootKey: Uint8Array, adminPasskey: Uint8Array, callLinkPublicParams: Uint8Array, restrictions: number | undefined): void;
|
|
706
706
|
updateCallLink(requestId: number, sfuUrl: string, authCredentialPresentation: Uint8Array, linkRootKey: Uint8Array, epoch: number | undefined, adminPasskey: Uint8Array, newName: string | undefined, newRestrictions: number | undefined, newRevoked: boolean | undefined): void;
|
|
707
707
|
deleteCallLink(requestId: number, sfuUrl: string, authCredentialPresentation: Uint8Array, linkRootKey: Uint8Array, epoch: number | undefined, adminPasskey: Uint8Array): void;
|
|
708
|
-
peekGroupCall(requestId: number, sfu_url: string, membership_proof:
|
|
708
|
+
peekGroupCall(requestId: number, sfu_url: string, membership_proof: Uint8Array, group_members: Array<GroupMemberInfo>): void;
|
|
709
709
|
peekCallLinkCall(requestId: number, sfuUrl: string, authCredentialPresentation: Uint8Array, linkRootKey: Uint8Array, epoch: number | undefined): void;
|
|
710
710
|
getAudioInputs(): Array<AudioDevice>;
|
|
711
711
|
setAudioInput(index: number): void;
|
|
@@ -720,16 +720,16 @@ export interface CallManagerCallbacks {
|
|
|
720
720
|
onRemoteAudioEnabled(remoteUserId: UserId, enabled: boolean): void;
|
|
721
721
|
onRemoteVideoEnabled(remoteUserId: UserId, enabled: boolean): void;
|
|
722
722
|
onRemoteSharingScreen(remoteUserId: UserId, enabled: boolean): void;
|
|
723
|
-
onSendOffer(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, mediaType: number, opaque:
|
|
724
|
-
onSendAnswer(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, opaque:
|
|
725
|
-
onSendIceCandidates(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, candidates: Array<
|
|
723
|
+
onSendOffer(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, mediaType: number, opaque: Uint8Array): void;
|
|
724
|
+
onSendAnswer(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, opaque: Uint8Array): void;
|
|
725
|
+
onSendIceCandidates(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, candidates: Array<Uint8Array>): void;
|
|
726
726
|
onSendHangup(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean, HangupType: HangupType, hangupDeviceId: DeviceId | null): void;
|
|
727
727
|
onSendBusy(remoteUserId: UserId, remoteDeviceId: DeviceId, callId: CallId, broadcast: boolean): void;
|
|
728
|
-
sendCallMessage(recipientUuid:
|
|
729
|
-
sendCallMessageToGroup(groupId: GroupId, message:
|
|
728
|
+
sendCallMessage(recipientUuid: Uint8Array, message: Uint8Array, urgency: CallMessageUrgency): void;
|
|
729
|
+
sendCallMessageToGroup(groupId: GroupId, message: Uint8Array, urgency: CallMessageUrgency, overrideRecipients: Array<Uint8Array>): void;
|
|
730
730
|
sendHttpRequest(requestId: number, url: string, method: HttpMethod, headers: {
|
|
731
731
|
[name: string]: string;
|
|
732
|
-
}, body:
|
|
732
|
+
}, body: Uint8Array | undefined): void;
|
|
733
733
|
requestMembershipProof(clientId: GroupCallClientId): void;
|
|
734
734
|
requestGroupMembers(clientId: GroupCallClientId): void;
|
|
735
735
|
handleConnectionStateChanged(clientId: GroupCallClientId, connectionState: ConnectionState): void;
|
package/dist/ringrtc/Service.js
CHANGED
|
@@ -1028,7 +1028,7 @@ class RingRTCType {
|
|
|
1028
1028
|
}
|
|
1029
1029
|
if (message.offer?.callId) {
|
|
1030
1030
|
const callId = message.offer.callId;
|
|
1031
|
-
const opaque =
|
|
1031
|
+
const opaque = toUint8Array(message.offer.opaque);
|
|
1032
1032
|
// opaque is required. sdp is obsolete, but it might still come with opaque.
|
|
1033
1033
|
if (!opaque) {
|
|
1034
1034
|
// TODO: Remove once the proto is updated to only support opaque and require it.
|
|
@@ -1043,7 +1043,7 @@ class RingRTCType {
|
|
|
1043
1043
|
}
|
|
1044
1044
|
if (message.answer?.callId) {
|
|
1045
1045
|
const callId = message.answer.callId;
|
|
1046
|
-
const opaque =
|
|
1046
|
+
const opaque = toUint8Array(message.answer.opaque);
|
|
1047
1047
|
// opaque is required. sdp is obsolete, but it might still come with opaque.
|
|
1048
1048
|
if (!opaque) {
|
|
1049
1049
|
// TODO: Remove once the proto is updated to only support opaque and require it.
|
|
@@ -1058,7 +1058,7 @@ class RingRTCType {
|
|
|
1058
1058
|
// We have to copy them to do the .toArrayBuffer() thing.
|
|
1059
1059
|
const candidates = [];
|
|
1060
1060
|
for (const candidate of message.iceCandidates) {
|
|
1061
|
-
const copy =
|
|
1061
|
+
const copy = toUint8Array(candidate.opaque);
|
|
1062
1062
|
if (copy) {
|
|
1063
1063
|
candidates.push(copy);
|
|
1064
1064
|
}
|
|
@@ -1093,7 +1093,7 @@ class RingRTCType {
|
|
|
1093
1093
|
this.logError('handleCallingMessage(): opaque message received without UUID!');
|
|
1094
1094
|
return;
|
|
1095
1095
|
}
|
|
1096
|
-
const data =
|
|
1096
|
+
const data = toUint8Array(message.opaque.data);
|
|
1097
1097
|
if (data == undefined) {
|
|
1098
1098
|
this.logError('handleCallingMessage(): opaque message received without data!');
|
|
1099
1099
|
return;
|
|
@@ -1741,14 +1741,14 @@ class GroupCallVideoFrameSource {
|
|
|
1741
1741
|
return frame;
|
|
1742
1742
|
}
|
|
1743
1743
|
}
|
|
1744
|
-
function
|
|
1744
|
+
function toUint8Array(pbab) {
|
|
1745
1745
|
if (!pbab) {
|
|
1746
1746
|
return pbab;
|
|
1747
1747
|
}
|
|
1748
|
-
if (pbab instanceof
|
|
1748
|
+
if (pbab instanceof Uint8Array) {
|
|
1749
1749
|
return pbab;
|
|
1750
1750
|
}
|
|
1751
|
-
return
|
|
1751
|
+
return new Uint8Array(pbab.toArrayBuffer());
|
|
1752
1752
|
}
|
|
1753
1753
|
class CallingMessage {
|
|
1754
1754
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signalapp/ringrtc",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.57.0",
|
|
4
4
|
"description": "Signal Messenger voice and video calling library.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -12,8 +12,11 @@
|
|
|
12
12
|
"dist/acknowledgments.md",
|
|
13
13
|
"scripts/fetch-prebuild.js"
|
|
14
14
|
],
|
|
15
|
+
"bin": {
|
|
16
|
+
"virtual_audio": "dist/bin/virtual_audio.sh"
|
|
17
|
+
},
|
|
15
18
|
"scripts": {
|
|
16
|
-
"build": "tsc",
|
|
19
|
+
"build": "tsc && bash scripts/build-help.sh",
|
|
17
20
|
"clean": "rimraf dist",
|
|
18
21
|
"test": "electron-mocha --renderer --recursive dist/test --timeout 10000 --require source-map-support/register",
|
|
19
22
|
"eslint": "eslint .",
|
|
@@ -25,7 +28,7 @@
|
|
|
25
28
|
},
|
|
26
29
|
"config": {
|
|
27
30
|
"prebuildUrl": "https://build-artifacts.signal.org/libraries/ringrtc-desktop-build-v${npm_package_version}.tar.gz",
|
|
28
|
-
"prebuildChecksum": "
|
|
31
|
+
"prebuildChecksum": "ef9241775fe21e9fbe8bbdb90b0e891b3764a26c57fdf4615db66a55d31c8619"
|
|
29
32
|
},
|
|
30
33
|
"author": "",
|
|
31
34
|
"license": "AGPL-3.0-only",
|