miaw-core 1.1.0 → 1.2.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/.claude/settings.local.json +42 -0
- package/CHANGELOG.md +52 -0
- package/README.md +31 -1
- package/bin/miaw-cli.ts +181 -0
- package/dist/cli/commands/catalog.d.ts +68 -0
- package/dist/cli/commands/catalog.d.ts.map +1 -0
- package/dist/cli/commands/catalog.js +241 -0
- package/dist/cli/commands/catalog.js.map +1 -0
- package/dist/cli/commands/commands-index.d.ts +16 -0
- package/dist/cli/commands/commands-index.d.ts.map +1 -0
- package/dist/cli/commands/commands-index.js +16 -0
- package/dist/cli/commands/commands-index.js.map +1 -0
- package/dist/cli/commands/contact.d.ts +48 -0
- package/dist/cli/commands/contact.d.ts.map +1 -0
- package/dist/cli/commands/contact.js +180 -0
- package/dist/cli/commands/contact.js.map +1 -0
- package/dist/cli/commands/get.d.ts +59 -0
- package/dist/cli/commands/get.d.ts.map +1 -0
- package/dist/cli/commands/get.js +351 -0
- package/dist/cli/commands/get.js.map +1 -0
- package/dist/cli/commands/group.d.ts +114 -0
- package/dist/cli/commands/group.d.ts.map +1 -0
- package/dist/cli/commands/group.js +432 -0
- package/dist/cli/commands/group.js.map +1 -0
- package/dist/cli/commands/index.d.ts +24 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +671 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/instance.d.ts +52 -0
- package/dist/cli/commands/instance.d.ts.map +1 -0
- package/dist/cli/commands/instance.js +247 -0
- package/dist/cli/commands/instance.js.map +1 -0
- package/dist/cli/commands/label.d.ts +43 -0
- package/dist/cli/commands/label.d.ts.map +1 -0
- package/dist/cli/commands/label.js +209 -0
- package/dist/cli/commands/label.js.map +1 -0
- package/dist/cli/commands/media.d.ts +15 -0
- package/dist/cli/commands/media.d.ts.map +1 -0
- package/dist/cli/commands/media.js +69 -0
- package/dist/cli/commands/media.js.map +1 -0
- package/dist/cli/commands/misc.d.ts +13 -0
- package/dist/cli/commands/misc.d.ts.map +1 -0
- package/dist/cli/commands/misc.js +37 -0
- package/dist/cli/commands/misc.js.map +1 -0
- package/dist/cli/commands/profile.d.ts +29 -0
- package/dist/cli/commands/profile.d.ts.map +1 -0
- package/dist/cli/commands/profile.js +100 -0
- package/dist/cli/commands/profile.js.map +1 -0
- package/dist/cli/commands/send.d.ts +48 -0
- package/dist/cli/commands/send.d.ts.map +1 -0
- package/dist/cli/commands/send.js +137 -0
- package/dist/cli/commands/send.js.map +1 -0
- package/dist/cli/context.d.ts +23 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +21 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/index.d.ts +11 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +11 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/repl.d.ts +15 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +899 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/utils/cleanup.d.ts +32 -0
- package/dist/cli/utils/cleanup.d.ts.map +1 -0
- package/dist/cli/utils/cleanup.js +61 -0
- package/dist/cli/utils/cleanup.js.map +1 -0
- package/dist/cli/utils/client-cache.d.ts +41 -0
- package/dist/cli/utils/client-cache.d.ts.map +1 -0
- package/dist/cli/utils/client-cache.js +132 -0
- package/dist/cli/utils/client-cache.js.map +1 -0
- package/dist/cli/utils/formatter.d.ts +32 -0
- package/dist/cli/utils/formatter.d.ts.map +1 -0
- package/dist/cli/utils/formatter.js +111 -0
- package/dist/cli/utils/formatter.js.map +1 -0
- package/dist/cli/utils/instance-registry.d.ts +78 -0
- package/dist/cli/utils/instance-registry.d.ts.map +1 -0
- package/dist/cli/utils/instance-registry.js +158 -0
- package/dist/cli/utils/instance-registry.js.map +1 -0
- package/dist/cli/utils/prompt.d.ts +70 -0
- package/dist/cli/utils/prompt.d.ts.map +1 -0
- package/dist/cli/utils/prompt.js +120 -0
- package/dist/cli/utils/prompt.js.map +1 -0
- package/dist/cli/utils/session.d.ts +53 -0
- package/dist/cli/utils/session.d.ts.map +1 -0
- package/dist/cli/utils/session.js +294 -0
- package/dist/cli/utils/session.js.map +1 -0
- package/dist/client/MiawClient.d.ts +218 -19
- package/dist/client/MiawClient.d.ts.map +1 -1
- package/dist/client/MiawClient.js +1270 -143
- package/dist/client/MiawClient.js.map +1 -1
- package/dist/constants/cache.d.ts +8 -0
- package/dist/constants/cache.d.ts.map +1 -0
- package/dist/constants/cache.js +8 -0
- package/dist/constants/cache.js.map +1 -0
- package/dist/constants/colors.d.ts +19 -0
- package/dist/constants/colors.d.ts.map +1 -0
- package/dist/constants/colors.js +42 -0
- package/dist/constants/colors.js.map +1 -0
- package/dist/constants/timeouts.d.ts +38 -0
- package/dist/constants/timeouts.d.ts.map +1 -0
- package/dist/constants/timeouts.js +38 -0
- package/dist/constants/timeouts.js.map +1 -0
- package/dist/handlers/MessageHandler.d.ts +18 -1
- package/dist/handlers/MessageHandler.d.ts.map +1 -1
- package/dist/handlers/MessageHandler.js +44 -15
- package/dist/handlers/MessageHandler.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/types/baileys.d.ts +130 -0
- package/dist/types/baileys.d.ts.map +1 -0
- package/dist/types/baileys.js +16 -0
- package/dist/types/baileys.js.map +1 -0
- package/dist/types/index.d.ts +20 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/logger.d.ts +23 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/logger.js +2 -0
- package/dist/types/logger.js.map +1 -0
- package/dist/utils/console-filter.d.ts +62 -0
- package/dist/utils/console-filter.d.ts.map +1 -0
- package/dist/utils/console-filter.js +139 -0
- package/dist/utils/console-filter.js.map +1 -0
- package/dist/utils/filtered-logger.d.ts +23 -0
- package/dist/utils/filtered-logger.d.ts.map +1 -0
- package/dist/utils/filtered-logger.js +87 -0
- package/dist/utils/filtered-logger.js.map +1 -0
- package/dist/utils/type-guards.d.ts +39 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +59 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/utils/validation.d.ts +90 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +177 -0
- package/dist/utils/validation.js.map +1 -0
- package/docs/BAILEYS_MIGRATION_v7.md +131 -23
- package/docs/CLI-ANALYSIS.md +428 -0
- package/docs/CLI.md +1189 -0
- package/docs/CODE_REVIEW_REPORT.md +581 -0
- package/docs/LID_RESOLUTION.md +226 -0
- package/docs/MIGRATION.md +172 -0
- package/docs/PROXY_SUPPORT_PLAN.md +1442 -0
- package/docs/USAGE.md +623 -651
- package/eslint.config.js +1 -1
- package/package.json +10 -5
- package/sessions-cli/.cli_history +200 -0
- package/sessions-cli/default/app-state-sync-key-AAAAAFwv.json +1 -0
- package/sessions-cli/default/app-state-sync-key-AAAAAFww.json +1 -0
- package/sessions-cli/default/app-state-sync-version-critical_block.json +1 -0
- package/sessions-cli/default/app-state-sync-version-critical_unblock_low.json +1 -0
- package/sessions-cli/default/app-state-sync-version-regular.json +1 -0
- package/sessions-cli/default/app-state-sync-version-regular_high.json +1 -0
- package/sessions-cli/default/app-state-sync-version-regular_low.json +1 -0
- package/sessions-cli/default/chats.json +244 -0
- package/sessions-cli/default/contacts.json +3880 -0
- package/sessions-cli/default/creds.json +1 -0
- package/sessions-cli/default/device-list-6285604722341.json +1 -0
- package/sessions-cli/default/labels.json +82 -0
- package/sessions-cli/default/lid-mapping-42877077966917_reverse.json +1 -0
- package/sessions-cli/default/lid-mapping-6285604722341.json +1 -0
- package/sessions-cli/default/lid-mappings.json +750 -0
- package/sessions-cli/default/messages.json +17287 -0
- package/sessions-cli/default/pre-key-1.json +1 -0
- package/sessions-cli/default/pre-key-10.json +1 -0
- package/sessions-cli/default/pre-key-100.json +1 -0
- package/sessions-cli/default/pre-key-101.json +1 -0
- package/sessions-cli/default/pre-key-102.json +1 -0
- package/sessions-cli/default/pre-key-103.json +1 -0
- package/sessions-cli/default/pre-key-104.json +1 -0
- package/sessions-cli/default/pre-key-105.json +1 -0
- package/sessions-cli/default/pre-key-106.json +1 -0
- package/sessions-cli/default/pre-key-107.json +1 -0
- package/sessions-cli/default/pre-key-108.json +1 -0
- package/sessions-cli/default/pre-key-109.json +1 -0
- package/sessions-cli/default/pre-key-11.json +1 -0
- package/sessions-cli/default/pre-key-110.json +1 -0
- package/sessions-cli/default/pre-key-111.json +1 -0
- package/sessions-cli/default/pre-key-112.json +1 -0
- package/sessions-cli/default/pre-key-113.json +1 -0
- package/sessions-cli/default/pre-key-114.json +1 -0
- package/sessions-cli/default/pre-key-115.json +1 -0
- package/sessions-cli/default/pre-key-116.json +1 -0
- package/sessions-cli/default/pre-key-117.json +1 -0
- package/sessions-cli/default/pre-key-118.json +1 -0
- package/sessions-cli/default/pre-key-119.json +1 -0
- package/sessions-cli/default/pre-key-12.json +1 -0
- package/sessions-cli/default/pre-key-120.json +1 -0
- package/sessions-cli/default/pre-key-121.json +1 -0
- package/sessions-cli/default/pre-key-122.json +1 -0
- package/sessions-cli/default/pre-key-123.json +1 -0
- package/sessions-cli/default/pre-key-124.json +1 -0
- package/sessions-cli/default/pre-key-125.json +1 -0
- package/sessions-cli/default/pre-key-126.json +1 -0
- package/sessions-cli/default/pre-key-127.json +1 -0
- package/sessions-cli/default/pre-key-128.json +1 -0
- package/sessions-cli/default/pre-key-129.json +1 -0
- package/sessions-cli/default/pre-key-13.json +1 -0
- package/sessions-cli/default/pre-key-130.json +1 -0
- package/sessions-cli/default/pre-key-131.json +1 -0
- package/sessions-cli/default/pre-key-132.json +1 -0
- package/sessions-cli/default/pre-key-133.json +1 -0
- package/sessions-cli/default/pre-key-134.json +1 -0
- package/sessions-cli/default/pre-key-135.json +1 -0
- package/sessions-cli/default/pre-key-136.json +1 -0
- package/sessions-cli/default/pre-key-137.json +1 -0
- package/sessions-cli/default/pre-key-138.json +1 -0
- package/sessions-cli/default/pre-key-139.json +1 -0
- package/sessions-cli/default/pre-key-14.json +1 -0
- package/sessions-cli/default/pre-key-140.json +1 -0
- package/sessions-cli/default/pre-key-141.json +1 -0
- package/sessions-cli/default/pre-key-142.json +1 -0
- package/sessions-cli/default/pre-key-143.json +1 -0
- package/sessions-cli/default/pre-key-144.json +1 -0
- package/sessions-cli/default/pre-key-145.json +1 -0
- package/sessions-cli/default/pre-key-146.json +1 -0
- package/sessions-cli/default/pre-key-147.json +1 -0
- package/sessions-cli/default/pre-key-148.json +1 -0
- package/sessions-cli/default/pre-key-149.json +1 -0
- package/sessions-cli/default/pre-key-15.json +1 -0
- package/sessions-cli/default/pre-key-150.json +1 -0
- package/sessions-cli/default/pre-key-151.json +1 -0
- package/sessions-cli/default/pre-key-152.json +1 -0
- package/sessions-cli/default/pre-key-153.json +1 -0
- package/sessions-cli/default/pre-key-154.json +1 -0
- package/sessions-cli/default/pre-key-155.json +1 -0
- package/sessions-cli/default/pre-key-156.json +1 -0
- package/sessions-cli/default/pre-key-157.json +1 -0
- package/sessions-cli/default/pre-key-158.json +1 -0
- package/sessions-cli/default/pre-key-159.json +1 -0
- package/sessions-cli/default/pre-key-16.json +1 -0
- package/sessions-cli/default/pre-key-160.json +1 -0
- package/sessions-cli/default/pre-key-161.json +1 -0
- package/sessions-cli/default/pre-key-162.json +1 -0
- package/sessions-cli/default/pre-key-163.json +1 -0
- package/sessions-cli/default/pre-key-164.json +1 -0
- package/sessions-cli/default/pre-key-165.json +1 -0
- package/sessions-cli/default/pre-key-166.json +1 -0
- package/sessions-cli/default/pre-key-167.json +1 -0
- package/sessions-cli/default/pre-key-168.json +1 -0
- package/sessions-cli/default/pre-key-169.json +1 -0
- package/sessions-cli/default/pre-key-17.json +1 -0
- package/sessions-cli/default/pre-key-170.json +1 -0
- package/sessions-cli/default/pre-key-171.json +1 -0
- package/sessions-cli/default/pre-key-172.json +1 -0
- package/sessions-cli/default/pre-key-173.json +1 -0
- package/sessions-cli/default/pre-key-174.json +1 -0
- package/sessions-cli/default/pre-key-175.json +1 -0
- package/sessions-cli/default/pre-key-176.json +1 -0
- package/sessions-cli/default/pre-key-177.json +1 -0
- package/sessions-cli/default/pre-key-178.json +1 -0
- package/sessions-cli/default/pre-key-179.json +1 -0
- package/sessions-cli/default/pre-key-18.json +1 -0
- package/sessions-cli/default/pre-key-180.json +1 -0
- package/sessions-cli/default/pre-key-181.json +1 -0
- package/sessions-cli/default/pre-key-182.json +1 -0
- package/sessions-cli/default/pre-key-183.json +1 -0
- package/sessions-cli/default/pre-key-184.json +1 -0
- package/sessions-cli/default/pre-key-185.json +1 -0
- package/sessions-cli/default/pre-key-186.json +1 -0
- package/sessions-cli/default/pre-key-187.json +1 -0
- package/sessions-cli/default/pre-key-188.json +1 -0
- package/sessions-cli/default/pre-key-189.json +1 -0
- package/sessions-cli/default/pre-key-19.json +1 -0
- package/sessions-cli/default/pre-key-190.json +1 -0
- package/sessions-cli/default/pre-key-191.json +1 -0
- package/sessions-cli/default/pre-key-192.json +1 -0
- package/sessions-cli/default/pre-key-193.json +1 -0
- package/sessions-cli/default/pre-key-194.json +1 -0
- package/sessions-cli/default/pre-key-195.json +1 -0
- package/sessions-cli/default/pre-key-196.json +1 -0
- package/sessions-cli/default/pre-key-197.json +1 -0
- package/sessions-cli/default/pre-key-198.json +1 -0
- package/sessions-cli/default/pre-key-199.json +1 -0
- package/sessions-cli/default/pre-key-2.json +1 -0
- package/sessions-cli/default/pre-key-20.json +1 -0
- package/sessions-cli/default/pre-key-200.json +1 -0
- package/sessions-cli/default/pre-key-201.json +1 -0
- package/sessions-cli/default/pre-key-202.json +1 -0
- package/sessions-cli/default/pre-key-203.json +1 -0
- package/sessions-cli/default/pre-key-204.json +1 -0
- package/sessions-cli/default/pre-key-205.json +1 -0
- package/sessions-cli/default/pre-key-206.json +1 -0
- package/sessions-cli/default/pre-key-207.json +1 -0
- package/sessions-cli/default/pre-key-208.json +1 -0
- package/sessions-cli/default/pre-key-209.json +1 -0
- package/sessions-cli/default/pre-key-21.json +1 -0
- package/sessions-cli/default/pre-key-210.json +1 -0
- package/sessions-cli/default/pre-key-211.json +1 -0
- package/sessions-cli/default/pre-key-212.json +1 -0
- package/sessions-cli/default/pre-key-213.json +1 -0
- package/sessions-cli/default/pre-key-214.json +1 -0
- package/sessions-cli/default/pre-key-215.json +1 -0
- package/sessions-cli/default/pre-key-216.json +1 -0
- package/sessions-cli/default/pre-key-217.json +1 -0
- package/sessions-cli/default/pre-key-218.json +1 -0
- package/sessions-cli/default/pre-key-219.json +1 -0
- package/sessions-cli/default/pre-key-22.json +1 -0
- package/sessions-cli/default/pre-key-220.json +1 -0
- package/sessions-cli/default/pre-key-221.json +1 -0
- package/sessions-cli/default/pre-key-222.json +1 -0
- package/sessions-cli/default/pre-key-223.json +1 -0
- package/sessions-cli/default/pre-key-224.json +1 -0
- package/sessions-cli/default/pre-key-225.json +1 -0
- package/sessions-cli/default/pre-key-226.json +1 -0
- package/sessions-cli/default/pre-key-227.json +1 -0
- package/sessions-cli/default/pre-key-228.json +1 -0
- package/sessions-cli/default/pre-key-229.json +1 -0
- package/sessions-cli/default/pre-key-23.json +1 -0
- package/sessions-cli/default/pre-key-230.json +1 -0
- package/sessions-cli/default/pre-key-231.json +1 -0
- package/sessions-cli/default/pre-key-232.json +1 -0
- package/sessions-cli/default/pre-key-233.json +1 -0
- package/sessions-cli/default/pre-key-234.json +1 -0
- package/sessions-cli/default/pre-key-235.json +1 -0
- package/sessions-cli/default/pre-key-236.json +1 -0
- package/sessions-cli/default/pre-key-237.json +1 -0
- package/sessions-cli/default/pre-key-238.json +1 -0
- package/sessions-cli/default/pre-key-239.json +1 -0
- package/sessions-cli/default/pre-key-24.json +1 -0
- package/sessions-cli/default/pre-key-240.json +1 -0
- package/sessions-cli/default/pre-key-241.json +1 -0
- package/sessions-cli/default/pre-key-242.json +1 -0
- package/sessions-cli/default/pre-key-243.json +1 -0
- package/sessions-cli/default/pre-key-244.json +1 -0
- package/sessions-cli/default/pre-key-245.json +1 -0
- package/sessions-cli/default/pre-key-246.json +1 -0
- package/sessions-cli/default/pre-key-247.json +1 -0
- package/sessions-cli/default/pre-key-248.json +1 -0
- package/sessions-cli/default/pre-key-249.json +1 -0
- package/sessions-cli/default/pre-key-25.json +1 -0
- package/sessions-cli/default/pre-key-250.json +1 -0
- package/sessions-cli/default/pre-key-251.json +1 -0
- package/sessions-cli/default/pre-key-252.json +1 -0
- package/sessions-cli/default/pre-key-253.json +1 -0
- package/sessions-cli/default/pre-key-254.json +1 -0
- package/sessions-cli/default/pre-key-255.json +1 -0
- package/sessions-cli/default/pre-key-256.json +1 -0
- package/sessions-cli/default/pre-key-257.json +1 -0
- package/sessions-cli/default/pre-key-258.json +1 -0
- package/sessions-cli/default/pre-key-259.json +1 -0
- package/sessions-cli/default/pre-key-26.json +1 -0
- package/sessions-cli/default/pre-key-260.json +1 -0
- package/sessions-cli/default/pre-key-261.json +1 -0
- package/sessions-cli/default/pre-key-262.json +1 -0
- package/sessions-cli/default/pre-key-263.json +1 -0
- package/sessions-cli/default/pre-key-264.json +1 -0
- package/sessions-cli/default/pre-key-265.json +1 -0
- package/sessions-cli/default/pre-key-266.json +1 -0
- package/sessions-cli/default/pre-key-267.json +1 -0
- package/sessions-cli/default/pre-key-268.json +1 -0
- package/sessions-cli/default/pre-key-269.json +1 -0
- package/sessions-cli/default/pre-key-27.json +1 -0
- package/sessions-cli/default/pre-key-270.json +1 -0
- package/sessions-cli/default/pre-key-271.json +1 -0
- package/sessions-cli/default/pre-key-272.json +1 -0
- package/sessions-cli/default/pre-key-273.json +1 -0
- package/sessions-cli/default/pre-key-274.json +1 -0
- package/sessions-cli/default/pre-key-275.json +1 -0
- package/sessions-cli/default/pre-key-276.json +1 -0
- package/sessions-cli/default/pre-key-277.json +1 -0
- package/sessions-cli/default/pre-key-278.json +1 -0
- package/sessions-cli/default/pre-key-279.json +1 -0
- package/sessions-cli/default/pre-key-28.json +1 -0
- package/sessions-cli/default/pre-key-280.json +1 -0
- package/sessions-cli/default/pre-key-281.json +1 -0
- package/sessions-cli/default/pre-key-282.json +1 -0
- package/sessions-cli/default/pre-key-283.json +1 -0
- package/sessions-cli/default/pre-key-284.json +1 -0
- package/sessions-cli/default/pre-key-285.json +1 -0
- package/sessions-cli/default/pre-key-286.json +1 -0
- package/sessions-cli/default/pre-key-287.json +1 -0
- package/sessions-cli/default/pre-key-288.json +1 -0
- package/sessions-cli/default/pre-key-289.json +1 -0
- package/sessions-cli/default/pre-key-29.json +1 -0
- package/sessions-cli/default/pre-key-290.json +1 -0
- package/sessions-cli/default/pre-key-291.json +1 -0
- package/sessions-cli/default/pre-key-292.json +1 -0
- package/sessions-cli/default/pre-key-293.json +1 -0
- package/sessions-cli/default/pre-key-294.json +1 -0
- package/sessions-cli/default/pre-key-295.json +1 -0
- package/sessions-cli/default/pre-key-296.json +1 -0
- package/sessions-cli/default/pre-key-297.json +1 -0
- package/sessions-cli/default/pre-key-298.json +1 -0
- package/sessions-cli/default/pre-key-299.json +1 -0
- package/sessions-cli/default/pre-key-3.json +1 -0
- package/sessions-cli/default/pre-key-30.json +1 -0
- package/sessions-cli/default/pre-key-300.json +1 -0
- package/sessions-cli/default/pre-key-301.json +1 -0
- package/sessions-cli/default/pre-key-302.json +1 -0
- package/sessions-cli/default/pre-key-303.json +1 -0
- package/sessions-cli/default/pre-key-304.json +1 -0
- package/sessions-cli/default/pre-key-305.json +1 -0
- package/sessions-cli/default/pre-key-306.json +1 -0
- package/sessions-cli/default/pre-key-307.json +1 -0
- package/sessions-cli/default/pre-key-308.json +1 -0
- package/sessions-cli/default/pre-key-309.json +1 -0
- package/sessions-cli/default/pre-key-31.json +1 -0
- package/sessions-cli/default/pre-key-310.json +1 -0
- package/sessions-cli/default/pre-key-311.json +1 -0
- package/sessions-cli/default/pre-key-312.json +1 -0
- package/sessions-cli/default/pre-key-313.json +1 -0
- package/sessions-cli/default/pre-key-314.json +1 -0
- package/sessions-cli/default/pre-key-315.json +1 -0
- package/sessions-cli/default/pre-key-316.json +1 -0
- package/sessions-cli/default/pre-key-317.json +1 -0
- package/sessions-cli/default/pre-key-318.json +1 -0
- package/sessions-cli/default/pre-key-319.json +1 -0
- package/sessions-cli/default/pre-key-32.json +1 -0
- package/sessions-cli/default/pre-key-320.json +1 -0
- package/sessions-cli/default/pre-key-321.json +1 -0
- package/sessions-cli/default/pre-key-322.json +1 -0
- package/sessions-cli/default/pre-key-323.json +1 -0
- package/sessions-cli/default/pre-key-324.json +1 -0
- package/sessions-cli/default/pre-key-325.json +1 -0
- package/sessions-cli/default/pre-key-326.json +1 -0
- package/sessions-cli/default/pre-key-327.json +1 -0
- package/sessions-cli/default/pre-key-328.json +1 -0
- package/sessions-cli/default/pre-key-329.json +1 -0
- package/sessions-cli/default/pre-key-33.json +1 -0
- package/sessions-cli/default/pre-key-330.json +1 -0
- package/sessions-cli/default/pre-key-331.json +1 -0
- package/sessions-cli/default/pre-key-332.json +1 -0
- package/sessions-cli/default/pre-key-333.json +1 -0
- package/sessions-cli/default/pre-key-334.json +1 -0
- package/sessions-cli/default/pre-key-335.json +1 -0
- package/sessions-cli/default/pre-key-336.json +1 -0
- package/sessions-cli/default/pre-key-337.json +1 -0
- package/sessions-cli/default/pre-key-338.json +1 -0
- package/sessions-cli/default/pre-key-339.json +1 -0
- package/sessions-cli/default/pre-key-34.json +1 -0
- package/sessions-cli/default/pre-key-340.json +1 -0
- package/sessions-cli/default/pre-key-341.json +1 -0
- package/sessions-cli/default/pre-key-342.json +1 -0
- package/sessions-cli/default/pre-key-343.json +1 -0
- package/sessions-cli/default/pre-key-344.json +1 -0
- package/sessions-cli/default/pre-key-345.json +1 -0
- package/sessions-cli/default/pre-key-346.json +1 -0
- package/sessions-cli/default/pre-key-347.json +1 -0
- package/sessions-cli/default/pre-key-348.json +1 -0
- package/sessions-cli/default/pre-key-349.json +1 -0
- package/sessions-cli/default/pre-key-35.json +1 -0
- package/sessions-cli/default/pre-key-350.json +1 -0
- package/sessions-cli/default/pre-key-351.json +1 -0
- package/sessions-cli/default/pre-key-352.json +1 -0
- package/sessions-cli/default/pre-key-353.json +1 -0
- package/sessions-cli/default/pre-key-354.json +1 -0
- package/sessions-cli/default/pre-key-355.json +1 -0
- package/sessions-cli/default/pre-key-356.json +1 -0
- package/sessions-cli/default/pre-key-357.json +1 -0
- package/sessions-cli/default/pre-key-358.json +1 -0
- package/sessions-cli/default/pre-key-359.json +1 -0
- package/sessions-cli/default/pre-key-36.json +1 -0
- package/sessions-cli/default/pre-key-360.json +1 -0
- package/sessions-cli/default/pre-key-361.json +1 -0
- package/sessions-cli/default/pre-key-362.json +1 -0
- package/sessions-cli/default/pre-key-363.json +1 -0
- package/sessions-cli/default/pre-key-364.json +1 -0
- package/sessions-cli/default/pre-key-365.json +1 -0
- package/sessions-cli/default/pre-key-366.json +1 -0
- package/sessions-cli/default/pre-key-367.json +1 -0
- package/sessions-cli/default/pre-key-368.json +1 -0
- package/sessions-cli/default/pre-key-369.json +1 -0
- package/sessions-cli/default/pre-key-37.json +1 -0
- package/sessions-cli/default/pre-key-370.json +1 -0
- package/sessions-cli/default/pre-key-371.json +1 -0
- package/sessions-cli/default/pre-key-372.json +1 -0
- package/sessions-cli/default/pre-key-373.json +1 -0
- package/sessions-cli/default/pre-key-374.json +1 -0
- package/sessions-cli/default/pre-key-375.json +1 -0
- package/sessions-cli/default/pre-key-376.json +1 -0
- package/sessions-cli/default/pre-key-377.json +1 -0
- package/sessions-cli/default/pre-key-378.json +1 -0
- package/sessions-cli/default/pre-key-379.json +1 -0
- package/sessions-cli/default/pre-key-38.json +1 -0
- package/sessions-cli/default/pre-key-380.json +1 -0
- package/sessions-cli/default/pre-key-381.json +1 -0
- package/sessions-cli/default/pre-key-382.json +1 -0
- package/sessions-cli/default/pre-key-383.json +1 -0
- package/sessions-cli/default/pre-key-384.json +1 -0
- package/sessions-cli/default/pre-key-385.json +1 -0
- package/sessions-cli/default/pre-key-386.json +1 -0
- package/sessions-cli/default/pre-key-387.json +1 -0
- package/sessions-cli/default/pre-key-388.json +1 -0
- package/sessions-cli/default/pre-key-389.json +1 -0
- package/sessions-cli/default/pre-key-39.json +1 -0
- package/sessions-cli/default/pre-key-390.json +1 -0
- package/sessions-cli/default/pre-key-391.json +1 -0
- package/sessions-cli/default/pre-key-392.json +1 -0
- package/sessions-cli/default/pre-key-393.json +1 -0
- package/sessions-cli/default/pre-key-394.json +1 -0
- package/sessions-cli/default/pre-key-395.json +1 -0
- package/sessions-cli/default/pre-key-396.json +1 -0
- package/sessions-cli/default/pre-key-397.json +1 -0
- package/sessions-cli/default/pre-key-398.json +1 -0
- package/sessions-cli/default/pre-key-399.json +1 -0
- package/sessions-cli/default/pre-key-4.json +1 -0
- package/sessions-cli/default/pre-key-40.json +1 -0
- package/sessions-cli/default/pre-key-400.json +1 -0
- package/sessions-cli/default/pre-key-401.json +1 -0
- package/sessions-cli/default/pre-key-402.json +1 -0
- package/sessions-cli/default/pre-key-403.json +1 -0
- package/sessions-cli/default/pre-key-404.json +1 -0
- package/sessions-cli/default/pre-key-405.json +1 -0
- package/sessions-cli/default/pre-key-406.json +1 -0
- package/sessions-cli/default/pre-key-407.json +1 -0
- package/sessions-cli/default/pre-key-408.json +1 -0
- package/sessions-cli/default/pre-key-409.json +1 -0
- package/sessions-cli/default/pre-key-41.json +1 -0
- package/sessions-cli/default/pre-key-410.json +1 -0
- package/sessions-cli/default/pre-key-411.json +1 -0
- package/sessions-cli/default/pre-key-412.json +1 -0
- package/sessions-cli/default/pre-key-413.json +1 -0
- package/sessions-cli/default/pre-key-414.json +1 -0
- package/sessions-cli/default/pre-key-415.json +1 -0
- package/sessions-cli/default/pre-key-416.json +1 -0
- package/sessions-cli/default/pre-key-417.json +1 -0
- package/sessions-cli/default/pre-key-418.json +1 -0
- package/sessions-cli/default/pre-key-419.json +1 -0
- package/sessions-cli/default/pre-key-42.json +1 -0
- package/sessions-cli/default/pre-key-420.json +1 -0
- package/sessions-cli/default/pre-key-421.json +1 -0
- package/sessions-cli/default/pre-key-422.json +1 -0
- package/sessions-cli/default/pre-key-423.json +1 -0
- package/sessions-cli/default/pre-key-424.json +1 -0
- package/sessions-cli/default/pre-key-425.json +1 -0
- package/sessions-cli/default/pre-key-426.json +1 -0
- package/sessions-cli/default/pre-key-427.json +1 -0
- package/sessions-cli/default/pre-key-428.json +1 -0
- package/sessions-cli/default/pre-key-429.json +1 -0
- package/sessions-cli/default/pre-key-43.json +1 -0
- package/sessions-cli/default/pre-key-430.json +1 -0
- package/sessions-cli/default/pre-key-431.json +1 -0
- package/sessions-cli/default/pre-key-432.json +1 -0
- package/sessions-cli/default/pre-key-433.json +1 -0
- package/sessions-cli/default/pre-key-434.json +1 -0
- package/sessions-cli/default/pre-key-435.json +1 -0
- package/sessions-cli/default/pre-key-436.json +1 -0
- package/sessions-cli/default/pre-key-437.json +1 -0
- package/sessions-cli/default/pre-key-438.json +1 -0
- package/sessions-cli/default/pre-key-439.json +1 -0
- package/sessions-cli/default/pre-key-44.json +1 -0
- package/sessions-cli/default/pre-key-440.json +1 -0
- package/sessions-cli/default/pre-key-441.json +1 -0
- package/sessions-cli/default/pre-key-442.json +1 -0
- package/sessions-cli/default/pre-key-443.json +1 -0
- package/sessions-cli/default/pre-key-444.json +1 -0
- package/sessions-cli/default/pre-key-445.json +1 -0
- package/sessions-cli/default/pre-key-446.json +1 -0
- package/sessions-cli/default/pre-key-447.json +1 -0
- package/sessions-cli/default/pre-key-448.json +1 -0
- package/sessions-cli/default/pre-key-449.json +1 -0
- package/sessions-cli/default/pre-key-45.json +1 -0
- package/sessions-cli/default/pre-key-450.json +1 -0
- package/sessions-cli/default/pre-key-451.json +1 -0
- package/sessions-cli/default/pre-key-452.json +1 -0
- package/sessions-cli/default/pre-key-453.json +1 -0
- package/sessions-cli/default/pre-key-454.json +1 -0
- package/sessions-cli/default/pre-key-455.json +1 -0
- package/sessions-cli/default/pre-key-456.json +1 -0
- package/sessions-cli/default/pre-key-457.json +1 -0
- package/sessions-cli/default/pre-key-458.json +1 -0
- package/sessions-cli/default/pre-key-459.json +1 -0
- package/sessions-cli/default/pre-key-46.json +1 -0
- package/sessions-cli/default/pre-key-460.json +1 -0
- package/sessions-cli/default/pre-key-461.json +1 -0
- package/sessions-cli/default/pre-key-462.json +1 -0
- package/sessions-cli/default/pre-key-463.json +1 -0
- package/sessions-cli/default/pre-key-464.json +1 -0
- package/sessions-cli/default/pre-key-465.json +1 -0
- package/sessions-cli/default/pre-key-466.json +1 -0
- package/sessions-cli/default/pre-key-467.json +1 -0
- package/sessions-cli/default/pre-key-468.json +1 -0
- package/sessions-cli/default/pre-key-469.json +1 -0
- package/sessions-cli/default/pre-key-47.json +1 -0
- package/sessions-cli/default/pre-key-470.json +1 -0
- package/sessions-cli/default/pre-key-471.json +1 -0
- package/sessions-cli/default/pre-key-472.json +1 -0
- package/sessions-cli/default/pre-key-473.json +1 -0
- package/sessions-cli/default/pre-key-474.json +1 -0
- package/sessions-cli/default/pre-key-475.json +1 -0
- package/sessions-cli/default/pre-key-476.json +1 -0
- package/sessions-cli/default/pre-key-477.json +1 -0
- package/sessions-cli/default/pre-key-478.json +1 -0
- package/sessions-cli/default/pre-key-479.json +1 -0
- package/sessions-cli/default/pre-key-48.json +1 -0
- package/sessions-cli/default/pre-key-480.json +1 -0
- package/sessions-cli/default/pre-key-481.json +1 -0
- package/sessions-cli/default/pre-key-482.json +1 -0
- package/sessions-cli/default/pre-key-483.json +1 -0
- package/sessions-cli/default/pre-key-484.json +1 -0
- package/sessions-cli/default/pre-key-485.json +1 -0
- package/sessions-cli/default/pre-key-486.json +1 -0
- package/sessions-cli/default/pre-key-487.json +1 -0
- package/sessions-cli/default/pre-key-488.json +1 -0
- package/sessions-cli/default/pre-key-489.json +1 -0
- package/sessions-cli/default/pre-key-49.json +1 -0
- package/sessions-cli/default/pre-key-490.json +1 -0
- package/sessions-cli/default/pre-key-491.json +1 -0
- package/sessions-cli/default/pre-key-492.json +1 -0
- package/sessions-cli/default/pre-key-493.json +1 -0
- package/sessions-cli/default/pre-key-494.json +1 -0
- package/sessions-cli/default/pre-key-495.json +1 -0
- package/sessions-cli/default/pre-key-496.json +1 -0
- package/sessions-cli/default/pre-key-497.json +1 -0
- package/sessions-cli/default/pre-key-498.json +1 -0
- package/sessions-cli/default/pre-key-499.json +1 -0
- package/sessions-cli/default/pre-key-5.json +1 -0
- package/sessions-cli/default/pre-key-50.json +1 -0
- package/sessions-cli/default/pre-key-500.json +1 -0
- package/sessions-cli/default/pre-key-501.json +1 -0
- package/sessions-cli/default/pre-key-502.json +1 -0
- package/sessions-cli/default/pre-key-503.json +1 -0
- package/sessions-cli/default/pre-key-504.json +1 -0
- package/sessions-cli/default/pre-key-505.json +1 -0
- package/sessions-cli/default/pre-key-506.json +1 -0
- package/sessions-cli/default/pre-key-507.json +1 -0
- package/sessions-cli/default/pre-key-508.json +1 -0
- package/sessions-cli/default/pre-key-509.json +1 -0
- package/sessions-cli/default/pre-key-51.json +1 -0
- package/sessions-cli/default/pre-key-510.json +1 -0
- package/sessions-cli/default/pre-key-511.json +1 -0
- package/sessions-cli/default/pre-key-512.json +1 -0
- package/sessions-cli/default/pre-key-513.json +1 -0
- package/sessions-cli/default/pre-key-514.json +1 -0
- package/sessions-cli/default/pre-key-515.json +1 -0
- package/sessions-cli/default/pre-key-516.json +1 -0
- package/sessions-cli/default/pre-key-517.json +1 -0
- package/sessions-cli/default/pre-key-518.json +1 -0
- package/sessions-cli/default/pre-key-519.json +1 -0
- package/sessions-cli/default/pre-key-52.json +1 -0
- package/sessions-cli/default/pre-key-520.json +1 -0
- package/sessions-cli/default/pre-key-521.json +1 -0
- package/sessions-cli/default/pre-key-522.json +1 -0
- package/sessions-cli/default/pre-key-523.json +1 -0
- package/sessions-cli/default/pre-key-524.json +1 -0
- package/sessions-cli/default/pre-key-525.json +1 -0
- package/sessions-cli/default/pre-key-526.json +1 -0
- package/sessions-cli/default/pre-key-527.json +1 -0
- package/sessions-cli/default/pre-key-528.json +1 -0
- package/sessions-cli/default/pre-key-529.json +1 -0
- package/sessions-cli/default/pre-key-53.json +1 -0
- package/sessions-cli/default/pre-key-530.json +1 -0
- package/sessions-cli/default/pre-key-531.json +1 -0
- package/sessions-cli/default/pre-key-532.json +1 -0
- package/sessions-cli/default/pre-key-533.json +1 -0
- package/sessions-cli/default/pre-key-534.json +1 -0
- package/sessions-cli/default/pre-key-535.json +1 -0
- package/sessions-cli/default/pre-key-536.json +1 -0
- package/sessions-cli/default/pre-key-537.json +1 -0
- package/sessions-cli/default/pre-key-538.json +1 -0
- package/sessions-cli/default/pre-key-539.json +1 -0
- package/sessions-cli/default/pre-key-54.json +1 -0
- package/sessions-cli/default/pre-key-540.json +1 -0
- package/sessions-cli/default/pre-key-541.json +1 -0
- package/sessions-cli/default/pre-key-542.json +1 -0
- package/sessions-cli/default/pre-key-543.json +1 -0
- package/sessions-cli/default/pre-key-544.json +1 -0
- package/sessions-cli/default/pre-key-545.json +1 -0
- package/sessions-cli/default/pre-key-546.json +1 -0
- package/sessions-cli/default/pre-key-547.json +1 -0
- package/sessions-cli/default/pre-key-548.json +1 -0
- package/sessions-cli/default/pre-key-549.json +1 -0
- package/sessions-cli/default/pre-key-55.json +1 -0
- package/sessions-cli/default/pre-key-550.json +1 -0
- package/sessions-cli/default/pre-key-551.json +1 -0
- package/sessions-cli/default/pre-key-552.json +1 -0
- package/sessions-cli/default/pre-key-553.json +1 -0
- package/sessions-cli/default/pre-key-554.json +1 -0
- package/sessions-cli/default/pre-key-555.json +1 -0
- package/sessions-cli/default/pre-key-556.json +1 -0
- package/sessions-cli/default/pre-key-557.json +1 -0
- package/sessions-cli/default/pre-key-558.json +1 -0
- package/sessions-cli/default/pre-key-559.json +1 -0
- package/sessions-cli/default/pre-key-56.json +1 -0
- package/sessions-cli/default/pre-key-560.json +1 -0
- package/sessions-cli/default/pre-key-561.json +1 -0
- package/sessions-cli/default/pre-key-562.json +1 -0
- package/sessions-cli/default/pre-key-563.json +1 -0
- package/sessions-cli/default/pre-key-564.json +1 -0
- package/sessions-cli/default/pre-key-565.json +1 -0
- package/sessions-cli/default/pre-key-566.json +1 -0
- package/sessions-cli/default/pre-key-567.json +1 -0
- package/sessions-cli/default/pre-key-568.json +1 -0
- package/sessions-cli/default/pre-key-569.json +1 -0
- package/sessions-cli/default/pre-key-57.json +1 -0
- package/sessions-cli/default/pre-key-570.json +1 -0
- package/sessions-cli/default/pre-key-571.json +1 -0
- package/sessions-cli/default/pre-key-572.json +1 -0
- package/sessions-cli/default/pre-key-573.json +1 -0
- package/sessions-cli/default/pre-key-574.json +1 -0
- package/sessions-cli/default/pre-key-575.json +1 -0
- package/sessions-cli/default/pre-key-576.json +1 -0
- package/sessions-cli/default/pre-key-577.json +1 -0
- package/sessions-cli/default/pre-key-578.json +1 -0
- package/sessions-cli/default/pre-key-579.json +1 -0
- package/sessions-cli/default/pre-key-58.json +1 -0
- package/sessions-cli/default/pre-key-580.json +1 -0
- package/sessions-cli/default/pre-key-581.json +1 -0
- package/sessions-cli/default/pre-key-582.json +1 -0
- package/sessions-cli/default/pre-key-583.json +1 -0
- package/sessions-cli/default/pre-key-584.json +1 -0
- package/sessions-cli/default/pre-key-585.json +1 -0
- package/sessions-cli/default/pre-key-586.json +1 -0
- package/sessions-cli/default/pre-key-587.json +1 -0
- package/sessions-cli/default/pre-key-588.json +1 -0
- package/sessions-cli/default/pre-key-589.json +1 -0
- package/sessions-cli/default/pre-key-59.json +1 -0
- package/sessions-cli/default/pre-key-590.json +1 -0
- package/sessions-cli/default/pre-key-591.json +1 -0
- package/sessions-cli/default/pre-key-592.json +1 -0
- package/sessions-cli/default/pre-key-593.json +1 -0
- package/sessions-cli/default/pre-key-594.json +1 -0
- package/sessions-cli/default/pre-key-595.json +1 -0
- package/sessions-cli/default/pre-key-596.json +1 -0
- package/sessions-cli/default/pre-key-597.json +1 -0
- package/sessions-cli/default/pre-key-598.json +1 -0
- package/sessions-cli/default/pre-key-599.json +1 -0
- package/sessions-cli/default/pre-key-6.json +1 -0
- package/sessions-cli/default/pre-key-60.json +1 -0
- package/sessions-cli/default/pre-key-600.json +1 -0
- package/sessions-cli/default/pre-key-601.json +1 -0
- package/sessions-cli/default/pre-key-602.json +1 -0
- package/sessions-cli/default/pre-key-603.json +1 -0
- package/sessions-cli/default/pre-key-604.json +1 -0
- package/sessions-cli/default/pre-key-605.json +1 -0
- package/sessions-cli/default/pre-key-606.json +1 -0
- package/sessions-cli/default/pre-key-607.json +1 -0
- package/sessions-cli/default/pre-key-608.json +1 -0
- package/sessions-cli/default/pre-key-609.json +1 -0
- package/sessions-cli/default/pre-key-61.json +1 -0
- package/sessions-cli/default/pre-key-610.json +1 -0
- package/sessions-cli/default/pre-key-611.json +1 -0
- package/sessions-cli/default/pre-key-612.json +1 -0
- package/sessions-cli/default/pre-key-613.json +1 -0
- package/sessions-cli/default/pre-key-614.json +1 -0
- package/sessions-cli/default/pre-key-615.json +1 -0
- package/sessions-cli/default/pre-key-616.json +1 -0
- package/sessions-cli/default/pre-key-617.json +1 -0
- package/sessions-cli/default/pre-key-618.json +1 -0
- package/sessions-cli/default/pre-key-619.json +1 -0
- package/sessions-cli/default/pre-key-62.json +1 -0
- package/sessions-cli/default/pre-key-620.json +1 -0
- package/sessions-cli/default/pre-key-621.json +1 -0
- package/sessions-cli/default/pre-key-622.json +1 -0
- package/sessions-cli/default/pre-key-623.json +1 -0
- package/sessions-cli/default/pre-key-624.json +1 -0
- package/sessions-cli/default/pre-key-625.json +1 -0
- package/sessions-cli/default/pre-key-626.json +1 -0
- package/sessions-cli/default/pre-key-627.json +1 -0
- package/sessions-cli/default/pre-key-628.json +1 -0
- package/sessions-cli/default/pre-key-629.json +1 -0
- package/sessions-cli/default/pre-key-63.json +1 -0
- package/sessions-cli/default/pre-key-630.json +1 -0
- package/sessions-cli/default/pre-key-631.json +1 -0
- package/sessions-cli/default/pre-key-632.json +1 -0
- package/sessions-cli/default/pre-key-633.json +1 -0
- package/sessions-cli/default/pre-key-634.json +1 -0
- package/sessions-cli/default/pre-key-635.json +1 -0
- package/sessions-cli/default/pre-key-636.json +1 -0
- package/sessions-cli/default/pre-key-637.json +1 -0
- package/sessions-cli/default/pre-key-638.json +1 -0
- package/sessions-cli/default/pre-key-639.json +1 -0
- package/sessions-cli/default/pre-key-64.json +1 -0
- package/sessions-cli/default/pre-key-640.json +1 -0
- package/sessions-cli/default/pre-key-641.json +1 -0
- package/sessions-cli/default/pre-key-642.json +1 -0
- package/sessions-cli/default/pre-key-643.json +1 -0
- package/sessions-cli/default/pre-key-644.json +1 -0
- package/sessions-cli/default/pre-key-645.json +1 -0
- package/sessions-cli/default/pre-key-646.json +1 -0
- package/sessions-cli/default/pre-key-647.json +1 -0
- package/sessions-cli/default/pre-key-648.json +1 -0
- package/sessions-cli/default/pre-key-649.json +1 -0
- package/sessions-cli/default/pre-key-65.json +1 -0
- package/sessions-cli/default/pre-key-650.json +1 -0
- package/sessions-cli/default/pre-key-651.json +1 -0
- package/sessions-cli/default/pre-key-652.json +1 -0
- package/sessions-cli/default/pre-key-653.json +1 -0
- package/sessions-cli/default/pre-key-654.json +1 -0
- package/sessions-cli/default/pre-key-655.json +1 -0
- package/sessions-cli/default/pre-key-656.json +1 -0
- package/sessions-cli/default/pre-key-657.json +1 -0
- package/sessions-cli/default/pre-key-658.json +1 -0
- package/sessions-cli/default/pre-key-659.json +1 -0
- package/sessions-cli/default/pre-key-66.json +1 -0
- package/sessions-cli/default/pre-key-660.json +1 -0
- package/sessions-cli/default/pre-key-661.json +1 -0
- package/sessions-cli/default/pre-key-662.json +1 -0
- package/sessions-cli/default/pre-key-663.json +1 -0
- package/sessions-cli/default/pre-key-664.json +1 -0
- package/sessions-cli/default/pre-key-665.json +1 -0
- package/sessions-cli/default/pre-key-666.json +1 -0
- package/sessions-cli/default/pre-key-667.json +1 -0
- package/sessions-cli/default/pre-key-668.json +1 -0
- package/sessions-cli/default/pre-key-669.json +1 -0
- package/sessions-cli/default/pre-key-67.json +1 -0
- package/sessions-cli/default/pre-key-670.json +1 -0
- package/sessions-cli/default/pre-key-671.json +1 -0
- package/sessions-cli/default/pre-key-672.json +1 -0
- package/sessions-cli/default/pre-key-673.json +1 -0
- package/sessions-cli/default/pre-key-674.json +1 -0
- package/sessions-cli/default/pre-key-675.json +1 -0
- package/sessions-cli/default/pre-key-676.json +1 -0
- package/sessions-cli/default/pre-key-677.json +1 -0
- package/sessions-cli/default/pre-key-678.json +1 -0
- package/sessions-cli/default/pre-key-679.json +1 -0
- package/sessions-cli/default/pre-key-68.json +1 -0
- package/sessions-cli/default/pre-key-680.json +1 -0
- package/sessions-cli/default/pre-key-681.json +1 -0
- package/sessions-cli/default/pre-key-682.json +1 -0
- package/sessions-cli/default/pre-key-683.json +1 -0
- package/sessions-cli/default/pre-key-684.json +1 -0
- package/sessions-cli/default/pre-key-685.json +1 -0
- package/sessions-cli/default/pre-key-686.json +1 -0
- package/sessions-cli/default/pre-key-687.json +1 -0
- package/sessions-cli/default/pre-key-688.json +1 -0
- package/sessions-cli/default/pre-key-689.json +1 -0
- package/sessions-cli/default/pre-key-69.json +1 -0
- package/sessions-cli/default/pre-key-690.json +1 -0
- package/sessions-cli/default/pre-key-691.json +1 -0
- package/sessions-cli/default/pre-key-692.json +1 -0
- package/sessions-cli/default/pre-key-693.json +1 -0
- package/sessions-cli/default/pre-key-694.json +1 -0
- package/sessions-cli/default/pre-key-695.json +1 -0
- package/sessions-cli/default/pre-key-696.json +1 -0
- package/sessions-cli/default/pre-key-697.json +1 -0
- package/sessions-cli/default/pre-key-698.json +1 -0
- package/sessions-cli/default/pre-key-699.json +1 -0
- package/sessions-cli/default/pre-key-7.json +1 -0
- package/sessions-cli/default/pre-key-70.json +1 -0
- package/sessions-cli/default/pre-key-700.json +1 -0
- package/sessions-cli/default/pre-key-701.json +1 -0
- package/sessions-cli/default/pre-key-702.json +1 -0
- package/sessions-cli/default/pre-key-703.json +1 -0
- package/sessions-cli/default/pre-key-704.json +1 -0
- package/sessions-cli/default/pre-key-705.json +1 -0
- package/sessions-cli/default/pre-key-706.json +1 -0
- package/sessions-cli/default/pre-key-707.json +1 -0
- package/sessions-cli/default/pre-key-708.json +1 -0
- package/sessions-cli/default/pre-key-709.json +1 -0
- package/sessions-cli/default/pre-key-71.json +1 -0
- package/sessions-cli/default/pre-key-710.json +1 -0
- package/sessions-cli/default/pre-key-711.json +1 -0
- package/sessions-cli/default/pre-key-712.json +1 -0
- package/sessions-cli/default/pre-key-713.json +1 -0
- package/sessions-cli/default/pre-key-714.json +1 -0
- package/sessions-cli/default/pre-key-715.json +1 -0
- package/sessions-cli/default/pre-key-716.json +1 -0
- package/sessions-cli/default/pre-key-717.json +1 -0
- package/sessions-cli/default/pre-key-718.json +1 -0
- package/sessions-cli/default/pre-key-719.json +1 -0
- package/sessions-cli/default/pre-key-72.json +1 -0
- package/sessions-cli/default/pre-key-720.json +1 -0
- package/sessions-cli/default/pre-key-721.json +1 -0
- package/sessions-cli/default/pre-key-722.json +1 -0
- package/sessions-cli/default/pre-key-723.json +1 -0
- package/sessions-cli/default/pre-key-724.json +1 -0
- package/sessions-cli/default/pre-key-725.json +1 -0
- package/sessions-cli/default/pre-key-726.json +1 -0
- package/sessions-cli/default/pre-key-727.json +1 -0
- package/sessions-cli/default/pre-key-728.json +1 -0
- package/sessions-cli/default/pre-key-729.json +1 -0
- package/sessions-cli/default/pre-key-73.json +1 -0
- package/sessions-cli/default/pre-key-730.json +1 -0
- package/sessions-cli/default/pre-key-731.json +1 -0
- package/sessions-cli/default/pre-key-732.json +1 -0
- package/sessions-cli/default/pre-key-733.json +1 -0
- package/sessions-cli/default/pre-key-734.json +1 -0
- package/sessions-cli/default/pre-key-735.json +1 -0
- package/sessions-cli/default/pre-key-736.json +1 -0
- package/sessions-cli/default/pre-key-737.json +1 -0
- package/sessions-cli/default/pre-key-738.json +1 -0
- package/sessions-cli/default/pre-key-739.json +1 -0
- package/sessions-cli/default/pre-key-74.json +1 -0
- package/sessions-cli/default/pre-key-740.json +1 -0
- package/sessions-cli/default/pre-key-741.json +1 -0
- package/sessions-cli/default/pre-key-742.json +1 -0
- package/sessions-cli/default/pre-key-743.json +1 -0
- package/sessions-cli/default/pre-key-744.json +1 -0
- package/sessions-cli/default/pre-key-745.json +1 -0
- package/sessions-cli/default/pre-key-746.json +1 -0
- package/sessions-cli/default/pre-key-747.json +1 -0
- package/sessions-cli/default/pre-key-748.json +1 -0
- package/sessions-cli/default/pre-key-749.json +1 -0
- package/sessions-cli/default/pre-key-75.json +1 -0
- package/sessions-cli/default/pre-key-750.json +1 -0
- package/sessions-cli/default/pre-key-751.json +1 -0
- package/sessions-cli/default/pre-key-752.json +1 -0
- package/sessions-cli/default/pre-key-753.json +1 -0
- package/sessions-cli/default/pre-key-754.json +1 -0
- package/sessions-cli/default/pre-key-755.json +1 -0
- package/sessions-cli/default/pre-key-756.json +1 -0
- package/sessions-cli/default/pre-key-757.json +1 -0
- package/sessions-cli/default/pre-key-758.json +1 -0
- package/sessions-cli/default/pre-key-759.json +1 -0
- package/sessions-cli/default/pre-key-76.json +1 -0
- package/sessions-cli/default/pre-key-760.json +1 -0
- package/sessions-cli/default/pre-key-761.json +1 -0
- package/sessions-cli/default/pre-key-762.json +1 -0
- package/sessions-cli/default/pre-key-763.json +1 -0
- package/sessions-cli/default/pre-key-764.json +1 -0
- package/sessions-cli/default/pre-key-765.json +1 -0
- package/sessions-cli/default/pre-key-766.json +1 -0
- package/sessions-cli/default/pre-key-767.json +1 -0
- package/sessions-cli/default/pre-key-768.json +1 -0
- package/sessions-cli/default/pre-key-769.json +1 -0
- package/sessions-cli/default/pre-key-77.json +1 -0
- package/sessions-cli/default/pre-key-770.json +1 -0
- package/sessions-cli/default/pre-key-771.json +1 -0
- package/sessions-cli/default/pre-key-772.json +1 -0
- package/sessions-cli/default/pre-key-773.json +1 -0
- package/sessions-cli/default/pre-key-774.json +1 -0
- package/sessions-cli/default/pre-key-775.json +1 -0
- package/sessions-cli/default/pre-key-776.json +1 -0
- package/sessions-cli/default/pre-key-777.json +1 -0
- package/sessions-cli/default/pre-key-778.json +1 -0
- package/sessions-cli/default/pre-key-779.json +1 -0
- package/sessions-cli/default/pre-key-78.json +1 -0
- package/sessions-cli/default/pre-key-780.json +1 -0
- package/sessions-cli/default/pre-key-781.json +1 -0
- package/sessions-cli/default/pre-key-782.json +1 -0
- package/sessions-cli/default/pre-key-783.json +1 -0
- package/sessions-cli/default/pre-key-784.json +1 -0
- package/sessions-cli/default/pre-key-785.json +1 -0
- package/sessions-cli/default/pre-key-786.json +1 -0
- package/sessions-cli/default/pre-key-787.json +1 -0
- package/sessions-cli/default/pre-key-788.json +1 -0
- package/sessions-cli/default/pre-key-789.json +1 -0
- package/sessions-cli/default/pre-key-79.json +1 -0
- package/sessions-cli/default/pre-key-790.json +1 -0
- package/sessions-cli/default/pre-key-791.json +1 -0
- package/sessions-cli/default/pre-key-792.json +1 -0
- package/sessions-cli/default/pre-key-793.json +1 -0
- package/sessions-cli/default/pre-key-794.json +1 -0
- package/sessions-cli/default/pre-key-795.json +1 -0
- package/sessions-cli/default/pre-key-796.json +1 -0
- package/sessions-cli/default/pre-key-797.json +1 -0
- package/sessions-cli/default/pre-key-798.json +1 -0
- package/sessions-cli/default/pre-key-799.json +1 -0
- package/sessions-cli/default/pre-key-8.json +1 -0
- package/sessions-cli/default/pre-key-80.json +1 -0
- package/sessions-cli/default/pre-key-800.json +1 -0
- package/sessions-cli/default/pre-key-801.json +1 -0
- package/sessions-cli/default/pre-key-802.json +1 -0
- package/sessions-cli/default/pre-key-803.json +1 -0
- package/sessions-cli/default/pre-key-804.json +1 -0
- package/sessions-cli/default/pre-key-805.json +1 -0
- package/sessions-cli/default/pre-key-806.json +1 -0
- package/sessions-cli/default/pre-key-807.json +1 -0
- package/sessions-cli/default/pre-key-808.json +1 -0
- package/sessions-cli/default/pre-key-809.json +1 -0
- package/sessions-cli/default/pre-key-81.json +1 -0
- package/sessions-cli/default/pre-key-810.json +1 -0
- package/sessions-cli/default/pre-key-811.json +1 -0
- package/sessions-cli/default/pre-key-812.json +1 -0
- package/sessions-cli/default/pre-key-82.json +1 -0
- package/sessions-cli/default/pre-key-83.json +1 -0
- package/sessions-cli/default/pre-key-84.json +1 -0
- package/sessions-cli/default/pre-key-85.json +1 -0
- package/sessions-cli/default/pre-key-86.json +1 -0
- package/sessions-cli/default/pre-key-87.json +1 -0
- package/sessions-cli/default/pre-key-88.json +1 -0
- package/sessions-cli/default/pre-key-89.json +1 -0
- package/sessions-cli/default/pre-key-9.json +1 -0
- package/sessions-cli/default/pre-key-90.json +1 -0
- package/sessions-cli/default/pre-key-91.json +1 -0
- package/sessions-cli/default/pre-key-92.json +1 -0
- package/sessions-cli/default/pre-key-93.json +1 -0
- package/sessions-cli/default/pre-key-94.json +1 -0
- package/sessions-cli/default/pre-key-95.json +1 -0
- package/sessions-cli/default/pre-key-96.json +1 -0
- package/sessions-cli/default/pre-key-97.json +1 -0
- package/sessions-cli/default/pre-key-98.json +1 -0
- package/sessions-cli/default/pre-key-99.json +1 -0
- package/sessions-cli/default/session-103732167577712_1.0.json +1 -0
- package/sessions-cli/default/session-123235563786303_1.0.json +1 -0
- package/sessions-cli/default/session-181312044433566_1.0.json +1 -0
- package/sessions-cli/default/session-42877077966917_1.0.json +1 -0
- package/sessions-cli/default/session-62324404687100_1.0.json +1 -0
- package/sessions-cli/default/tctoken-6281295802674@s.whatsapp.net.json +1 -0
- package/test-autocomplete.ts +66 -0
- package/test-sessions-manual/manual-test-bot/app-state-sync-key-AAAAABGP.json +1 -0
- package/test-sessions-manual/manual-test-bot/app-state-sync-version-critical_block.json +1 -0
- package/test-sessions-manual/manual-test-bot/app-state-sync-version-critical_unblock_low.json +1 -0
- package/test-sessions-manual/manual-test-bot/app-state-sync-version-regular.json +1 -0
- package/test-sessions-manual/manual-test-bot/app-state-sync-version-regular_high.json +1 -0
- package/test-sessions-manual/manual-test-bot/app-state-sync-version-regular_low.json +1 -0
- package/test-sessions-manual/manual-test-bot/creds.json +1 -0
- package/test-sessions-manual/manual-test-bot/device-list-6285792059652.json +1 -0
- package/test-sessions-manual/manual-test-bot/lid-mapping-177919053803568_reverse.json +1 -0
- package/test-sessions-manual/manual-test-bot/lid-mapping-6285792059652.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-1.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-10.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-100.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-101.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-102.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-103.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-104.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-105.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-106.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-107.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-108.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-109.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-11.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-110.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-111.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-112.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-113.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-114.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-115.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-116.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-117.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-118.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-119.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-12.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-120.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-121.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-122.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-123.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-124.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-125.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-126.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-127.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-128.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-129.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-13.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-130.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-131.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-132.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-133.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-134.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-135.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-136.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-137.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-138.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-139.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-14.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-140.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-141.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-142.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-143.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-144.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-145.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-146.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-147.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-148.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-149.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-15.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-150.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-151.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-152.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-153.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-154.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-155.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-156.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-157.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-158.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-159.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-16.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-160.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-161.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-162.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-163.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-164.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-165.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-166.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-167.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-168.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-169.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-17.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-170.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-171.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-172.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-173.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-174.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-175.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-176.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-177.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-178.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-179.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-18.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-180.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-181.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-182.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-183.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-184.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-185.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-186.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-187.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-188.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-189.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-19.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-190.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-191.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-192.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-193.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-194.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-195.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-196.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-197.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-198.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-199.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-2.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-20.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-200.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-201.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-202.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-203.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-204.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-205.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-206.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-207.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-208.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-209.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-21.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-210.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-211.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-212.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-213.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-214.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-215.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-216.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-217.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-218.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-219.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-22.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-220.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-221.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-222.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-223.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-224.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-225.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-226.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-227.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-228.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-229.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-23.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-230.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-231.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-232.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-233.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-234.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-235.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-236.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-237.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-238.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-239.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-24.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-240.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-241.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-242.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-243.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-244.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-245.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-246.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-247.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-248.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-249.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-25.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-250.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-251.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-252.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-253.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-254.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-255.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-256.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-257.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-258.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-259.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-26.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-260.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-261.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-262.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-263.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-264.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-265.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-266.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-267.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-268.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-269.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-27.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-270.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-271.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-272.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-273.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-274.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-275.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-276.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-277.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-278.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-279.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-28.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-280.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-281.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-282.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-283.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-284.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-285.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-286.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-287.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-288.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-289.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-29.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-290.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-291.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-292.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-293.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-294.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-295.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-296.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-297.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-298.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-299.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-3.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-30.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-300.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-301.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-302.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-303.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-304.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-305.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-306.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-307.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-308.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-309.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-31.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-310.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-311.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-312.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-313.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-314.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-315.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-316.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-317.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-318.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-319.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-32.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-320.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-321.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-322.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-323.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-324.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-325.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-326.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-327.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-328.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-329.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-33.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-330.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-331.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-332.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-333.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-334.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-335.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-336.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-337.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-338.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-339.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-34.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-340.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-341.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-342.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-343.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-344.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-345.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-346.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-347.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-348.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-349.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-35.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-350.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-351.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-352.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-353.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-354.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-355.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-356.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-357.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-358.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-359.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-36.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-360.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-361.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-362.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-363.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-364.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-365.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-366.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-367.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-368.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-369.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-37.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-370.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-371.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-372.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-373.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-374.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-375.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-376.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-377.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-378.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-379.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-38.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-380.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-381.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-382.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-383.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-384.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-385.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-386.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-387.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-388.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-389.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-39.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-390.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-391.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-392.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-393.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-394.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-395.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-396.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-397.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-398.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-399.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-4.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-40.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-400.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-401.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-402.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-403.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-404.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-405.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-406.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-407.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-408.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-409.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-41.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-410.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-411.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-412.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-413.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-414.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-415.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-416.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-417.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-418.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-419.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-42.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-420.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-421.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-422.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-423.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-424.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-425.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-426.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-427.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-428.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-429.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-43.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-430.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-431.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-432.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-433.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-434.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-435.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-436.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-437.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-438.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-439.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-44.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-440.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-441.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-442.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-443.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-444.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-445.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-446.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-447.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-448.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-449.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-45.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-450.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-451.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-452.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-453.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-454.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-455.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-456.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-457.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-458.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-459.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-46.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-460.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-461.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-462.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-463.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-464.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-465.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-466.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-467.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-468.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-469.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-47.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-470.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-471.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-472.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-473.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-474.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-475.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-476.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-477.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-478.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-479.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-48.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-480.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-481.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-482.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-483.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-484.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-485.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-486.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-487.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-488.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-489.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-49.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-490.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-491.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-492.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-493.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-494.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-495.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-496.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-497.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-498.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-499.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-5.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-50.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-500.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-501.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-502.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-503.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-504.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-505.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-506.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-507.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-508.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-509.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-51.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-510.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-511.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-512.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-513.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-514.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-515.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-516.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-517.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-518.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-519.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-52.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-520.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-521.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-522.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-523.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-524.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-525.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-526.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-527.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-528.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-529.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-53.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-530.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-531.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-532.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-533.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-534.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-535.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-536.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-537.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-538.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-539.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-54.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-540.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-541.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-542.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-543.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-544.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-545.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-546.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-547.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-548.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-549.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-55.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-550.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-551.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-552.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-553.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-554.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-555.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-556.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-557.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-558.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-559.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-56.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-560.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-561.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-562.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-563.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-564.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-565.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-566.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-567.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-568.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-569.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-57.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-570.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-571.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-572.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-573.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-574.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-575.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-576.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-577.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-578.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-579.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-58.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-580.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-581.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-582.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-583.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-584.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-585.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-586.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-587.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-588.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-589.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-59.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-590.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-591.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-592.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-593.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-594.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-595.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-596.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-597.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-598.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-599.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-6.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-60.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-600.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-601.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-602.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-603.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-604.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-605.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-606.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-607.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-608.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-609.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-61.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-610.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-611.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-612.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-613.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-614.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-615.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-616.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-617.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-618.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-619.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-62.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-620.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-621.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-622.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-623.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-624.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-625.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-626.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-627.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-628.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-629.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-63.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-630.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-631.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-632.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-633.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-634.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-635.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-636.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-637.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-638.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-639.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-64.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-640.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-641.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-642.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-643.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-644.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-645.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-646.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-647.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-648.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-649.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-65.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-650.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-651.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-652.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-653.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-654.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-655.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-656.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-657.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-658.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-659.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-66.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-660.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-661.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-662.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-663.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-664.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-665.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-666.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-667.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-668.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-669.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-67.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-670.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-671.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-672.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-673.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-674.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-675.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-676.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-677.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-678.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-679.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-68.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-680.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-681.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-682.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-683.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-684.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-685.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-686.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-687.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-688.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-689.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-69.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-690.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-691.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-692.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-693.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-694.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-695.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-696.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-697.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-698.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-699.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-7.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-70.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-700.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-701.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-702.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-703.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-704.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-705.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-706.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-707.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-708.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-709.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-71.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-710.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-711.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-712.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-713.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-714.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-715.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-716.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-717.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-718.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-719.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-72.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-720.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-721.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-722.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-723.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-724.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-725.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-726.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-727.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-728.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-729.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-73.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-730.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-731.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-732.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-733.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-734.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-735.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-736.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-737.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-738.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-739.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-74.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-740.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-741.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-742.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-743.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-744.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-745.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-746.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-747.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-748.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-749.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-75.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-750.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-751.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-752.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-753.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-754.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-755.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-756.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-757.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-758.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-759.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-76.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-760.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-761.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-762.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-763.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-764.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-765.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-766.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-767.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-768.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-769.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-77.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-770.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-771.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-772.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-773.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-774.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-775.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-776.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-777.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-778.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-779.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-78.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-780.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-781.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-782.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-783.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-784.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-785.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-786.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-787.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-788.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-789.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-79.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-790.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-791.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-792.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-793.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-794.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-795.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-796.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-797.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-798.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-799.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-8.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-80.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-800.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-801.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-802.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-803.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-804.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-805.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-806.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-807.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-808.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-809.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-81.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-810.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-811.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-812.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-82.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-83.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-84.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-85.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-86.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-87.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-88.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-89.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-9.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-90.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-91.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-92.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-93.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-94.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-95.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-96.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-97.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-98.json +1 -0
- package/test-sessions-manual/manual-test-bot/pre-key-99.json +1 -0
- package/test-sessions-manual/manual-test-bot/session-177919053803568_1.0.json +1 -0
|
@@ -0,0 +1,1442 @@
|
|
|
1
|
+
# Proxy Support Implementation Plan for Miaw Core
|
|
2
|
+
|
|
3
|
+
## Executive Summary
|
|
4
|
+
|
|
5
|
+
This document outlines the research findings and implementation plan for adding proxy support to Miaw Core, enabling each WhatsApp instance to connect through a dedicated proxy. This feature is essential for:
|
|
6
|
+
|
|
7
|
+
- **IP Rotation**: Avoiding rate limits and blocks
|
|
8
|
+
- **Geographic Distribution**: Connecting from different regions
|
|
9
|
+
- **Privacy/Security**: Masking server IP addresses
|
|
10
|
+
- **Multi-instance Scaling**: Running multiple instances without IP conflicts
|
|
11
|
+
|
|
12
|
+
## Research Findings
|
|
13
|
+
|
|
14
|
+
### Baileys Native Proxy Support
|
|
15
|
+
|
|
16
|
+
**Good news!** Baileys natively supports proxy configuration through two key options in `SocketConfig`:
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
// From Baileys src/Types/Socket.ts
|
|
20
|
+
export type SocketConfig = {
|
|
21
|
+
// ...
|
|
22
|
+
/** proxy agent */
|
|
23
|
+
agent?: Agent; // For WebSocket connections
|
|
24
|
+
/** agent used for fetch requests -- uploading/downloading media */
|
|
25
|
+
fetchAgent?: Agent; // For HTTP requests (media upload/download)
|
|
26
|
+
// ...
|
|
27
|
+
};
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### How Proxies Work in Baileys
|
|
31
|
+
|
|
32
|
+
1. **WebSocket Connection** (`agent`):
|
|
33
|
+
|
|
34
|
+
- Used in `src/Socket/Client/websocket.ts`
|
|
35
|
+
- Passed to the `ws` (WebSocket) library constructor
|
|
36
|
+
- Handles the main WhatsApp WebSocket connection
|
|
37
|
+
|
|
38
|
+
2. **HTTP Requests** (`fetchAgent`):
|
|
39
|
+
- Used in `src/Utils/messages-media.ts`
|
|
40
|
+
- Handles media upload/download operations
|
|
41
|
+
- Used for fetching WhatsApp version info
|
|
42
|
+
|
|
43
|
+
### WebSocket Client Implementation (Baileys)
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
// From src/Socket/Client/websocket.ts
|
|
47
|
+
connect() {
|
|
48
|
+
this.socket = new WebSocket(this.url, {
|
|
49
|
+
origin: DEFAULT_ORIGIN,
|
|
50
|
+
headers: this.config.options?.headers as {},
|
|
51
|
+
handshakeTimeout: this.config.connectTimeoutMs,
|
|
52
|
+
timeout: this.config.connectTimeoutMs,
|
|
53
|
+
agent: this.config.agent // <-- Proxy agent passed here
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Proxy Libraries Comparison
|
|
59
|
+
|
|
60
|
+
### 1. `https-proxy-agent` / `http-proxy-agent`
|
|
61
|
+
|
|
62
|
+
**Best for HTTP/HTTPS proxies**
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npm install https-proxy-agent http-proxy-agent
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
import { HttpsProxyAgent } from "https-proxy-agent";
|
|
70
|
+
import { HttpProxyAgent } from "http-proxy-agent";
|
|
71
|
+
|
|
72
|
+
const httpsAgent = new HttpsProxyAgent("http://proxy.example.com:8080");
|
|
73
|
+
const httpAgent = new HttpProxyAgent("http://proxy.example.com:8080");
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 2. `socks-proxy-agent`
|
|
77
|
+
|
|
78
|
+
**Best for SOCKS4/SOCKS5 proxies**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npm install socks-proxy-agent
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
import { SocksProxyAgent } from "socks-proxy-agent";
|
|
86
|
+
|
|
87
|
+
// SOCKS5
|
|
88
|
+
const agent = new SocksProxyAgent("socks5://user:pass@proxy.example.com:1080");
|
|
89
|
+
|
|
90
|
+
// SOCKS4
|
|
91
|
+
const agent = new SocksProxyAgent("socks4://proxy.example.com:1080");
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 3. `proxy-agent` (Universal)
|
|
95
|
+
|
|
96
|
+
**Automatically detects proxy type from URL**
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm install proxy-agent
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
import { ProxyAgent } from "proxy-agent";
|
|
104
|
+
|
|
105
|
+
// Works with HTTP, HTTPS, SOCKS4, SOCKS5
|
|
106
|
+
const agent = new ProxyAgent("socks5://proxy.example.com:1080");
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Recommendation: `proxy-agent`
|
|
110
|
+
|
|
111
|
+
- Unified API for all proxy types
|
|
112
|
+
- Automatic protocol detection
|
|
113
|
+
- Active maintenance
|
|
114
|
+
- Works seamlessly with `ws` library
|
|
115
|
+
|
|
116
|
+
## Implementation Plan
|
|
117
|
+
|
|
118
|
+
### Phase 1: Type Definitions
|
|
119
|
+
|
|
120
|
+
Add proxy configuration types to `src/types/index.ts`:
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
import type { Agent } from "node:https";
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Proxy configuration for WhatsApp connections
|
|
127
|
+
*/
|
|
128
|
+
export interface ProxyConfig {
|
|
129
|
+
/**
|
|
130
|
+
* Proxy URL (supports HTTP, HTTPS, SOCKS4, SOCKS5)
|
|
131
|
+
* Examples:
|
|
132
|
+
* - http://proxy.example.com:8080
|
|
133
|
+
* - https://proxy.example.com:8080
|
|
134
|
+
* - socks4://proxy.example.com:1080
|
|
135
|
+
* - socks5://user:pass@proxy.example.com:1080
|
|
136
|
+
*/
|
|
137
|
+
url: string;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Optional: Username for proxy authentication
|
|
141
|
+
* (Can also be included in URL)
|
|
142
|
+
*/
|
|
143
|
+
username?: string;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Optional: Password for proxy authentication
|
|
147
|
+
* (Can also be included in URL)
|
|
148
|
+
*/
|
|
149
|
+
password?: string;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Update MiawClientOptions
|
|
153
|
+
export interface MiawClientOptions {
|
|
154
|
+
// ... existing options ...
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Proxy configuration for this instance
|
|
158
|
+
* Each instance can have its own proxy for IP rotation
|
|
159
|
+
*/
|
|
160
|
+
proxy?: ProxyConfig | string; // string = proxy URL directly
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Custom agent for WebSocket connections
|
|
164
|
+
* Alternative to proxy config for advanced use cases
|
|
165
|
+
*/
|
|
166
|
+
agent?: Agent;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Custom agent for HTTP fetch requests (media upload/download)
|
|
170
|
+
* Alternative to proxy config for advanced use cases
|
|
171
|
+
*/
|
|
172
|
+
fetchAgent?: Agent;
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Phase 2: Proxy Agent Factory
|
|
177
|
+
|
|
178
|
+
Create `src/utils/proxy-agent.ts`:
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
import type { Agent } from "node:https";
|
|
182
|
+
import type { ProxyConfig } from "../types/index.js";
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Creates a proxy agent from configuration
|
|
186
|
+
* Supports HTTP, HTTPS, SOCKS4, SOCKS5 proxies
|
|
187
|
+
*/
|
|
188
|
+
export async function createProxyAgent(
|
|
189
|
+
config: ProxyConfig | string
|
|
190
|
+
): Promise<Agent> {
|
|
191
|
+
const { ProxyAgent } = await import("proxy-agent");
|
|
192
|
+
|
|
193
|
+
let proxyUrl: string;
|
|
194
|
+
|
|
195
|
+
if (typeof config === "string") {
|
|
196
|
+
proxyUrl = config;
|
|
197
|
+
} else {
|
|
198
|
+
const url = new URL(config.url);
|
|
199
|
+
|
|
200
|
+
// Add auth if provided separately
|
|
201
|
+
if (config.username) {
|
|
202
|
+
url.username = config.username;
|
|
203
|
+
}
|
|
204
|
+
if (config.password) {
|
|
205
|
+
url.password = config.password;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
proxyUrl = url.toString();
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return new ProxyAgent(proxyUrl);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Validates a proxy configuration
|
|
216
|
+
*/
|
|
217
|
+
export function validateProxyConfig(config: ProxyConfig | string): boolean {
|
|
218
|
+
try {
|
|
219
|
+
const url = typeof config === "string" ? config : config.url;
|
|
220
|
+
const parsed = new URL(url);
|
|
221
|
+
|
|
222
|
+
const supportedProtocols = [
|
|
223
|
+
"http:",
|
|
224
|
+
"https:",
|
|
225
|
+
"socks4:",
|
|
226
|
+
"socks5:",
|
|
227
|
+
"socks:",
|
|
228
|
+
];
|
|
229
|
+
return supportedProtocols.includes(parsed.protocol);
|
|
230
|
+
} catch {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Phase 3: MiawClient Integration
|
|
237
|
+
|
|
238
|
+
Update `src/client/MiawClient.ts`:
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
import { createProxyAgent, validateProxyConfig } from "../utils/proxy-agent.js";
|
|
242
|
+
import type { Agent } from "node:https";
|
|
243
|
+
|
|
244
|
+
export class MiawClient extends EventEmitter {
|
|
245
|
+
private proxyAgent: Agent | null = null;
|
|
246
|
+
|
|
247
|
+
constructor(options: MiawClientOptions) {
|
|
248
|
+
super();
|
|
249
|
+
|
|
250
|
+
// Store proxy config for lazy initialization
|
|
251
|
+
this.options = {
|
|
252
|
+
// ... existing defaults ...
|
|
253
|
+
proxy: options.proxy,
|
|
254
|
+
agent: options.agent,
|
|
255
|
+
fetchAgent: options.fetchAgent,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
async connect(): Promise<void> {
|
|
260
|
+
// ... existing connection guards ...
|
|
261
|
+
|
|
262
|
+
try {
|
|
263
|
+
this.updateConnectionState("connecting");
|
|
264
|
+
|
|
265
|
+
// Initialize proxy agent if configured
|
|
266
|
+
const agent = await this.resolveProxyAgent();
|
|
267
|
+
|
|
268
|
+
// ... existing auth state loading ...
|
|
269
|
+
|
|
270
|
+
// Create socket with proxy support
|
|
271
|
+
this.socket = makeWASocket({
|
|
272
|
+
version,
|
|
273
|
+
logger: this.logger,
|
|
274
|
+
printQRInTerminal: false,
|
|
275
|
+
auth: {
|
|
276
|
+
creds: state.creds,
|
|
277
|
+
keys: makeCacheableSignalKeyStore(state.keys, this.logger),
|
|
278
|
+
},
|
|
279
|
+
browser: Browsers.macOS("Desktop"),
|
|
280
|
+
generateHighQualityLinkPreview: true,
|
|
281
|
+
syncFullHistory: true,
|
|
282
|
+
fireInitQueries: true,
|
|
283
|
+
|
|
284
|
+
// Proxy configuration
|
|
285
|
+
agent: agent, // For WebSocket
|
|
286
|
+
fetchAgent: agent, // For media HTTP requests
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
// ... rest of connection logic ...
|
|
290
|
+
} catch (error) {
|
|
291
|
+
// ... error handling ...
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Resolves the proxy agent from configuration
|
|
297
|
+
*/
|
|
298
|
+
private async resolveProxyAgent(): Promise<Agent | undefined> {
|
|
299
|
+
// Direct agent takes priority
|
|
300
|
+
if (this.options.agent) {
|
|
301
|
+
return this.options.agent;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Create agent from proxy config
|
|
305
|
+
if (this.options.proxy) {
|
|
306
|
+
if (!validateProxyConfig(this.options.proxy)) {
|
|
307
|
+
throw new Error("Invalid proxy configuration");
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
this.proxyAgent = await createProxyAgent(this.options.proxy);
|
|
311
|
+
this.logger.info("Proxy agent initialized");
|
|
312
|
+
return this.proxyAgent;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
return undefined;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Get current proxy information
|
|
320
|
+
*/
|
|
321
|
+
getProxyInfo(): { url: string } | null {
|
|
322
|
+
if (typeof this.options.proxy === "string") {
|
|
323
|
+
return { url: this.options.proxy };
|
|
324
|
+
}
|
|
325
|
+
if (this.options.proxy?.url) {
|
|
326
|
+
return { url: this.options.proxy.url };
|
|
327
|
+
}
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Phase 4: Proxy List File Loader
|
|
334
|
+
|
|
335
|
+
**Why File-Based Configuration?**
|
|
336
|
+
|
|
337
|
+
For proxy rotation, **file-based configuration is the recommended approach** over environment variables because:
|
|
338
|
+
|
|
339
|
+
- Proxy lists can contain hundreds of entries (env vars have size limits)
|
|
340
|
+
- Files are easier to update without restarting the application
|
|
341
|
+
- Standard format used by industry tools (HAProxy, Nginx, etc.)
|
|
342
|
+
- Can be managed by external tools or scripts
|
|
343
|
+
- Supports comments and documentation inline
|
|
344
|
+
|
|
345
|
+
Create `src/utils/proxy-loader.ts`:
|
|
346
|
+
|
|
347
|
+
```typescript
|
|
348
|
+
import { promises as fs } from "node:fs";
|
|
349
|
+
import { resolve } from "node:path";
|
|
350
|
+
import type { ProxyConfig } from "../types/index.js";
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Supported proxy list file formats
|
|
354
|
+
*/
|
|
355
|
+
export type ProxyFileFormat = "txt" | "json";
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Proxy list file configuration
|
|
359
|
+
*/
|
|
360
|
+
export interface ProxyListConfig {
|
|
361
|
+
/**
|
|
362
|
+
* Path to the proxy list file
|
|
363
|
+
* Can be absolute or relative to cwd
|
|
364
|
+
*/
|
|
365
|
+
filePath: string;
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* File format (auto-detected from extension if not specified)
|
|
369
|
+
* - txt: One proxy URL per line (supports # comments)
|
|
370
|
+
* - json: Array of proxy URLs or ProxyConfig objects
|
|
371
|
+
*/
|
|
372
|
+
format?: ProxyFileFormat;
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Watch file for changes and auto-reload
|
|
376
|
+
* @default false
|
|
377
|
+
*/
|
|
378
|
+
watchForChanges?: boolean;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Loads proxy list from a file
|
|
383
|
+
*
|
|
384
|
+
* Supported formats:
|
|
385
|
+
* - .txt: One proxy URL per line, # for comments
|
|
386
|
+
* - .json: Array of strings or ProxyConfig objects
|
|
387
|
+
*
|
|
388
|
+
* @example
|
|
389
|
+
* // proxies.txt
|
|
390
|
+
* # US Proxies
|
|
391
|
+
* socks5://proxy1.us.example.com:1080
|
|
392
|
+
* socks5://proxy2.us.example.com:1080
|
|
393
|
+
*
|
|
394
|
+
* # EU Proxies
|
|
395
|
+
* socks5://proxy1.eu.example.com:1080
|
|
396
|
+
*/
|
|
397
|
+
export async function loadProxyListFromFile(
|
|
398
|
+
config: ProxyListConfig | string
|
|
399
|
+
): Promise<(ProxyConfig | string)[]> {
|
|
400
|
+
const filePath = typeof config === "string" ? config : config.filePath;
|
|
401
|
+
const absolutePath = resolve(process.cwd(), filePath);
|
|
402
|
+
|
|
403
|
+
// Check if file exists
|
|
404
|
+
try {
|
|
405
|
+
await fs.access(absolutePath);
|
|
406
|
+
} catch {
|
|
407
|
+
throw new Error(`Proxy list file not found: ${absolutePath}`);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
const content = await fs.readFile(absolutePath, "utf-8");
|
|
411
|
+
const format = detectFormat(
|
|
412
|
+
filePath,
|
|
413
|
+
typeof config === "string" ? undefined : config.format
|
|
414
|
+
);
|
|
415
|
+
|
|
416
|
+
switch (format) {
|
|
417
|
+
case "txt":
|
|
418
|
+
return parseTxtFormat(content);
|
|
419
|
+
case "json":
|
|
420
|
+
return parseJsonFormat(content);
|
|
421
|
+
default:
|
|
422
|
+
throw new Error(`Unsupported proxy file format: ${format}`);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Detect file format from extension or explicit config
|
|
428
|
+
*/
|
|
429
|
+
function detectFormat(
|
|
430
|
+
filePath: string,
|
|
431
|
+
explicitFormat?: ProxyFileFormat
|
|
432
|
+
): ProxyFileFormat {
|
|
433
|
+
if (explicitFormat) return explicitFormat;
|
|
434
|
+
|
|
435
|
+
const ext = filePath.toLowerCase().split(".").pop();
|
|
436
|
+
switch (ext) {
|
|
437
|
+
case "txt":
|
|
438
|
+
case "list":
|
|
439
|
+
case "proxies":
|
|
440
|
+
return "txt";
|
|
441
|
+
case "json":
|
|
442
|
+
return "json";
|
|
443
|
+
default:
|
|
444
|
+
// Default to txt for unknown extensions
|
|
445
|
+
return "txt";
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Parse TXT format: one proxy per line, # for comments
|
|
451
|
+
*/
|
|
452
|
+
function parseTxtFormat(content: string): string[] {
|
|
453
|
+
return content
|
|
454
|
+
.split("\n")
|
|
455
|
+
.map((line) => line.trim())
|
|
456
|
+
.filter((line) => line.length > 0 && !line.startsWith("#"));
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Parse JSON format: array of strings or ProxyConfig objects
|
|
461
|
+
*/
|
|
462
|
+
function parseJsonFormat(content: string): (ProxyConfig | string)[] {
|
|
463
|
+
try {
|
|
464
|
+
const data = JSON.parse(content);
|
|
465
|
+
|
|
466
|
+
if (!Array.isArray(data)) {
|
|
467
|
+
throw new Error("JSON proxy file must contain an array");
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
return data.map((item) => {
|
|
471
|
+
if (typeof item === "string") {
|
|
472
|
+
return item;
|
|
473
|
+
}
|
|
474
|
+
if (typeof item === "object" && item.url) {
|
|
475
|
+
return item as ProxyConfig;
|
|
476
|
+
}
|
|
477
|
+
throw new Error(`Invalid proxy entry: ${JSON.stringify(item)}`);
|
|
478
|
+
});
|
|
479
|
+
} catch (error) {
|
|
480
|
+
if (error instanceof SyntaxError) {
|
|
481
|
+
throw new Error(`Invalid JSON in proxy file: ${error.message}`);
|
|
482
|
+
}
|
|
483
|
+
throw error;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Watch proxy file for changes and reload
|
|
489
|
+
* Returns a function to stop watching
|
|
490
|
+
*/
|
|
491
|
+
export function watchProxyFile(
|
|
492
|
+
filePath: string,
|
|
493
|
+
onReload: (proxies: (ProxyConfig | string)[]) => void,
|
|
494
|
+
onError?: (error: Error) => void
|
|
495
|
+
): () => void {
|
|
496
|
+
const absolutePath = resolve(process.cwd(), filePath);
|
|
497
|
+
let debounceTimer: NodeJS.Timeout | null = null;
|
|
498
|
+
|
|
499
|
+
const watcher = fs.watch(absolutePath).then(async (w) => {
|
|
500
|
+
for await (const event of w) {
|
|
501
|
+
if (event.eventType === "change") {
|
|
502
|
+
// Debounce to avoid multiple reloads
|
|
503
|
+
if (debounceTimer) clearTimeout(debounceTimer);
|
|
504
|
+
debounceTimer = setTimeout(async () => {
|
|
505
|
+
try {
|
|
506
|
+
const proxies = await loadProxyListFromFile(filePath);
|
|
507
|
+
onReload(proxies);
|
|
508
|
+
} catch (error) {
|
|
509
|
+
onError?.(error as Error);
|
|
510
|
+
}
|
|
511
|
+
}, 100);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
});
|
|
515
|
+
|
|
516
|
+
// Return cleanup function
|
|
517
|
+
return () => {
|
|
518
|
+
watcher.then((w) => w?.close?.());
|
|
519
|
+
if (debounceTimer) clearTimeout(debounceTimer);
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Validates all proxies in a list
|
|
525
|
+
*/
|
|
526
|
+
export async function validateProxyList(
|
|
527
|
+
proxies: (ProxyConfig | string)[]
|
|
528
|
+
): Promise<{ valid: string[]; invalid: string[] }> {
|
|
529
|
+
const { validateProxyConfig } = await import("./proxy-agent.js");
|
|
530
|
+
|
|
531
|
+
const valid: string[] = [];
|
|
532
|
+
const invalid: string[] = [];
|
|
533
|
+
|
|
534
|
+
for (const proxy of proxies) {
|
|
535
|
+
const url = typeof proxy === "string" ? proxy : proxy.url;
|
|
536
|
+
if (validateProxyConfig(proxy)) {
|
|
537
|
+
valid.push(url);
|
|
538
|
+
} else {
|
|
539
|
+
invalid.push(url);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
return { valid, invalid };
|
|
544
|
+
}
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
**Example Proxy List Files:**
|
|
548
|
+
|
|
549
|
+
`proxies.txt`:
|
|
550
|
+
|
|
551
|
+
```txt
|
|
552
|
+
# US Region Proxies
|
|
553
|
+
socks5://user:pass@us-proxy1.example.com:1080
|
|
554
|
+
socks5://user:pass@us-proxy2.example.com:1080
|
|
555
|
+
|
|
556
|
+
# EU Region Proxies
|
|
557
|
+
socks5://user:pass@eu-proxy1.example.com:1080
|
|
558
|
+
socks5://user:pass@eu-proxy2.example.com:1080
|
|
559
|
+
|
|
560
|
+
# Asia Region Proxies
|
|
561
|
+
http://asia-proxy1.example.com:8080
|
|
562
|
+
http://asia-proxy2.example.com:8080
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
`proxies.json`:
|
|
566
|
+
|
|
567
|
+
```json
|
|
568
|
+
[
|
|
569
|
+
"socks5://proxy1.example.com:1080",
|
|
570
|
+
"socks5://proxy2.example.com:1080",
|
|
571
|
+
{
|
|
572
|
+
"url": "http://proxy3.example.com:8080",
|
|
573
|
+
"username": "user",
|
|
574
|
+
"password": "pass"
|
|
575
|
+
}
|
|
576
|
+
]
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
### Phase 5: Proxy Rotation Support
|
|
580
|
+
|
|
581
|
+
Create `src/utils/proxy-rotation.ts`:
|
|
582
|
+
|
|
583
|
+
```typescript
|
|
584
|
+
import type { Agent } from "node:https";
|
|
585
|
+
import type { ProxyConfig } from "../types/index.js";
|
|
586
|
+
import { createProxyAgent } from "./proxy-agent.js";
|
|
587
|
+
import {
|
|
588
|
+
loadProxyListFromFile,
|
|
589
|
+
watchProxyFile,
|
|
590
|
+
type ProxyListConfig,
|
|
591
|
+
} from "./proxy-loader.js";
|
|
592
|
+
|
|
593
|
+
export type ProxyRotationStrategy = "round-robin" | "random" | "weighted";
|
|
594
|
+
|
|
595
|
+
export interface ProxyPool {
|
|
596
|
+
proxies: (ProxyConfig | string)[];
|
|
597
|
+
strategy: ProxyRotationStrategy;
|
|
598
|
+
weights?: number[]; // For weighted strategy
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* Proxy pool manager for rotating proxies across instances
|
|
603
|
+
*/
|
|
604
|
+
export class ProxyRotator {
|
|
605
|
+
private proxies: (ProxyConfig | string)[];
|
|
606
|
+
private strategy: ProxyRotationStrategy;
|
|
607
|
+
private weights: number[];
|
|
608
|
+
private currentIndex: number = 0;
|
|
609
|
+
private agentCache: Map<string, Agent> = new Map();
|
|
610
|
+
|
|
611
|
+
constructor(pool: ProxyPool) {
|
|
612
|
+
this.proxies = pool.proxies;
|
|
613
|
+
this.strategy = pool.strategy;
|
|
614
|
+
this.weights = pool.weights || pool.proxies.map(() => 1);
|
|
615
|
+
|
|
616
|
+
if (this.proxies.length === 0) {
|
|
617
|
+
throw new Error("Proxy pool cannot be empty");
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/**
|
|
622
|
+
* Get the next proxy based on rotation strategy
|
|
623
|
+
*/
|
|
624
|
+
async getNextAgent(): Promise<Agent> {
|
|
625
|
+
const proxy = this.selectProxy();
|
|
626
|
+
const key = typeof proxy === "string" ? proxy : proxy.url;
|
|
627
|
+
|
|
628
|
+
// Return cached agent if available
|
|
629
|
+
if (this.agentCache.has(key)) {
|
|
630
|
+
return this.agentCache.get(key)!;
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
const agent = await createProxyAgent(proxy);
|
|
634
|
+
this.agentCache.set(key, agent);
|
|
635
|
+
return agent;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
/**
|
|
639
|
+
* Get proxy for a specific instance (deterministic based on instanceId)
|
|
640
|
+
*/
|
|
641
|
+
async getAgentForInstance(instanceId: string): Promise<Agent> {
|
|
642
|
+
const hash = this.hashString(instanceId);
|
|
643
|
+
const index = hash % this.proxies.length;
|
|
644
|
+
const proxy = this.proxies[index];
|
|
645
|
+
const key = typeof proxy === "string" ? proxy : proxy.url;
|
|
646
|
+
|
|
647
|
+
if (!this.agentCache.has(key)) {
|
|
648
|
+
this.agentCache.set(key, await createProxyAgent(proxy));
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
return this.agentCache.get(key)!;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
private selectProxy(): ProxyConfig | string {
|
|
655
|
+
switch (this.strategy) {
|
|
656
|
+
case "round-robin":
|
|
657
|
+
const proxy = this.proxies[this.currentIndex];
|
|
658
|
+
this.currentIndex = (this.currentIndex + 1) % this.proxies.length;
|
|
659
|
+
return proxy;
|
|
660
|
+
|
|
661
|
+
case "random":
|
|
662
|
+
return this.proxies[Math.floor(Math.random() * this.proxies.length)];
|
|
663
|
+
|
|
664
|
+
case "weighted":
|
|
665
|
+
return this.weightedRandom();
|
|
666
|
+
|
|
667
|
+
default:
|
|
668
|
+
return this.proxies[0];
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
private weightedRandom(): ProxyConfig | string {
|
|
673
|
+
const totalWeight = this.weights.reduce((a, b) => a + b, 0);
|
|
674
|
+
let random = Math.random() * totalWeight;
|
|
675
|
+
|
|
676
|
+
for (let i = 0; i < this.proxies.length; i++) {
|
|
677
|
+
random -= this.weights[i];
|
|
678
|
+
if (random <= 0) {
|
|
679
|
+
return this.proxies[i];
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
return this.proxies[this.proxies.length - 1];
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
private hashString(str: string): number {
|
|
687
|
+
let hash = 0;
|
|
688
|
+
for (let i = 0; i < str.length; i++) {
|
|
689
|
+
const char = str.charCodeAt(i);
|
|
690
|
+
hash = (hash << 5) - hash + char;
|
|
691
|
+
hash = hash & hash;
|
|
692
|
+
}
|
|
693
|
+
return Math.abs(hash);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* Clear the agent cache (useful when proxies become stale)
|
|
698
|
+
*/
|
|
699
|
+
clearCache(): void {
|
|
700
|
+
this.agentCache.clear();
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/**
|
|
704
|
+
* Reload proxies from the original file (if loaded from file)
|
|
705
|
+
*/
|
|
706
|
+
async reload(proxies: (ProxyConfig | string)[]): Promise<void> {
|
|
707
|
+
this.proxies = proxies;
|
|
708
|
+
this.weights = proxies.map(() => 1);
|
|
709
|
+
this.currentIndex = 0;
|
|
710
|
+
this.agentCache.clear();
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* Get pool statistics
|
|
715
|
+
*/
|
|
716
|
+
getStats(): { total: number; cached: number; proxies: string[] } {
|
|
717
|
+
return {
|
|
718
|
+
total: this.proxies.length,
|
|
719
|
+
cached: this.agentCache.size,
|
|
720
|
+
proxies: this.proxies.map((p) => (typeof p === "string" ? p : p.url)),
|
|
721
|
+
};
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
/**
|
|
725
|
+
* Create a ProxyRotator from a file
|
|
726
|
+
* @param fileConfig - Path to proxy file or ProxyListConfig
|
|
727
|
+
* @param strategy - Rotation strategy (default: round-robin)
|
|
728
|
+
* @param watchForChanges - Auto-reload when file changes
|
|
729
|
+
*/
|
|
730
|
+
static async fromFile(
|
|
731
|
+
fileConfig: ProxyListConfig | string,
|
|
732
|
+
strategy: ProxyRotationStrategy = "round-robin",
|
|
733
|
+
watchForChanges = false
|
|
734
|
+
): Promise<ProxyRotator> {
|
|
735
|
+
const proxies = await loadProxyListFromFile(fileConfig);
|
|
736
|
+
|
|
737
|
+
if (proxies.length === 0) {
|
|
738
|
+
throw new Error("Proxy file is empty");
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
const rotator = new ProxyRotator({ proxies, strategy });
|
|
742
|
+
|
|
743
|
+
// Set up file watcher if requested
|
|
744
|
+
if (watchForChanges) {
|
|
745
|
+
const filePath =
|
|
746
|
+
typeof fileConfig === "string" ? fileConfig : fileConfig.filePath;
|
|
747
|
+
watchProxyFile(
|
|
748
|
+
filePath,
|
|
749
|
+
(newProxies) => {
|
|
750
|
+
rotator.reload(newProxies);
|
|
751
|
+
console.log(`Proxy list reloaded: ${newProxies.length} proxies`);
|
|
752
|
+
},
|
|
753
|
+
(error) => {
|
|
754
|
+
console.error(`Failed to reload proxy list: ${error.message}`);
|
|
755
|
+
}
|
|
756
|
+
);
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
return rotator;
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
```
|
|
763
|
+
|
|
764
|
+
### Phase 6: Dependencies
|
|
765
|
+
|
|
766
|
+
Add to `package.json`:
|
|
767
|
+
|
|
768
|
+
```json
|
|
769
|
+
{
|
|
770
|
+
"dependencies": {
|
|
771
|
+
"proxy-agent": "^6.4.0"
|
|
772
|
+
},
|
|
773
|
+
"devDependencies": {
|
|
774
|
+
"@types/node": "^20.0.0"
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
```
|
|
778
|
+
|
|
779
|
+
### Phase 7: Export Updates
|
|
780
|
+
|
|
781
|
+
Update `src/index.ts`:
|
|
782
|
+
|
|
783
|
+
```typescript
|
|
784
|
+
// Proxy utilities
|
|
785
|
+
export { createProxyAgent, validateProxyConfig } from "./utils/proxy-agent.js";
|
|
786
|
+
export { ProxyRotator } from "./utils/proxy-rotation.js";
|
|
787
|
+
export {
|
|
788
|
+
loadProxyListFromFile,
|
|
789
|
+
watchProxyFile,
|
|
790
|
+
validateProxyList,
|
|
791
|
+
} from "./utils/proxy-loader.js";
|
|
792
|
+
export type {
|
|
793
|
+
ProxyPool,
|
|
794
|
+
ProxyRotationStrategy,
|
|
795
|
+
} from "./utils/proxy-rotation.js";
|
|
796
|
+
export type { ProxyFileFormat, ProxyListConfig } from "./utils/proxy-loader.js";
|
|
797
|
+
```
|
|
798
|
+
|
|
799
|
+
## Usage Examples
|
|
800
|
+
|
|
801
|
+
### Basic Proxy Usage
|
|
802
|
+
|
|
803
|
+
```typescript
|
|
804
|
+
import { MiawClient } from "miaw-core";
|
|
805
|
+
|
|
806
|
+
// Using proxy URL directly
|
|
807
|
+
const client = new MiawClient({
|
|
808
|
+
instanceId: "bot-1",
|
|
809
|
+
proxy: "socks5://proxy.example.com:1080",
|
|
810
|
+
});
|
|
811
|
+
|
|
812
|
+
// Using proxy config object
|
|
813
|
+
const client2 = new MiawClient({
|
|
814
|
+
instanceId: "bot-2",
|
|
815
|
+
proxy: {
|
|
816
|
+
url: "http://proxy.example.com:8080",
|
|
817
|
+
username: "user",
|
|
818
|
+
password: "pass",
|
|
819
|
+
},
|
|
820
|
+
});
|
|
821
|
+
|
|
822
|
+
await client.connect();
|
|
823
|
+
```
|
|
824
|
+
|
|
825
|
+
### Loading Proxies from File
|
|
826
|
+
|
|
827
|
+
```typescript
|
|
828
|
+
import { ProxyRotator, loadProxyListFromFile } from "miaw-core";
|
|
829
|
+
|
|
830
|
+
// Load from TXT file (one proxy per line)
|
|
831
|
+
const proxies = await loadProxyListFromFile("./proxies.txt");
|
|
832
|
+
console.log(`Loaded ${proxies.length} proxies`);
|
|
833
|
+
|
|
834
|
+
// Create rotator from file (recommended)
|
|
835
|
+
const rotator = await ProxyRotator.fromFile(
|
|
836
|
+
"./proxies.txt",
|
|
837
|
+
"round-robin",
|
|
838
|
+
true // watch for changes
|
|
839
|
+
);
|
|
840
|
+
|
|
841
|
+
// Get stats
|
|
842
|
+
console.log(rotator.getStats());
|
|
843
|
+
// { total: 10, cached: 0, proxies: ['socks5://...', ...] }
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
### Proxy Rotation for Multiple Instances
|
|
847
|
+
|
|
848
|
+
```typescript
|
|
849
|
+
import { MiawClient, ProxyRotator } from "miaw-core";
|
|
850
|
+
|
|
851
|
+
// Create proxy pool from file
|
|
852
|
+
const rotator = await ProxyRotator.fromFile("./proxies.txt", "round-robin");
|
|
853
|
+
|
|
854
|
+
// Create multiple instances with rotated proxies
|
|
855
|
+
async function createInstances(count: number) {
|
|
856
|
+
const instances = [];
|
|
857
|
+
|
|
858
|
+
for (let i = 0; i < count; i++) {
|
|
859
|
+
const agent = await rotator.getNextAgent();
|
|
860
|
+
|
|
861
|
+
const client = new MiawClient({
|
|
862
|
+
instanceId: `bot-${i}`,
|
|
863
|
+
agent: agent,
|
|
864
|
+
fetchAgent: agent,
|
|
865
|
+
});
|
|
866
|
+
|
|
867
|
+
instances.push(client);
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
return instances;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
// Or use deterministic proxy per instance (same instance always gets same proxy)
|
|
874
|
+
async function createInstanceWithDeterministicProxy(instanceId: string) {
|
|
875
|
+
const agent = await rotator.getAgentForInstance(instanceId);
|
|
876
|
+
|
|
877
|
+
return new MiawClient({
|
|
878
|
+
instanceId,
|
|
879
|
+
agent,
|
|
880
|
+
fetchAgent: agent,
|
|
881
|
+
});
|
|
882
|
+
}
|
|
883
|
+
```
|
|
884
|
+
|
|
885
|
+
### Environment Variable for Single Instance
|
|
886
|
+
|
|
887
|
+
```typescript
|
|
888
|
+
import { MiawClient } from "miaw-core";
|
|
889
|
+
|
|
890
|
+
// Single proxy from environment
|
|
891
|
+
const client = new MiawClient({
|
|
892
|
+
instanceId: "production-bot",
|
|
893
|
+
proxy: process.env.WHATSAPP_PROXY_URL,
|
|
894
|
+
});
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
---
|
|
898
|
+
|
|
899
|
+
## Phase 8: CLI Integration (miaw-cli)
|
|
900
|
+
|
|
901
|
+
### CLI Proxy Commands
|
|
902
|
+
|
|
903
|
+
Add new proxy management commands to `miaw-cli`:
|
|
904
|
+
|
|
905
|
+
```
|
|
906
|
+
PROXY OPERATIONS:
|
|
907
|
+
proxy ls List proxies from configured file
|
|
908
|
+
proxy test [url] Test proxy connectivity
|
|
909
|
+
proxy test-all Test all proxies in list
|
|
910
|
+
proxy validate Validate proxy file format
|
|
911
|
+
proxy stats Show proxy rotation statistics
|
|
912
|
+
proxy reload Reload proxy list from file
|
|
913
|
+
```
|
|
914
|
+
|
|
915
|
+
### CLI Global Flags for Proxy
|
|
916
|
+
|
|
917
|
+
```
|
|
918
|
+
PROXY FLAGS:
|
|
919
|
+
--proxy <url> Use specific proxy for this instance
|
|
920
|
+
--proxy-file <path> Path to proxy list file
|
|
921
|
+
--proxy-strategy <strategy> Rotation strategy: round-robin, random, weighted
|
|
922
|
+
--proxy-watch Watch proxy file for changes
|
|
923
|
+
```
|
|
924
|
+
|
|
925
|
+
### CLI Implementation
|
|
926
|
+
|
|
927
|
+
Create `src/cli/commands/proxy.ts`:
|
|
928
|
+
|
|
929
|
+
```typescript
|
|
930
|
+
import {
|
|
931
|
+
loadProxyListFromFile,
|
|
932
|
+
validateProxyList,
|
|
933
|
+
ProxyRotator,
|
|
934
|
+
} from "../../index.js";
|
|
935
|
+
import type { CLIContext } from "../context.js";
|
|
936
|
+
|
|
937
|
+
export async function handleProxyCommand(
|
|
938
|
+
args: string[],
|
|
939
|
+
context: CLIContext
|
|
940
|
+
): Promise<boolean> {
|
|
941
|
+
const subcommand = args[0];
|
|
942
|
+
|
|
943
|
+
switch (subcommand) {
|
|
944
|
+
case "ls":
|
|
945
|
+
case "list":
|
|
946
|
+
return await listProxies(context);
|
|
947
|
+
|
|
948
|
+
case "test":
|
|
949
|
+
return await testProxy(args[1], context);
|
|
950
|
+
|
|
951
|
+
case "test-all":
|
|
952
|
+
return await testAllProxies(context);
|
|
953
|
+
|
|
954
|
+
case "validate":
|
|
955
|
+
return await validateProxyFile(context);
|
|
956
|
+
|
|
957
|
+
case "stats":
|
|
958
|
+
return await showProxyStats(context);
|
|
959
|
+
|
|
960
|
+
case "reload":
|
|
961
|
+
return await reloadProxies(context);
|
|
962
|
+
|
|
963
|
+
default:
|
|
964
|
+
console.log(
|
|
965
|
+
"Unknown proxy command. Use: ls, test, test-all, validate, stats, reload"
|
|
966
|
+
);
|
|
967
|
+
return false;
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
async function listProxies(context: CLIContext): Promise<boolean> {
|
|
972
|
+
const proxyFile = context.flags["proxy-file"] || "./proxies.txt";
|
|
973
|
+
|
|
974
|
+
try {
|
|
975
|
+
const proxies = await loadProxyListFromFile(proxyFile);
|
|
976
|
+
|
|
977
|
+
console.log(`\n📋 Proxies loaded from: ${proxyFile}\n`);
|
|
978
|
+
console.log(`Total: ${proxies.length} proxies\n`);
|
|
979
|
+
|
|
980
|
+
proxies.forEach((proxy, index) => {
|
|
981
|
+
const url = typeof proxy === "string" ? proxy : proxy.url;
|
|
982
|
+
// Mask credentials for display
|
|
983
|
+
const masked = maskProxyUrl(url);
|
|
984
|
+
console.log(` ${index + 1}. ${masked}`);
|
|
985
|
+
});
|
|
986
|
+
|
|
987
|
+
return true;
|
|
988
|
+
} catch (error) {
|
|
989
|
+
console.error(`❌ Failed to load proxy file: ${(error as Error).message}`);
|
|
990
|
+
return false;
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
async function testProxy(
|
|
995
|
+
proxyUrl: string | undefined,
|
|
996
|
+
context: CLIContext
|
|
997
|
+
): Promise<boolean> {
|
|
998
|
+
if (!proxyUrl) {
|
|
999
|
+
console.error("❌ Please provide a proxy URL to test");
|
|
1000
|
+
return false;
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
console.log(`\n🔍 Testing proxy: ${maskProxyUrl(proxyUrl)}`);
|
|
1004
|
+
|
|
1005
|
+
try {
|
|
1006
|
+
const { createProxyAgent } = await import("../../utils/proxy-agent.js");
|
|
1007
|
+
const agent = await createProxyAgent(proxyUrl);
|
|
1008
|
+
|
|
1009
|
+
// Test connection to WhatsApp
|
|
1010
|
+
const startTime = Date.now();
|
|
1011
|
+
const response = await fetch("https://web.whatsapp.com", {
|
|
1012
|
+
method: "HEAD",
|
|
1013
|
+
dispatcher: agent as any,
|
|
1014
|
+
signal: AbortSignal.timeout(10000),
|
|
1015
|
+
});
|
|
1016
|
+
|
|
1017
|
+
const latency = Date.now() - startTime;
|
|
1018
|
+
|
|
1019
|
+
if (response.ok) {
|
|
1020
|
+
console.log(`✅ Proxy is working! Latency: ${latency}ms`);
|
|
1021
|
+
return true;
|
|
1022
|
+
} else {
|
|
1023
|
+
console.log(`⚠️ Proxy responded with status: ${response.status}`);
|
|
1024
|
+
return false;
|
|
1025
|
+
}
|
|
1026
|
+
} catch (error) {
|
|
1027
|
+
console.error(`❌ Proxy test failed: ${(error as Error).message}`);
|
|
1028
|
+
return false;
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
async function testAllProxies(context: CLIContext): Promise<boolean> {
|
|
1033
|
+
const proxyFile = context.flags["proxy-file"] || "./proxies.txt";
|
|
1034
|
+
|
|
1035
|
+
try {
|
|
1036
|
+
const proxies = await loadProxyListFromFile(proxyFile);
|
|
1037
|
+
|
|
1038
|
+
console.log(`\n🔍 Testing ${proxies.length} proxies...\n`);
|
|
1039
|
+
|
|
1040
|
+
let working = 0;
|
|
1041
|
+
let failed = 0;
|
|
1042
|
+
|
|
1043
|
+
for (const proxy of proxies) {
|
|
1044
|
+
const url = typeof proxy === "string" ? proxy : proxy.url;
|
|
1045
|
+
const masked = maskProxyUrl(url);
|
|
1046
|
+
process.stdout.write(` Testing ${masked}... `);
|
|
1047
|
+
|
|
1048
|
+
try {
|
|
1049
|
+
const { createProxyAgent } = await import("../../utils/proxy-agent.js");
|
|
1050
|
+
const agent = await createProxyAgent(proxy);
|
|
1051
|
+
|
|
1052
|
+
const startTime = Date.now();
|
|
1053
|
+
const response = await fetch("https://web.whatsapp.com", {
|
|
1054
|
+
method: "HEAD",
|
|
1055
|
+
dispatcher: agent as any,
|
|
1056
|
+
signal: AbortSignal.timeout(10000),
|
|
1057
|
+
});
|
|
1058
|
+
|
|
1059
|
+
const latency = Date.now() - startTime;
|
|
1060
|
+
|
|
1061
|
+
if (response.ok) {
|
|
1062
|
+
console.log(`✅ ${latency}ms`);
|
|
1063
|
+
working++;
|
|
1064
|
+
} else {
|
|
1065
|
+
console.log(`⚠️ Status ${response.status}`);
|
|
1066
|
+
failed++;
|
|
1067
|
+
}
|
|
1068
|
+
} catch (error) {
|
|
1069
|
+
console.log(`❌ ${(error as Error).message}`);
|
|
1070
|
+
failed++;
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
console.log(`\n📊 Results: ${working} working, ${failed} failed`);
|
|
1075
|
+
return failed === 0;
|
|
1076
|
+
} catch (error) {
|
|
1077
|
+
console.error(`❌ Failed to load proxy file: ${(error as Error).message}`);
|
|
1078
|
+
return false;
|
|
1079
|
+
}
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
async function validateProxyFile(context: CLIContext): Promise<boolean> {
|
|
1083
|
+
const proxyFile = context.flags["proxy-file"] || "./proxies.txt";
|
|
1084
|
+
|
|
1085
|
+
try {
|
|
1086
|
+
const proxies = await loadProxyListFromFile(proxyFile);
|
|
1087
|
+
const { valid, invalid } = await validateProxyList(proxies);
|
|
1088
|
+
|
|
1089
|
+
console.log(`\n📋 Proxy File Validation: ${proxyFile}\n`);
|
|
1090
|
+
console.log(` ✅ Valid: ${valid.length}`);
|
|
1091
|
+
console.log(` ❌ Invalid: ${invalid.length}`);
|
|
1092
|
+
|
|
1093
|
+
if (invalid.length > 0) {
|
|
1094
|
+
console.log(`\n Invalid entries:`);
|
|
1095
|
+
invalid.forEach((url) => console.log(` - ${url}`));
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
return invalid.length === 0;
|
|
1099
|
+
} catch (error) {
|
|
1100
|
+
console.error(`❌ Validation failed: ${(error as Error).message}`);
|
|
1101
|
+
return false;
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
async function showProxyStats(context: CLIContext): Promise<boolean> {
|
|
1106
|
+
if (!context.proxyRotator) {
|
|
1107
|
+
console.log("⚠️ No proxy rotator initialized. Use --proxy-file to enable.");
|
|
1108
|
+
return false;
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
const stats = context.proxyRotator.getStats();
|
|
1112
|
+
|
|
1113
|
+
console.log(`\n📊 Proxy Rotation Statistics\n`);
|
|
1114
|
+
console.log(` Total proxies: ${stats.total}`);
|
|
1115
|
+
console.log(` Cached agents: ${stats.cached}`);
|
|
1116
|
+
console.log(
|
|
1117
|
+
` Strategy: ${context.flags["proxy-strategy"] || "round-robin"}`
|
|
1118
|
+
);
|
|
1119
|
+
|
|
1120
|
+
return true;
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
async function reloadProxies(context: CLIContext): Promise<boolean> {
|
|
1124
|
+
const proxyFile = context.flags["proxy-file"] || "./proxies.txt";
|
|
1125
|
+
|
|
1126
|
+
try {
|
|
1127
|
+
const proxies = await loadProxyListFromFile(proxyFile);
|
|
1128
|
+
|
|
1129
|
+
if (context.proxyRotator) {
|
|
1130
|
+
await context.proxyRotator.reload(proxies);
|
|
1131
|
+
console.log(`✅ Reloaded ${proxies.length} proxies from ${proxyFile}`);
|
|
1132
|
+
} else {
|
|
1133
|
+
console.log(`⚠️ No proxy rotator to reload. Use --proxy-file to enable.`);
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
return true;
|
|
1137
|
+
} catch (error) {
|
|
1138
|
+
console.error(`❌ Failed to reload proxies: ${(error as Error).message}`);
|
|
1139
|
+
return false;
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
/**
|
|
1144
|
+
* Mask credentials in proxy URL for display
|
|
1145
|
+
*/
|
|
1146
|
+
function maskProxyUrl(url: string): string {
|
|
1147
|
+
try {
|
|
1148
|
+
const parsed = new URL(url);
|
|
1149
|
+
if (parsed.password) {
|
|
1150
|
+
parsed.password = "****";
|
|
1151
|
+
}
|
|
1152
|
+
return parsed.toString();
|
|
1153
|
+
} catch {
|
|
1154
|
+
return url;
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
```
|
|
1158
|
+
|
|
1159
|
+
### Update CLI Context
|
|
1160
|
+
|
|
1161
|
+
Update `src/cli/context.ts` to support proxy rotator:
|
|
1162
|
+
|
|
1163
|
+
```typescript
|
|
1164
|
+
import type { ProxyRotator } from "../utils/proxy-rotation.js";
|
|
1165
|
+
|
|
1166
|
+
export interface CLIContext {
|
|
1167
|
+
// ... existing properties ...
|
|
1168
|
+
proxyRotator?: ProxyRotator;
|
|
1169
|
+
}
|
|
1170
|
+
```
|
|
1171
|
+
|
|
1172
|
+
### Update CLI Entry Point
|
|
1173
|
+
|
|
1174
|
+
Update `bin/miaw-cli.ts` to handle proxy flags:
|
|
1175
|
+
|
|
1176
|
+
```typescript
|
|
1177
|
+
// After parsing args, initialize proxy rotator if --proxy-file is provided
|
|
1178
|
+
if (flags["proxy-file"]) {
|
|
1179
|
+
const { ProxyRotator } = await import("../src/utils/proxy-rotation.js");
|
|
1180
|
+
const strategy = (flags["proxy-strategy"] as string) || "round-robin";
|
|
1181
|
+
const watch = flags["proxy-watch"] === true;
|
|
1182
|
+
|
|
1183
|
+
const proxyRotator = await ProxyRotator.fromFile(
|
|
1184
|
+
flags["proxy-file"] as string,
|
|
1185
|
+
strategy as any,
|
|
1186
|
+
watch
|
|
1187
|
+
);
|
|
1188
|
+
|
|
1189
|
+
// Make available to commands via context
|
|
1190
|
+
context.proxyRotator = proxyRotator;
|
|
1191
|
+
|
|
1192
|
+
console.log(
|
|
1193
|
+
`📡 Proxy rotator initialized: ${proxyRotator.getStats().total} proxies`
|
|
1194
|
+
);
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
// When creating instances, use proxy from rotator
|
|
1198
|
+
if (context.proxyRotator) {
|
|
1199
|
+
const agent = await context.proxyRotator.getAgentForInstance(instanceId);
|
|
1200
|
+
clientConfig.agent = agent;
|
|
1201
|
+
clientConfig.fetchAgent = agent;
|
|
1202
|
+
} else if (flags.proxy) {
|
|
1203
|
+
clientConfig.proxy = flags.proxy as string;
|
|
1204
|
+
}
|
|
1205
|
+
```
|
|
1206
|
+
|
|
1207
|
+
### CLI Help Update
|
|
1208
|
+
|
|
1209
|
+
Add to help message in `bin/miaw-cli.ts`:
|
|
1210
|
+
|
|
1211
|
+
```
|
|
1212
|
+
PROXY OPERATIONS:
|
|
1213
|
+
proxy ls List proxies from configured file
|
|
1214
|
+
proxy test <url> Test specific proxy connectivity
|
|
1215
|
+
proxy test-all Test all proxies in list
|
|
1216
|
+
proxy validate Validate proxy file format
|
|
1217
|
+
proxy stats Show proxy rotation statistics
|
|
1218
|
+
proxy reload Reload proxy list from file
|
|
1219
|
+
|
|
1220
|
+
PROXY FLAGS:
|
|
1221
|
+
--proxy <url> Use specific proxy for this command
|
|
1222
|
+
--proxy-file <path> Path to proxy list file (enables rotation)
|
|
1223
|
+
--proxy-strategy <strategy> Rotation strategy: round-robin, random, weighted
|
|
1224
|
+
--proxy-watch Watch proxy file for changes (auto-reload)
|
|
1225
|
+
```
|
|
1226
|
+
|
|
1227
|
+
### CLI Usage Examples
|
|
1228
|
+
|
|
1229
|
+
```bash
|
|
1230
|
+
# List proxies from file
|
|
1231
|
+
miaw-cli proxy ls --proxy-file ./proxies.txt
|
|
1232
|
+
|
|
1233
|
+
# Test a specific proxy
|
|
1234
|
+
miaw-cli proxy test socks5://proxy.example.com:1080
|
|
1235
|
+
|
|
1236
|
+
# Test all proxies in file
|
|
1237
|
+
miaw-cli proxy test-all --proxy-file ./proxies.txt
|
|
1238
|
+
|
|
1239
|
+
# Validate proxy file format
|
|
1240
|
+
miaw-cli proxy validate --proxy-file ./proxies.txt
|
|
1241
|
+
|
|
1242
|
+
# Connect instance with single proxy
|
|
1243
|
+
miaw-cli instance connect my-bot --proxy socks5://proxy.example.com:1080
|
|
1244
|
+
|
|
1245
|
+
# Connect instance with proxy rotation
|
|
1246
|
+
miaw-cli instance connect my-bot --proxy-file ./proxies.txt
|
|
1247
|
+
|
|
1248
|
+
# Use specific rotation strategy
|
|
1249
|
+
miaw-cli instance connect my-bot --proxy-file ./proxies.txt --proxy-strategy random
|
|
1250
|
+
|
|
1251
|
+
# Enable hot-reload of proxy file
|
|
1252
|
+
miaw-cli instance connect my-bot --proxy-file ./proxies.txt --proxy-watch
|
|
1253
|
+
|
|
1254
|
+
# Send message through proxy
|
|
1255
|
+
miaw-cli send text 6281234567890 "Hello" --proxy socks5://proxy.example.com:1080
|
|
1256
|
+
```
|
|
1257
|
+
|
|
1258
|
+
---
|
|
1259
|
+
|
|
1260
|
+
## Testing Plan
|
|
1261
|
+
|
|
1262
|
+
### Unit Tests
|
|
1263
|
+
|
|
1264
|
+
```typescript
|
|
1265
|
+
describe("Proxy Support", () => {
|
|
1266
|
+
describe("validateProxyConfig", () => {
|
|
1267
|
+
it("should accept valid HTTP proxy", () => {
|
|
1268
|
+
expect(validateProxyConfig("http://proxy:8080")).toBe(true);
|
|
1269
|
+
});
|
|
1270
|
+
|
|
1271
|
+
it("should accept valid SOCKS5 proxy", () => {
|
|
1272
|
+
expect(validateProxyConfig("socks5://proxy:1080")).toBe(true);
|
|
1273
|
+
});
|
|
1274
|
+
|
|
1275
|
+
it("should reject invalid URL", () => {
|
|
1276
|
+
expect(validateProxyConfig("not-a-url")).toBe(false);
|
|
1277
|
+
});
|
|
1278
|
+
});
|
|
1279
|
+
|
|
1280
|
+
describe("ProxyRotator", () => {
|
|
1281
|
+
it("should rotate round-robin correctly", async () => {
|
|
1282
|
+
// Test implementation
|
|
1283
|
+
});
|
|
1284
|
+
|
|
1285
|
+
it("should return same proxy for same instanceId", async () => {
|
|
1286
|
+
// Test deterministic assignment
|
|
1287
|
+
});
|
|
1288
|
+
});
|
|
1289
|
+
});
|
|
1290
|
+
```
|
|
1291
|
+
|
|
1292
|
+
### Integration Tests
|
|
1293
|
+
|
|
1294
|
+
```typescript
|
|
1295
|
+
describe("MiawClient with Proxy", () => {
|
|
1296
|
+
it("should connect through SOCKS5 proxy", async () => {
|
|
1297
|
+
// Requires actual proxy server
|
|
1298
|
+
});
|
|
1299
|
+
|
|
1300
|
+
it("should upload media through proxy", async () => {
|
|
1301
|
+
// Test fetchAgent configuration
|
|
1302
|
+
});
|
|
1303
|
+
});
|
|
1304
|
+
```
|
|
1305
|
+
|
|
1306
|
+
## Security Considerations
|
|
1307
|
+
|
|
1308
|
+
1. **Credential Management**: Never log proxy credentials
|
|
1309
|
+
2. **Proxy Authentication**: Support both URL-embedded and separate credentials
|
|
1310
|
+
3. **Connection Timeouts**: Implement appropriate timeouts for proxy connections
|
|
1311
|
+
4. **Error Handling**: Don't expose proxy details in error messages
|
|
1312
|
+
5. **SOCKS5 DNS Resolution**: Use remote DNS resolution to prevent DNS leaks
|
|
1313
|
+
|
|
1314
|
+
## Performance Considerations
|
|
1315
|
+
|
|
1316
|
+
1. **Agent Caching**: Reuse agents across requests
|
|
1317
|
+
2. **Connection Pooling**: Leverage built-in connection pooling
|
|
1318
|
+
3. **Lazy Initialization**: Create agents only when needed
|
|
1319
|
+
4. **Health Checks**: Implement proxy health monitoring
|
|
1320
|
+
|
|
1321
|
+
## Rollout Plan
|
|
1322
|
+
|
|
1323
|
+
### Phase 1: MVP (Week 1)
|
|
1324
|
+
|
|
1325
|
+
- [ ] Add `ProxyConfig` type
|
|
1326
|
+
- [ ] Implement `createProxyAgent` utility
|
|
1327
|
+
- [ ] Add `proxy` option to `MiawClientOptions`
|
|
1328
|
+
- [ ] Update `connect()` to use proxy agent
|
|
1329
|
+
|
|
1330
|
+
### Phase 2: Enhanced Features (Week 2)
|
|
1331
|
+
|
|
1332
|
+
- [ ] Implement `ProxyRotator` class
|
|
1333
|
+
- [ ] Add proxy validation
|
|
1334
|
+
- [ ] Add `getProxyInfo()` method
|
|
1335
|
+
- [ ] Update documentation
|
|
1336
|
+
|
|
1337
|
+
### Phase 3: File-Based Proxy Loading (Week 3)
|
|
1338
|
+
|
|
1339
|
+
- [ ] Implement `proxy-loader.ts` utility
|
|
1340
|
+
- [ ] Add `loadProxyListFromFile()` function
|
|
1341
|
+
- [ ] Add `ProxyRotator.fromFile()` static method
|
|
1342
|
+
- [ ] Implement file watcher for hot-reload
|
|
1343
|
+
- [ ] Support TXT and JSON file formats
|
|
1344
|
+
|
|
1345
|
+
### Phase 4: CLI Integration (Week 4)
|
|
1346
|
+
|
|
1347
|
+
- [ ] Create `src/cli/commands/proxy.ts`
|
|
1348
|
+
- [ ] Implement CLI proxy commands (ls, test, test-all, validate, stats, reload)
|
|
1349
|
+
- [ ] Add `--proxy`, `--proxy-file`, `--proxy-strategy`, `--proxy-watch` flags
|
|
1350
|
+
- [ ] Update CLI help text
|
|
1351
|
+
- [ ] Integration between CLI context and proxy rotator
|
|
1352
|
+
|
|
1353
|
+
### Phase 5: Testing & Documentation (Week 5)
|
|
1354
|
+
|
|
1355
|
+
- [ ] Unit tests for proxy utilities
|
|
1356
|
+
- [ ] Unit tests for proxy loader
|
|
1357
|
+
- [ ] Integration tests with real proxies
|
|
1358
|
+
- [ ] CLI command tests
|
|
1359
|
+
- [ ] Example code in `examples/` directory
|
|
1360
|
+
- [ ] Update README and API docs
|
|
1361
|
+
|
|
1362
|
+
## Related Files to Modify
|
|
1363
|
+
|
|
1364
|
+
1. `src/types/index.ts` - Add ProxyConfig and update MiawClientOptions
|
|
1365
|
+
2. `src/client/MiawClient.ts` - Implement proxy support in connect()
|
|
1366
|
+
3. `src/utils/proxy-agent.ts` - New file for proxy agent factory
|
|
1367
|
+
4. `src/utils/proxy-rotation.ts` - New file for proxy rotation
|
|
1368
|
+
5. `src/utils/proxy-loader.ts` - New file for file-based proxy loading
|
|
1369
|
+
6. `src/cli/commands/proxy.ts` - New file for CLI proxy commands
|
|
1370
|
+
7. `src/cli/context.ts` - Update CLI context with proxy rotator
|
|
1371
|
+
8. `bin/miaw-cli.ts` - Add proxy flags and command routing
|
|
1372
|
+
9. `src/index.ts` - Export new types and utilities
|
|
1373
|
+
10. `package.json` - Add proxy-agent dependency
|
|
1374
|
+
11. `docs/USAGE.md` - Document proxy configuration
|
|
1375
|
+
12. `examples/` - Add proxy usage examples
|
|
1376
|
+
|
|
1377
|
+
## Conclusion
|
|
1378
|
+
|
|
1379
|
+
Implementing proxy support in Miaw Core is **fully feasible** thanks to Baileys' native support for the `agent` and `fetchAgent` options. The implementation requires:
|
|
1380
|
+
|
|
1381
|
+
1. Adding type definitions for proxy configuration
|
|
1382
|
+
2. Creating a proxy agent factory using the `proxy-agent` library
|
|
1383
|
+
3. Passing the agent to Baileys' `makeWASocket` function
|
|
1384
|
+
4. Implementing file-based proxy loading for easy management
|
|
1385
|
+
5. Adding CLI commands for proxy management and testing
|
|
1386
|
+
6. Optionally implementing proxy rotation for multi-instance scenarios
|
|
1387
|
+
|
|
1388
|
+
The approach is non-invasive, maintaining backward compatibility while enabling powerful proxy features for users who need them.
|
|
1389
|
+
|
|
1390
|
+
---
|
|
1391
|
+
|
|
1392
|
+
## Quick Reference
|
|
1393
|
+
|
|
1394
|
+
### Proxy File Format (proxies.txt)
|
|
1395
|
+
|
|
1396
|
+
```
|
|
1397
|
+
# HTTP proxies
|
|
1398
|
+
http://proxy1.example.com:8080
|
|
1399
|
+
http://user:pass@proxy2.example.com:8080
|
|
1400
|
+
|
|
1401
|
+
# SOCKS proxies (recommended for WhatsApp)
|
|
1402
|
+
socks5://proxy3.example.com:1080
|
|
1403
|
+
socks5://user:pass@proxy4.example.com:1080
|
|
1404
|
+
```
|
|
1405
|
+
|
|
1406
|
+
### Minimum Viable CLI Commands
|
|
1407
|
+
|
|
1408
|
+
```bash
|
|
1409
|
+
# Single proxy
|
|
1410
|
+
miaw-cli instance connect my-bot --proxy socks5://proxy:1080
|
|
1411
|
+
|
|
1412
|
+
# Multiple proxies with rotation
|
|
1413
|
+
miaw-cli instance connect my-bot --proxy-file ./proxies.txt
|
|
1414
|
+
|
|
1415
|
+
# Test all proxies
|
|
1416
|
+
miaw-cli proxy test-all --proxy-file ./proxies.txt
|
|
1417
|
+
```
|
|
1418
|
+
|
|
1419
|
+
### Programmatic Usage
|
|
1420
|
+
|
|
1421
|
+
```typescript
|
|
1422
|
+
import { MiawClient, ProxyRotator } from "miaw-core";
|
|
1423
|
+
|
|
1424
|
+
// Simple: single proxy
|
|
1425
|
+
const client = new MiawClient({
|
|
1426
|
+
instanceId: "my-bot",
|
|
1427
|
+
proxy: "socks5://proxy:1080",
|
|
1428
|
+
});
|
|
1429
|
+
|
|
1430
|
+
// Advanced: rotation from file
|
|
1431
|
+
const rotator = await ProxyRotator.fromFile(
|
|
1432
|
+
"./proxies.txt",
|
|
1433
|
+
"round-robin",
|
|
1434
|
+
true
|
|
1435
|
+
);
|
|
1436
|
+
const agent = await rotator.getNextAgent();
|
|
1437
|
+
const client2 = new MiawClient({
|
|
1438
|
+
instanceId: "bot-2",
|
|
1439
|
+
agent,
|
|
1440
|
+
fetchAgent: agent,
|
|
1441
|
+
});
|
|
1442
|
+
```
|