@warlock.js/notifications 4.15.0 → 5.0.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/CHANGELOG.md +12 -0
- package/cjs/channel_api-CH3DxhRU.cjs +7463 -0
- package/cjs/channel_api-CH3DxhRU.cjs.map +1 -0
- package/cjs/chunk-fl3r8ClO.cjs +41 -0
- package/cjs/index.cjs +34 -4
- package/cjs/index.cjs.map +1 -1
- package/cjs/rabbitmq-driver-CJtyxjUQ.cjs +3 -0
- package/cjs/src-Cus6pYPC.cjs +10981 -0
- package/cjs/src-Cus6pYPC.cjs.map +1 -0
- package/esm/_virtual/_rolldown/runtime.mjs +32 -0
- package/esm/herald/src/communicators/broker-registry.mjs +204 -0
- package/esm/herald/src/communicators/broker-registry.mjs.map +1 -0
- package/esm/herald/src/communicators/broker.mjs +110 -0
- package/esm/herald/src/communicators/broker.mjs.map +1 -0
- package/esm/herald/src/communicators/index.mjs +4 -0
- package/esm/herald/src/decorators/consumable.mjs +36 -0
- package/esm/herald/src/decorators/consumable.mjs.map +1 -0
- package/esm/herald/src/decorators/index.mjs +3 -0
- package/esm/herald/src/drivers/index.mjs +5 -0
- package/esm/herald/src/drivers/rabbitmq/index.mjs +4 -0
- package/esm/herald/src/drivers/rabbitmq/rabbitmq-channel.mjs +403 -0
- package/esm/herald/src/drivers/rabbitmq/rabbitmq-channel.mjs.map +1 -0
- package/esm/herald/src/drivers/rabbitmq/rabbitmq-driver.mjs +303 -0
- package/esm/herald/src/drivers/rabbitmq/rabbitmq-driver.mjs.map +1 -0
- package/esm/herald/src/index.mjs +16 -0
- package/esm/herald/src/message-managers/event-consumer.mjs +76 -0
- package/esm/herald/src/message-managers/event-consumer.mjs.map +1 -0
- package/esm/herald/src/message-managers/event-message.mjs +85 -0
- package/esm/herald/src/message-managers/event-message.mjs.map +1 -0
- package/esm/herald/src/message-managers/index.mjs +4 -0
- package/esm/herald/src/message-managers/prepare-consumer-subscription.mjs +42 -0
- package/esm/herald/src/message-managers/prepare-consumer-subscription.mjs.map +1 -0
- package/esm/herald/src/use-case-broadcast.mjs +30 -0
- package/esm/herald/src/use-case-broadcast.mjs.map +1 -0
- package/esm/herald/src/utils/connect-to-broker.mjs +168 -0
- package/esm/herald/src/utils/connect-to-broker.mjs.map +1 -0
- package/esm/herald/src/utils/index.mjs +3 -0
- package/esm/in-app/base-notifications-repository.d.mts +15 -1
- package/esm/in-app/base-notifications-repository.d.mts.map +1 -1
- package/esm/in-app/base-notifications-repository.mjs +33 -3
- package/esm/in-app/base-notifications-repository.mjs.map +1 -1
- package/esm/in-app/in-app.d.mts +3 -3
- package/esm/in-app/in-app.d.mts.map +1 -1
- package/esm/node_modules/@mongez/reinforcements/esm/Random/_internal.mjs +6 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/_internal.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/bool.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/color.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/date.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/float.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/id.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/int.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/nanoid.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/pick.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/random.mjs +16 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/sample.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/string.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/token.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/uuid.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/weighted.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/async/retry.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/index.mjs +24 -0
- package/esm/node_modules/@mongez/reinforcements/esm/mixed/clone/clone.mjs +82 -0
- package/esm/node_modules/@mongez/reinforcements/esm/mixed/clone/clone.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/number/round.mjs +17 -0
- package/esm/node_modules/@mongez/reinforcements/esm/number/round.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/except.mjs +13 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/except.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/get.mjs +18 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/get.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/omit.mjs +17 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/omit.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/unset.mjs +30 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/unset.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/capitalize.mjs +19 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/capitalize.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/ltrim.mjs +18 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/ltrim.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs +14 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/rtrim.mjs +18 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/rtrim.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs +22 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs +17 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs +21 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs +21 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/trim.mjs +20 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/trim.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/ucfirst.mjs +15 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/ucfirst.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/words.mjs +25 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/words.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/escapeRegex.mjs +11 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/escapeRegex.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/lazy.mjs +100 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/lazy.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/tap.mjs +27 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/tap.mjs.map +1 -0
- package/esm/node_modules/@mongez/supportive-is/esm/index.mjs +353 -0
- package/esm/node_modules/@mongez/supportive-is/esm/index.mjs.map +1 -0
- package/esm/node_modules/amqplib/channel_api.mjs +28 -0
- package/esm/node_modules/amqplib/channel_api.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/api_args.mjs +241 -0
- package/esm/node_modules/amqplib/lib/api_args.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/bitset.mjs +130 -0
- package/esm/node_modules/amqplib/lib/bitset.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/channel.mjs +302 -0
- package/esm/node_modules/amqplib/lib/channel.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/channel_model.mjs +206 -0
- package/esm/node_modules/amqplib/lib/channel_model.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/codec.mjs +273 -0
- package/esm/node_modules/amqplib/lib/codec.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/connect.mjs +143 -0
- package/esm/node_modules/amqplib/lib/connect.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/connection.mjs +416 -0
- package/esm/node_modules/amqplib/lib/connection.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/credentials.mjs +50 -0
- package/esm/node_modules/amqplib/lib/credentials.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/defs.mjs +4600 -0
- package/esm/node_modules/amqplib/lib/defs.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/error.mjs +29 -0
- package/esm/node_modules/amqplib/lib/error.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/format.mjs +28 -0
- package/esm/node_modules/amqplib/lib/format.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/frame.mjs +130 -0
- package/esm/node_modules/amqplib/lib/frame.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/heartbeat.mjs +40 -0
- package/esm/node_modules/amqplib/lib/heartbeat.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/mux.mjs +86 -0
- package/esm/node_modules/amqplib/lib/mux.mjs.map +1 -0
- package/esm/node_modules/amqplib/package.mjs +41 -0
- package/esm/node_modules/amqplib/package.mjs.map +1 -0
- package/esm/node_modules/buffer-more-ints/buffer-more-ints.mjs +360 -0
- package/esm/node_modules/buffer-more-ints/buffer-more-ints.mjs.map +1 -0
- package/esm/node_modules/dayjs/dayjs.min.mjs +305 -0
- package/esm/node_modules/dayjs/dayjs.min.mjs.map +1 -0
- package/esm/node_modules/querystringify/index.mjs +80 -0
- package/esm/node_modules/querystringify/index.mjs.map +1 -0
- package/esm/node_modules/requires-port/index.mjs +35 -0
- package/esm/node_modules/requires-port/index.mjs.map +1 -0
- package/esm/node_modules/url-parse/index.mjs +388 -0
- package/esm/node_modules/url-parse/index.mjs.map +1 -0
- package/esm/queue/load-herald.mjs +1 -1
- package/esm/seal/src/config.mjs +15 -0
- package/esm/seal/src/config.mjs.map +1 -0
- package/esm/seal/src/factory/index.mjs +4 -0
- package/esm/seal/src/factory/validate.mjs +34 -0
- package/esm/seal/src/factory/validate.mjs.map +1 -0
- package/esm/seal/src/factory/validators.mjs +132 -0
- package/esm/seal/src/factory/validators.mjs.map +1 -0
- package/esm/seal/src/helpers/date-helpers.mjs +24 -0
- package/esm/seal/src/helpers/date-helpers.mjs.map +1 -0
- package/esm/seal/src/helpers/get-field-value.mjs +46 -0
- package/esm/seal/src/helpers/get-field-value.mjs.map +1 -0
- package/esm/seal/src/helpers/index.mjs +6 -0
- package/esm/seal/src/helpers/is-empty-value.mjs +10 -0
- package/esm/seal/src/helpers/is-empty-value.mjs.map +1 -0
- package/esm/seal/src/helpers/path-helpers.mjs +12 -0
- package/esm/seal/src/helpers/path-helpers.mjs.map +1 -0
- package/esm/seal/src/helpers/validation-helpers.mjs +72 -0
- package/esm/seal/src/helpers/validation-helpers.mjs.map +1 -0
- package/esm/seal/src/index.mjs +87 -0
- package/esm/seal/src/mutators/array-mutators.mjs +32 -0
- package/esm/seal/src/mutators/array-mutators.mjs.map +1 -0
- package/esm/seal/src/mutators/date-mutators.mjs +94 -0
- package/esm/seal/src/mutators/date-mutators.mjs.map +1 -0
- package/esm/seal/src/mutators/index.mjs +8 -0
- package/esm/seal/src/mutators/number-mutators.mjs +52 -0
- package/esm/seal/src/mutators/number-mutators.mjs.map +1 -0
- package/esm/seal/src/mutators/object-mutators.mjs +30 -0
- package/esm/seal/src/mutators/object-mutators.mjs.map +1 -0
- package/esm/seal/src/mutators/scalar-mutators.mjs +9 -0
- package/esm/seal/src/mutators/scalar-mutators.mjs.map +1 -0
- package/esm/seal/src/mutators/string-mutators.mjs +186 -0
- package/esm/seal/src/mutators/string-mutators.mjs.map +1 -0
- package/esm/seal/src/rules/array/array-rules.mjs +41 -0
- package/esm/seal/src/rules/array/array-rules.mjs.map +1 -0
- package/esm/seal/src/rules/array/index.mjs +3 -0
- package/esm/seal/src/rules/color/color-rules.mjs +104 -0
- package/esm/seal/src/rules/color/color-rules.mjs.map +1 -0
- package/esm/seal/src/rules/color/index.mjs +3 -0
- package/esm/seal/src/rules/common/enum.mjs +77 -0
- package/esm/seal/src/rules/common/enum.mjs.map +1 -0
- package/esm/seal/src/rules/common/equals-field-rules.mjs +42 -0
- package/esm/seal/src/rules/common/equals-field-rules.mjs.map +1 -0
- package/esm/seal/src/rules/common/index.mjs +8 -0
- package/esm/seal/src/rules/common/instanceof.mjs +23 -0
- package/esm/seal/src/rules/common/instanceof.mjs.map +1 -0
- package/esm/seal/src/rules/common/literal.mjs +31 -0
- package/esm/seal/src/rules/common/literal.mjs.map +1 -0
- package/esm/seal/src/rules/common/type-rules.mjs +97 -0
- package/esm/seal/src/rules/common/type-rules.mjs.map +1 -0
- package/esm/seal/src/rules/common/unknown-key.mjs +25 -0
- package/esm/seal/src/rules/common/unknown-key.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/forbidden-if-rules.mjs +116 -0
- package/esm/seal/src/rules/conditional/forbidden-if-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/index.mjs +12 -0
- package/esm/seal/src/rules/conditional/present-if-rules.mjs +97 -0
- package/esm/seal/src/rules/conditional/present-if-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/present-unless-rules.mjs +30 -0
- package/esm/seal/src/rules/conditional/present-unless-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/present-with-rules.mjs +76 -0
- package/esm/seal/src/rules/conditional/present-with-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/present-without-rules.mjs +76 -0
- package/esm/seal/src/rules/conditional/present-without-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/required-if-rules.mjs +204 -0
- package/esm/seal/src/rules/conditional/required-if-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/required-unless-rules.mjs +31 -0
- package/esm/seal/src/rules/conditional/required-unless-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/required-when-rule.mjs +32 -0
- package/esm/seal/src/rules/conditional/required-when-rule.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/required-with-rules.mjs +67 -0
- package/esm/seal/src/rules/conditional/required-with-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/required-without-rules.mjs +67 -0
- package/esm/seal/src/rules/conditional/required-without-rules.mjs.map +1 -0
- package/esm/seal/src/rules/core/equal.mjs +22 -0
- package/esm/seal/src/rules/core/equal.mjs.map +1 -0
- package/esm/seal/src/rules/core/forbidden.mjs +20 -0
- package/esm/seal/src/rules/core/forbidden.mjs.map +1 -0
- package/esm/seal/src/rules/core/index.mjs +7 -0
- package/esm/seal/src/rules/core/required.mjs +36 -0
- package/esm/seal/src/rules/core/required.mjs.map +1 -0
- package/esm/seal/src/rules/core/union.mjs +30 -0
- package/esm/seal/src/rules/core/union.mjs.map +1 -0
- package/esm/seal/src/rules/core/when.mjs +37 -0
- package/esm/seal/src/rules/core/when.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-comparison-rules.mjs +78 -0
- package/esm/seal/src/rules/date/date-comparison-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-day-rules.mjs +49 -0
- package/esm/seal/src/rules/date/date-day-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-field-comparison-rules.mjs +82 -0
- package/esm/seal/src/rules/date/date-field-comparison-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-period-rules.mjs +399 -0
- package/esm/seal/src/rules/date/date-period-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-relative-rules.mjs +55 -0
- package/esm/seal/src/rules/date/date-relative-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-special-rules.mjs +58 -0
- package/esm/seal/src/rules/date/date-special-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date.mjs +235 -0
- package/esm/seal/src/rules/date/date.mjs.map +1 -0
- package/esm/seal/src/rules/date/index.mjs +9 -0
- package/esm/seal/src/rules/file/dimensions.mjs +3 -0
- package/esm/seal/src/rules/file/file-size.mjs +3 -0
- package/esm/seal/src/rules/file/index.mjs +4 -0
- package/esm/seal/src/rules/index.mjs +54 -0
- package/esm/seal/src/rules/length/index.mjs +3 -0
- package/esm/seal/src/rules/length/length-rules.mjs +98 -0
- package/esm/seal/src/rules/length/length-rules.mjs.map +1 -0
- package/esm/seal/src/rules/number/index.mjs +3 -0
- package/esm/seal/src/rules/number/number-rules.mjs +197 -0
- package/esm/seal/src/rules/number/number-rules.mjs.map +1 -0
- package/esm/seal/src/rules/scalar/accepted-rule.mjs +116 -0
- package/esm/seal/src/rules/scalar/accepted-rule.mjs.map +1 -0
- package/esm/seal/src/rules/scalar/declined-rule.mjs +116 -0
- package/esm/seal/src/rules/scalar/declined-rule.mjs.map +1 -0
- package/esm/seal/src/rules/scalar/index.mjs +4 -0
- package/esm/seal/src/rules/string/alpha.mjs +41 -0
- package/esm/seal/src/rules/string/alpha.mjs.map +1 -0
- package/esm/seal/src/rules/string/credit-card.mjs +32 -0
- package/esm/seal/src/rules/string/credit-card.mjs.map +1 -0
- package/esm/seal/src/rules/string/email.mjs +20 -0
- package/esm/seal/src/rules/string/email.mjs.map +1 -0
- package/esm/seal/src/rules/string/id-formats.mjs +104 -0
- package/esm/seal/src/rules/string/id-formats.mjs.map +1 -0
- package/esm/seal/src/rules/string/index.mjs +13 -0
- package/esm/seal/src/rules/string/ip.mjs +66 -0
- package/esm/seal/src/rules/string/ip.mjs.map +1 -0
- package/esm/seal/src/rules/string/matches.mjs +4 -0
- package/esm/seal/src/rules/string/pattern.mjs +20 -0
- package/esm/seal/src/rules/string/pattern.mjs.map +1 -0
- package/esm/seal/src/rules/string/string-comparison.mjs +56 -0
- package/esm/seal/src/rules/string/string-comparison.mjs.map +1 -0
- package/esm/seal/src/rules/string/strong-password-rule.mjs +31 -0
- package/esm/seal/src/rules/string/strong-password-rule.mjs.map +1 -0
- package/esm/seal/src/rules/string/url.mjs +23 -0
- package/esm/seal/src/rules/string/url.mjs.map +1 -0
- package/esm/seal/src/rules/string/without-whitespace.mjs +19 -0
- package/esm/seal/src/rules/string/without-whitespace.mjs.map +1 -0
- package/esm/seal/src/standard-schema/json-schema.mjs +81 -0
- package/esm/seal/src/standard-schema/json-schema.mjs.map +1 -0
- package/esm/seal/src/standard-schema/map-result.mjs +26 -0
- package/esm/seal/src/standard-schema/map-result.mjs.map +1 -0
- package/esm/seal/src/types/date-types.mjs +17 -0
- package/esm/seal/src/types/date-types.mjs.map +1 -0
- package/esm/seal/src/validators/any-validator.mjs +38 -0
- package/esm/seal/src/validators/any-validator.mjs.map +1 -0
- package/esm/seal/src/validators/array-validator.mjs +177 -0
- package/esm/seal/src/validators/array-validator.mjs.map +1 -0
- package/esm/seal/src/validators/base-validator.mjs +691 -0
- package/esm/seal/src/validators/base-validator.mjs.map +1 -0
- package/esm/seal/src/validators/boolean-validator.mjs +126 -0
- package/esm/seal/src/validators/boolean-validator.mjs.map +1 -0
- package/esm/seal/src/validators/computed-validator.mjs +118 -0
- package/esm/seal/src/validators/computed-validator.mjs.map +1 -0
- package/esm/seal/src/validators/date-validator.mjs +639 -0
- package/esm/seal/src/validators/date-validator.mjs.map +1 -0
- package/esm/seal/src/validators/discriminated-union-validator.mjs +129 -0
- package/esm/seal/src/validators/discriminated-union-validator.mjs.map +1 -0
- package/esm/seal/src/validators/float-validator.mjs +18 -0
- package/esm/seal/src/validators/float-validator.mjs.map +1 -0
- package/esm/seal/src/validators/index.mjs +28 -0
- package/esm/seal/src/validators/instanceof-validator.mjs +64 -0
- package/esm/seal/src/validators/instanceof-validator.mjs.map +1 -0
- package/esm/seal/src/validators/int-validator.mjs +30 -0
- package/esm/seal/src/validators/int-validator.mjs.map +1 -0
- package/esm/seal/src/validators/lazy-validator.mjs +87 -0
- package/esm/seal/src/validators/lazy-validator.mjs.map +1 -0
- package/esm/seal/src/validators/literal-validator.mjs +71 -0
- package/esm/seal/src/validators/literal-validator.mjs.map +1 -0
- package/esm/seal/src/validators/managed-validator.mjs +39 -0
- package/esm/seal/src/validators/managed-validator.mjs.map +1 -0
- package/esm/seal/src/validators/methods/equality-conditional-methods.mjs +129 -0
- package/esm/seal/src/validators/methods/equality-conditional-methods.mjs.map +1 -0
- package/esm/seal/src/validators/methods/forbidden-methods.mjs +131 -0
- package/esm/seal/src/validators/methods/forbidden-methods.mjs.map +1 -0
- package/esm/seal/src/validators/methods/present-methods.mjs +235 -0
- package/esm/seal/src/validators/methods/present-methods.mjs.map +1 -0
- package/esm/seal/src/validators/methods/required-methods.mjs +347 -0
- package/esm/seal/src/validators/methods/required-methods.mjs.map +1 -0
- package/esm/seal/src/validators/number-validator.mjs +310 -0
- package/esm/seal/src/validators/number-validator.mjs.map +1 -0
- package/esm/seal/src/validators/numeric-validator.mjs +27 -0
- package/esm/seal/src/validators/numeric-validator.mjs.map +1 -0
- package/esm/seal/src/validators/object-validator.mjs +442 -0
- package/esm/seal/src/validators/object-validator.mjs.map +1 -0
- package/esm/seal/src/validators/primitive-validator.mjs +89 -0
- package/esm/seal/src/validators/primitive-validator.mjs.map +1 -0
- package/esm/seal/src/validators/record-validator.mjs +112 -0
- package/esm/seal/src/validators/record-validator.mjs.map +1 -0
- package/esm/seal/src/validators/scalar-validator.mjs +172 -0
- package/esm/seal/src/validators/scalar-validator.mjs.map +1 -0
- package/esm/seal/src/validators/string-validator.mjs +459 -0
- package/esm/seal/src/validators/string-validator.mjs.map +1 -0
- package/esm/seal/src/validators/tuple-validator.mjs +134 -0
- package/esm/seal/src/validators/tuple-validator.mjs.map +1 -0
- package/esm/seal/src/validators/union-validator.mjs +66 -0
- package/esm/seal/src/validators/union-validator.mjs.map +1 -0
- package/llms-full.txt +5 -1
- package/package.json +5 -5
- package/skills/send-ad-hoc/SKILL.md +1 -1
- package/skills/use-in-app/SKILL.md +4 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { __commonJSMin, __require } from "../../../_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
import { require_url_parse } from "../../url-parse/index.mjs";
|
|
3
|
+
import { require_connection } from "./connection.mjs";
|
|
4
|
+
import { require_credentials } from "./credentials.mjs";
|
|
5
|
+
import { require_package } from "../package.mjs";
|
|
6
|
+
|
|
7
|
+
//#region ../node_modules/amqplib/lib/connect.js
|
|
8
|
+
var require_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
9
|
+
var URL = require_url_parse();
|
|
10
|
+
var QS = __require("querystring");
|
|
11
|
+
var Connection = require_connection().Connection;
|
|
12
|
+
var fmt = __require("util").format;
|
|
13
|
+
var credentials = require_credentials();
|
|
14
|
+
function copyInto(obj, target) {
|
|
15
|
+
var keys = Object.keys(obj);
|
|
16
|
+
var i = keys.length;
|
|
17
|
+
while (i--) {
|
|
18
|
+
var k = keys[i];
|
|
19
|
+
target[k] = obj[k];
|
|
20
|
+
}
|
|
21
|
+
return target;
|
|
22
|
+
}
|
|
23
|
+
function clone(obj) {
|
|
24
|
+
return copyInto(obj, {});
|
|
25
|
+
}
|
|
26
|
+
var CLIENT_PROPERTIES = {
|
|
27
|
+
"product": "amqplib",
|
|
28
|
+
"version": require_package().version,
|
|
29
|
+
"platform": fmt("Node.JS %s", process.version),
|
|
30
|
+
"information": "https://amqp-node.github.io/amqplib/",
|
|
31
|
+
"capabilities": {
|
|
32
|
+
"publisher_confirms": true,
|
|
33
|
+
"exchange_exchange_bindings": true,
|
|
34
|
+
"basic.nack": true,
|
|
35
|
+
"consumer_cancel_notify": true,
|
|
36
|
+
"connection.blocked": true,
|
|
37
|
+
"authentication_failure_close": true
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
function openFrames(vhost, query, credentials, extraClientProperties) {
|
|
41
|
+
if (!vhost) vhost = "/";
|
|
42
|
+
else vhost = QS.unescape(vhost);
|
|
43
|
+
var query = query || {};
|
|
44
|
+
function intOrDefault(val, def) {
|
|
45
|
+
return val === void 0 ? def : parseInt(val);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
"clientProperties": copyInto(extraClientProperties, Object.create(CLIENT_PROPERTIES)),
|
|
49
|
+
"mechanism": credentials.mechanism,
|
|
50
|
+
"response": credentials.response(),
|
|
51
|
+
"locale": query.locale || "en_US",
|
|
52
|
+
"channelMax": intOrDefault(query.channelMax, 0),
|
|
53
|
+
"frameMax": intOrDefault(query.frameMax, 131072),
|
|
54
|
+
"heartbeat": intOrDefault(query.heartbeat, 0),
|
|
55
|
+
"virtualHost": vhost,
|
|
56
|
+
"capabilities": "",
|
|
57
|
+
"insist": 0
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function credentialsFromUrl(parts) {
|
|
61
|
+
var user = "guest", passwd = "guest";
|
|
62
|
+
if (parts.username != "" || parts.password != "") {
|
|
63
|
+
user = parts.username ? unescape(parts.username) : "";
|
|
64
|
+
passwd = parts.password ? unescape(parts.password) : "";
|
|
65
|
+
}
|
|
66
|
+
return credentials.plain(user, passwd);
|
|
67
|
+
}
|
|
68
|
+
function connect(url, socketOptions, openCallback) {
|
|
69
|
+
var sockopts = clone(socketOptions || {});
|
|
70
|
+
url = url || "amqp://localhost";
|
|
71
|
+
var noDelay = !!sockopts.noDelay;
|
|
72
|
+
var timeout = sockopts.timeout;
|
|
73
|
+
var keepAlive = !!sockopts.keepAlive;
|
|
74
|
+
var keepAliveDelay = sockopts.keepAliveDelay || 0;
|
|
75
|
+
var extraClientProperties = sockopts.clientProperties || {};
|
|
76
|
+
var protocol, fields;
|
|
77
|
+
if (typeof url === "object") {
|
|
78
|
+
protocol = (url.protocol || "amqp") + ":";
|
|
79
|
+
sockopts.host = url.hostname;
|
|
80
|
+
sockopts.servername = sockopts.servername || url.hostname;
|
|
81
|
+
sockopts.port = url.port || (protocol === "amqp:" ? 5672 : 5671);
|
|
82
|
+
var user, pass;
|
|
83
|
+
if (url.username == void 0 && url.password == void 0) {
|
|
84
|
+
user = "guest";
|
|
85
|
+
pass = "guest";
|
|
86
|
+
} else {
|
|
87
|
+
user = url.username || "";
|
|
88
|
+
pass = url.password || "";
|
|
89
|
+
}
|
|
90
|
+
var config = {
|
|
91
|
+
locale: url.locale,
|
|
92
|
+
channelMax: url.channelMax,
|
|
93
|
+
frameMax: url.frameMax,
|
|
94
|
+
heartbeat: url.heartbeat
|
|
95
|
+
};
|
|
96
|
+
fields = openFrames(url.vhost, config, sockopts.credentials || credentials.plain(user, pass), extraClientProperties);
|
|
97
|
+
} else {
|
|
98
|
+
var parts = URL(url, true);
|
|
99
|
+
var host = parts.hostname.replace(/^\[|\]$/g, "");
|
|
100
|
+
protocol = parts.protocol;
|
|
101
|
+
sockopts.host = host;
|
|
102
|
+
sockopts.servername = sockopts.servername || host;
|
|
103
|
+
sockopts.port = parseInt(parts.port) || (protocol === "amqp:" ? 5672 : 5671);
|
|
104
|
+
fields = openFrames(parts.pathname ? parts.pathname.substr(1) : null, parts.query, sockopts.credentials || credentialsFromUrl(parts), extraClientProperties);
|
|
105
|
+
}
|
|
106
|
+
var sockok = false;
|
|
107
|
+
var sock;
|
|
108
|
+
function onConnect() {
|
|
109
|
+
sockok = true;
|
|
110
|
+
sock.setNoDelay(noDelay);
|
|
111
|
+
if (keepAlive) sock.setKeepAlive(keepAlive, keepAliveDelay);
|
|
112
|
+
var c = new Connection(sock);
|
|
113
|
+
c.open(fields, function(err, ok) {
|
|
114
|
+
if (timeout) sock.setTimeout(0);
|
|
115
|
+
if (err === null) openCallback(null, c);
|
|
116
|
+
else {
|
|
117
|
+
sock.end();
|
|
118
|
+
sock.destroy();
|
|
119
|
+
openCallback(err);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (protocol === "amqp:") sock = __require("net").connect(sockopts, onConnect);
|
|
124
|
+
else if (protocol === "amqps:") sock = __require("tls").connect(sockopts, onConnect);
|
|
125
|
+
else throw new Error("Expected amqp: or amqps: as the protocol; got " + protocol);
|
|
126
|
+
if (timeout) sock.setTimeout(timeout, function() {
|
|
127
|
+
sock.end();
|
|
128
|
+
sock.destroy();
|
|
129
|
+
openCallback(/* @__PURE__ */ new Error("connect ETIMEDOUT"));
|
|
130
|
+
});
|
|
131
|
+
sock.once("error", function(err) {
|
|
132
|
+
if (!sockok) openCallback(err);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
module.exports.connect = connect;
|
|
136
|
+
module.exports.credentialsFromUrl = credentialsFromUrl;
|
|
137
|
+
}));
|
|
138
|
+
|
|
139
|
+
//#endregion
|
|
140
|
+
export default require_connect();
|
|
141
|
+
|
|
142
|
+
export { require_connect };
|
|
143
|
+
//# sourceMappingURL=connect.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.mjs","names":[],"sources":["../../../../../../../../../node_modules/amqplib/lib/connect.js"],"sourcesContent":["//\n//\n//\n\n// General-purpose API for glueing everything together.\n\n'use strict';\n\nvar URL = require('url-parse');\nvar QS = require('querystring');\nvar Connection = require('./connection').Connection;\nvar fmt = require('util').format;\nvar credentials = require('./credentials');\n\nfunction copyInto(obj, target) {\n var keys = Object.keys(obj);\n var i = keys.length;\n while (i--) {\n var k = keys[i];\n target[k] = obj[k];\n }\n return target;\n}\n\n// Adapted from util._extend, which is too fringe to use.\nfunction clone(obj) {\n return copyInto(obj, {});\n}\n\nvar CLIENT_PROPERTIES = {\n \"product\": \"amqplib\",\n \"version\": require('../package.json').version,\n \"platform\": fmt('Node.JS %s', process.version),\n \"information\": \"https://amqp-node.github.io/amqplib/\",\n \"capabilities\": {\n \"publisher_confirms\": true,\n \"exchange_exchange_bindings\": true,\n \"basic.nack\": true,\n \"consumer_cancel_notify\": true,\n \"connection.blocked\": true,\n \"authentication_failure_close\": true\n }\n};\n\n// Construct the main frames used in the opening handshake\nfunction openFrames(vhost, query, credentials, extraClientProperties) {\n if (!vhost)\n vhost = '/';\n else\n vhost = QS.unescape(vhost);\n\n var query = query || {};\n\n function intOrDefault(val, def) {\n return (val === undefined) ? def : parseInt(val);\n }\n\n var clientProperties = Object.create(CLIENT_PROPERTIES);\n\n return {\n // start-ok\n 'clientProperties': copyInto(extraClientProperties, clientProperties),\n 'mechanism': credentials.mechanism,\n 'response': credentials.response(),\n 'locale': query.locale || 'en_US',\n\n // tune-ok\n 'channelMax': intOrDefault(query.channelMax, 0),\n 'frameMax': intOrDefault(query.frameMax, 131072),\n 'heartbeat': intOrDefault(query.heartbeat, 0),\n\n // open\n 'virtualHost': vhost,\n 'capabilities': '',\n 'insist': 0\n };\n}\n\n// Decide on credentials based on what we're supplied.\nfunction credentialsFromUrl(parts) {\n var user = 'guest', passwd = 'guest';\n if (parts.username != '' || parts.password != '') {\n user = (parts.username) ? unescape(parts.username) : '';\n passwd = (parts.password) ? unescape(parts.password) : '';\n }\n return credentials.plain(user, passwd);\n}\n\nfunction connect(url, socketOptions, openCallback) {\n // tls.connect uses `util._extend()` on the options given it, which\n // copies only properties mentioned in `Object.keys()`, when\n // processing the options. So I have to make copies too, rather\n // than using `Object.create()`.\n var sockopts = clone(socketOptions || {});\n url = url || 'amqp://localhost';\n\n var noDelay = !!sockopts.noDelay;\n var timeout = sockopts.timeout;\n var keepAlive = !!sockopts.keepAlive;\n // 0 is default for node\n var keepAliveDelay = sockopts.keepAliveDelay || 0;\n\n var extraClientProperties = sockopts.clientProperties || {};\n\n var protocol, fields;\n if (typeof url === 'object') {\n protocol = (url.protocol || 'amqp') + ':';\n sockopts.host = url.hostname;\n sockopts.servername = sockopts.servername || url.hostname;\n sockopts.port = url.port || ((protocol === 'amqp:') ? 5672 : 5671);\n\n var user, pass;\n // Only default if both are missing, to have the same behaviour as\n // the stringly URL.\n if (url.username == undefined && url.password == undefined) {\n user = 'guest'; pass = 'guest';\n } else {\n user = url.username || '';\n pass = url.password || '';\n }\n\n var config = {\n locale: url.locale,\n channelMax: url.channelMax,\n frameMax: url.frameMax,\n heartbeat: url.heartbeat,\n };\n\n fields = openFrames(url.vhost, config, sockopts.credentials || credentials.plain(user, pass), extraClientProperties);\n } else {\n var parts = URL(url, true); // yes, parse the query string\n var host = parts.hostname.replace(/^\\[|\\]$/g, '');\n protocol = parts.protocol;\n sockopts.host = host;\n sockopts.servername = sockopts.servername || host;\n sockopts.port = parseInt(parts.port) || ((protocol === 'amqp:') ? 5672 : 5671);\n var vhost = parts.pathname ? parts.pathname.substr(1) : null;\n fields = openFrames(vhost, parts.query, sockopts.credentials || credentialsFromUrl(parts), extraClientProperties);\n }\n\n var sockok = false;\n var sock;\n\n function onConnect() {\n sockok = true;\n sock.setNoDelay(noDelay);\n if (keepAlive) sock.setKeepAlive(keepAlive, keepAliveDelay);\n\n var c = new Connection(sock);\n c.open(fields, function(err, ok) {\n // disable timeout once the connection is open, we don't want\n // it fouling things\n if (timeout) sock.setTimeout(0);\n if (err === null) {\n openCallback(null, c);\n } else {\n // The connection isn't closed by the server on e.g. wrong password\n sock.end();\n sock.destroy();\n openCallback(err);\n }\n });\n }\n\n if (protocol === 'amqp:') {\n sock = require('net').connect(sockopts, onConnect);\n }\n else if (protocol === 'amqps:') {\n sock = require('tls').connect(sockopts, onConnect);\n }\n else {\n throw new Error(\"Expected amqp: or amqps: as the protocol; got \" + protocol);\n }\n\n if (timeout) {\n sock.setTimeout(timeout, function() {\n sock.end();\n sock.destroy();\n openCallback(new Error('connect ETIMEDOUT'));\n });\n }\n\n sock.once('error', function(err) {\n if (!sockok) openCallback(err);\n });\n\n}\n\nmodule.exports.connect = connect;\nmodule.exports.credentialsFromUrl = credentialsFromUrl;\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
import { __commonJSMin, __require } from "../../../_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
import { require_defs } from "./defs.mjs";
|
|
3
|
+
import { require_frame } from "./frame.mjs";
|
|
4
|
+
import { require_mux } from "./mux.mjs";
|
|
5
|
+
import { require_heartbeat } from "./heartbeat.mjs";
|
|
6
|
+
import { require_format } from "./format.mjs";
|
|
7
|
+
import { require_bitset } from "./bitset.mjs";
|
|
8
|
+
import { require_error } from "./error.mjs";
|
|
9
|
+
|
|
10
|
+
//#region ../node_modules/amqplib/lib/connection.js
|
|
11
|
+
var require_connection = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
12
|
+
var defs = require_defs();
|
|
13
|
+
var constants = defs.constants;
|
|
14
|
+
var frame = require_frame();
|
|
15
|
+
var HEARTBEAT = frame.HEARTBEAT;
|
|
16
|
+
var Mux = require_mux().Mux;
|
|
17
|
+
var Duplex = __require("stream").Duplex;
|
|
18
|
+
var EventEmitter = __require("events");
|
|
19
|
+
var Heart = require_heartbeat().Heart;
|
|
20
|
+
var methodName = require_format().methodName;
|
|
21
|
+
var closeMsg = require_format().closeMessage;
|
|
22
|
+
var inspect = require_format().inspect;
|
|
23
|
+
var BitSet = require_bitset().BitSet;
|
|
24
|
+
var fmt = __require("util").format;
|
|
25
|
+
var PassThrough = __require("stream").PassThrough;
|
|
26
|
+
var IllegalOperationError = require_error().IllegalOperationError;
|
|
27
|
+
var stackCapture = require_error().stackCapture;
|
|
28
|
+
var DEFAULT_WRITE_HWM = 1024;
|
|
29
|
+
var SINGLE_CHUNK_THRESHOLD = 2048;
|
|
30
|
+
var Connection = class extends EventEmitter {
|
|
31
|
+
constructor(underlying) {
|
|
32
|
+
super();
|
|
33
|
+
var stream = this.stream = wrapStream(underlying);
|
|
34
|
+
this.muxer = new Mux(stream);
|
|
35
|
+
this.rest = Buffer.alloc(0);
|
|
36
|
+
this.frameMax = constants.FRAME_MIN_SIZE;
|
|
37
|
+
this.sentSinceLastCheck = false;
|
|
38
|
+
this.recvSinceLastCheck = false;
|
|
39
|
+
this.expectSocketClose = false;
|
|
40
|
+
this.freeChannels = new BitSet();
|
|
41
|
+
this.channels = [{
|
|
42
|
+
channel: { accept: channel0(this) },
|
|
43
|
+
buffer: underlying
|
|
44
|
+
}];
|
|
45
|
+
}
|
|
46
|
+
sendProtocolHeader() {
|
|
47
|
+
this.sendBytes(frame.PROTOCOL_HEADER);
|
|
48
|
+
}
|
|
49
|
+
open(allFields, openCallback0) {
|
|
50
|
+
var self = this;
|
|
51
|
+
var openCallback = openCallback0 || function() {};
|
|
52
|
+
var tunedOptions = Object.create(allFields);
|
|
53
|
+
function wait(k) {
|
|
54
|
+
self.step(function(err, frame) {
|
|
55
|
+
if (err !== null) bail(err);
|
|
56
|
+
else if (frame.channel !== 0) bail(new Error(fmt("Frame on channel != 0 during handshake: %s", inspect(frame, false))));
|
|
57
|
+
else k(frame);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function expect(Method, k) {
|
|
61
|
+
wait(function(frame) {
|
|
62
|
+
if (frame.id === Method) k(frame);
|
|
63
|
+
else bail(new Error(fmt("Expected %s; got %s", methodName(Method), inspect(frame, false))));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function bail(err) {
|
|
67
|
+
openCallback(err);
|
|
68
|
+
}
|
|
69
|
+
function send(Method) {
|
|
70
|
+
self.sendMethod(0, Method, tunedOptions);
|
|
71
|
+
}
|
|
72
|
+
function negotiate(server, desired) {
|
|
73
|
+
if (server === 0 || desired === 0) return Math.max(server, desired);
|
|
74
|
+
else return Math.min(server, desired);
|
|
75
|
+
}
|
|
76
|
+
function onStart(start) {
|
|
77
|
+
if (start.fields.mechanisms.toString().split(" ").indexOf(allFields.mechanism) < 0) {
|
|
78
|
+
bail(new Error(fmt("SASL mechanism %s is not provided by the server", allFields.mechanism)));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
self.serverProperties = start.fields.serverProperties;
|
|
82
|
+
try {
|
|
83
|
+
send(defs.ConnectionStartOk);
|
|
84
|
+
} catch (err) {
|
|
85
|
+
bail(err);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
wait(afterStartOk);
|
|
89
|
+
}
|
|
90
|
+
function afterStartOk(reply) {
|
|
91
|
+
switch (reply.id) {
|
|
92
|
+
case defs.ConnectionSecure:
|
|
93
|
+
bail(/* @__PURE__ */ new Error("Wasn't expecting to have to go through secure"));
|
|
94
|
+
break;
|
|
95
|
+
case defs.ConnectionClose:
|
|
96
|
+
bail(new Error(fmt("Handshake terminated by server: %s", closeMsg(reply))));
|
|
97
|
+
break;
|
|
98
|
+
case defs.ConnectionTune:
|
|
99
|
+
var fields = reply.fields;
|
|
100
|
+
tunedOptions.frameMax = negotiate(fields.frameMax, allFields.frameMax);
|
|
101
|
+
tunedOptions.channelMax = negotiate(fields.channelMax, allFields.channelMax);
|
|
102
|
+
tunedOptions.heartbeat = negotiate(fields.heartbeat, allFields.heartbeat);
|
|
103
|
+
try {
|
|
104
|
+
send(defs.ConnectionTuneOk);
|
|
105
|
+
send(defs.ConnectionOpen);
|
|
106
|
+
} catch (err) {
|
|
107
|
+
bail(err);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
expect(defs.ConnectionOpenOk, onOpenOk);
|
|
111
|
+
break;
|
|
112
|
+
default:
|
|
113
|
+
bail(new Error(fmt("Expected connection.secure, connection.close, or connection.tune during handshake; got %s", inspect(reply, false))));
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function onOpenOk(openOk) {
|
|
118
|
+
self.channelMax = tunedOptions.channelMax || 65535;
|
|
119
|
+
self.frameMax = tunedOptions.frameMax || 4294967295;
|
|
120
|
+
self.heartbeat = tunedOptions.heartbeat;
|
|
121
|
+
self.heartbeater = self.startHeartbeater();
|
|
122
|
+
self.accept = mainAccept;
|
|
123
|
+
succeed(openOk);
|
|
124
|
+
}
|
|
125
|
+
function endWhileOpening(err) {
|
|
126
|
+
bail(err || /* @__PURE__ */ new Error("Socket closed abruptly during opening handshake"));
|
|
127
|
+
}
|
|
128
|
+
this.stream.on("end", endWhileOpening);
|
|
129
|
+
this.stream.on("error", endWhileOpening);
|
|
130
|
+
function succeed(ok) {
|
|
131
|
+
self.stream.removeListener("end", endWhileOpening);
|
|
132
|
+
self.stream.removeListener("error", endWhileOpening);
|
|
133
|
+
self.stream.on("error", self.onSocketError.bind(self));
|
|
134
|
+
self.stream.on("end", self.onSocketError.bind(self, /* @__PURE__ */ new Error("Unexpected close")));
|
|
135
|
+
self.on("frameError", self.onSocketError.bind(self));
|
|
136
|
+
self.acceptLoop();
|
|
137
|
+
openCallback(null, ok);
|
|
138
|
+
}
|
|
139
|
+
this.sendProtocolHeader();
|
|
140
|
+
expect(defs.ConnectionStart, onStart);
|
|
141
|
+
}
|
|
142
|
+
close(closeCallback) {
|
|
143
|
+
var k = closeCallback && function() {
|
|
144
|
+
closeCallback(null);
|
|
145
|
+
};
|
|
146
|
+
this.closeBecause("Cheers, thanks", constants.REPLY_SUCCESS, k);
|
|
147
|
+
}
|
|
148
|
+
closeBecause(reason, code, k) {
|
|
149
|
+
this.sendMethod(0, defs.ConnectionClose, {
|
|
150
|
+
replyText: reason,
|
|
151
|
+
replyCode: code,
|
|
152
|
+
methodId: 0,
|
|
153
|
+
classId: 0
|
|
154
|
+
});
|
|
155
|
+
var s = stackCapture("closeBecause called: " + reason);
|
|
156
|
+
this.toClosing(s, k);
|
|
157
|
+
}
|
|
158
|
+
closeWithError(reason, code, error) {
|
|
159
|
+
this.emit("error", error);
|
|
160
|
+
this.closeBecause(reason, code);
|
|
161
|
+
}
|
|
162
|
+
onSocketError(err) {
|
|
163
|
+
if (!this.expectSocketClose) {
|
|
164
|
+
this.expectSocketClose = true;
|
|
165
|
+
this.emit("error", err);
|
|
166
|
+
var s = stackCapture("Socket error");
|
|
167
|
+
this.toClosed(s, err);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
toClosing(capturedStack, k) {
|
|
171
|
+
var send = this.sendMethod.bind(this);
|
|
172
|
+
this.accept = function(f) {
|
|
173
|
+
if (f.id === defs.ConnectionCloseOk) {
|
|
174
|
+
if (k) k();
|
|
175
|
+
var s = stackCapture("ConnectionCloseOk received");
|
|
176
|
+
this.toClosed(s, void 0);
|
|
177
|
+
} else if (f.id === defs.ConnectionClose) send(0, defs.ConnectionCloseOk, {});
|
|
178
|
+
};
|
|
179
|
+
invalidateSend(this, "Connection closing", capturedStack);
|
|
180
|
+
}
|
|
181
|
+
_closeChannels(capturedStack) {
|
|
182
|
+
for (var i = 1; i < this.channels.length; i++) {
|
|
183
|
+
var ch = this.channels[i];
|
|
184
|
+
if (ch !== null) ch.channel.toClosed(capturedStack);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
toClosed(capturedStack, maybeErr) {
|
|
188
|
+
this._closeChannels(capturedStack);
|
|
189
|
+
var info = fmt("Connection closed (%s)", maybeErr ? maybeErr.toString() : "by client");
|
|
190
|
+
invalidateSend(this, info, capturedStack);
|
|
191
|
+
this.accept = invalidOp(info, capturedStack);
|
|
192
|
+
this.close = function(cb) {
|
|
193
|
+
cb && cb(new IllegalOperationError(info, capturedStack));
|
|
194
|
+
};
|
|
195
|
+
if (this.heartbeater) this.heartbeater.clear();
|
|
196
|
+
this.expectSocketClose = true;
|
|
197
|
+
this.stream.end();
|
|
198
|
+
this.emit("close", maybeErr);
|
|
199
|
+
}
|
|
200
|
+
_updateSecret(newSecret, reason, cb) {
|
|
201
|
+
this.sendMethod(0, defs.ConnectionUpdateSecret, {
|
|
202
|
+
newSecret,
|
|
203
|
+
reason
|
|
204
|
+
});
|
|
205
|
+
this.once("update-secret-ok", cb);
|
|
206
|
+
}
|
|
207
|
+
startHeartbeater() {
|
|
208
|
+
if (this.heartbeat === 0) return null;
|
|
209
|
+
else {
|
|
210
|
+
var self = this;
|
|
211
|
+
var hb = new Heart(this.heartbeat, this.checkSend.bind(this), this.checkRecv.bind(this));
|
|
212
|
+
hb.on("timeout", function() {
|
|
213
|
+
var hberr = /* @__PURE__ */ new Error("Heartbeat timeout");
|
|
214
|
+
self.emit("error", hberr);
|
|
215
|
+
var s = stackCapture("Heartbeat timeout");
|
|
216
|
+
self.toClosed(s, hberr);
|
|
217
|
+
});
|
|
218
|
+
hb.on("beat", function() {
|
|
219
|
+
self.sendHeartbeat();
|
|
220
|
+
});
|
|
221
|
+
return hb;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
freshChannel(channel, options) {
|
|
225
|
+
var next = this.freeChannels.nextClearBit(1);
|
|
226
|
+
if (next < 0 || next > this.channelMax) throw new Error("No channels left to allocate");
|
|
227
|
+
this.freeChannels.set(next);
|
|
228
|
+
var writeBuffer = new PassThrough({
|
|
229
|
+
objectMode: true,
|
|
230
|
+
highWaterMark: options && options.highWaterMark || DEFAULT_WRITE_HWM
|
|
231
|
+
});
|
|
232
|
+
this.channels[next] = {
|
|
233
|
+
channel,
|
|
234
|
+
buffer: writeBuffer
|
|
235
|
+
};
|
|
236
|
+
writeBuffer.on("drain", function() {
|
|
237
|
+
channel.onBufferDrain();
|
|
238
|
+
});
|
|
239
|
+
this.muxer.pipeFrom(writeBuffer);
|
|
240
|
+
return next;
|
|
241
|
+
}
|
|
242
|
+
releaseChannel(channel) {
|
|
243
|
+
this.freeChannels.clear(channel);
|
|
244
|
+
this.channels[channel].buffer.end();
|
|
245
|
+
this.channels[channel] = null;
|
|
246
|
+
}
|
|
247
|
+
acceptLoop() {
|
|
248
|
+
var self = this;
|
|
249
|
+
function go() {
|
|
250
|
+
try {
|
|
251
|
+
var f;
|
|
252
|
+
while (f = self.recvFrame()) self.accept(f);
|
|
253
|
+
} catch (e) {
|
|
254
|
+
self.emit("frameError", e);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
self.stream.on("readable", go);
|
|
258
|
+
go();
|
|
259
|
+
}
|
|
260
|
+
step(cb) {
|
|
261
|
+
var self = this;
|
|
262
|
+
function recv() {
|
|
263
|
+
var f;
|
|
264
|
+
try {
|
|
265
|
+
f = self.recvFrame();
|
|
266
|
+
} catch (e) {
|
|
267
|
+
cb(e, null);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
if (f) cb(null, f);
|
|
271
|
+
else self.stream.once("readable", recv);
|
|
272
|
+
}
|
|
273
|
+
recv();
|
|
274
|
+
}
|
|
275
|
+
checkSend() {
|
|
276
|
+
var check = this.sentSinceLastCheck;
|
|
277
|
+
this.sentSinceLastCheck = false;
|
|
278
|
+
return check;
|
|
279
|
+
}
|
|
280
|
+
checkRecv() {
|
|
281
|
+
var check = this.recvSinceLastCheck;
|
|
282
|
+
this.recvSinceLastCheck = false;
|
|
283
|
+
return check;
|
|
284
|
+
}
|
|
285
|
+
sendBytes(bytes) {
|
|
286
|
+
this.sentSinceLastCheck = true;
|
|
287
|
+
this.stream.write(bytes);
|
|
288
|
+
}
|
|
289
|
+
sendHeartbeat() {
|
|
290
|
+
return this.sendBytes(frame.HEARTBEAT_BUF);
|
|
291
|
+
}
|
|
292
|
+
sendMethod(channel, Method, fields) {
|
|
293
|
+
var frame = encodeMethod(Method, channel, fields);
|
|
294
|
+
this.sentSinceLastCheck = true;
|
|
295
|
+
return this.channels[channel].buffer.write(frame);
|
|
296
|
+
}
|
|
297
|
+
sendMessage(channel, Method, fields, Properties, props, content) {
|
|
298
|
+
if (!Buffer.isBuffer(content)) throw new TypeError("content is not a buffer");
|
|
299
|
+
var mframe = encodeMethod(Method, channel, fields);
|
|
300
|
+
var pframe = encodeProperties(Properties, channel, content.length, props);
|
|
301
|
+
var buffer = this.channels[channel].buffer;
|
|
302
|
+
this.sentSinceLastCheck = true;
|
|
303
|
+
var methodHeaderLen = mframe.length + pframe.length;
|
|
304
|
+
var bodyLen = content.length > 0 ? content.length + FRAME_OVERHEAD : 0;
|
|
305
|
+
var allLen = methodHeaderLen + bodyLen;
|
|
306
|
+
if (allLen < SINGLE_CHUNK_THRESHOLD) {
|
|
307
|
+
var all = Buffer.allocUnsafe(allLen);
|
|
308
|
+
var offset = mframe.copy(all, 0);
|
|
309
|
+
offset += pframe.copy(all, offset);
|
|
310
|
+
if (bodyLen > 0) makeBodyFrame(channel, content).copy(all, offset);
|
|
311
|
+
return buffer.write(all);
|
|
312
|
+
} else {
|
|
313
|
+
if (methodHeaderLen < SINGLE_CHUNK_THRESHOLD) {
|
|
314
|
+
var both = Buffer.allocUnsafe(methodHeaderLen);
|
|
315
|
+
var offset = mframe.copy(both, 0);
|
|
316
|
+
pframe.copy(both, offset);
|
|
317
|
+
buffer.write(both);
|
|
318
|
+
} else {
|
|
319
|
+
buffer.write(mframe);
|
|
320
|
+
buffer.write(pframe);
|
|
321
|
+
}
|
|
322
|
+
return this.sendContent(channel, content);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
sendContent(channel, body) {
|
|
326
|
+
if (!Buffer.isBuffer(body)) throw new TypeError(fmt("Expected buffer; got %s", body));
|
|
327
|
+
var writeResult = true;
|
|
328
|
+
var buffer = this.channels[channel].buffer;
|
|
329
|
+
var maxBody = this.frameMax - FRAME_OVERHEAD;
|
|
330
|
+
for (var offset = 0; offset < body.length; offset += maxBody) {
|
|
331
|
+
var end = offset + maxBody;
|
|
332
|
+
var bodyFrame = makeBodyFrame(channel, end > body.length ? body.subarray(offset) : body.subarray(offset, end));
|
|
333
|
+
writeResult = buffer.write(bodyFrame);
|
|
334
|
+
}
|
|
335
|
+
this.sentSinceLastCheck = true;
|
|
336
|
+
return writeResult;
|
|
337
|
+
}
|
|
338
|
+
recvFrame() {
|
|
339
|
+
var frame = parseFrame(this.rest);
|
|
340
|
+
if (!frame) {
|
|
341
|
+
var incoming = this.stream.read();
|
|
342
|
+
if (incoming === null) return false;
|
|
343
|
+
else {
|
|
344
|
+
this.recvSinceLastCheck = true;
|
|
345
|
+
this.rest = Buffer.concat([this.rest, incoming]);
|
|
346
|
+
return this.recvFrame();
|
|
347
|
+
}
|
|
348
|
+
} else {
|
|
349
|
+
this.rest = frame.rest;
|
|
350
|
+
return decodeFrame(frame);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
function mainAccept(frame) {
|
|
355
|
+
var rec = this.channels[frame.channel];
|
|
356
|
+
if (rec) return rec.channel.accept(frame);
|
|
357
|
+
else this.closeWithError(fmt("Frame on unknown channel %d", frame.channel), constants.CHANNEL_ERROR, new Error(fmt("Frame on unknown channel: %s", inspect(frame, false))));
|
|
358
|
+
}
|
|
359
|
+
function channel0(connection) {
|
|
360
|
+
return function(f) {
|
|
361
|
+
if (f === HEARTBEAT);
|
|
362
|
+
else if (f.id === defs.ConnectionClose) {
|
|
363
|
+
connection.sendMethod(0, defs.ConnectionCloseOk, {});
|
|
364
|
+
var emsg = fmt("Connection closed: %s", closeMsg(f));
|
|
365
|
+
var s = stackCapture(emsg);
|
|
366
|
+
var e = new Error(emsg);
|
|
367
|
+
e.code = f.fields.replyCode;
|
|
368
|
+
if (isFatalError(e)) connection.emit("error", e);
|
|
369
|
+
connection.toClosed(s, e);
|
|
370
|
+
} else if (f.id === defs.ConnectionBlocked) connection.emit("blocked", f.fields.reason);
|
|
371
|
+
else if (f.id === defs.ConnectionUnblocked) connection.emit("unblocked");
|
|
372
|
+
else if (f.id === defs.ConnectionUpdateSecretOk) connection.emit("update-secret-ok");
|
|
373
|
+
else connection.closeWithError(fmt("Unexpected frame on channel 0"), constants.UNEXPECTED_FRAME, new Error(fmt("Unexpected frame on channel 0: %s", inspect(f, false))));
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
function invalidOp(msg, stack) {
|
|
377
|
+
return function() {
|
|
378
|
+
throw new IllegalOperationError(msg, stack);
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
function invalidateSend(conn, msg, stack) {
|
|
382
|
+
conn.sendMethod = conn.sendContent = conn.sendMessage = invalidOp(msg, stack);
|
|
383
|
+
}
|
|
384
|
+
var encodeMethod = defs.encodeMethod;
|
|
385
|
+
var encodeProperties = defs.encodeProperties;
|
|
386
|
+
var FRAME_OVERHEAD = defs.FRAME_OVERHEAD;
|
|
387
|
+
var makeBodyFrame = frame.makeBodyFrame;
|
|
388
|
+
var parseFrame = frame.parseFrame;
|
|
389
|
+
var decodeFrame = frame.decodeFrame;
|
|
390
|
+
function wrapStream(s) {
|
|
391
|
+
if (s instanceof Duplex) return s;
|
|
392
|
+
else {
|
|
393
|
+
var ws = new Duplex();
|
|
394
|
+
ws.wrap(s);
|
|
395
|
+
ws._write = function(chunk, encoding, callback) {
|
|
396
|
+
return s.write(chunk, encoding, callback);
|
|
397
|
+
};
|
|
398
|
+
return ws;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
function isFatalError(error) {
|
|
402
|
+
switch (error && error.code) {
|
|
403
|
+
case defs.constants.CONNECTION_FORCED:
|
|
404
|
+
case defs.constants.REPLY_SUCCESS: return false;
|
|
405
|
+
default: return true;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
module.exports.Connection = Connection;
|
|
409
|
+
module.exports.isFatalError = isFatalError;
|
|
410
|
+
}));
|
|
411
|
+
|
|
412
|
+
//#endregion
|
|
413
|
+
export default require_connection();
|
|
414
|
+
|
|
415
|
+
export { require_connection };
|
|
416
|
+
//# sourceMappingURL=connection.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.mjs","names":[],"sources":["../../../../../../../../../node_modules/amqplib/lib/connection.js"],"sourcesContent":["//\n//\n//\n\n'use strict';\n\nvar defs = require('./defs');\nvar constants = defs.constants;\nvar frame = require('./frame');\nvar HEARTBEAT = frame.HEARTBEAT;\nvar Mux = require('./mux').Mux;\n\nvar Duplex = require('stream').Duplex;\nvar EventEmitter = require('events');\nvar Heart = require('./heartbeat').Heart;\n\nvar methodName = require('./format').methodName;\nvar closeMsg = require('./format').closeMessage;\nvar inspect = require('./format').inspect;\n\nvar BitSet = require('./bitset').BitSet;\nvar fmt = require('util').format;\nvar PassThrough = require('stream').PassThrough;\nvar IllegalOperationError = require('./error').IllegalOperationError;\nvar stackCapture = require('./error').stackCapture;\n\n// High-water mark for channel write buffers, in 'objects' (which are\n// encoded frames as buffers).\nvar DEFAULT_WRITE_HWM = 1024;\n// If all the frames of a message (method, properties, content) total\n// to less than this, copy them into a single buffer and write it all\n// at once. Note that this is less than the minimum frame size: if it\n// was greater, we might have to fragment the content.\nvar SINGLE_CHUNK_THRESHOLD = 2048;\n\nclass Connection extends EventEmitter {\n constructor (underlying) {\n super();\n\n var stream = this.stream = wrapStream(underlying);\n this.muxer = new Mux(stream);\n\n // frames\n this.rest = Buffer.alloc(0);\n this.frameMax = constants.FRAME_MIN_SIZE;\n this.sentSinceLastCheck = false;\n this.recvSinceLastCheck = false;\n\n this.expectSocketClose = false;\n this.freeChannels = new BitSet();\n this.channels = [{\n channel: { accept: channel0(this) },\n buffer: underlying\n }];\n }\n\n // This changed between versions, as did the codec, methods, etc. AMQP\n // 0-9-1 is fairly similar to 0.8, but better, and nothing implements\n // 0.8 that doesn't implement 0-9-1. In other words, it doesn't make\n // much sense to generalise here.\n sendProtocolHeader () {\n this.sendBytes(frame.PROTOCOL_HEADER);\n }\n\n /*\n The frighteningly complicated opening protocol (spec section 2.2.4):\n\n Client -> Server\n\n protocol header ->\n <- start\n start-ok ->\n .. next two zero or more times ..\n <- secure\n secure-ok ->\n <- tune\n tune-ok ->\n open ->\n <- open-ok\n\n If I'm only supporting SASL's PLAIN mechanism (which I am for the time\n being), it gets a bit easier since the server won't in general send\n back a `secure`, it'll just send `tune` after the `start-ok`.\n (SASL PLAIN: http://tools.ietf.org/html/rfc4616)\n\n */\n open (allFields, openCallback0) {\n var self = this;\n var openCallback = openCallback0 || function () { };\n\n // This is where we'll put our negotiated values\n var tunedOptions = Object.create(allFields);\n\n function wait (k) {\n self.step(function (err, frame) {\n if (err !== null)\n bail(err);\n else if (frame.channel !== 0) {\n bail(new Error(\n fmt(\"Frame on channel != 0 during handshake: %s\",\n inspect(frame, false))));\n }\n else\n k(frame);\n });\n }\n\n function expect (Method, k) {\n wait(function (frame) {\n if (frame.id === Method)\n k(frame);\n else {\n bail(new Error(\n fmt(\"Expected %s; got %s\",\n methodName(Method), inspect(frame, false))));\n }\n });\n }\n\n function bail (err) {\n openCallback(err);\n }\n\n function send (Method) {\n // This can throw an exception if there's some problem with the\n // options; e.g., something is a string instead of a number.\n self.sendMethod(0, Method, tunedOptions);\n }\n\n function negotiate (server, desired) {\n // We get sent values for channelMax, frameMax and heartbeat,\n // which we may accept or lower (subject to a minimum for\n // frameMax, but we'll leave that to the server to enforce). In\n // all cases, `0` really means \"no limit\", or rather the highest\n // value in the encoding, e.g., unsigned short for channelMax.\n if (server === 0 || desired === 0) {\n // i.e., whichever places a limit, if either\n return Math.max(server, desired);\n }\n else {\n return Math.min(server, desired);\n }\n }\n\n function onStart (start) {\n var mechanisms = start.fields.mechanisms.toString().split(' ');\n if (mechanisms.indexOf(allFields.mechanism) < 0) {\n bail(new Error(fmt('SASL mechanism %s is not provided by the server',\n allFields.mechanism)));\n return;\n }\n self.serverProperties = start.fields.serverProperties;\n try {\n send(defs.ConnectionStartOk);\n } catch (err) {\n bail(err);\n return;\n }\n wait(afterStartOk);\n }\n\n function afterStartOk (reply) {\n switch (reply.id) {\n case defs.ConnectionSecure:\n bail(new Error(\n \"Wasn't expecting to have to go through secure\"));\n break;\n case defs.ConnectionClose:\n bail(new Error(fmt(\"Handshake terminated by server: %s\",\n closeMsg(reply))));\n break;\n case defs.ConnectionTune:\n var fields = reply.fields;\n tunedOptions.frameMax =\n negotiate(fields.frameMax, allFields.frameMax);\n tunedOptions.channelMax =\n negotiate(fields.channelMax, allFields.channelMax);\n tunedOptions.heartbeat =\n negotiate(fields.heartbeat, allFields.heartbeat);\n try {\n send(defs.ConnectionTuneOk);\n send(defs.ConnectionOpen);\n } catch (err) {\n bail(err);\n return;\n }\n expect(defs.ConnectionOpenOk, onOpenOk);\n break;\n default:\n bail(new Error(\n fmt(\"Expected connection.secure, connection.close, \" +\n \"or connection.tune during handshake; got %s\",\n inspect(reply, false))));\n break;\n }\n }\n\n function onOpenOk (openOk) {\n // Impose the maximum of the encoded value, if the negotiated\n // value is zero, meaning \"no, no limits\"\n self.channelMax = tunedOptions.channelMax || 0xffff;\n self.frameMax = tunedOptions.frameMax || 0xffffffff;\n // 0 means \"no heartbeat\", rather than \"maximum period of\n // heartbeating\"\n self.heartbeat = tunedOptions.heartbeat;\n self.heartbeater = self.startHeartbeater();\n self.accept = mainAccept;\n succeed(openOk);\n }\n\n // If the server closes the connection, it's probably because of\n // something we did\n function endWhileOpening (err) {\n bail(err || new Error('Socket closed abruptly ' +\n 'during opening handshake'));\n }\n\n this.stream.on('end', endWhileOpening);\n this.stream.on('error', endWhileOpening);\n\n function succeed (ok) {\n self.stream.removeListener('end', endWhileOpening);\n self.stream.removeListener('error', endWhileOpening);\n self.stream.on('error', self.onSocketError.bind(self));\n self.stream.on('end', self.onSocketError.bind(\n self, new Error('Unexpected close')));\n self.on('frameError', self.onSocketError.bind(self));\n self.acceptLoop();\n openCallback(null, ok);\n }\n\n // Now kick off the handshake by prompting the server\n this.sendProtocolHeader();\n expect(defs.ConnectionStart, onStart);\n }\n\n // Closing things: AMQP has a closing handshake that applies to\n // closing both connects and channels. As the initiating party, I send\n // Close, then ignore all frames until I see either CloseOK --\n // which signifies that the other party has seen the Close and shut\n // the connection or channel down, so it's fine to free resources; or\n // Close, which means the other party also wanted to close the\n // whatever, and I should send CloseOk so it can free resources,\n // then go back to waiting for the CloseOk. If I receive a Close\n // out of the blue, I should throw away any unsent frames (they will\n // be ignored anyway) and send CloseOk, then clean up resources. In\n // general, Close out of the blue signals an error (or a forced\n // closure, which may as well be an error).\n //\n // RUNNING [1] --- send Close ---> Closing [2] ---> recv Close --+\n // | | [3]\n // | +------ send CloseOk ------+\n // recv Close recv CloseOk\n // | |\n // V V\n // Ended [4] ---- send CloseOk ---> Closed [5]\n //\n // [1] All frames accepted; getting a Close frame from the server\n // moves to Ended; client may initiate a close by sending Close\n // itself.\n // [2] Client has initiated a close; only CloseOk or (simulataneously\n // sent) Close is accepted.\n // [3] Simultaneous close\n // [4] Server won't send any more frames; accept no more frames, send\n // CloseOk.\n // [5] Fully closed, client will send no more, server will send no\n // more. Signal 'close' or 'error'.\n //\n // There are two signalling mechanisms used in the API. The first is\n // that calling `close` will return a promise, that will either\n // resolve once the connection or channel is cleanly shut down, or\n // will reject if the shutdown times out.\n //\n // The second is the 'close' and 'error' events. These are\n // emitted as above. The events will fire *before* promises are\n // resolved.\n // Close the connection without even giving a reason. Typical.\n close (closeCallback) {\n var k = closeCallback && function () { closeCallback(null); };\n this.closeBecause(\"Cheers, thanks\", constants.REPLY_SUCCESS, k);\n }\n\n // Close with a reason and a 'code'. I'm pretty sure RabbitMQ totally\n // ignores these; maybe it logs them. The continuation will be invoked\n // when the CloseOk has been received, and before the 'close' event.\n closeBecause (reason, code, k) {\n this.sendMethod(0, defs.ConnectionClose, {\n replyText: reason,\n replyCode: code,\n methodId: 0, classId: 0\n });\n var s = stackCapture('closeBecause called: ' + reason);\n this.toClosing(s, k);\n }\n\n closeWithError (reason, code, error) {\n this.emit('error', error);\n this.closeBecause(reason, code);\n }\n\n onSocketError (err) {\n if (!this.expectSocketClose) {\n // forestall any more calls to onSocketError, since we're signed\n // up for `'error'` *and* `'end'`\n this.expectSocketClose = true;\n this.emit('error', err);\n var s = stackCapture('Socket error');\n this.toClosed(s, err);\n }\n }\n\n // A close has been initiated. Repeat: a close has been initiated.\n // This means we should not send more frames, anyway they will be\n // ignored. We also have to shut down all the channels.\n toClosing (capturedStack, k) {\n var send = this.sendMethod.bind(this);\n\n this.accept = function (f) {\n if (f.id === defs.ConnectionCloseOk) {\n if (k)\n k();\n var s = stackCapture('ConnectionCloseOk received');\n this.toClosed(s, undefined);\n }\n else if (f.id === defs.ConnectionClose) {\n send(0, defs.ConnectionCloseOk, {});\n }\n // else ignore frame\n };\n invalidateSend(this, 'Connection closing', capturedStack);\n }\n\n _closeChannels (capturedStack) {\n for (var i = 1; i < this.channels.length; i++) {\n var ch = this.channels[i];\n if (ch !== null) {\n ch.channel.toClosed(capturedStack); // %%% or with an error? not clear\n }\n }\n }\n\n // A close has been confirmed. Cease all communication.\n toClosed (capturedStack, maybeErr) {\n this._closeChannels(capturedStack);\n var info = fmt('Connection closed (%s)',\n (maybeErr) ? maybeErr.toString() : 'by client');\n // Tidy up, invalidate enverything, dynamite the bridges.\n invalidateSend(this, info, capturedStack);\n this.accept = invalidOp(info, capturedStack);\n this.close = function (cb) {\n cb && cb(new IllegalOperationError(info, capturedStack));\n };\n if (this.heartbeater)\n this.heartbeater.clear();\n // This is certainly true now, if it wasn't before\n this.expectSocketClose = true;\n this.stream.end();\n this.emit('close', maybeErr);\n }\n\n _updateSecret(newSecret, reason, cb) {\n this.sendMethod(0, defs.ConnectionUpdateSecret, {\n newSecret,\n reason\n });\n this.once('update-secret-ok', cb);\n }\n\n // ===\n startHeartbeater () {\n if (this.heartbeat === 0)\n return null;\n else {\n var self = this;\n var hb = new Heart(this.heartbeat,\n this.checkSend.bind(this),\n this.checkRecv.bind(this));\n hb.on('timeout', function () {\n var hberr = new Error(\"Heartbeat timeout\");\n self.emit('error', hberr);\n var s = stackCapture('Heartbeat timeout');\n self.toClosed(s, hberr);\n });\n hb.on('beat', function () {\n self.sendHeartbeat();\n });\n return hb;\n }\n }\n\n // I use an array to keep track of the channels, rather than an\n // object. The channel identifiers are numbers, and allocated by the\n // connection. If I try to allocate low numbers when they are\n // available (which I do, by looking from the start of the bitset),\n // this ought to keep the array small, and out of 'sparse array\n // storage'. I also set entries to null, rather than deleting them, in\n // the expectation that the next channel allocation will fill the slot\n // again rather than growing the array. See\n // http://www.html5rocks.com/en/tutorials/speed/v8/\n freshChannel (channel, options) {\n var next = this.freeChannels.nextClearBit(1);\n if (next < 0 || next > this.channelMax)\n throw new Error(\"No channels left to allocate\");\n this.freeChannels.set(next);\n\n var hwm = (options && options.highWaterMark) || DEFAULT_WRITE_HWM;\n var writeBuffer = new PassThrough({\n objectMode: true, highWaterMark: hwm\n });\n this.channels[next] = { channel: channel, buffer: writeBuffer };\n writeBuffer.on('drain', function () {\n channel.onBufferDrain();\n });\n this.muxer.pipeFrom(writeBuffer);\n return next;\n }\n\n releaseChannel (channel) {\n this.freeChannels.clear(channel);\n var buffer = this.channels[channel].buffer;\n buffer.end(); // will also cause it to be unpiped\n this.channels[channel] = null;\n }\n\n acceptLoop () {\n var self = this;\n\n function go () {\n try {\n var f; while (f = self.recvFrame())\n self.accept(f);\n }\n catch (e) {\n self.emit('frameError', e);\n }\n }\n self.stream.on('readable', go);\n go();\n }\n\n step (cb) {\n var self = this;\n function recv () {\n var f;\n try {\n f = self.recvFrame();\n }\n catch (e) {\n cb(e, null);\n return;\n }\n if (f)\n cb(null, f);\n else\n self.stream.once('readable', recv);\n }\n recv();\n }\n\n checkSend () {\n var check = this.sentSinceLastCheck;\n this.sentSinceLastCheck = false;\n return check;\n }\n\n checkRecv () {\n var check = this.recvSinceLastCheck;\n this.recvSinceLastCheck = false;\n return check;\n }\n\n sendBytes (bytes) {\n this.sentSinceLastCheck = true;\n this.stream.write(bytes);\n }\n\n sendHeartbeat () {\n return this.sendBytes(frame.HEARTBEAT_BUF);\n }\n\n sendMethod (channel, Method, fields) {\n var frame = encodeMethod(Method, channel, fields);\n this.sentSinceLastCheck = true;\n var buffer = this.channels[channel].buffer;\n return buffer.write(frame);\n }\n\n sendMessage (channel, Method, fields, Properties, props, content) {\n if (!Buffer.isBuffer(content))\n throw new TypeError('content is not a buffer');\n\n var mframe = encodeMethod(Method, channel, fields);\n var pframe = encodeProperties(Properties, channel,\n content.length, props);\n var buffer = this.channels[channel].buffer;\n this.sentSinceLastCheck = true;\n\n var methodHeaderLen = mframe.length + pframe.length;\n var bodyLen = (content.length > 0) ?\n content.length + FRAME_OVERHEAD : 0;\n var allLen = methodHeaderLen + bodyLen;\n\n if (allLen < SINGLE_CHUNK_THRESHOLD) {\n // Use `allocUnsafe` to avoid excessive allocations and CPU usage\n // from zeroing. The returned Buffer is not zeroed and so must be\n // completely filled to be used safely.\n // See https://github.com/amqp-node/amqplib/pull/695\n var all = Buffer.allocUnsafe(allLen);\n var offset = mframe.copy(all, 0);\n offset += pframe.copy(all, offset);\n\n if (bodyLen > 0)\n makeBodyFrame(channel, content).copy(all, offset);\n return buffer.write(all);\n }\n else {\n if (methodHeaderLen < SINGLE_CHUNK_THRESHOLD) {\n // Use `allocUnsafe` to avoid excessive allocations and CPU usage\n // from zeroing. The returned Buffer is not zeroed and so must be\n // completely filled to be used safely.\n // See https://github.com/amqp-node/amqplib/pull/695\n var both = Buffer.allocUnsafe(methodHeaderLen);\n var offset = mframe.copy(both, 0);\n pframe.copy(both, offset);\n buffer.write(both);\n }\n else {\n buffer.write(mframe);\n buffer.write(pframe);\n }\n return this.sendContent(channel, content);\n }\n }\n\n sendContent (channel, body) {\n if (!Buffer.isBuffer(body)) {\n throw new TypeError(fmt(\"Expected buffer; got %s\", body));\n }\n var writeResult = true;\n var buffer = this.channels[channel].buffer;\n\n var maxBody = this.frameMax - FRAME_OVERHEAD;\n\n for (var offset = 0; offset < body.length; offset += maxBody) {\n var end = offset + maxBody;\n var slice = (end > body.length) ? body.subarray(offset) : body.subarray(offset, end);\n var bodyFrame = makeBodyFrame(channel, slice);\n writeResult = buffer.write(bodyFrame);\n }\n this.sentSinceLastCheck = true;\n return writeResult;\n }\n\n recvFrame () {\n // %%% identifying invariants might help here?\n var frame = parseFrame(this.rest);\n\n if (!frame) {\n var incoming = this.stream.read();\n if (incoming === null) {\n return false;\n }\n else {\n this.recvSinceLastCheck = true;\n this.rest = Buffer.concat([this.rest, incoming]);\n return this.recvFrame();\n }\n }\n else {\n this.rest = frame.rest;\n return decodeFrame(frame);\n }\n }\n}\n\n// Usual frame accept mode\nfunction mainAccept(frame) {\n var rec = this.channels[frame.channel];\n if (rec) { return rec.channel.accept(frame); }\n // NB CHANNEL_ERROR may not be right, but I don't know what is ..\n else\n this.closeWithError(\n fmt('Frame on unknown channel %d', frame.channel),\n constants.CHANNEL_ERROR,\n new Error(fmt(\"Frame on unknown channel: %s\",\n inspect(frame, false))));\n}\n\n// Handle anything that comes through on channel 0, that's the\n// connection control channel. This is only used once mainAccept is\n// installed as the frame handler, after the opening handshake.\nfunction channel0(connection) {\n return function(f) {\n // Once we get a 'close', we know 1. we'll get no more frames, and\n // 2. anything we send except close, or close-ok, will be\n // ignored. If we already sent 'close', this won't be invoked since\n // we're already in closing mode; if we didn't well we're not going\n // to send it now are we.\n if (f === HEARTBEAT); // ignore; it's already counted as activity\n // on the socket, which is its purpose\n else if (f.id === defs.ConnectionClose) {\n // Oh. OK. I guess we're done here then.\n connection.sendMethod(0, defs.ConnectionCloseOk, {});\n var emsg = fmt('Connection closed: %s', closeMsg(f));\n var s = stackCapture(emsg);\n var e = new Error(emsg);\n e.code = f.fields.replyCode;\n if (isFatalError(e)) {\n connection.emit('error', e);\n }\n connection.toClosed(s, e);\n }\n else if (f.id === defs.ConnectionBlocked) {\n connection.emit('blocked', f.fields.reason);\n }\n else if (f.id === defs.ConnectionUnblocked) {\n connection.emit('unblocked');\n }\n else if (f.id === defs.ConnectionUpdateSecretOk) {\n connection.emit('update-secret-ok');\n }\n else {\n connection.closeWithError(\n fmt(\"Unexpected frame on channel 0\"),\n constants.UNEXPECTED_FRAME,\n new Error(fmt(\"Unexpected frame on channel 0: %s\",\n inspect(f, false))));\n }\n };\n}\n\nfunction invalidOp(msg, stack) {\n return function() {\n throw new IllegalOperationError(msg, stack);\n };\n}\n\nfunction invalidateSend(conn, msg, stack) {\n conn.sendMethod = conn.sendContent = conn.sendMessage =\n invalidOp(msg, stack);\n}\n\nvar encodeMethod = defs.encodeMethod;\nvar encodeProperties = defs.encodeProperties;\n\nvar FRAME_OVERHEAD = defs.FRAME_OVERHEAD;\nvar makeBodyFrame = frame.makeBodyFrame;\n\nvar parseFrame = frame.parseFrame;\nvar decodeFrame = frame.decodeFrame;\n\nfunction wrapStream(s) {\n if (s instanceof Duplex) return s;\n else {\n var ws = new Duplex();\n ws.wrap(s); //wraps the readable side of things\n ws._write = function(chunk, encoding, callback) {\n return s.write(chunk, encoding, callback);\n };\n return ws;\n }\n}\n\nfunction isFatalError(error) {\n switch (error && error.code) {\n case defs.constants.CONNECTION_FORCED:\n case defs.constants.REPLY_SUCCESS:\n return false;\n default:\n return true;\n }\n}\n\nmodule.exports.Connection = Connection;\nmodule.exports.isFatalError = isFatalError;\n"],"x_google_ignoreList":[0],"mappings":"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"}
|