This commit is contained in:
Javier Casares 2026-01-29 09:59:19 +00:00
commit 7bcda55ebb
3158 changed files with 140643 additions and 130380 deletions

674
LICENSE Normal file
View file

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

View file

@ -1,4 +1,12 @@
== Changelog == = 2.0.0 =
* Added Reply-To header support for emails sent via Amazon SES.
* Improved error handling and validation.
* Enhanced compatibility with core SMTP plugin 2.0.0.
* Improved credential handling and encryption.
* Code quality improvements and documentation.
* **BREAKING CHANGE**: Minimum PHP version increased to 8.2 (required by AWS SDK for PHP).
* Updated AWS SDK for PHP to latest version with security updates.
= 1.0.0 = = 1.0.0 =

View file

@ -1,5 +0,0 @@
{
"require": {
"aws/aws-sdk-php": "^3.356"
}
}

917
composer.lock generated
View file

@ -1,917 +0,0 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "1cb93c989568529d7573d019c613b48f",
"packages": [
{
"name": "aws/aws-crt-php",
"version": "v1.2.7",
"source": {
"type": "git",
"url": "https://github.com/awslabs/aws-crt-php.git",
"reference": "d71d9906c7bb63a28295447ba12e74723bd3730e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e",
"reference": "d71d9906c7bb63a28295447ba12e74723bd3730e",
"shasum": ""
},
"require": {
"php": ">=5.5"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35||^5.6.3||^9.5",
"yoast/phpunit-polyfills": "^1.0"
},
"suggest": {
"ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality."
},
"type": "library",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "AWS SDK Common Runtime Team",
"email": "aws-sdk-common-runtime@amazon.com"
}
],
"description": "AWS Common Runtime for PHP",
"homepage": "https://github.com/awslabs/aws-crt-php",
"keywords": [
"amazon",
"aws",
"crt",
"sdk"
],
"support": {
"issues": "https://github.com/awslabs/aws-crt-php/issues",
"source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7"
},
"time": "2024-10-18T22:15:13+00:00"
},
{
"name": "aws/aws-sdk-php",
"version": "3.356.23",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "e9253cf6073f06080a7458af54e18fc474f0c864"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e9253cf6073f06080a7458af54e18fc474f0c864",
"reference": "e9253cf6073f06080a7458af54e18fc474f0c864",
"shasum": ""
},
"require": {
"aws/aws-crt-php": "^1.2.3",
"ext-json": "*",
"ext-pcre": "*",
"ext-simplexml": "*",
"guzzlehttp/guzzle": "^7.4.5",
"guzzlehttp/promises": "^2.0",
"guzzlehttp/psr7": "^2.4.5",
"mtdowling/jmespath.php": "^2.8.0",
"php": ">=8.1",
"psr/http-message": "^1.0 || ^2.0"
},
"require-dev": {
"andrewsville/php-token-reflection": "^1.4",
"aws/aws-php-sns-message-validator": "~1.0",
"behat/behat": "~3.0",
"composer/composer": "^2.7.8",
"dms/phpunit-arraysubset-asserts": "^0.4.0",
"doctrine/cache": "~1.4",
"ext-dom": "*",
"ext-openssl": "*",
"ext-pcntl": "*",
"ext-sockets": "*",
"phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5",
"psr/cache": "^2.0 || ^3.0",
"psr/simple-cache": "^2.0 || ^3.0",
"sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
"symfony/filesystem": "^v6.4.0 || ^v7.1.0",
"yoast/phpunit-polyfills": "^2.0"
},
"suggest": {
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
"doctrine/cache": "To use the DoctrineCacheAdapter",
"ext-curl": "To send requests using cURL",
"ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
"ext-sockets": "To use client-side monitoring"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"files": [
"src/functions.php"
],
"psr-4": {
"Aws\\": "src/"
},
"exclude-from-classmap": [
"src/data/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Amazon Web Services",
"homepage": "http://aws.amazon.com"
}
],
"description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
"homepage": "http://aws.amazon.com/sdkforphp",
"keywords": [
"amazon",
"aws",
"cloud",
"dynamodb",
"ec2",
"glacier",
"s3",
"sdk"
],
"support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.356.23"
},
"time": "2025-09-22T18:10:31+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "7.10.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
"reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^2.3",
"guzzlehttp/psr7": "^2.8",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
},
"provide": {
"psr/http-client-implementation": "1.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*",
"guzzle/client-integration-tests": "3.0.2",
"php-http/message-factory": "^1.1",
"phpunit/phpunit": "^8.5.39 || ^9.6.20",
"psr/log": "^1.1 || ^2.0 || ^3.0"
},
"suggest": {
"ext-curl": "Required for CURL handler support",
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": false
}
},
"autoload": {
"files": [
"src/functions_include.php"
],
"psr-4": {
"GuzzleHttp\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Jeremy Lindblom",
"email": "jeremeamia@gmail.com",
"homepage": "https://github.com/jeremeamia"
},
{
"name": "George Mponos",
"email": "gmponos@gmail.com",
"homepage": "https://github.com/gmponos"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://github.com/sagikazarmark"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle is a PHP HTTP client library",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
"psr-18",
"psr-7",
"rest",
"web service"
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.10.0"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
"type": "tidelift"
}
],
"time": "2025-08-23T22:36:01+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "481557b130ef3790cf82b713667b43030dc9c957"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
"reference": "481557b130ef3790cf82b713667b43030dc9c957",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": false
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/2.3.0"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
"type": "tidelift"
}
],
"time": "2025-08-22T14:34:08+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "21dc724a0583619cd1652f673303492272778051"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
"reference": "21dc724a0583619cd1652f673303492272778051",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.1 || ^2.0",
"ralouphie/getallheaders": "^3.0"
},
"provide": {
"psr/http-factory-implementation": "1.0",
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0",
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": false
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "George Mponos",
"email": "gmponos@gmail.com",
"homepage": "https://github.com/gmponos"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://github.com/sagikazarmark"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://sagikazarmark.hu"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [
"http",
"message",
"psr-7",
"request",
"response",
"stream",
"uri",
"url"
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.8.0"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
"type": "tidelift"
}
],
"time": "2025-08-23T21:21:41+00:00"
},
{
"name": "mtdowling/jmespath.php",
"version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/jmespath/jmespath.php.git",
"reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
"reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"symfony/polyfill-mbstring": "^1.17"
},
"require-dev": {
"composer/xdebug-handler": "^3.0.3",
"phpunit/phpunit": "^8.5.33"
},
"bin": [
"bin/jp.php"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.8-dev"
}
},
"autoload": {
"files": [
"src/JmesPath.php"
],
"psr-4": {
"JmesPath\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Declaratively specify how to extract elements from a JSON document",
"keywords": [
"json",
"jsonpath"
],
"support": {
"issues": "https://github.com/jmespath/jmespath.php/issues",
"source": "https://github.com/jmespath/jmespath.php/tree/2.8.0"
},
"time": "2024-09-04T18:46:31+00:00"
},
{
"name": "psr/http-client",
"version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0",
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP clients",
"homepage": "https://github.com/php-fig/http-client",
"keywords": [
"http",
"http-client",
"psr",
"psr-18"
],
"support": {
"source": "https://github.com/php-fig/http-client"
},
"time": "2023-09-23T14:17:50+00:00"
},
{
"name": "psr/http-factory",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
"reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
"reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
"shasum": ""
},
"require": {
"php": ">=7.1",
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
"keywords": [
"factory",
"http",
"message",
"psr",
"psr-17",
"psr-7",
"request",
"response"
],
"support": {
"source": "https://github.com/php-fig/http-factory"
},
"time": "2024-04-15T12:06:14+00:00"
},
{
"name": "psr/http-message",
"version": "2.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
"homepage": "https://github.com/php-fig/http-message",
"keywords": [
"http",
"http-message",
"psr",
"psr-7",
"request",
"response"
],
"support": {
"source": "https://github.com/php-fig/http-message/tree/2.0"
},
"time": "2023-04-04T09:54:51+00:00"
},
{
"name": "ralouphie/getallheaders",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/ralouphie/getallheaders.git",
"reference": "120b605dfeb996808c31b6477290a714d356e822"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5 || ^6.5"
},
"type": "library",
"autoload": {
"files": [
"src/getallheaders.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ralph Khattar",
"email": "ralph.khattar@gmail.com"
}
],
"description": "A polyfill for getallheaders.",
"support": {
"issues": "https://github.com/ralouphie/getallheaders/issues",
"source": "https://github.com/ralouphie/getallheaders/tree/develop"
},
"time": "2019-03-08T08:55:37+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
"reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.6-dev"
}
},
"autoload": {
"files": [
"function.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
"shasum": ""
},
"require": {
"ext-iconv": "*",
"php": ">=7.2"
},
"provide": {
"ext-mbstring": "*"
},
"suggest": {
"ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"mbstring",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-12-23T08:48:59+00:00"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": [],
"plugin-api-version": "2.6.0"
}

View file

@ -7,6 +7,8 @@
namespace Robotstxt_SMTP_AmazonSES; namespace Robotstxt_SMTP_AmazonSES;
defined( 'ABSPATH' ) || exit;
use Aws\Credentials\Credentials; use Aws\Credentials\Credentials;
use Aws\Endpoint\PartitionEndpointProvider; use Aws\Endpoint\PartitionEndpointProvider;
use Aws\Exception\AwsException; use Aws\Exception\AwsException;
@ -42,6 +44,13 @@ class Plugin {
*/ */
private const SETTINGS_ERROR_CREDENTIALS = 'robotstxt_smtp_amazon_ses_credentials'; private const SETTINGS_ERROR_CREDENTIALS = 'robotstxt_smtp_amazon_ses_credentials';
/**
* Cron hook name for updating SES quotas.
*
* @var string
*/
private const CRON_HOOK_UPDATE_QUOTA = 'robotstxt_smtp_amazonses_update_quota';
/** /**
* Holds the singleton instance. * Holds the singleton instance.
* *
@ -86,6 +95,11 @@ class Plugin {
\add_filter( 'robotstxt_smtp_connection_field_definitions', array( $this, 'provide_field_definitions' ), 10, 2 ); \add_filter( 'robotstxt_smtp_connection_field_definitions', array( $this, 'provide_field_definitions' ), 10, 2 );
\add_filter( 'robotstxt_smtp_sanitized_options', array( $this, 'sanitize_settings' ), 10, 3 ); \add_filter( 'robotstxt_smtp_sanitized_options', array( $this, 'sanitize_settings' ), 10, 3 );
\add_filter( 'pre_wp_mail', array( $this, 'maybe_route_mail_via_amazon_ses' ), 10, 2 ); \add_filter( 'pre_wp_mail', array( $this, 'maybe_route_mail_via_amazon_ses' ), 10, 2 );
\add_action( 'init', array( $this, 'maybe_schedule_quota_update' ) );
\add_action( self::CRON_HOOK_UPDATE_QUOTA, array( $this, 'update_quota_from_ses' ) );
\add_action( 'admin_init', array( $this, 'handle_refresh_quota_request' ) );
\add_action( 'admin_notices', array( $this, 'display_admin_notices' ) );
\add_action( 'network_admin_notices', array( $this, 'display_admin_notices' ) );
} }
/** /**
@ -101,7 +115,9 @@ class Plugin {
return $pre_wp_mail; return $pre_wp_mail;
} }
if ( ! SMTP_Plugin::is_amazon_ses_integration_active() ) { $is_active = SMTP_Plugin::is_amazon_ses_integration_active();
if ( ! $is_active ) {
return $pre_wp_mail; return $pre_wp_mail;
} }
@ -110,10 +126,12 @@ class Plugin {
$secret_key = (string) ( $settings[ self::OPTION_SECRET_KEY ] ?? '' ); $secret_key = (string) ( $settings[ self::OPTION_SECRET_KEY ] ?? '' );
$region = (string) ( $settings[ self::OPTION_REGION ] ?? '' ); $region = (string) ( $settings[ self::OPTION_REGION ] ?? '' );
if ( '' === $access_key || '' === $secret_key || '' === $region ) { if ( '' === $access_key || '' === $secret_key || '' === $region ) {
return $pre_wp_mail; return $pre_wp_mail;
} }
$mail_data = \wp_parse_args( $mail_data = \wp_parse_args(
$mail_data, $mail_data,
array( array(
@ -204,7 +222,7 @@ class Plugin {
\sprintf( \sprintf(
/* translators: %s: Error details describing the email preparation failure. */ /* translators: %s: Error details describing the email preparation failure. */
\esc_html__( 'Amazon SES could not prepare the email: %s', 'robotstxt-smtp-amazonses' ), \esc_html__( 'Amazon SES could not prepare the email: %s', 'robotstxt-smtp-amazonses' ),
\wp_strip_all_tags( $exception->getMessage() ) \esc_html( $exception->getMessage() )
), ),
array( array(
'to' => $mail_context['to'], 'to' => $mail_context['to'],
@ -245,7 +263,7 @@ class Plugin {
\sprintf( \sprintf(
/* translators: %s: Error message returned by Amazon SES. */ /* translators: %s: Error message returned by Amazon SES. */
\esc_html__( 'Amazon SES could not send the email: %s', 'robotstxt-smtp-amazonses' ), \esc_html__( 'Amazon SES could not send the email: %s', 'robotstxt-smtp-amazonses' ),
\wp_strip_all_tags( (string) $message ) \esc_html( (string) $message )
), ),
array( array(
'to' => $mail_context['to'], 'to' => $mail_context['to'],
@ -262,7 +280,7 @@ class Plugin {
\sprintf( \sprintf(
/* translators: %s: Error message describing the unexpected failure. */ /* translators: %s: Error message describing the unexpected failure. */
\esc_html__( 'An unexpected error occurred while sending through Amazon SES: %s', 'robotstxt-smtp-amazonses' ), \esc_html__( 'An unexpected error occurred while sending through Amazon SES: %s', 'robotstxt-smtp-amazonses' ),
\wp_strip_all_tags( $exception->getMessage() ) \esc_html( $exception->getMessage() )
), ),
array( array(
'to' => $mail_context['to'], 'to' => $mail_context['to'],
@ -310,7 +328,7 @@ class Plugin {
\sprintf( \sprintf(
/* translators: %s: Error details describing why the From header is invalid. */ /* translators: %s: Error details describing why the From header is invalid. */
\esc_html__( 'Amazon SES rejected the "From" address: %s', 'robotstxt-smtp-amazonses' ), \esc_html__( 'Amazon SES rejected the "From" address: %s', 'robotstxt-smtp-amazonses' ),
\wp_strip_all_tags( $exception->getMessage() ) \esc_html( $exception->getMessage() )
), ),
array( array(
'to' => $mail_context['to'], 'to' => $mail_context['to'],
@ -331,7 +349,7 @@ class Plugin {
\sprintf( \sprintf(
/* translators: %s: Invalid recipient email address. */ /* translators: %s: Invalid recipient email address. */
\esc_html__( 'Amazon SES rejected the recipient address: %s', 'robotstxt-smtp-amazonses' ), \esc_html__( 'Amazon SES rejected the recipient address: %s', 'robotstxt-smtp-amazonses' ),
\wp_strip_all_tags( $recipient ) \esc_html( $recipient )
), ),
array( array(
'to' => $mail_context['to'], 'to' => $mail_context['to'],
@ -353,7 +371,7 @@ class Plugin {
\sprintf( \sprintf(
/* translators: %s: Invalid CC email address. */ /* translators: %s: Invalid CC email address. */
\esc_html__( 'Amazon SES rejected the CC address: %s', 'robotstxt-smtp-amazonses' ), \esc_html__( 'Amazon SES rejected the CC address: %s', 'robotstxt-smtp-amazonses' ),
\wp_strip_all_tags( $cc ) \esc_html( $cc )
), ),
array( array(
'to' => $mail_context['to'], 'to' => $mail_context['to'],
@ -375,7 +393,7 @@ class Plugin {
\sprintf( \sprintf(
/* translators: %s: Invalid BCC email address. */ /* translators: %s: Invalid BCC email address. */
\esc_html__( 'Amazon SES rejected the BCC address: %s', 'robotstxt-smtp-amazonses' ), \esc_html__( 'Amazon SES rejected the BCC address: %s', 'robotstxt-smtp-amazonses' ),
\wp_strip_all_tags( $bcc ) \esc_html( $bcc )
), ),
array( array(
'to' => $mail_context['to'], 'to' => $mail_context['to'],
@ -397,7 +415,7 @@ class Plugin {
\sprintf( \sprintf(
/* translators: %s: Invalid reply-to email address. */ /* translators: %s: Invalid reply-to email address. */
\esc_html__( 'Amazon SES rejected the reply-to address: %s', 'robotstxt-smtp-amazonses' ), \esc_html__( 'Amazon SES rejected the reply-to address: %s', 'robotstxt-smtp-amazonses' ),
\wp_strip_all_tags( $reply_to ) \esc_html( $reply_to )
), ),
array( array(
'to' => $mail_context['to'], 'to' => $mail_context['to'],
@ -410,6 +428,36 @@ class Plugin {
} }
} }
// Add Reply-To from settings if not already set by headers.
// phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
if ( empty( $phpmailer->getReplyToAddresses() ) ) {
$reply_to_email = isset( $settings['reply_to_email'] ) ? \sanitize_email( $settings['reply_to_email'] ) : '';
if ( ! empty( $reply_to_email ) && \is_email( $reply_to_email ) ) {
$reply_to_name = isset( $settings['reply_to_name'] ) ? \sanitize_text_field( $settings['reply_to_name'] ) : '';
try {
$phpmailer->addReplyTo( $reply_to_email, $reply_to_name );
} catch ( PHPMailerException $exception ) {
return new WP_Error(
'robotstxt_smtp_amazon_ses_invalid_reply_to_settings',
\sprintf(
/* translators: %s: Invalid reply-to email address from settings. */
\esc_html__( 'Amazon SES rejected the configured reply-to address: %s', 'robotstxt-smtp-amazonses' ),
\esc_html( $reply_to_email )
),
array(
'to' => $mail_context['to'],
'subject' => $mail_context['subject'],
'message' => $mail_context['message'],
'headers' => $mail_context['headers'],
'attachments' => $mail_context['attachments'],
)
);
}
}
}
$phpmailer->ContentType = $content_type; $phpmailer->ContentType = $content_type;
if ( 'text/html' === strtolower( $content_type ) ) { if ( 'text/html' === strtolower( $content_type ) ) {
@ -447,7 +495,7 @@ class Plugin {
\sprintf( \sprintf(
/* translators: %s: Attachment path that could not be added. */ /* translators: %s: Attachment path that could not be added. */
\esc_html__( 'Amazon SES could not include the attachment: %s', 'robotstxt-smtp-amazonses' ), \esc_html__( 'Amazon SES could not include the attachment: %s', 'robotstxt-smtp-amazonses' ),
\wp_strip_all_tags( $attachment ) \esc_html( $attachment )
), ),
array( array(
'to' => $mail_context['to'], 'to' => $mail_context['to'],
@ -719,9 +767,120 @@ class Plugin {
public function declare_active( bool $is_active ): bool { public function declare_active( bool $is_active ): bool {
unset( $is_active ); unset( $is_active );
return true; return true;
} }
/**
* Enqueues admin scripts and styles for the settings page.
*
* @since 1.0.1
*
* @param string $hook The current admin page hook.
* @return void
*/
/**
* Displays admin notices from transient after redirect.
*
* @since 1.0.1
*
* @return void
*/
public function display_admin_notices(): void {
$notices = \get_transient( 'robotstxt_smtp_admin_notices' );
if ( $notices && \is_array( $notices ) ) {
\delete_transient( 'robotstxt_smtp_admin_notices' );
foreach ( $notices as $notice ) {
$type = $notice['type'] ?? 'info';
$message = $notice['message'] ?? '';
if ( $message ) {
printf(
'<div class="notice notice-%s is-dismissible"><p>%s</p></div>',
\esc_attr( $type ),
\esc_html( $message )
);
}
}
}
}
/**
* Handles the refresh quota form submission.
*
* @since 1.0.1
*
* @return void
*/
public function handle_refresh_quota_request(): void {
// Check if this is a refresh quota request first (can come via GET or POST).
$action_post = \filter_input( INPUT_POST, 'robotstxt_smtp_action', FILTER_UNSAFE_RAW );
$action_get = \filter_input( INPUT_GET, 'robotstxt_smtp_action', FILTER_UNSAFE_RAW );
$action = $action_post ?? $action_get ?? '';
if ( 'refresh_quota' !== $action ) {
return;
}
// This is a refresh quota request - now verify nonce.
$nonce_post = \filter_input( INPUT_POST, 'robotstxt_smtp_refresh_quota_nonce', FILTER_UNSAFE_RAW );
$nonce_get = \filter_input( INPUT_GET, 'robotstxt_smtp_refresh_quota_nonce', FILTER_UNSAFE_RAW );
$nonce = $nonce_post ?? $nonce_get ?? '';
if ( ! \wp_verify_nonce( $nonce, 'robotstxt_smtp_refresh_quota' ) ) {
\wp_die( \esc_html__( 'Security check failed.', 'robotstxt-smtp-amazonses' ) );
}
// Check permissions based on configuration scope.
$is_network_mode = Settings_Page::is_network_mode_enabled();
$required_cap = $is_network_mode ? 'manage_network_options' : 'manage_options';
if ( ! \current_user_can( $required_cap ) ) {
\wp_die( \esc_html__( 'You do not have sufficient permissions to access this page.', 'robotstxt-smtp-amazonses' ) );
}
// Fetch fresh quotas.
$this->update_quota_from_ses();
// Check if successful and add admin notice.
$quota = \get_site_transient( self::get_quota_cache_key() );
if ( $quota && \is_array( $quota ) ) {
\add_settings_error(
'robotstxt_smtp_messages',
'quota_refreshed',
\__( 'Amazon SES quotas refreshed successfully.', 'robotstxt-smtp-amazonses' ),
'updated'
);
} else {
\add_settings_error(
'robotstxt_smtp_messages',
'quota_refresh_failed',
\__( 'Unable to fetch quotas from Amazon SES. Check debug log for details.', 'robotstxt-smtp-amazonses' ),
'error'
);
}
// Save notices for after redirect.
\set_transient( 'robotstxt_smtp_admin_notices', \get_settings_errors( 'robotstxt_smtp_messages' ), 30 );
// Redirect back to the settings page (remove the action parameters from URL).
// Since the request comes with ?page= parameter, we know which page to redirect to.
$page_param = \filter_input( INPUT_GET, 'page', FILTER_UNSAFE_RAW );
$page = $page_param ? \sanitize_key( $page_param ) : 'robotstxt-smtp';
if ( 'robotstxt-smtp-network' === $page ) {
$redirect_url = \network_admin_url( 'admin.php?page=robotstxt-smtp-network' );
} else {
$redirect_url = \admin_url( 'admin.php?page=robotstxt-smtp' );
}
\wp_safe_redirect( $redirect_url );
exit;
}
/** /**
* Replaces the SMTP connection fields with Amazon SES specific fields. * Replaces the SMTP connection fields with Amazon SES specific fields.
* *
@ -766,6 +925,18 @@ class Plugin {
'callback' => array( $settings_page, 'render_from_name_field' ), 'callback' => array( $settings_page, 'render_from_name_field' ),
'label_for' => 'robotstxt_smtp_from_name', 'label_for' => 'robotstxt_smtp_from_name',
), ),
array(
'id' => 'robotstxt_smtp_reply_to_email',
'label' => \esc_html__( 'Reply-To Email', 'robotstxt-smtp' ),
'callback' => array( $settings_page, 'render_reply_to_email_field' ),
'label_for' => 'robotstxt_smtp_reply_to_email',
),
array(
'id' => 'robotstxt_smtp_reply_to_name',
'label' => \esc_html__( 'Reply-To Name', 'robotstxt-smtp' ),
'callback' => array( $settings_page, 'render_reply_to_name_field' ),
'label_for' => 'robotstxt_smtp_reply_to_name',
),
); );
} }
@ -776,16 +947,19 @@ class Plugin {
*/ */
public function render_access_key_field(): void { public function render_access_key_field(): void {
$settings = $this->get_stored_settings(); $settings = $this->get_stored_settings();
$has_access_key = '' !== $settings[ self::OPTION_ACCESS_KEY ];
$placeholder_label = $has_access_key ? \__( 'Leave empty to keep the stored access key.', 'robotstxt-smtp-amazonses' ) : '';
?> ?>
<input <input
name="<?php echo \esc_attr( $this->get_field_name( self::OPTION_ACCESS_KEY ) ); ?>" name="<?php echo \esc_attr( $this->get_field_name( self::OPTION_ACCESS_KEY ) ); ?>"
type="text" type="text"
id="robotstxt_smtp_amazon_ses_access_key" id="robotstxt_smtp_amazon_ses_access_key"
class="regular-text" class="regular-text"
value="<?php echo \esc_attr( $settings[ self::OPTION_ACCESS_KEY ] ); ?>" value=""
autocomplete="off" autocomplete="off"
placeholder="<?php echo \esc_attr( $placeholder_label ); ?>"
/> />
<p class="description"><?php \esc_html_e( 'Provide the IAM access key ID with permissions to send email through Amazon SES.', 'robotstxt-smtp-amazonses' ); ?></p> <p class="description"><?php \esc_html_e( 'Provide the IAM access key ID with permissions to send email through Amazon SES. Leave the field empty to retain the existing value.', 'robotstxt-smtp-amazonses' ); ?></p>
<?php <?php
} }
@ -844,6 +1018,8 @@ class Plugin {
public function sanitize_settings( array $clean, array $options, Settings_Page $settings ): array { public function sanitize_settings( array $clean, array $options, Settings_Page $settings ): array {
unset( $settings ); unset( $settings );
// Debug: Log incoming $clean array.
if ( ! SMTP_Plugin::is_amazon_ses_integration_active() ) { if ( ! SMTP_Plugin::is_amazon_ses_integration_active() ) {
return $clean; return $clean;
} }
@ -915,6 +1091,10 @@ class Plugin {
$clean[ self::OPTION_SECRET_KEY ] = $secret_key; $clean[ self::OPTION_SECRET_KEY ] = $secret_key;
$clean[ self::OPTION_REGION ] = $region; $clean[ self::OPTION_REGION ] = $region;
// Temporary debug logging
// Debug: Check credentials_changed and values
if ( $credentials_changed && ( '' === $access_key || '' === $secret_key || '' === $region ) ) { if ( $credentials_changed && ( '' === $access_key || '' === $secret_key || '' === $region ) ) {
\add_settings_error( \add_settings_error(
$settings_error_slug, $settings_error_slug,
@ -946,8 +1126,18 @@ class Plugin {
\esc_html__( 'Amazon SES credentials verified successfully.', 'robotstxt-smtp-amazonses' ), \esc_html__( 'Amazon SES credentials verified successfully.', 'robotstxt-smtp-amazonses' ),
'updated' 'updated'
); );
// Fetch SES quotas immediately after successful validation and cache them.
// Note: We do NOT overwrite rate_limit settings in the database.
// The UI will read directly from the transient when Amazon SES is active.
$quota = $this->fetch_ses_quota_with_credentials( $access_key, $secret_key, $region );
if ( ! \is_wp_error( $quota ) ) {
\set_site_transient( self::get_quota_cache_key(), $quota, DAY_IN_SECONDS );
}
} }
// Debug: Log final $clean array before return.
return $clean; return $clean;
} }
@ -985,7 +1175,18 @@ class Plugin {
$settings = array(); $settings = array();
} }
return \wp_parse_args( $settings, Settings_Page::get_default_settings() ); $settings = \wp_parse_args( $settings, Settings_Page::get_default_settings() );
// Decrypt Amazon SES credentials after loading from database.
if ( isset( $settings[ self::OPTION_ACCESS_KEY ] ) && '' !== $settings[ self::OPTION_ACCESS_KEY ] ) {
$settings[ self::OPTION_ACCESS_KEY ] = \Robotstxt_SMTP_Encryption::decrypt( $settings[ self::OPTION_ACCESS_KEY ] );
}
if ( isset( $settings[ self::OPTION_SECRET_KEY ] ) && '' !== $settings[ self::OPTION_SECRET_KEY ] ) {
$settings[ self::OPTION_SECRET_KEY ] = \Robotstxt_SMTP_Encryption::decrypt( $settings[ self::OPTION_SECRET_KEY ] );
}
return $settings;
} }
/** /**
@ -1005,7 +1206,9 @@ class Plugin {
* @return string * @return string
*/ */
private function get_settings_option_name(): string { private function get_settings_option_name(): string {
if ( \is_network_admin() && Settings_Page::is_network_mode_enabled() ) { // Check if network mode is enabled, regardless of whether we're in network admin context.
// This is important when sending emails from frontend or non-admin contexts.
if ( ROBOTSTXT_SMTP_IS_MULTISITE && Settings_Page::is_network_mode_enabled() ) {
return Settings_Page::NETWORK_OPTION_NAME; return Settings_Page::NETWORK_OPTION_NAME;
} }
@ -1158,14 +1361,38 @@ class Plugin {
$client->getAccount(); $client->getAccount();
} catch ( AwsException $exception ) { } catch ( AwsException $exception ) {
$aws_error_code = $exception->getAwsErrorCode();
$message = $exception->getAwsErrorMessage(); $message = $exception->getAwsErrorMessage();
if ( ! is_string( $message ) || '' === $message ) { if ( ! is_string( $message ) || '' === $message ) {
$message = $exception->getMessage(); $message = $exception->getMessage();
} }
$message = \wp_strip_all_tags( (string) $message ); $message = \esc_html( (string) $message );
// Allow saving if the error is due to missing IAM permissions (not authorization to use SES itself).
// The credentials may still work for sending emails which requires different permissions.
if ( 'AccessDeniedException' === $aws_error_code || 'UnauthorizedException' === $aws_error_code ) {
if ( \strpos( $message, 'not authorized to perform: ses:GetAccount' ) !== false ) {
// Permission error for GetAccount API - credentials might still work for sending.
// Return null (success) but we could add a notice here if needed.
return null;
}
}
// For authentication errors (invalid credentials), prevent saving.
if ( in_array( $aws_error_code, array( 'InvalidClientTokenId', 'SignatureDoesNotMatch', 'InvalidAccessKeyId' ), true ) ) {
return new WP_Error(
'robotstxt_smtp_amazon_ses_invalid_credentials',
\sprintf(
/* translators: %s: Error message from Amazon SES. */
\esc_html__( 'Invalid Amazon SES credentials: %s', 'robotstxt-smtp-amazonses' ),
$message
)
);
}
// For other AWS errors, show warning but allow saving.
return new WP_Error( return new WP_Error(
'robotstxt_smtp_amazon_ses_invalid_credentials', 'robotstxt_smtp_amazon_ses_invalid_credentials',
\sprintf( \sprintf(
@ -1175,7 +1402,7 @@ class Plugin {
) )
); );
} catch ( Throwable $exception ) { } catch ( Throwable $exception ) {
$message = \wp_strip_all_tags( $exception->getMessage() ); $message = \esc_html( $exception->getMessage() );
return new WP_Error( return new WP_Error(
'robotstxt_smtp_amazon_ses_unexpected_error', 'robotstxt_smtp_amazon_ses_unexpected_error',
@ -1189,4 +1416,214 @@ class Plugin {
return null; return null;
} }
/**
* Schedules the SES quota update event if not already scheduled.
*
* @since 1.0.1
*
* @return void
*/
public function maybe_schedule_quota_update(): void {
if ( ! wp_next_scheduled( self::CRON_HOOK_UPDATE_QUOTA ) ) {
wp_schedule_event( time(), 'daily', self::CRON_HOOK_UPDATE_QUOTA );
}
}
/**
* Fetches current sending quotas from Amazon SES and updates rate limits.
*
* @since 1.0.1
*
* @return void
*/
public function update_quota_from_ses(): void {
$quota = $this->fetch_ses_send_quota();
if ( is_wp_error( $quota ) ) {
if ( defined( 'WP_DEBUG' ) && WP_DEBUG && defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) {
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
error_log( sprintf( 'ROBOTSTXT SMTP Amazon SES: Failed to fetch send quota: %s', $quota->get_error_message() ) );
}
return;
}
set_site_transient( self::get_quota_cache_key(), $quota, DAY_IN_SECONDS );
}
/**
* Fetches the current send quota from Amazon SES API.
*
* @since 1.0.1
*
* @return array<string, mixed>|WP_Error Quota data or error.
*/
private function fetch_ses_send_quota() {
$settings = $this->get_stored_settings();
$access_key = (string) ( $settings[ self::OPTION_ACCESS_KEY ] ?? '' );
$secret_key = (string) ( $settings[ self::OPTION_SECRET_KEY ] ?? '' );
$region = (string) ( $settings[ self::OPTION_REGION ] ?? '' );
if ( '' === $access_key || '' === $secret_key || '' === $region ) {
return new WP_Error(
'missing_credentials',
__( 'Amazon SES credentials are not configured.', 'robotstxt-smtp-amazonses' )
);
}
return $this->fetch_ses_quota_with_credentials( $access_key, $secret_key, $region );
}
/**
* Fetches the current send quota from Amazon SES API using provided credentials.
*
* @since 1.0.1
*
* @param string $access_key AWS access key ID.
* @param string $secret_key AWS secret access key.
* @param string $region AWS region.
*
* @return array<string, mixed>|WP_Error Quota data or error.
*/
private function fetch_ses_quota_with_credentials( string $access_key, string $secret_key, string $region ) {
if ( '' === $access_key || '' === $secret_key || '' === $region ) {
return new WP_Error(
'missing_credentials',
__( 'Amazon SES credentials are not configured.', 'robotstxt-smtp-amazonses' )
);
}
try {
$client = $this->get_ses_client( $access_key, $secret_key, $region );
$result = $client->getAccount();
$send_quota = $result->get( 'SendQuota' );
if ( ! $send_quota ) {
return new WP_Error(
'no_quota_data',
__( 'Amazon SES did not return quota data.', 'robotstxt-smtp-amazonses' )
);
}
return array(
'max_24_hour_send' => (int) ( $send_quota['Max24HourSend'] ?? 0 ),
'max_send_rate' => (float) ( $send_quota['MaxSendRate'] ?? 0 ),
'sent_last_24_hours' => (int) ( $send_quota['SentLast24Hours'] ?? 0 ),
'fetched_at' => time(),
);
} catch ( AwsException $e ) {
// Si el error es por falta de permisos para GetAccount, intentamos de todas formas pero no bloqueamos.
$aws_error_code = $e->getAwsErrorCode();
if ( 'AccessDeniedException' === $aws_error_code || 'UnauthorizedException' === $aws_error_code ) {
// No podemos obtener cuotas, pero no es un error crítico.
return new WP_Error(
'quota_permission_denied',
__( 'Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission.', 'robotstxt-smtp-amazonses' )
);
}
return new WP_Error(
'aws_api_error',
sprintf(
/* translators: %s: AWS error message */
__( 'Amazon SES API error: %s', 'robotstxt-smtp-amazonses' ),
$e->getMessage()
)
);
} catch ( Throwable $e ) {
return new WP_Error(
'unknown_error',
sprintf(
/* translators: %s: Error message */
__( 'Failed to fetch SES quota: %s', 'robotstxt-smtp-amazonses' ),
$e->getMessage()
)
);
}
}
/**
* Applies SES quota limits to the SMTP plugin rate limiting settings.
*
* @since 1.0.1
*
* @param array<string, mixed> $quota Quota data from SES.
* @return void
*/
private function apply_ses_quota_to_rate_limits( array $quota ): void {
$max_send_rate = (float) ( $quota['max_send_rate'] ?? 0 );
$max_24_hour_send = (int) ( $quota['max_24_hour_send'] ?? 0 );
$settings_page = \Robotstxt_SMTP\Admin\Settings_Page::class;
if ( ! class_exists( $settings_page ) ) {
return;
}
$is_network = ROBOTSTXT_SMTP_IS_MULTISITE && $settings_page::is_network_mode_enabled();
$option_name = $is_network ? $settings_page::NETWORK_OPTION_NAME : $settings_page::OPTION_NAME;
$settings = $is_network ? get_site_option( $option_name, array() ) : get_option( $option_name, array() );
if ( ! is_array( $settings ) ) {
$settings = array();
}
$settings['rate_limit_per_second'] = (int) floor( $max_send_rate );
$settings['rate_limit_per_hour'] = (int) floor( $max_send_rate * 3600 * 0.9 );
$settings['rate_limit_per_day'] = $max_24_hour_send;
if ( $is_network ) {
update_site_option( $option_name, $settings );
} else {
update_option( $option_name, $settings );
}
if ( defined( 'WP_DEBUG' ) && WP_DEBUG && defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) {
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
error_log(
sprintf(
'ROBOTSTXT SMTP: Updated rate limits from Amazon SES quota - Per second: %d, Per hour: %d, Per day: %d',
$settings['rate_limit_per_second'],
$settings['rate_limit_per_hour'],
$settings['rate_limit_per_day']
)
);
}
}
/**
* Gets the transient cache key for Amazon SES quota data.
*
* Includes blog_id when not in network mode to prevent cache collisions
* in MultiSite installations where different sites use different SES accounts.
*
* This is a public static method so the core SMTP plugin can also access
* the correct transient key.
*
* @return string Transient key.
*/
public static function get_quota_cache_key(): string {
// In network mode, all sites share the same quota cache.
if ( Settings_Page::is_network_mode_enabled() ) {
return 'robotstxt_smtp_amazonses_quota_network';
}
// In site mode, each site has its own quota cache to prevent collisions.
return 'robotstxt_smtp_amazonses_quota_' . \get_current_blog_id();
}
/**
* Gets cached SES quota data if available.
*
* @since 1.0.1
*
* @return array<string, mixed>|false Quota data or false if not cached.
*/
public function get_cached_ses_quota() {
return get_site_transient( self::get_quota_cache_key() );
}
} }

Binary file not shown.

View file

@ -0,0 +1,315 @@
msgid ""
msgstr ""
"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n"
"POT-Creation-Date: 2026-01-29 10:03+0100\n"
"PO-Revision-Date: 2026-01-29 09:30+0100\n"
"Last-Translator: ROBOTSTXT <robotstxt@robotstxt.es>\n"
"Language-Team: Catalan\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Manual\n"
#: includes/class-plugin.php:151
msgid "Amazon SES could not send the email because no recipient was provided."
msgstr "Amazon SES no ha pogut enviar l'email perquè no s'ha proporcionat cap destinatari."
#: includes/class-plugin.php:224
#, php-format
msgid "Amazon SES could not prepare the email: %s"
msgstr "Amazon SES no ha pogut preparar l'email: %s"
#: includes/class-plugin.php:265
#, php-format
msgid "Amazon SES could not send the email: %s"
msgstr "Amazon SES no ha pogut enviar l'email: %s"
#: includes/class-plugin.php:282
#, php-format
msgid "An unexpected error occurred while sending through Amazon SES: %s"
msgstr "S'ha produït un error inesperat en enviar a través d'Amazon SES: %s"
#: includes/class-plugin.php:330
#, php-format
msgid "Amazon SES rejected the \"From\" address: %s"
msgstr "Amazon SES ha rebutjat l'adreça \"De\": %s"
#: includes/class-plugin.php:351
#, php-format
msgid "Amazon SES rejected the recipient address: %s"
msgstr "Amazon SES ha rebutjat l'adreça del destinatari: %s"
#: includes/class-plugin.php:373
#, php-format
msgid "Amazon SES rejected the CC address: %s"
msgstr "Amazon SES ha rebutjat l'adreça CC: %s"
#: includes/class-plugin.php:395
#, php-format
msgid "Amazon SES rejected the BCC address: %s"
msgstr "Amazon SES ha rebutjat l'adreça CCO: %s"
#: includes/class-plugin.php:417
#, php-format
msgid "Amazon SES rejected the reply-to address: %s"
msgstr "Amazon SES ha rebutjat l'adreça de resposta: %s"
#: includes/class-plugin.php:446
#, php-format
msgid "Amazon SES rejected the configured reply-to address: %s"
msgstr "Amazon SES ha rebutjat l'adreça de resposta configurada: %s"
#: includes/class-plugin.php:497
#, php-format
msgid "Amazon SES could not include the attachment: %s"
msgstr "Amazon SES no ha pogut incloure l'adjunt: %s"
#: includes/class-plugin.php:833
msgid "Security check failed."
msgstr "Ha fallat la comprovació de seguretat."
#: includes/class-plugin.php:841 robotstxt-updater.php:367
msgid "You do not have sufficient permissions to access this page."
msgstr "No tens permisos suficients per accedir a aquesta pàgina."
#: includes/class-plugin.php:854
msgid "Amazon SES quotas refreshed successfully."
msgstr "Quotes d'Amazon SES actualitzades correctament."
#: includes/class-plugin.php:861
msgid "Unable to fetch quotas from Amazon SES. Check debug log for details."
msgstr "No s'han pogut obtenir les quotes d'Amazon SES. Verifica el registre de depuració per a més detalls."
#: includes/class-plugin.php:900
msgid "Access Key ID"
msgstr "ID de clau d'accés"
#: includes/class-plugin.php:906
msgid "Secret Access Key"
msgstr "Clau d'accés secreta"
#: includes/class-plugin.php:912
msgid "Region"
msgstr "Regió"
#: includes/class-plugin.php:918
msgid "From Email"
msgstr "Email remitent"
#: includes/class-plugin.php:924
msgid "From Name"
msgstr "Nom remitent"
#: includes/class-plugin.php:930
msgid "Reply-To Email"
msgstr "Email de resposta"
#: includes/class-plugin.php:936
msgid "Reply-To Name"
msgstr "Nom de resposta"
#: includes/class-plugin.php:951
msgid "Leave empty to keep the stored access key."
msgstr "Deixar buit per mantenir la clau d'accés emmagatzemada."
#: includes/class-plugin.php:962
msgid "Provide the IAM access key ID with permissions to send email through Amazon SES. Leave the field empty to retain the existing value."
msgstr "Proporciona l'ID de clau d'accés IAM amb permisos per enviar email a través d'Amazon SES. Deixa el camp buit per mantenir el valor existent."
#: includes/class-plugin.php:974
msgid "Leave empty to keep the stored secret access key."
msgstr "Deixar buit per mantenir la clau d'accés secreta emmagatzemada."
#: includes/class-plugin.php:985
msgid "Enter the secret access key associated with the IAM user. Leave the field empty to retain the existing value."
msgstr "Introdueix la clau d'accés secreta associada amb l'usuari IAM. Deixa el camp buit per mantenir el valor existent."
#: includes/class-plugin.php:1000
msgid "Select a region"
msgstr "Selecciona una regió"
#: includes/class-plugin.php:1005
msgid "Choose the AWS region where your Amazon SES account is hosted."
msgstr "Tria la regió d'AWS on està allotjat el teu compte d'Amazon SES."
#: includes/class-plugin.php:1082
msgid "The selected Amazon SES region is not available."
msgstr "La regió d'Amazon SES seleccionada no està disponible."
#: includes/class-plugin.php:1102
msgid "Amazon SES credentials were not saved. Provide an access key, secret key, and region."
msgstr "Les credencials d'Amazon SES no s'han desat. Proporciona una clau d'accés, clau secreta i regió."
#: includes/class-plugin.php:1126
msgid "Amazon SES credentials verified successfully."
msgstr "Credencials d'Amazon SES verificades correctament."
#: includes/class-plugin.php:1281
msgid "US East (Ohio)"
msgstr "EUA Est (Ohio)"
#: includes/class-plugin.php:1282
msgid "US East (N. Virginia)"
msgstr "EUA Est (N. Virgínia)"
#: includes/class-plugin.php:1283
msgid "US West (N. California)"
msgstr "EUA Oest (N. Califòrnia)"
#: includes/class-plugin.php:1284
msgid "US West (Oregon)"
msgstr "EUA Oest (Oregon)"
#: includes/class-plugin.php:1285
msgid "Africa (Cape Town)"
msgstr "Àfrica (Ciutat del Cap)"
#: includes/class-plugin.php:1286
msgid "Asia Pacific (Hyderabad)"
msgstr "Àsia Pacífic (Hyderabad)"
#: includes/class-plugin.php:1287
msgid "Asia Pacific (Jakarta)"
msgstr "Àsia Pacífic (Jakarta)"
#: includes/class-plugin.php:1288
msgid "Asia Pacific (Mumbai)"
msgstr "Àsia Pacífic (Mumbai)"
#: includes/class-plugin.php:1289
msgid "Asia Pacific (Osaka)"
msgstr "Àsia Pacífic (Osaka)"
#: includes/class-plugin.php:1290
msgid "Asia Pacific (Seoul)"
msgstr "Àsia Pacífic (Seül)"
#: includes/class-plugin.php:1291
msgid "Asia Pacific (Singapore)"
msgstr "Àsia Pacífic (Singapur)"
#: includes/class-plugin.php:1292
msgid "Asia Pacific (Sydney)"
msgstr "Àsia Pacífic (Sydney)"
#: includes/class-plugin.php:1293
msgid "Asia Pacific (Tokyo)"
msgstr "Àsia Pacífic (Tòquio)"
#: includes/class-plugin.php:1294
msgid "Canada (Central)"
msgstr "Canadà (Central)"
#: includes/class-plugin.php:1295
msgid "Europe (Frankfurt)"
msgstr "Europa (Frankfurt)"
#: includes/class-plugin.php:1296
msgid "Europe (Ireland)"
msgstr "Europa (Irlanda)"
#: includes/class-plugin.php:1297
msgid "Europe (London)"
msgstr "Europa (Londres)"
#: includes/class-plugin.php:1298
msgid "Europe (Milan)"
msgstr "Europa (Milà)"
#: includes/class-plugin.php:1299
msgid "Europe (Paris)"
msgstr "Europa (París)"
#: includes/class-plugin.php:1300
msgid "Europe (Stockholm)"
msgstr "Europa (Estocolm)"
#: includes/class-plugin.php:1301
msgid "Europe (Zurich)"
msgstr "Europa (Zuric)"
#: includes/class-plugin.php:1302
msgid "Israel (Tel Aviv)"
msgstr "Israel (Tel Aviv)"
#: includes/class-plugin.php:1303
msgid "Middle East (Bahrain)"
msgstr "Orient Mitjà (Bahrain)"
#: includes/class-plugin.php:1304
msgid "Middle East (UAE)"
msgstr "Orient Mitjà (EAU)"
#: includes/class-plugin.php:1305
msgid "South America (São Paulo)"
msgstr "Sud-amèrica (São Paulo)"
#: includes/class-plugin.php:1306
msgid "AWS GovCloud (US-East)"
msgstr "AWS GovCloud (EUA-Est)"
#: includes/class-plugin.php:1307
msgid "AWS GovCloud (US-West)"
msgstr "AWS GovCloud (EUA-Oest)"
#: includes/class-plugin.php:1322
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
#: includes/class-plugin.php:1338
#, php-format
msgid "Region %s"
msgstr "Regió %s"
#: includes/class-plugin.php:1389
#, php-format
msgid "Invalid Amazon SES credentials: %s"
msgstr "Credencials d'Amazon SES invàlides: %s"
#: includes/class-plugin.php:1400
#, php-format
msgid "Could not verify Amazon SES credentials: %s"
msgstr "No s'han pogut verificar les credencials d'Amazon SES: %s"
#: includes/class-plugin.php:1411
#, php-format
msgid "An unexpected error occurred while validating Amazon SES credentials: %s"
msgstr "S'ha produït un error inesperat en validar les credencials d'Amazon SES: %s"
#: includes/class-plugin.php:1470 includes/class-plugin.php:1492
msgid "Amazon SES credentials are not configured."
msgstr "Les credencials d'Amazon SES no estan configurades."
#: includes/class-plugin.php:1506
msgid "Amazon SES did not return quota data."
msgstr "Amazon SES no ha retornat dades de quota."
#: includes/class-plugin.php:1524
msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission."
msgstr "No es poden obtenir les quotes de SES: l'usuari IAM no té el permís ses:GetAccount."
#: includes/class-plugin.php:1532
#, php-format
msgid "Amazon SES API error: %s"
msgstr "Error d'API d'Amazon SES: %s"
#: includes/class-plugin.php:1541
#, php-format
msgid "Failed to fetch SES quota: %s"
msgstr "Ha fallat en obtenir la quota de SES: %s"
#: robotstxt-updater.php:362
msgid "Security check failed"
msgstr "Ha fallat la comprovació de seguretat"
msgid "SMTP (by ROBOTSTXT) Amazon SES"
msgstr "SMTP (by ROBOTSTXT) Amazon SES"
msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin."
msgstr "Afegeix suport de configuració d'Amazon SES al plugin ROBOTSTXT SMTP."
msgid "ROBOTSTXT"
msgstr "ROBOTSTXT"

Binary file not shown.

View file

@ -0,0 +1,315 @@
msgid ""
msgstr ""
"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n"
"POT-Creation-Date: 2026-01-29 10:03+0100\n"
"PO-Revision-Date: 2026-01-29 09:30+0100\n"
"Last-Translator: ROBOTSTXT <robotstxt@robotstxt.es>\n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Manual\n"
#: includes/class-plugin.php:151
msgid "Amazon SES could not send the email because no recipient was provided."
msgstr "Amazon SES no pudo enviar el email porque no se proporcionó ningún destinatario."
#: includes/class-plugin.php:224
#, php-format
msgid "Amazon SES could not prepare the email: %s"
msgstr "Amazon SES no pudo preparar el email: %s"
#: includes/class-plugin.php:265
#, php-format
msgid "Amazon SES could not send the email: %s"
msgstr "Amazon SES no pudo enviar el email: %s"
#: includes/class-plugin.php:282
#, php-format
msgid "An unexpected error occurred while sending through Amazon SES: %s"
msgstr "Ocurrió un error inesperado al enviar a través de Amazon SES: %s"
#: includes/class-plugin.php:330
#, php-format
msgid "Amazon SES rejected the \"From\" address: %s"
msgstr "Amazon SES rechazó la dirección \"De\": %s"
#: includes/class-plugin.php:351
#, php-format
msgid "Amazon SES rejected the recipient address: %s"
msgstr "Amazon SES rechazó la dirección del destinatario: %s"
#: includes/class-plugin.php:373
#, php-format
msgid "Amazon SES rejected the CC address: %s"
msgstr "Amazon SES rechazó la dirección CC: %s"
#: includes/class-plugin.php:395
#, php-format
msgid "Amazon SES rejected the BCC address: %s"
msgstr "Amazon SES rechazó la dirección CCO: %s"
#: includes/class-plugin.php:417
#, php-format
msgid "Amazon SES rejected the reply-to address: %s"
msgstr "Amazon SES rechazó la dirección de respuesta: %s"
#: includes/class-plugin.php:446
#, php-format
msgid "Amazon SES rejected the configured reply-to address: %s"
msgstr "Amazon SES rechazó la dirección de respuesta configurada: %s"
#: includes/class-plugin.php:497
#, php-format
msgid "Amazon SES could not include the attachment: %s"
msgstr "Amazon SES no pudo incluir el adjunto: %s"
#: includes/class-plugin.php:833
msgid "Security check failed."
msgstr "Falló la comprobación de seguridad."
#: includes/class-plugin.php:841 robotstxt-updater.php:367
msgid "You do not have sufficient permissions to access this page."
msgstr "No tienes permisos suficientes para acceder a esta página."
#: includes/class-plugin.php:854
msgid "Amazon SES quotas refreshed successfully."
msgstr "Cuotas de Amazon SES actualizadas correctamente."
#: includes/class-plugin.php:861
msgid "Unable to fetch quotas from Amazon SES. Check debug log for details."
msgstr "No se pudieron obtener las cuotas de Amazon SES. Verifica el registro de depuración para más detalles."
#: includes/class-plugin.php:900
msgid "Access Key ID"
msgstr "ID de clave de acceso"
#: includes/class-plugin.php:906
msgid "Secret Access Key"
msgstr "Clave de acceso secreta"
#: includes/class-plugin.php:912
msgid "Region"
msgstr "Región"
#: includes/class-plugin.php:918
msgid "From Email"
msgstr "Email remitente"
#: includes/class-plugin.php:924
msgid "From Name"
msgstr "Nombre remitente"
#: includes/class-plugin.php:930
msgid "Reply-To Email"
msgstr "Email de respuesta"
#: includes/class-plugin.php:936
msgid "Reply-To Name"
msgstr "Nombre de respuesta"
#: includes/class-plugin.php:951
msgid "Leave empty to keep the stored access key."
msgstr "Dejar vacío para mantener la clave de acceso almacenada."
#: includes/class-plugin.php:962
msgid "Provide the IAM access key ID with permissions to send email through Amazon SES. Leave the field empty to retain the existing value."
msgstr "Proporciona el ID de clave de acceso IAM con permisos para enviar email a través de Amazon SES. Deja el campo vacío para mantener el valor existente."
#: includes/class-plugin.php:974
msgid "Leave empty to keep the stored secret access key."
msgstr "Dejar vacío para mantener la clave de acceso secreta almacenada."
#: includes/class-plugin.php:985
msgid "Enter the secret access key associated with the IAM user. Leave the field empty to retain the existing value."
msgstr "Introduce la clave de acceso secreta asociada con el usuario IAM. Deja el campo vacío para mantener el valor existente."
#: includes/class-plugin.php:1000
msgid "Select a region"
msgstr "Selecciona una región"
#: includes/class-plugin.php:1005
msgid "Choose the AWS region where your Amazon SES account is hosted."
msgstr "Elige la región de AWS donde está alojada tu cuenta de Amazon SES."
#: includes/class-plugin.php:1082
msgid "The selected Amazon SES region is not available."
msgstr "La región de Amazon SES seleccionada no está disponible."
#: includes/class-plugin.php:1102
msgid "Amazon SES credentials were not saved. Provide an access key, secret key, and region."
msgstr "Las credenciales de Amazon SES no se guardaron. Proporciona una clave de acceso, clave secreta y región."
#: includes/class-plugin.php:1126
msgid "Amazon SES credentials verified successfully."
msgstr "Credenciales de Amazon SES verificadas correctamente."
#: includes/class-plugin.php:1281
msgid "US East (Ohio)"
msgstr "EE.UU. Este (Ohio)"
#: includes/class-plugin.php:1282
msgid "US East (N. Virginia)"
msgstr "EE.UU. Este (N. Virginia)"
#: includes/class-plugin.php:1283
msgid "US West (N. California)"
msgstr "EE.UU. Oeste (N. California)"
#: includes/class-plugin.php:1284
msgid "US West (Oregon)"
msgstr "EE.UU. Oeste (Oregón)"
#: includes/class-plugin.php:1285
msgid "Africa (Cape Town)"
msgstr "África (Ciudad del Cabo)"
#: includes/class-plugin.php:1286
msgid "Asia Pacific (Hyderabad)"
msgstr "Asia Pacífico (Hyderabad)"
#: includes/class-plugin.php:1287
msgid "Asia Pacific (Jakarta)"
msgstr "Asia Pacífico (Yakarta)"
#: includes/class-plugin.php:1288
msgid "Asia Pacific (Mumbai)"
msgstr "Asia Pacífico (Mumbai)"
#: includes/class-plugin.php:1289
msgid "Asia Pacific (Osaka)"
msgstr "Asia Pacífico (Osaka)"
#: includes/class-plugin.php:1290
msgid "Asia Pacific (Seoul)"
msgstr "Asia Pacífico (Seúl)"
#: includes/class-plugin.php:1291
msgid "Asia Pacific (Singapore)"
msgstr "Asia Pacífico (Singapur)"
#: includes/class-plugin.php:1292
msgid "Asia Pacific (Sydney)"
msgstr "Asia Pacífico (Sídney)"
#: includes/class-plugin.php:1293
msgid "Asia Pacific (Tokyo)"
msgstr "Asia Pacífico (Tokio)"
#: includes/class-plugin.php:1294
msgid "Canada (Central)"
msgstr "Canadá (Central)"
#: includes/class-plugin.php:1295
msgid "Europe (Frankfurt)"
msgstr "Europa (Fráncfort)"
#: includes/class-plugin.php:1296
msgid "Europe (Ireland)"
msgstr "Europa (Irlanda)"
#: includes/class-plugin.php:1297
msgid "Europe (London)"
msgstr "Europa (Londres)"
#: includes/class-plugin.php:1298
msgid "Europe (Milan)"
msgstr "Europa (Milán)"
#: includes/class-plugin.php:1299
msgid "Europe (Paris)"
msgstr "Europa (París)"
#: includes/class-plugin.php:1300
msgid "Europe (Stockholm)"
msgstr "Europa (Estocolmo)"
#: includes/class-plugin.php:1301
msgid "Europe (Zurich)"
msgstr "Europa (Zúrich)"
#: includes/class-plugin.php:1302
msgid "Israel (Tel Aviv)"
msgstr "Israel (Tel Aviv)"
#: includes/class-plugin.php:1303
msgid "Middle East (Bahrain)"
msgstr "Oriente Medio (Baréin)"
#: includes/class-plugin.php:1304
msgid "Middle East (UAE)"
msgstr "Oriente Medio (EAU)"
#: includes/class-plugin.php:1305
msgid "South America (São Paulo)"
msgstr "Sudamérica (São Paulo)"
#: includes/class-plugin.php:1306
msgid "AWS GovCloud (US-East)"
msgstr "AWS GovCloud (EE.UU.-Este)"
#: includes/class-plugin.php:1307
msgid "AWS GovCloud (US-West)"
msgstr "AWS GovCloud (EE.UU.-Oeste)"
#: includes/class-plugin.php:1322
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
#: includes/class-plugin.php:1338
#, php-format
msgid "Region %s"
msgstr "Región %s"
#: includes/class-plugin.php:1389
#, php-format
msgid "Invalid Amazon SES credentials: %s"
msgstr "Credenciales de Amazon SES inválidas: %s"
#: includes/class-plugin.php:1400
#, php-format
msgid "Could not verify Amazon SES credentials: %s"
msgstr "No se pudieron verificar las credenciales de Amazon SES: %s"
#: includes/class-plugin.php:1411
#, php-format
msgid "An unexpected error occurred while validating Amazon SES credentials: %s"
msgstr "Ocurrió un error inesperado al validar las credenciales de Amazon SES: %s"
#: includes/class-plugin.php:1470 includes/class-plugin.php:1492
msgid "Amazon SES credentials are not configured."
msgstr "Las credenciales de Amazon SES no están configuradas."
#: includes/class-plugin.php:1506
msgid "Amazon SES did not return quota data."
msgstr "Amazon SES no devolvió datos de cuota."
#: includes/class-plugin.php:1524
msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission."
msgstr "No se pueden obtener las cuotas de SES: el usuario IAM no tiene el permiso ses:GetAccount."
#: includes/class-plugin.php:1532
#, php-format
msgid "Amazon SES API error: %s"
msgstr "Error de API de Amazon SES: %s"
#: includes/class-plugin.php:1541
#, php-format
msgid "Failed to fetch SES quota: %s"
msgstr "Falló al obtener la cuota de SES: %s"
#: robotstxt-updater.php:362
msgid "Security check failed"
msgstr "Falló la comprobación de seguridad"
msgid "SMTP (by ROBOTSTXT) Amazon SES"
msgstr "SMTP (by ROBOTSTXT) Amazon SES"
msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin."
msgstr "Añade soporte de configuración de Amazon SES al plugin ROBOTSTXT SMTP."
msgid "ROBOTSTXT"
msgstr "ROBOTSTXT"

View file

@ -0,0 +1,359 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n"
"POT-Creation-Date: 2026-01-29 10:03+0100\n"
"PO-Revision-Date: 2026-01-29 10:03+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
"X-Generator: Poedit 3.8\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
"X-Poedit-WPHeader: robotstxt-smtp-amazonses.php\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: "
"__;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: *.min.js\n"
"X-Poedit-SearchPathExcluded-1: vendor\n"
#: includes/class-plugin.php:151
msgid "Amazon SES could not send the email because no recipient was provided."
msgstr ""
#. translators: %s: Error details describing the email preparation failure.
#: includes/class-plugin.php:224
#, php-format
msgid "Amazon SES could not prepare the email: %s"
msgstr ""
#. translators: %s: Error message returned by Amazon SES.
#: includes/class-plugin.php:265
#, php-format
msgid "Amazon SES could not send the email: %s"
msgstr ""
#. translators: %s: Error message describing the unexpected failure.
#: includes/class-plugin.php:282
#, php-format
msgid "An unexpected error occurred while sending through Amazon SES: %s"
msgstr ""
#. translators: %s: Error details describing why the From header is invalid.
#: includes/class-plugin.php:330
#, php-format
msgid "Amazon SES rejected the \"From\" address: %s"
msgstr ""
#. translators: %s: Invalid recipient email address.
#: includes/class-plugin.php:351
#, php-format
msgid "Amazon SES rejected the recipient address: %s"
msgstr ""
#. translators: %s: Invalid CC email address.
#: includes/class-plugin.php:373
#, php-format
msgid "Amazon SES rejected the CC address: %s"
msgstr ""
#. translators: %s: Invalid BCC email address.
#: includes/class-plugin.php:395
#, php-format
msgid "Amazon SES rejected the BCC address: %s"
msgstr ""
#. translators: %s: Invalid reply-to email address.
#: includes/class-plugin.php:417
#, php-format
msgid "Amazon SES rejected the reply-to address: %s"
msgstr ""
#. translators: %s: Invalid reply-to email address from settings.
#: includes/class-plugin.php:446
#, php-format
msgid "Amazon SES rejected the configured reply-to address: %s"
msgstr ""
#. translators: %s: Attachment path that could not be added.
#: includes/class-plugin.php:497
#, php-format
msgid "Amazon SES could not include the attachment: %s"
msgstr ""
#: includes/class-plugin.php:833
msgid "Security check failed."
msgstr ""
#: includes/class-plugin.php:841 robotstxt-updater.php:367
msgid "You do not have sufficient permissions to access this page."
msgstr ""
#: includes/class-plugin.php:854
msgid "Amazon SES quotas refreshed successfully."
msgstr ""
#: includes/class-plugin.php:861
msgid "Unable to fetch quotas from Amazon SES. Check debug log for details."
msgstr ""
#: includes/class-plugin.php:900
msgid "Access Key ID"
msgstr ""
#: includes/class-plugin.php:906
msgid "Secret Access Key"
msgstr ""
#: includes/class-plugin.php:912
msgid "Region"
msgstr ""
#: includes/class-plugin.php:918
msgid "From Email"
msgstr ""
#: includes/class-plugin.php:924
msgid "From Name"
msgstr ""
#: includes/class-plugin.php:930
msgid "Reply-To Email"
msgstr ""
#: includes/class-plugin.php:936
msgid "Reply-To Name"
msgstr ""
#: includes/class-plugin.php:951
msgid "Leave empty to keep the stored access key."
msgstr ""
#: includes/class-plugin.php:962
msgid ""
"Provide the IAM access key ID with permissions to send email through Amazon "
"SES. Leave the field empty to retain the existing value."
msgstr ""
#: includes/class-plugin.php:974
msgid "Leave empty to keep the stored secret access key."
msgstr ""
#: includes/class-plugin.php:985
msgid ""
"Enter the secret access key associated with the IAM user. Leave the field "
"empty to retain the existing value."
msgstr ""
#: includes/class-plugin.php:1000
msgid "Select a region"
msgstr ""
#: includes/class-plugin.php:1005
msgid "Choose the AWS region where your Amazon SES account is hosted."
msgstr ""
#: includes/class-plugin.php:1082
msgid "The selected Amazon SES region is not available."
msgstr ""
#: includes/class-plugin.php:1102
msgid ""
"Amazon SES credentials were not saved. Provide an access key, secret key, "
"and region."
msgstr ""
#: includes/class-plugin.php:1126
msgid "Amazon SES credentials verified successfully."
msgstr ""
#: includes/class-plugin.php:1281
msgid "US East (Ohio)"
msgstr ""
#: includes/class-plugin.php:1282
msgid "US East (N. Virginia)"
msgstr ""
#: includes/class-plugin.php:1283
msgid "US West (N. California)"
msgstr ""
#: includes/class-plugin.php:1284
msgid "US West (Oregon)"
msgstr ""
#: includes/class-plugin.php:1285
msgid "Africa (Cape Town)"
msgstr ""
#: includes/class-plugin.php:1286
msgid "Asia Pacific (Hyderabad)"
msgstr ""
#: includes/class-plugin.php:1287
msgid "Asia Pacific (Jakarta)"
msgstr ""
#: includes/class-plugin.php:1288
msgid "Asia Pacific (Mumbai)"
msgstr ""
#: includes/class-plugin.php:1289
msgid "Asia Pacific (Osaka)"
msgstr ""
#: includes/class-plugin.php:1290
msgid "Asia Pacific (Seoul)"
msgstr ""
#: includes/class-plugin.php:1291
msgid "Asia Pacific (Singapore)"
msgstr ""
#: includes/class-plugin.php:1292
msgid "Asia Pacific (Sydney)"
msgstr ""
#: includes/class-plugin.php:1293
msgid "Asia Pacific (Tokyo)"
msgstr ""
#: includes/class-plugin.php:1294
msgid "Canada (Central)"
msgstr ""
#: includes/class-plugin.php:1295
msgid "Europe (Frankfurt)"
msgstr ""
#: includes/class-plugin.php:1296
msgid "Europe (Ireland)"
msgstr ""
#: includes/class-plugin.php:1297
msgid "Europe (London)"
msgstr ""
#: includes/class-plugin.php:1298
msgid "Europe (Milan)"
msgstr ""
#: includes/class-plugin.php:1299
msgid "Europe (Paris)"
msgstr ""
#: includes/class-plugin.php:1300
msgid "Europe (Stockholm)"
msgstr ""
#: includes/class-plugin.php:1301
msgid "Europe (Zurich)"
msgstr ""
#: includes/class-plugin.php:1302
msgid "Israel (Tel Aviv)"
msgstr ""
#: includes/class-plugin.php:1303
msgid "Middle East (Bahrain)"
msgstr ""
#: includes/class-plugin.php:1304
msgid "Middle East (UAE)"
msgstr ""
#: includes/class-plugin.php:1305
msgid "South America (São Paulo)"
msgstr ""
#: includes/class-plugin.php:1306
msgid "AWS GovCloud (US-East)"
msgstr ""
#: includes/class-plugin.php:1307
msgid "AWS GovCloud (US-West)"
msgstr ""
#. translators: 1: AWS region display name. 2: AWS region code.
#: includes/class-plugin.php:1322
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
#. translators: %s: AWS region code.
#: includes/class-plugin.php:1338
#, php-format
msgid "Region %s"
msgstr ""
#. translators: %s: Error message from Amazon SES.
#: includes/class-plugin.php:1389
#, php-format
msgid "Invalid Amazon SES credentials: %s"
msgstr ""
#. translators: %s: Error message from Amazon SES.
#: includes/class-plugin.php:1400
#, php-format
msgid "Could not verify Amazon SES credentials: %s"
msgstr ""
#. translators: %s: Error message describing the unexpected failure.
#: includes/class-plugin.php:1411
#, php-format
msgid ""
"An unexpected error occurred while validating Amazon SES credentials: %s"
msgstr ""
#: includes/class-plugin.php:1470 includes/class-plugin.php:1492
msgid "Amazon SES credentials are not configured."
msgstr ""
#: includes/class-plugin.php:1506
msgid "Amazon SES did not return quota data."
msgstr ""
#: includes/class-plugin.php:1524
msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission."
msgstr ""
#. translators: %s: AWS error message
#: includes/class-plugin.php:1532
#, php-format
msgid "Amazon SES API error: %s"
msgstr ""
#. translators: %s: Error message
#: includes/class-plugin.php:1541
#, php-format
msgid "Failed to fetch SES quota: %s"
msgstr ""
#: robotstxt-updater.php:362
msgid "Security check failed"
msgstr ""
#. Plugin Name of the plugin/theme
msgid "SMTP (by ROBOTSTXT) Amazon SES"
msgstr ""
#. Plugin URI of the plugin/theme
msgid "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses"
msgstr ""
#. Description of the plugin/theme
msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin."
msgstr ""
#. Author of the plugin/theme
msgid "ROBOTSTXT"
msgstr ""
#. Author URI of the plugin/theme
msgid "https://www.robotstxt.es/"
msgstr ""

View file

@ -1,11 +1,12 @@
=== SMTP (by ROBOTSTXT) Amazon SES === === SMTP (by ROBOTSTXT) Amazon SES ===
Contributors: robotstxt Contributors: javiercasares
Tags: amazon ses, smtp, email, transactional, deliverability Tags: amazon-ses, smtp, email, mail
Requires at least: 6.0 Requires at least: 6.5
Tested up to: 6.9 Tested up to: 6.9
Requires PHP: 8.2
Stable tag: 1.0.0 Stable tag: 1.0.0
License: GPLv3 or later Requires PHP: 8.2
Version: 1.0.0
License: GPL-3.0-or-later
License URI: https://www.gnu.org/licenses/gpl-3.0.html License URI: https://www.gnu.org/licenses/gpl-3.0.html
This private add-on connects the ROBOTSTXT SMTP plugin with Amazon Simple Email Service (SES). This private add-on connects the ROBOTSTXT SMTP plugin with Amazon Simple Email Service (SES).

View file

@ -1,21 +1,22 @@
<?php <?php
/** /**
* Plugin Name: SMTP Amazon SES (by ROBOTSTXT) * Plugin Name: SMTP (by ROBOTSTXT) Amazon SES
* Plugin URI: https://www.robotstxt.es/ * Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses
* Description: Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin. * Description: Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin.
* Version: 1.0.0 * Version: 2.0.0
* Requires at least: 6.0 * Requires at least: 6.5
* Requires PHP: 8.2 * Requires PHP: 8.2
* Network: true
* Security: robotstxt@robotstxt.es
* Author: ROBOTSTXT * Author: ROBOTSTXT
* Author URI: https://www.robotstxt.es/ * Author URI: https://www.robotstxt.es/
* Text Domain: robotstxt-smtp-amazonses * Text Domain: robotstxt-smtp-amazonses
* Domain Path: /languages
* Requires Plugins: robotstxt-smtp * Requires Plugins: robotstxt-smtp
* Domain Path: /languages
* License: GPL-3.0-or-later * License: GPL-3.0-or-later
* License URI: https://www.gnu.org/licenses/gpl-3.0.html * License URI: https://www.gnu.org/licenses/gpl-3.0.html
* Gitea Plugin URI: ROBOTSTXT/robotstxt-smtp-amazonses
* Gitea Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses * Gitea Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses
* Plugin ID: did:plc:z74fjcsglfynz7grselq5xos * Primary Branch: main
* *
* @package Robotstxt_SMTP_AmazonSES * @package Robotstxt_SMTP_AmazonSES
*/ */
@ -25,7 +26,7 @@ if ( ! defined( 'ABSPATH' ) ) {
} }
if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION' ) ) { if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION' ) ) {
define( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION', '1.0.0' ); define( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION', '2.0.0' );
} }
if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_FILE' ) ) { if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_FILE' ) ) {
@ -56,60 +57,10 @@ if ( \is_readable( $autoload ) ) {
require_once ROBOTSTXT_SMTP_AMAZONSES_PATH . 'includes/class-plugin.php'; require_once ROBOTSTXT_SMTP_AMAZONSES_PATH . 'includes/class-plugin.php';
if ( ! function_exists( 'robotstxt_smtp_amazonses_dependencies_satisfied' ) ) { // Initialize the plugin.
/** // Dependency checking is handled by the "Requires Plugins" header in WordPress 6.5+.
* Determines whether all plugin dependencies are available. \Robotstxt_SMTP_AmazonSES\Plugin::get_instance()->run();
*
* @since 1.0.1
*
* @return bool
*/
function robotstxt_smtp_amazonses_dependencies_satisfied(): bool {
return class_exists( '\\Robotstxt_SMTP\\Plugin' ) && class_exists( '\\Robotstxt_SMTP\\Admin\\Settings_Page' );
}
}
if ( ! function_exists( 'robotstxt_smtp_amazonses_register_dependency_notice' ) ) {
/**
* Registers the admin notice shown when the core plugin is missing.
*
* @since 1.0.1
*
* @return void
*/
function robotstxt_smtp_amazonses_register_dependency_notice(): void {
if ( ! is_admin() ) {
return;
}
$callback = static function (): void {
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
if ( $screen && 'plugins' !== $screen->id && 'plugins-network' !== $screen->id ) {
return;
}
$message = sprintf(
/* translators: %s: plugin name. */
esc_html__( 'The %s add-on requires the ROBOTSTXT SMTP plugin to be installed and active.', 'robotstxt-smtp-amazonses' ),
esc_html__( 'ROBOTSTXT SMTP Amazon SES', 'robotstxt-smtp-amazonses' )
);
?>
<div class="notice notice-error">
<p><?php echo esc_html( $message ); ?></p>
</div>
<?php
};
add_action( 'admin_notices', $callback );
add_action( 'network_admin_notices', $callback );
}
}
if ( robotstxt_smtp_amazonses_dependencies_satisfied() ) {
\Robotstxt_SMTP_AmazonSES\Plugin::get_instance()->run();
} else {
robotstxt_smtp_amazonses_register_dependency_notice();
}
// Initialize ROBOTSTXT updater (auto-configures from plugin headers).
require_once __DIR__ . '/robotstxt-updater.php';
Robotstxt_Updater::init( __FILE__ );

383
robotstxt-updater.php Normal file
View file

@ -0,0 +1,383 @@
<?php
/**
* Generic JSON-based updater for ROBOTSTXT plugins.
*
* This file is designed to be copied to any ROBOTSTXT plugin.
* It auto-configures itself by reading the plugin headers.
*
* @package ROBOTSTXT
* @version 1.0.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'Robotstxt_Updater' ) ) {
/**
* Class Robotstxt_Updater
*
* Generic updater that works with any plugin.
* Reads plugin headers and constructs update URL automatically.
*/
class Robotstxt_Updater {
/**
* Plugin file path.
*
* @var string
*/
private string $plugin_file_path;
/**
* Plugin basename (e.g., 'my-plugin/my-plugin.php').
*
* @var string
*/
private string $plugin_basename;
/**
* Plugin slug (directory name).
*
* @var string
*/
private string $plugin_slug;
/**
* Remote JSON URL.
*
* @var string
*/
private string $json_url;
/**
* Cache key.
*
* @var string
*/
private string $cache_key;
/**
* Plugin headers.
*
* @var array
*/
private array $plugin_data;
/**
* Initialize the updater.
*
* Usage in your main plugin file:
* require_once __DIR__ . '/robotstxt-updater.php';
* Robotstxt_Updater::init( __FILE__ );
*
* @param string $plugin_file_path Absolute path to the main plugin file.
*/
public static function init( string $plugin_file_path ): void {
$instance = new self( $plugin_file_path );
$instance->register();
}
/**
* Constructor.
*
* @param string $plugin_file_path Absolute path to the main plugin file.
*/
private function __construct( string $plugin_file_path ) {
$this->plugin_file_path = $plugin_file_path;
$this->plugin_basename = plugin_basename( $plugin_file_path );
$this->plugin_slug = dirname( $this->plugin_basename );
$this->plugin_data = $this->get_plugin_data();
$this->json_url = $this->build_json_url();
$this->cache_key = 'robotstxt_updater_' . md5( $this->plugin_basename );
}
/**
* Register WordPress hooks.
*/
private function register(): void {
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'inject_update_info' ) );
add_filter( 'plugins_api', array( $this, 'provide_plugin_details' ), 10, 3 );
add_action( 'admin_init', array( $this, 'handle_cache_clear' ) );
add_action( 'robotstxt_updater_clear_cache', array( $this, 'clear_cache' ) );
}
/**
* Get plugin headers.
*
* @return array Plugin data.
*/
private function get_plugin_data(): array {
if ( ! function_exists( 'get_plugin_data' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
return get_plugin_data( $this->plugin_file_path, false, false );
}
/**
* Build JSON URL from plugin headers.
*
* Tries to use "Gitea Plugin URI" header to construct the URL.
* Falls back to Plugin URI if Gitea URI is not available.
*
* @return string JSON URL.
*/
private function build_json_url(): string {
// Try Gitea Plugin URI (format: "OWNER/REPO" or full URL).
if ( ! empty( $this->plugin_data['Gitea Plugin URI'] ) ) {
$gitea_uri = $this->plugin_data['Gitea Plugin URI'];
// If it's already a full URL, use it.
if ( str_starts_with( $gitea_uri, 'http' ) ) {
// Extract base URL and construct JSON path.
return rtrim( $gitea_uri, '/' ) . '/raw/branch/main/update.json';
}
// If it's in format "OWNER/REPO", construct full URL.
if ( preg_match( '#^[^/]+/[^/]+$#', $gitea_uri ) ) {
return "https://git.robotstxt.es/{$gitea_uri}/raw/branch/main/update.json";
}
}
// Fallback: try to extract from Plugin URI.
if ( ! empty( $this->plugin_data['PluginURI'] ) ) {
$plugin_uri = $this->plugin_data['PluginURI'];
if ( str_contains( $plugin_uri, 'git.robotstxt.es' ) ) {
return rtrim( $plugin_uri, '/' ) . '/raw/branch/main/update.json';
}
}
// Last resort: construct from plugin slug.
return "https://git.robotstxt.es/ROBOTSTXT/{$this->plugin_slug}/raw/branch/main/update.json";
}
/**
* Inject update info into WP's plugin update transient.
*
* @param object|mixed $transient The update_plugins transient.
*
* @return object The modified transient.
*/
public function inject_update_info( $transient ) {
if ( ! is_object( $transient ) ) {
$transient = new stdClass();
}
if ( empty( $transient->checked ) || ! is_array( $transient->checked ) ) {
return $transient;
}
if ( empty( $transient->checked[ $this->plugin_basename ] ) ) {
return $transient;
}
$current_version = $transient->checked[ $this->plugin_basename ];
$remote = $this->get_remote_data();
if ( empty( $remote['version'] ) || empty( $remote['download_url'] ) ) {
return $transient;
}
if ( ! $this->is_compatible( $remote ) ) {
return $transient;
}
if ( version_compare( $remote['version'], $current_version, '>' ) ) {
$update = (object) array(
'slug' => $remote['slug'] ?? $this->plugin_slug,
'plugin' => $this->plugin_basename,
'new_version' => $remote['version'],
'url' => $remote['homepage'] ?? $this->plugin_data['PluginURI'] ?? '',
'package' => $remote['download_url'],
'tested' => $remote['tested'] ?? '',
'requires' => $remote['requires'] ?? '',
'requires_php' => $remote['requires_php'] ?? '',
);
$transient->response[ $this->plugin_basename ] = $update;
}
return $transient;
}
/**
* Provide "View details" modal content.
*
* @param false|object|array $result The result object or array.
* @param string $action The type of information being requested.
* @param object $args Plugin API arguments.
*
* @return false|object The plugin information object or false.
*/
public function provide_plugin_details( $result, string $action, object $args ) {
if ( 'plugin_information' !== $action ) {
return $result;
}
if ( empty( $args->slug ) || $args->slug !== $this->plugin_slug ) {
return $result;
}
$remote = $this->get_remote_data();
if ( empty( $remote['version'] ) ) {
return $result;
}
return (object) array(
'name' => $remote['name'] ?? $this->plugin_data['Name'] ?? $this->plugin_slug,
'slug' => $remote['slug'] ?? $this->plugin_slug,
'version' => $remote['version'],
'author' => $remote['author'] ?? $this->plugin_data['Author'] ?? '',
'homepage' => $remote['homepage'] ?? $this->plugin_data['PluginURI'] ?? '',
'requires' => $remote['requires'] ?? '',
'tested' => $remote['tested'] ?? '',
'requires_php' => $remote['requires_php'] ?? '',
'sections' => array(
'description' => $remote['description'] ?? $this->plugin_data['Description'] ?? '',
'changelog' => $remote['changelog'] ?? '',
),
'download_link' => $remote['download_url'] ?? '',
);
}
/**
* Get remote data with caching and HMAC signature verification.
*
* @return array Remote data.
*/
private function get_remote_data(): array {
$cached = get_site_transient( $this->cache_key );
// Verify HMAC signature if AUTH_SALT is defined and cache has signature.
if ( false !== $cached && defined( 'AUTH_SALT' ) && '' !== AUTH_SALT ) {
if ( is_array( $cached ) && isset( $cached['signature'], $cached['data'] ) ) {
$expected_sig = hash_hmac( 'sha256', $this->cache_key . serialize( $cached['data'] ), AUTH_SALT );
if ( hash_equals( $expected_sig, $cached['signature'] ) ) {
// Signature valid, return data.
return is_array( $cached['data'] ) ? $cached['data'] : array();
}
// Signature invalid, delete corrupted cache.
delete_site_transient( $this->cache_key );
$cached = false;
}
}
// If no valid cache, fetch fresh data.
if ( false === $cached ) {
$remote = $this->fetch_json();
// Store with HMAC signature if AUTH_SALT is available.
if ( defined( 'AUTH_SALT' ) && '' !== AUTH_SALT ) {
$payload = array(
'data' => $remote ?: array(),
'timestamp' => time(),
'signature' => hash_hmac( 'sha256', $this->cache_key . serialize( $remote ?: array() ), AUTH_SALT ),
);
set_site_transient( $this->cache_key, $payload, 6 * HOUR_IN_SECONDS );
} else {
// Fallback to standard caching.
set_site_transient( $this->cache_key, $remote ?: array(), 6 * HOUR_IN_SECONDS );
}
return is_array( $remote ) ? $remote : array();
}
// Legacy cache format without signature (backward compatibility).
return is_array( $cached ) ? $cached : array();
}
/**
* Fetch JSON from remote URL.
*
* @return array Decoded JSON data.
*/
private function fetch_json(): array {
$response = wp_remote_get(
$this->json_url,
array(
'timeout' => 10,
'headers' => array(
'Accept' => 'application/json',
),
)
);
if ( is_wp_error( $response ) ) {
return array();
}
$code = (int) wp_remote_retrieve_response_code( $response );
if ( $code < 200 || $code >= 300 ) {
return array();
}
$body = wp_remote_retrieve_body( $response );
$data = json_decode( $body, true );
return is_array( $data ) ? $data : array();
}
/**
* Check compatibility.
*
* @param array $remote Remote data.
*
* @return bool True if compatible.
*/
private function is_compatible( array $remote ): bool {
if ( ! empty( $remote['requires_php'] ) ) {
if ( version_compare( PHP_VERSION, $remote['requires_php'], '<' ) ) {
return false;
}
}
if ( ! empty( $remote['requires'] ) ) {
if ( version_compare( get_bloginfo( 'version' ), $remote['requires'], '<' ) ) {
return false;
}
}
return true;
}
/**
* Handle manual cache clear via URL parameter.
*/
public function handle_cache_clear(): void {
// Check if this is a cache clear request first.
$clear_cache = filter_input( INPUT_GET, 'robotstxt_clear_update_cache', FILTER_UNSAFE_RAW );
if ( null === $clear_cache ) {
return;
}
// This is a cache clear request - now verify nonce.
$nonce_raw = filter_input( INPUT_GET, '_wpnonce', FILTER_UNSAFE_RAW );
$nonce = $nonce_raw ? sanitize_text_field( wp_unslash( $nonce_raw ) ) : '';
if ( ! wp_verify_nonce( $nonce, 'robotstxt_clear_update_cache' ) ) {
wp_die( esc_html__( 'Security check failed', 'robotstxt-smtp-amazonses' ) );
}
// Check permissions.
if ( ! current_user_can( 'update_plugins' ) ) {
wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'robotstxt-smtp-amazonses' ) );
}
$this->clear_cache();
wp_safe_redirect( remove_query_arg( array( 'robotstxt_clear_update_cache', '_wpnonce' ) ) );
exit;
}
/**
* Clear update cache.
*/
public function clear_cache(): void {
delete_site_transient( $this->cache_key );
delete_site_transient( 'update_plugins' );
}
}
}

View file

@ -1 +0,0 @@
{ "security_contact": "robotstxt@robotstxt.es" }

28
update.json Normal file
View file

@ -0,0 +1,28 @@
{
"name": "SMTP (by ROBOTSTXT) Amazon SES",
"slug": "robotstxt-smtp-amazonses",
"version": "2.0.0",
"download_url": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses/releases/download/2.0.0/robotstxt-smtp-amazonses-2.0.0.zip",
"requires": "6.5",
"requires_php": "8.2",
"tested": "6.9",
"last_updated": "2026-01-29",
"author": "ROBOTSTXT",
"author_profile": "https://www.robotstxt.es/",
"homepage": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses",
"requires_plugins": ["robotstxt-smtp"],
"description": "Adds Amazon SES (Simple Email Service) configuration support to the ROBOTSTXT SMTP plugin. Integrates seamlessly with AWS SDK for PHP to send emails through Amazon SES infrastructure.",
"changelog": "<h3>2.0.0 - 2026-01-29</h3><p><strong>⚠️ BREAKING CHANGE:</strong> This version requires PHP 8.2 or higher due to AWS SDK requirements.</p><ul><li><strong>Added:</strong> Reply-To header support for emails sent via Amazon SES</li><li><strong>Fixed:</strong> Improved error handling and validation</li><li><strong>Fixed:</strong> Enhanced compatibility with core SMTP plugin 2.0.0</li><li><strong>Security:</strong> Improved credential handling and encryption</li><li><strong>Security:</strong> Updated AWS SDK for PHP to latest version (3.369.20) with security patches</li><li><strong>Changed:</strong> Minimum PHP version increased to 8.2</li><li><strong>Improved:</strong> Code quality and documentation</li></ul><h3>1.0.0 - 2026-01-27</h3><ul><li>Initial release</li><li>Amazon SES integration via AWS SDK v3</li><li>Full compatibility with ROBOTSTXT SMTP plugin</li><li>Support for AWS regions and credentials configuration</li><li>Automatic dependency management with Composer</li></ul>",
"sections": {
"description": "Adds Amazon SES (Simple Email Service) configuration support to the ROBOTSTXT SMTP plugin. Integrates seamlessly with AWS SDK for PHP to send emails through Amazon SES infrastructure.",
"changelog": "<h3>2.0.0 - 2026-01-29</h3><p><strong>⚠️ BREAKING CHANGE:</strong> This version requires PHP 8.2 or higher due to AWS SDK requirements.</p><ul><li><strong>Added:</strong> Reply-To header support for emails sent via Amazon SES</li><li><strong>Fixed:</strong> Improved error handling and validation</li><li><strong>Fixed:</strong> Enhanced compatibility with core SMTP plugin 2.0.0</li><li><strong>Security:</strong> Improved credential handling and encryption</li><li><strong>Security:</strong> Updated AWS SDK for PHP to latest version (3.369.20) with security patches</li><li><strong>Changed:</strong> Minimum PHP version increased to 8.2</li><li><strong>Improved:</strong> Code quality and documentation</li></ul><h3>1.0.0 - 2026-01-27</h3><ul><li>Initial release</li><li>Amazon SES integration via AWS SDK v3</li><li>Full compatibility with ROBOTSTXT SMTP plugin</li><li>Support for AWS regions and credentials configuration</li><li>Automatic dependency management with Composer</li></ul>"
},
"banners": {
"low": "",
"high": ""
},
"icons": {
"1x": "",
"2x": ""
}
}

View file

@ -1,4 +0,0 @@
## Code of Conduct
This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct).
For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact
opensource-codeofconduct@amazon.com with any additional questions or comments.

View file

@ -1,117 +0,0 @@
# AWS Common Runtime PHP bindings
## Requirements
* PHP 5.5+ on UNIX platforms, 7.2+ on Windows
* CMake 3.x
* GCC 4.4+, clang 3.8+ on UNIX, Visual Studio build tools on Windows
* Tests require [Composer](https://getcomposer.org)
## Installing with Composer and PECL
The package has two different package published to [composer](https://packagist.org/packages/aws/aws-crt-php) and [PECL](https://pecl.php.net/package/awscrt).
On UNIX, you can get the package from package manager or build from source:
```
pecl install awscrt
composer require aws/aws-crt-php
```
On Windows, you need to build from source as instruction written below for the native extension `php_awscrt.dll` . And, follow https://www.php.net/manual/en/install.pecl.windows.php#install.pecl.windows.loading to load extension. After that:
```
composer require aws/aws-crt-php
```
## Building from Github source
```sh
$ git clone --recursive https://github.com/awslabs/aws-crt-php.git
$ cd aws-crt-php
$ phpize
$ ./configure
$ make
$ ./dev-scripts/run_tests.sh
```
## Building on Windows
### Requirements for Windows
* Ensure you have the [windows PHP SDK](https://github.com/microsoft/php-sdk-binary-tools) (this example assumes installation of the SDK to C:\php-sdk and that you've checked out the PHP source to php-src within the build directory) and it works well on your machine.
* Ensure you have "Development package (SDK to develop PHP extensions)" and PHP available from your system path. You can download them from https://windows.php.net/download/. You can check if they are available by running `phpize -v` and `php -v`
### Instructions
From Command Prompt (not powershell). The instruction is based on Visual Studio 2019 on 64bit Windows.
```bat
> git clone --recursive https://github.com/awslabs/aws-crt-php.git
> git clone https://github.com/microsoft/php-sdk-binary-tools.git C:\php-sdk
> C:\php-sdk\phpsdk-vs16-x64.bat
C:\php-sdk\
$ cd <your-path-to-aws-crt-php>
<your-path-to-aws-crt-php>\
$ phpize
# --with-prefix only required when your php runtime in system path is different than the runtime you wish to use.
<your-path-to-aws-crt-php>\
$ configure --enable-awscrt=shared --with-prefix=<your-path-to-php-prefix>
<your-path-to-aws-crt-php>\
$ nmake
<your-path-to-aws-crt-php>\
$ nmake generate-php-ini
# check .\php-win.ini, it now has the full path to php_awscrt.dll that you can manually load to your php runtime, or you can run the following command to run tests and load the required native extension for awscrt.
<your-path-to-aws-crt-php>\
$ .\dev-scripts\run_tests.bat <your-path-to-php-binary>
```
Note: for VS2017, Cmake will default to build for Win32, refer to [here](https://cmake.org/cmake/help/latest/generator/Visual%20Studio%2015%202017.html). If you are building for x64 php, you can set environment variable as follow to let cmake pick x64 compiler.
```bat
set CMAKE_GENERATOR=Visual Studio 15 2017
set CMAKE_GENERATOR_PLATFORM=x64
```
## Debugging
Using [PHPBrew](https://github.com/phpbrew/phpbrew) to build/manage multiple versions of PHP is helpful.
Note: You must use a debug build of PHP to debug native extensions.
See the [PHP Internals Book](https://www.phpinternalsbook.com/php7/build_system/building_php.html) for more info
```shell
# PHP 8 example
$ phpbrew install --stdout -j 8 8.0 +default -- CFLAGS=-Wno-error --disable-cgi --enable-debug
# PHP 5.5 example
$ phpbrew install --stdout -j 8 5.5 +default -openssl -mbstring -- CFLAGS="-w -Wno-error" --enable-debug --with-zlib=/usr/local/opt/zlib
$ phpbrew switch php-8.0.6 # or whatever version is current, it'll be at the end of the build output
$ phpize
$ ./configure
$ make CMAKE_BUILD_TYPE=Debug
```
Ensure that the php you launch from your debugger is the result of `which php` , not just
the system default php.
## Security
See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information.
## Known OpenSSL related issue (Unix only)
* When your php loads a different version of openssl than your system openssl version, awscrt may fail to load or weirdly crash. You can find the openssl version php linked via: `php -i | grep 'OpenSSL'`, and awscrt linked from the build log, which will be `Found OpenSSL: * (found version *)`
The easiest workaround to those issue is to build from source and get aws-lc for awscrt to depend on instead.
TO do that, same instructions as [here](#building-from-github-source), but use `USE_OPENSSL=OFF make` instead of `make`
## License
This project is licensed under the Apache-2.0 License.

View file

@ -1,35 +0,0 @@
{
"name": "aws/aws-crt-php",
"homepage": "https://github.com/awslabs/aws-crt-php",
"description": "AWS Common Runtime for PHP",
"keywords": ["aws","amazon","sdk","crt"],
"type": "library",
"authors": [
{
"name": "AWS SDK Common Runtime Team",
"email": "aws-sdk-common-runtime@amazon.com"
}
],
"minimum-stability": "alpha",
"require": {
"php": ">=5.5"
},
"require-dev": {
"phpunit/phpunit":"^4.8.35||^5.6.3||^9.5",
"yoast/phpunit-polyfills": "^1.0"
},
"autoload": {
"classmap": [
"src/"
]
},
"suggest": {
"ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality."
},
"scripts": {
"test": "./dev-scripts/run_tests.sh",
"test-extension": "@test",
"test-win": ".\\dev-scripts\\run_tests.bat"
},
"license": "Apache-2.0"
}

View file

@ -1,73 +0,0 @@
{
"name": "aws/aws-sdk-php",
"homepage": "http://aws.amazon.com/sdkforphp",
"description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
"keywords": ["aws","amazon","sdk","s3","ec2","dynamodb","cloud","glacier"],
"type": "library",
"license": "Apache-2.0",
"authors": [
{
"name": "Amazon Web Services",
"homepage": "http://aws.amazon.com"
}
],
"support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues"
},
"require": {
"php": ">=8.1",
"guzzlehttp/guzzle": "^7.4.5",
"guzzlehttp/psr7": "^2.4.5",
"guzzlehttp/promises": "^2.0",
"mtdowling/jmespath.php": "^2.8.0",
"ext-pcre": "*",
"ext-json": "*",
"ext-simplexml": "*",
"aws/aws-crt-php": "^1.2.3",
"psr/http-message": "^1.0 || ^2.0"
},
"require-dev": {
"composer/composer" : "^2.7.8",
"ext-openssl": "*",
"ext-dom": "*",
"ext-pcntl": "*",
"ext-sockets": "*",
"phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5",
"behat/behat": "~3.0",
"doctrine/cache": "~1.4",
"aws/aws-php-sns-message-validator": "~1.0",
"andrewsville/php-token-reflection": "^1.4",
"psr/cache": "^2.0 || ^3.0",
"psr/simple-cache": "^2.0 || ^3.0",
"sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
"symfony/filesystem": "^v6.4.0 || ^v7.1.0",
"yoast/phpunit-polyfills": "^2.0",
"dms/phpunit-arraysubset-asserts": "^0.4.0"
},
"suggest": {
"ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
"ext-curl": "To send requests using cURL",
"ext-sockets": "To use client-side monitoring",
"doctrine/cache": "To use the DoctrineCacheAdapter",
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications"
},
"autoload": {
"psr-4": {
"Aws\\": "src/"
},
"files": ["src/functions.php"],
"exclude-from-classmap": ["src/data/"]
},
"autoload-dev": {
"psr-4": {
"Aws\\Test\\": "tests/"
},
"classmap": ["build/"]
},
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
}
}

View file

@ -31,6 +31,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listPlansInRegionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listPlansInRegionAsync(array $args = [])
* @method \Aws\Result listRoute53HealthChecks(array $args = []) * @method \Aws\Result listRoute53HealthChecks(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRoute53HealthChecksAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listRoute53HealthChecksAsync(array $args = [])
* @method \Aws\Result listRoute53HealthChecksInRegion(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRoute53HealthChecksInRegionAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result startPlanExecution(array $args = []) * @method \Aws\Result startPlanExecution(array $args = [])

View file

@ -19,6 +19,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getAlternateContactAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getAlternateContactAsync(array $args = [])
* @method \Aws\Result getContactInformation(array $args = []) * @method \Aws\Result getContactInformation(array $args = [])
* @method \GuzzleHttp\Promise\Promise getContactInformationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getContactInformationAsync(array $args = [])
* @method \Aws\Result getGovCloudAccountInformation(array $args = [])
* @method \GuzzleHttp\Promise\Promise getGovCloudAccountInformationAsync(array $args = [])
* @method \Aws\Result getPrimaryEmail(array $args = []) * @method \Aws\Result getPrimaryEmail(array $args = [])
* @method \GuzzleHttp\Promise\Promise getPrimaryEmailAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getPrimaryEmailAsync(array $args = [])
* @method \Aws\Result getRegionOptStatus(array $args = []) * @method \Aws\Result getRegionOptStatus(array $args = [])

View file

@ -43,8 +43,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getBackendJobAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getBackendJobAsync(array $args = [])
* @method \Aws\Result getBackendStorage(array $args = []) * @method \Aws\Result getBackendStorage(array $args = [])
* @method \GuzzleHttp\Promise\Promise getBackendStorageAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getBackendStorageAsync(array $args = [])
* @method \Aws\Result getToken(array $args = []) * @method \Aws\Result getChallengeToken(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTokenAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getChallengeTokenAsync(array $args = [])
* @method \Aws\Result importBackendAuth(array $args = []) * @method \Aws\Result importBackendAuth(array $args = [])
* @method \GuzzleHttp\Promise\Promise importBackendAuthAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise importBackendAuthAsync(array $args = [])
* @method \Aws\Result importBackendStorage(array $args = []) * @method \Aws\Result importBackendStorage(array $args = [])

View file

@ -64,10 +64,21 @@ class NonSeekableStreamDecodingEventStreamIterator extends DecodingEventStreamIt
while (!empty($this->tempBuffer) && $num > 0) { while (!empty($this->tempBuffer) && $num > 0) {
$byte = array_shift($this->tempBuffer); $byte = array_shift($this->tempBuffer);
$bytes .= $byte; $bytes .= $byte;
$num = $num - 1; $num -= 1;
}
// Loop until we've read the expected number of bytes
while ($num > 0 && !$this->stream->eof()) {
$chunk = $this->stream->read($num);
$chunkLen = strlen($chunk);
$bytes .= $chunk;
$num -= $chunkLen;
if ($chunkLen === 0) {
break; // Prevent infinite loop on unexpected EOF
}
} }
$bytes = $bytes . $this->stream->read($num);
hash_update($this->hashContext, $bytes); hash_update($this->hashContext, $bytes);
return $bytes; return $bytes;

View file

@ -146,7 +146,7 @@ abstract class RestSerializer
// This path skips setting the content-type header usually done in // This path skips setting the content-type header usually done in
// RestJsonSerializer and RestXmlSerializer.certain S3 and glacier // RestJsonSerializer and RestXmlSerializer.certain S3 and glacier
// operations determine content type in Middleware::ContentType() // operations determine content type in Middleware::ContentType()
if (!isset(self::$excludeContentType[$this->api->getServiceName()])) { if (!isset(self::$excludeContentType[$this->api->getServiceName() ?? ''])) {
switch ($type) { switch ($type) {
case 'string': case 'string':
$opts['headers']['Content-Type'] = 'text/plain'; $opts['headers']['Content-Type'] = 'text/plain';

View file

@ -41,7 +41,7 @@ class RestXmlSerializer extends RestSerializer
*/ */
private function getXmlBody(StructureShape $member, array $value) private function getXmlBody(StructureShape $member, array $value)
{ {
$xmlBody = (string)$this->xmlBody->build($member, $value); $xmlBody = $this->xmlBody->build($member, $value);
$xmlBody = str_replace("'", "&apos;", $xmlBody); $xmlBody = str_replace("'", "&apos;", $xmlBody);
$xmlBody = str_replace('\r', "&#13;", $xmlBody); $xmlBody = str_replace('\r', "&#13;", $xmlBody);
$xmlBody = str_replace('\n', "&#10;", $xmlBody); $xmlBody = str_replace('\n', "&#10;", $xmlBody);

View file

@ -99,10 +99,8 @@ class XmlBody
// Default to member name // Default to member name
$elementName = $k; $elementName = $k;
// Only use locationName for non-structure members if ($definition['member']['locationName']
if (!($definition['member'] instanceof StructureShape) && !isset($definition['member']['locationNameAtStructureLevel'])) {
&& $definition['member']['locationName']
) {
$elementName = $definition['member']['locationName']; $elementName = $definition['member']['locationName'];
} }

View file

@ -51,7 +51,14 @@ class ShapeMap implements \ArrayAccess
return $this->simple[$shape]; return $this->simple[$shape];
} }
$definition = $shapeRef + $this->definitions[$shape]; $shapeDefinition = $this->definitions[$shape];
$definition = $shapeRef + $shapeDefinition;
// Property to know whether the locationName was set at member level
// or the structure level.
if (isset($shapeDefinition['locationName'])) {
$definition['locationNameAtStructureLevel'] = true;
}
$definition['name'] = $definition['shape']; $definition['name'] = $definition['shape'];
if (isset($definition['shape'])) { if (isset($definition['shape'])) {
unset($definition['shape']); unset($definition['shape']);

View file

@ -2,6 +2,7 @@
namespace Aws\Api; namespace Aws\Api;
use Aws; use Aws;
use stdClass;
/** /**
* Validates a schema against a hash of input. * Validates a schema against a hash of input.
@ -292,6 +293,12 @@ class Validator
private function checkDocumentType($value) private function checkDocumentType($value)
{ {
// To allow objects like value, which
// can be used within a member which type is `Document`
if ($value instanceof stdClass) {
$value = (array) $value;
}
if (is_array($value)) { if (is_array($value)) {
$typeOfFirstKey = gettype(key($value)); $typeOfFirstKey = gettype(key($value));
foreach ($value as $key => $val) { foreach ($value as $key => $val) {

View file

@ -21,6 +21,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createIntegrationResponseAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createIntegrationResponseAsync(array $args = [])
* @method \Aws\Result createModel(array $args = []) * @method \Aws\Result createModel(array $args = [])
* @method \GuzzleHttp\Promise\Promise createModelAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createModelAsync(array $args = [])
* @method \Aws\Result createPortal(array $args = [])
* @method \GuzzleHttp\Promise\Promise createPortalAsync(array $args = [])
* @method \Aws\Result createPortalProduct(array $args = [])
* @method \GuzzleHttp\Promise\Promise createPortalProductAsync(array $args = [])
* @method \Aws\Result createProductPage(array $args = [])
* @method \GuzzleHttp\Promise\Promise createProductPageAsync(array $args = [])
* @method \Aws\Result createProductRestEndpointPage(array $args = [])
* @method \GuzzleHttp\Promise\Promise createProductRestEndpointPageAsync(array $args = [])
* @method \Aws\Result createRoute(array $args = []) * @method \Aws\Result createRoute(array $args = [])
* @method \GuzzleHttp\Promise\Promise createRouteAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createRouteAsync(array $args = [])
* @method \Aws\Result createRouteResponse(array $args = []) * @method \Aws\Result createRouteResponse(array $args = [])
@ -51,6 +59,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteIntegrationResponseAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteIntegrationResponseAsync(array $args = [])
* @method \Aws\Result deleteModel(array $args = []) * @method \Aws\Result deleteModel(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteModelAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteModelAsync(array $args = [])
* @method \Aws\Result deletePortal(array $args = [])
* @method \GuzzleHttp\Promise\Promise deletePortalAsync(array $args = [])
* @method \Aws\Result deletePortalProduct(array $args = [])
* @method \GuzzleHttp\Promise\Promise deletePortalProductAsync(array $args = [])
* @method \Aws\Result deletePortalProductSharingPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise deletePortalProductSharingPolicyAsync(array $args = [])
* @method \Aws\Result deleteProductPage(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteProductPageAsync(array $args = [])
* @method \Aws\Result deleteProductRestEndpointPage(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteProductRestEndpointPageAsync(array $args = [])
* @method \Aws\Result deleteRoute(array $args = []) * @method \Aws\Result deleteRoute(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteRouteAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteRouteAsync(array $args = [])
* @method \Aws\Result deleteRouteRequestParameter(array $args = []) * @method \Aws\Result deleteRouteRequestParameter(array $args = [])
@ -67,6 +85,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteVpcLinkAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteVpcLinkAsync(array $args = [])
* @method \Aws\Result exportApi(array $args = []) * @method \Aws\Result exportApi(array $args = [])
* @method \GuzzleHttp\Promise\Promise exportApiAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise exportApiAsync(array $args = [])
* @method \Aws\Result disablePortal(array $args = [])
* @method \GuzzleHttp\Promise\Promise disablePortalAsync(array $args = [])
* @method \Aws\Result resetAuthorizersCache(array $args = []) * @method \Aws\Result resetAuthorizersCache(array $args = [])
* @method \GuzzleHttp\Promise\Promise resetAuthorizersCacheAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise resetAuthorizersCacheAsync(array $args = [])
* @method \Aws\Result getApiResource(array $args = []) * @method \Aws\Result getApiResource(array $args = [])
@ -103,6 +123,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getModelTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getModelTemplateAsync(array $args = [])
* @method \Aws\Result getModels(array $args = []) * @method \Aws\Result getModels(array $args = [])
* @method \GuzzleHttp\Promise\Promise getModelsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getModelsAsync(array $args = [])
* @method \Aws\Result getPortal(array $args = [])
* @method \GuzzleHttp\Promise\Promise getPortalAsync(array $args = [])
* @method \Aws\Result getPortalProduct(array $args = [])
* @method \GuzzleHttp\Promise\Promise getPortalProductAsync(array $args = [])
* @method \Aws\Result getPortalProductSharingPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise getPortalProductSharingPolicyAsync(array $args = [])
* @method \Aws\Result getProductPage(array $args = [])
* @method \GuzzleHttp\Promise\Promise getProductPageAsync(array $args = [])
* @method \Aws\Result getProductRestEndpointPage(array $args = [])
* @method \GuzzleHttp\Promise\Promise getProductRestEndpointPageAsync(array $args = [])
* @method \Aws\Result getRoute(array $args = []) * @method \Aws\Result getRoute(array $args = [])
* @method \GuzzleHttp\Promise\Promise getRouteAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getRouteAsync(array $args = [])
* @method \Aws\Result getRouteResponse(array $args = []) * @method \Aws\Result getRouteResponse(array $args = [])
@ -113,8 +143,6 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getRoutesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getRoutesAsync(array $args = [])
* @method \Aws\Result getRoutingRule(array $args = []) * @method \Aws\Result getRoutingRule(array $args = [])
* @method \GuzzleHttp\Promise\Promise getRoutingRuleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getRoutingRuleAsync(array $args = [])
* @method \Aws\Result listRoutingRules(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRoutingRulesAsync(array $args = [])
* @method \Aws\Result getStage(array $args = []) * @method \Aws\Result getStage(array $args = [])
* @method \GuzzleHttp\Promise\Promise getStageAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getStageAsync(array $args = [])
* @method \Aws\Result getStages(array $args = []) * @method \Aws\Result getStages(array $args = [])
@ -127,6 +155,22 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getVpcLinksAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getVpcLinksAsync(array $args = [])
* @method \Aws\Result importApi(array $args = []) * @method \Aws\Result importApi(array $args = [])
* @method \GuzzleHttp\Promise\Promise importApiAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise importApiAsync(array $args = [])
* @method \Aws\Result listPortalProducts(array $args = [])
* @method \GuzzleHttp\Promise\Promise listPortalProductsAsync(array $args = [])
* @method \Aws\Result listPortals(array $args = [])
* @method \GuzzleHttp\Promise\Promise listPortalsAsync(array $args = [])
* @method \Aws\Result listProductPages(array $args = [])
* @method \GuzzleHttp\Promise\Promise listProductPagesAsync(array $args = [])
* @method \Aws\Result listProductRestEndpointPages(array $args = [])
* @method \GuzzleHttp\Promise\Promise listProductRestEndpointPagesAsync(array $args = [])
* @method \Aws\Result listRoutingRules(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRoutingRulesAsync(array $args = [])
* @method \Aws\Result previewPortal(array $args = [])
* @method \GuzzleHttp\Promise\Promise previewPortalAsync(array $args = [])
* @method \Aws\Result publishPortal(array $args = [])
* @method \GuzzleHttp\Promise\Promise publishPortalAsync(array $args = [])
* @method \Aws\Result putPortalProductSharingPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise putPortalProductSharingPolicyAsync(array $args = [])
* @method \Aws\Result putRoutingRule(array $args = []) * @method \Aws\Result putRoutingRule(array $args = [])
* @method \GuzzleHttp\Promise\Promise putRoutingRuleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putRoutingRuleAsync(array $args = [])
* @method \Aws\Result reimportApi(array $args = []) * @method \Aws\Result reimportApi(array $args = [])
@ -151,6 +195,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateIntegrationResponseAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateIntegrationResponseAsync(array $args = [])
* @method \Aws\Result updateModel(array $args = []) * @method \Aws\Result updateModel(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateModelAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateModelAsync(array $args = [])
* @method \Aws\Result updatePortal(array $args = [])
* @method \GuzzleHttp\Promise\Promise updatePortalAsync(array $args = [])
* @method \Aws\Result updatePortalProduct(array $args = [])
* @method \GuzzleHttp\Promise\Promise updatePortalProductAsync(array $args = [])
* @method \Aws\Result updateProductPage(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateProductPageAsync(array $args = [])
* @method \Aws\Result updateProductRestEndpointPage(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateProductRestEndpointPageAsync(array $args = [])
* @method \Aws\Result updateRoute(array $args = []) * @method \Aws\Result updateRoute(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateRouteAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateRouteAsync(array $args = [])
* @method \Aws\Result updateRouteResponse(array $args = []) * @method \Aws\Result updateRouteResponse(array $args = [])

View file

@ -63,8 +63,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise evaluateMappingTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise evaluateMappingTemplateAsync(array $args = [])
* @method \Aws\Result flushApiCache(array $args = []) * @method \Aws\Result flushApiCache(array $args = [])
* @method \GuzzleHttp\Promise\Promise flushApiCacheAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise flushApiCacheAsync(array $args = [])
* @method \Aws\Result getApi(array $args = []) * @method \Aws\Result getApiResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise getApiAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getApiResourceAsync(array $args = [])
* @method \Aws\Result getApiAssociation(array $args = []) * @method \Aws\Result getApiAssociation(array $args = [])
* @method \GuzzleHttp\Promise\Promise getApiAssociationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getApiAssociationAsync(array $args = [])
* @method \Aws\Result getApiCache(array $args = []) * @method \Aws\Result getApiCache(array $args = [])

View file

@ -1,57 +0,0 @@
<?php
namespace Aws\AppTest;
use Aws\AwsClient;
/**
* This client is used to interact with the **AWS Mainframe Modernization Application Testing** service.
* @method \Aws\Result createTestCase(array $args = [])
* @method \GuzzleHttp\Promise\Promise createTestCaseAsync(array $args = [])
* @method \Aws\Result createTestConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise createTestConfigurationAsync(array $args = [])
* @method \Aws\Result createTestSuite(array $args = [])
* @method \GuzzleHttp\Promise\Promise createTestSuiteAsync(array $args = [])
* @method \Aws\Result deleteTestCase(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteTestCaseAsync(array $args = [])
* @method \Aws\Result deleteTestConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteTestConfigurationAsync(array $args = [])
* @method \Aws\Result deleteTestRun(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteTestRunAsync(array $args = [])
* @method \Aws\Result deleteTestSuite(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteTestSuiteAsync(array $args = [])
* @method \Aws\Result getTestCase(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTestCaseAsync(array $args = [])
* @method \Aws\Result getTestConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTestConfigurationAsync(array $args = [])
* @method \Aws\Result getTestRunStep(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTestRunStepAsync(array $args = [])
* @method \Aws\Result getTestSuite(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTestSuiteAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result listTestCases(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTestCasesAsync(array $args = [])
* @method \Aws\Result listTestConfigurations(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTestConfigurationsAsync(array $args = [])
* @method \Aws\Result listTestRunSteps(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTestRunStepsAsync(array $args = [])
* @method \Aws\Result listTestRunTestCases(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTestRunTestCasesAsync(array $args = [])
* @method \Aws\Result listTestRuns(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTestRunsAsync(array $args = [])
* @method \Aws\Result listTestSuites(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTestSuitesAsync(array $args = [])
* @method \Aws\Result startTestRun(array $args = [])
* @method \GuzzleHttp\Promise\Promise startTestRunAsync(array $args = [])
* @method \Aws\Result tagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
* @method \Aws\Result untagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
* @method \Aws\Result updateTestCase(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateTestCaseAsync(array $args = [])
* @method \Aws\Result updateTestConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateTestConfigurationAsync(array $args = [])
* @method \Aws\Result updateTestSuite(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateTestSuiteAsync(array $args = [])
*/
class AppTestClient extends AwsClient {}

View file

@ -1,9 +0,0 @@
<?php
namespace Aws\AppTest\Exception;
use Aws\Exception\AwsException;
/**
* Represents an error interacting with the **AWS Mainframe Modernization Application Testing** service.
*/
class AppTestException extends AwsException {}

View file

@ -11,12 +11,20 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise batchUpdateExclusionWindowsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise batchUpdateExclusionWindowsAsync(array $args = [])
* @method \Aws\Result createServiceLevelObjective(array $args = []) * @method \Aws\Result createServiceLevelObjective(array $args = [])
* @method \GuzzleHttp\Promise\Promise createServiceLevelObjectiveAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createServiceLevelObjectiveAsync(array $args = [])
* @method \Aws\Result deleteGroupingConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteGroupingConfigurationAsync(array $args = [])
* @method \Aws\Result deleteServiceLevelObjective(array $args = []) * @method \Aws\Result deleteServiceLevelObjective(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteServiceLevelObjectiveAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteServiceLevelObjectiveAsync(array $args = [])
* @method \Aws\Result getService(array $args = []) * @method \Aws\Result getService(array $args = [])
* @method \GuzzleHttp\Promise\Promise getServiceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getServiceAsync(array $args = [])
* @method \Aws\Result getServiceLevelObjective(array $args = []) * @method \Aws\Result getServiceLevelObjective(array $args = [])
* @method \GuzzleHttp\Promise\Promise getServiceLevelObjectiveAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getServiceLevelObjectiveAsync(array $args = [])
* @method \Aws\Result listAuditFindings(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAuditFindingsAsync(array $args = [])
* @method \Aws\Result listEntityEvents(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEntityEventsAsync(array $args = [])
* @method \Aws\Result listGroupingAttributeDefinitions(array $args = [])
* @method \GuzzleHttp\Promise\Promise listGroupingAttributeDefinitionsAsync(array $args = [])
* @method \Aws\Result listServiceDependencies(array $args = []) * @method \Aws\Result listServiceDependencies(array $args = [])
* @method \GuzzleHttp\Promise\Promise listServiceDependenciesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listServiceDependenciesAsync(array $args = [])
* @method \Aws\Result listServiceDependents(array $args = []) * @method \Aws\Result listServiceDependents(array $args = [])
@ -27,10 +35,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listServiceLevelObjectivesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listServiceLevelObjectivesAsync(array $args = [])
* @method \Aws\Result listServiceOperations(array $args = []) * @method \Aws\Result listServiceOperations(array $args = [])
* @method \GuzzleHttp\Promise\Promise listServiceOperationsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listServiceOperationsAsync(array $args = [])
* @method \Aws\Result listServiceStates(array $args = [])
* @method \GuzzleHttp\Promise\Promise listServiceStatesAsync(array $args = [])
* @method \Aws\Result listServices(array $args = []) * @method \Aws\Result listServices(array $args = [])
* @method \GuzzleHttp\Promise\Promise listServicesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listServicesAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result putGroupingConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise putGroupingConfigurationAsync(array $args = [])
* @method \Aws\Result startDiscovery(array $args = []) * @method \Aws\Result startDiscovery(array $args = [])
* @method \GuzzleHttp\Promise\Promise startDiscoveryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startDiscoveryAsync(array $args = [])
* @method \Aws\Result tagResource(array $args = []) * @method \Aws\Result tagResource(array $args = [])

View file

@ -13,6 +13,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise associateApplicationToEntitlementAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateApplicationToEntitlementAsync(array $args = [])
* @method \Aws\Result associateFleet(array $args = []) * @method \Aws\Result associateFleet(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateFleetAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateFleetAsync(array $args = [])
* @method \Aws\Result associateSoftwareToImageBuilder(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateSoftwareToImageBuilderAsync(array $args = [])
* @method \Aws\Result batchAssociateUserStack(array $args = []) * @method \Aws\Result batchAssociateUserStack(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchAssociateUserStackAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise batchAssociateUserStackAsync(array $args = [])
* @method \Aws\Result batchDisassociateUserStack(array $args = []) * @method \Aws\Result batchDisassociateUserStack(array $args = [])
@ -31,12 +33,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createDirectoryConfigAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createDirectoryConfigAsync(array $args = [])
* @method \Aws\Result createEntitlement(array $args = []) * @method \Aws\Result createEntitlement(array $args = [])
* @method \GuzzleHttp\Promise\Promise createEntitlementAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createEntitlementAsync(array $args = [])
* @method \Aws\Result createExportImageTask(array $args = [])
* @method \GuzzleHttp\Promise\Promise createExportImageTaskAsync(array $args = [])
* @method \Aws\Result createFleet(array $args = []) * @method \Aws\Result createFleet(array $args = [])
* @method \GuzzleHttp\Promise\Promise createFleetAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createFleetAsync(array $args = [])
* @method \Aws\Result createImageBuilder(array $args = []) * @method \Aws\Result createImageBuilder(array $args = [])
* @method \GuzzleHttp\Promise\Promise createImageBuilderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createImageBuilderAsync(array $args = [])
* @method \Aws\Result createImageBuilderStreamingURL(array $args = []) * @method \Aws\Result createImageBuilderStreamingURL(array $args = [])
* @method \GuzzleHttp\Promise\Promise createImageBuilderStreamingURLAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createImageBuilderStreamingURLAsync(array $args = [])
* @method \Aws\Result createImportedImage(array $args = [])
* @method \GuzzleHttp\Promise\Promise createImportedImageAsync(array $args = [])
* @method \Aws\Result createStack(array $args = []) * @method \Aws\Result createStack(array $args = [])
* @method \GuzzleHttp\Promise\Promise createStackAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createStackAsync(array $args = [])
* @method \Aws\Result createStreamingURL(array $args = []) * @method \Aws\Result createStreamingURL(array $args = [])
@ -81,6 +87,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeAppBlockBuildersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeAppBlockBuildersAsync(array $args = [])
* @method \Aws\Result describeAppBlocks(array $args = []) * @method \Aws\Result describeAppBlocks(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeAppBlocksAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeAppBlocksAsync(array $args = [])
* @method \Aws\Result describeAppLicenseUsage(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeAppLicenseUsageAsync(array $args = [])
* @method \Aws\Result describeApplicationFleetAssociations(array $args = []) * @method \Aws\Result describeApplicationFleetAssociations(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeApplicationFleetAssociationsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeApplicationFleetAssociationsAsync(array $args = [])
* @method \Aws\Result describeApplications(array $args = []) * @method \Aws\Result describeApplications(array $args = [])
@ -99,6 +107,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeImagesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeImagesAsync(array $args = [])
* @method \Aws\Result describeSessions(array $args = []) * @method \Aws\Result describeSessions(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeSessionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeSessionsAsync(array $args = [])
* @method \Aws\Result describeSoftwareAssociations(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeSoftwareAssociationsAsync(array $args = [])
* @method \Aws\Result describeStacks(array $args = []) * @method \Aws\Result describeStacks(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeStacksAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeStacksAsync(array $args = [])
* @method \Aws\Result describeThemeForStack(array $args = []) * @method \Aws\Result describeThemeForStack(array $args = [])
@ -119,16 +129,22 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise disassociateApplicationFromEntitlementAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateApplicationFromEntitlementAsync(array $args = [])
* @method \Aws\Result disassociateFleet(array $args = []) * @method \Aws\Result disassociateFleet(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateFleetAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateFleetAsync(array $args = [])
* @method \Aws\Result disassociateSoftwareFromImageBuilder(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateSoftwareFromImageBuilderAsync(array $args = [])
* @method \Aws\Result enableUser(array $args = []) * @method \Aws\Result enableUser(array $args = [])
* @method \GuzzleHttp\Promise\Promise enableUserAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise enableUserAsync(array $args = [])
* @method \Aws\Result expireSession(array $args = []) * @method \Aws\Result expireSession(array $args = [])
* @method \GuzzleHttp\Promise\Promise expireSessionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise expireSessionAsync(array $args = [])
* @method \Aws\Result getExportImageTask(array $args = [])
* @method \GuzzleHttp\Promise\Promise getExportImageTaskAsync(array $args = [])
* @method \Aws\Result listAssociatedFleets(array $args = []) * @method \Aws\Result listAssociatedFleets(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAssociatedFleetsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listAssociatedFleetsAsync(array $args = [])
* @method \Aws\Result listAssociatedStacks(array $args = []) * @method \Aws\Result listAssociatedStacks(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAssociatedStacksAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listAssociatedStacksAsync(array $args = [])
* @method \Aws\Result listEntitledApplications(array $args = []) * @method \Aws\Result listEntitledApplications(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEntitledApplicationsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listEntitledApplicationsAsync(array $args = [])
* @method \Aws\Result listExportImageTasks(array $args = [])
* @method \GuzzleHttp\Promise\Promise listExportImageTasksAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result startAppBlockBuilder(array $args = []) * @method \Aws\Result startAppBlockBuilder(array $args = [])
@ -137,6 +153,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise startFleetAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startFleetAsync(array $args = [])
* @method \Aws\Result startImageBuilder(array $args = []) * @method \Aws\Result startImageBuilder(array $args = [])
* @method \GuzzleHttp\Promise\Promise startImageBuilderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startImageBuilderAsync(array $args = [])
* @method \Aws\Result startSoftwareDeploymentToImageBuilder(array $args = [])
* @method \GuzzleHttp\Promise\Promise startSoftwareDeploymentToImageBuilderAsync(array $args = [])
* @method \Aws\Result stopAppBlockBuilder(array $args = []) * @method \Aws\Result stopAppBlockBuilder(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopAppBlockBuilderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopAppBlockBuilderAsync(array $args = [])
* @method \Aws\Result stopFleet(array $args = []) * @method \Aws\Result stopFleet(array $args = [])

View file

@ -15,6 +15,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getTermForReportAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getTermForReportAsync(array $args = [])
* @method \Aws\Result listCustomerAgreements(array $args = []) * @method \Aws\Result listCustomerAgreements(array $args = [])
* @method \GuzzleHttp\Promise\Promise listCustomerAgreementsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listCustomerAgreementsAsync(array $args = [])
* @method \Aws\Result listReportVersions(array $args = [])
* @method \GuzzleHttp\Promise\Promise listReportVersionsAsync(array $args = [])
* @method \Aws\Result listReports(array $args = []) * @method \Aws\Result listReports(array $args = [])
* @method \GuzzleHttp\Promise\Promise listReportsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listReportsAsync(array $args = [])
* @method \Aws\Result putAccountSettings(array $args = []) * @method \Aws\Result putAccountSettings(array $args = [])

View file

@ -67,8 +67,12 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getQueryResultsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getQueryResultsAsync(array $args = [])
* @method \Aws\Result getQueryRuntimeStatistics(array $args = []) * @method \Aws\Result getQueryRuntimeStatistics(array $args = [])
* @method \GuzzleHttp\Promise\Promise getQueryRuntimeStatisticsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getQueryRuntimeStatisticsAsync(array $args = [])
* @method \Aws\Result getResourceDashboard(array $args = [])
* @method \GuzzleHttp\Promise\Promise getResourceDashboardAsync(array $args = [])
* @method \Aws\Result getSession(array $args = []) * @method \Aws\Result getSession(array $args = [])
* @method \GuzzleHttp\Promise\Promise getSessionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getSessionAsync(array $args = [])
* @method \Aws\Result getSessionEndpoint(array $args = [])
* @method \GuzzleHttp\Promise\Promise getSessionEndpointAsync(array $args = [])
* @method \Aws\Result getSessionStatus(array $args = []) * @method \Aws\Result getSessionStatus(array $args = [])
* @method \GuzzleHttp\Promise\Promise getSessionStatusAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getSessionStatusAsync(array $args = [])
* @method \Aws\Result getTableMetadata(array $args = []) * @method \Aws\Result getTableMetadata(array $args = [])

View file

@ -4,7 +4,7 @@ namespace Aws\AutoScaling;
use Aws\AwsClient; use Aws\AwsClient;
/** /**
* Auto Scaling client. * This client is used to interact with the **AWS Auto Scaling** service.
* *
* @method \Aws\Result attachInstances(array $args = []) * @method \Aws\Result attachInstances(array $args = [])
* @method \GuzzleHttp\Promise\Promise attachInstancesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise attachInstancesAsync(array $args = [])
@ -106,6 +106,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise exitStandbyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise exitStandbyAsync(array $args = [])
* @method \Aws\Result getPredictiveScalingForecast(array $args = []) * @method \Aws\Result getPredictiveScalingForecast(array $args = [])
* @method \GuzzleHttp\Promise\Promise getPredictiveScalingForecastAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getPredictiveScalingForecastAsync(array $args = [])
* @method \Aws\Result launchInstances(array $args = [])
* @method \GuzzleHttp\Promise\Promise launchInstancesAsync(array $args = [])
* @method \Aws\Result putLifecycleHook(array $args = []) * @method \Aws\Result putLifecycleHook(array $args = [])
* @method \GuzzleHttp\Promise\Promise putLifecycleHookAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putLifecycleHookAsync(array $args = [])
* @method \Aws\Result putNotificationConfiguration(array $args = []) * @method \Aws\Result putNotificationConfiguration(array $args = [])

View file

@ -568,8 +568,14 @@ class AwsClient implements AwsClientInterface
$aliases = \Aws\load_compiled_json($file); $aliases = \Aws\load_compiled_json($file);
$serviceId = $this->api->getServiceId(); $serviceId = $this->api->getServiceId();
$version = $this->getApi()->getApiVersion(); $version = $this->getApi()->getApiVersion();
if (!empty($aliases['operations'][$serviceId][$version])) { $serviceAliases = null;
$this->aliases = array_flip($aliases['operations'][$serviceId][$version]);
if (!is_null($serviceId) && isset($aliases['operations'][$serviceId])) {
$serviceAliases = $aliases['operations'][$serviceId];
}
if ($serviceAliases && isset($serviceAliases[$version])) {
$this->aliases = array_flip($serviceAliases[$version]);
} }
} }
} }

View file

@ -29,6 +29,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createRestoreTestingPlanAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createRestoreTestingPlanAsync(array $args = [])
* @method \Aws\Result createRestoreTestingSelection(array $args = []) * @method \Aws\Result createRestoreTestingSelection(array $args = [])
* @method \GuzzleHttp\Promise\Promise createRestoreTestingSelectionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createRestoreTestingSelectionAsync(array $args = [])
* @method \Aws\Result createTieringConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise createTieringConfigurationAsync(array $args = [])
* @method \Aws\Result deleteBackupPlan(array $args = []) * @method \Aws\Result deleteBackupPlan(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteBackupPlanAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteBackupPlanAsync(array $args = [])
* @method \Aws\Result deleteBackupSelection(array $args = []) * @method \Aws\Result deleteBackupSelection(array $args = [])
@ -51,6 +53,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteRestoreTestingPlanAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteRestoreTestingPlanAsync(array $args = [])
* @method \Aws\Result deleteRestoreTestingSelection(array $args = []) * @method \Aws\Result deleteRestoreTestingSelection(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteRestoreTestingSelectionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteRestoreTestingSelectionAsync(array $args = [])
* @method \Aws\Result deleteTieringConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteTieringConfigurationAsync(array $args = [])
* @method \Aws\Result describeBackupJob(array $args = []) * @method \Aws\Result describeBackupJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeBackupJobAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeBackupJobAsync(array $args = [])
* @method \Aws\Result describeBackupVault(array $args = []) * @method \Aws\Result describeBackupVault(array $args = [])
@ -73,6 +77,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeReportPlanAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeReportPlanAsync(array $args = [])
* @method \Aws\Result describeRestoreJob(array $args = []) * @method \Aws\Result describeRestoreJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeRestoreJobAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeRestoreJobAsync(array $args = [])
* @method \Aws\Result describeScanJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeScanJobAsync(array $args = [])
* @method \Aws\Result disassociateBackupVaultMpaApprovalTeam(array $args = []) * @method \Aws\Result disassociateBackupVaultMpaApprovalTeam(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateBackupVaultMpaApprovalTeamAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateBackupVaultMpaApprovalTeamAsync(array $args = [])
* @method \Aws\Result disassociateRecoveryPoint(array $args = []) * @method \Aws\Result disassociateRecoveryPoint(array $args = [])
@ -109,6 +115,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getRestoreTestingSelectionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getRestoreTestingSelectionAsync(array $args = [])
* @method \Aws\Result getSupportedResourceTypes(array $args = []) * @method \Aws\Result getSupportedResourceTypes(array $args = [])
* @method \GuzzleHttp\Promise\Promise getSupportedResourceTypesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getSupportedResourceTypesAsync(array $args = [])
* @method \Aws\Result getTieringConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTieringConfigurationAsync(array $args = [])
* @method \Aws\Result listBackupJobSummaries(array $args = []) * @method \Aws\Result listBackupJobSummaries(array $args = [])
* @method \GuzzleHttp\Promise\Promise listBackupJobSummariesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listBackupJobSummariesAsync(array $args = [])
* @method \Aws\Result listBackupJobs(array $args = []) * @method \Aws\Result listBackupJobs(array $args = [])
@ -159,8 +167,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listRestoreTestingPlansAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listRestoreTestingPlansAsync(array $args = [])
* @method \Aws\Result listRestoreTestingSelections(array $args = []) * @method \Aws\Result listRestoreTestingSelections(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRestoreTestingSelectionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listRestoreTestingSelectionsAsync(array $args = [])
* @method \Aws\Result listScanJobSummaries(array $args = [])
* @method \GuzzleHttp\Promise\Promise listScanJobSummariesAsync(array $args = [])
* @method \Aws\Result listScanJobs(array $args = [])
* @method \GuzzleHttp\Promise\Promise listScanJobsAsync(array $args = [])
* @method \Aws\Result listTags(array $args = []) * @method \Aws\Result listTags(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsAsync(array $args = [])
* @method \Aws\Result listTieringConfigurations(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTieringConfigurationsAsync(array $args = [])
* @method \Aws\Result putBackupVaultAccessPolicy(array $args = []) * @method \Aws\Result putBackupVaultAccessPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise putBackupVaultAccessPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putBackupVaultAccessPolicyAsync(array $args = [])
* @method \Aws\Result putBackupVaultLockConfiguration(array $args = []) * @method \Aws\Result putBackupVaultLockConfiguration(array $args = [])
@ -179,6 +193,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise startReportJobAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startReportJobAsync(array $args = [])
* @method \Aws\Result startRestoreJob(array $args = []) * @method \Aws\Result startRestoreJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise startRestoreJobAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startRestoreJobAsync(array $args = [])
* @method \Aws\Result startScanJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise startScanJobAsync(array $args = [])
* @method \Aws\Result stopBackupJob(array $args = []) * @method \Aws\Result stopBackupJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopBackupJobAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopBackupJobAsync(array $args = [])
* @method \Aws\Result tagResource(array $args = []) * @method \Aws\Result tagResource(array $args = [])
@ -203,5 +219,7 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateRestoreTestingPlanAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateRestoreTestingPlanAsync(array $args = [])
* @method \Aws\Result updateRestoreTestingSelection(array $args = []) * @method \Aws\Result updateRestoreTestingSelection(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateRestoreTestingSelectionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateRestoreTestingSelectionAsync(array $args = [])
* @method \Aws\Result updateTieringConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateTieringConfigurationAsync(array $args = [])
*/ */
class BackupClient extends AwsClient {} class BackupClient extends AwsClient {}

View file

@ -53,6 +53,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteCustomModelAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteCustomModelAsync(array $args = [])
* @method \Aws\Result deleteCustomModelDeployment(array $args = []) * @method \Aws\Result deleteCustomModelDeployment(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteCustomModelDeploymentAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteCustomModelDeploymentAsync(array $args = [])
* @method \Aws\Result deleteEnforcedGuardrailConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteEnforcedGuardrailConfigurationAsync(array $args = [])
* @method \Aws\Result deleteFoundationModelAgreement(array $args = []) * @method \Aws\Result deleteFoundationModelAgreement(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteFoundationModelAgreementAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteFoundationModelAgreementAsync(array $args = [])
* @method \Aws\Result deleteGuardrail(array $args = []) * @method \Aws\Result deleteGuardrail(array $args = [])
@ -133,6 +135,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listCustomModelDeploymentsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listCustomModelDeploymentsAsync(array $args = [])
* @method \Aws\Result listCustomModels(array $args = []) * @method \Aws\Result listCustomModels(array $args = [])
* @method \GuzzleHttp\Promise\Promise listCustomModelsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listCustomModelsAsync(array $args = [])
* @method \Aws\Result listEnforcedGuardrailsConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEnforcedGuardrailsConfigurationAsync(array $args = [])
* @method \Aws\Result listEvaluationJobs(array $args = []) * @method \Aws\Result listEvaluationJobs(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEvaluationJobsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listEvaluationJobsAsync(array $args = [])
* @method \Aws\Result listFoundationModelAgreementOffers(array $args = []) * @method \Aws\Result listFoundationModelAgreementOffers(array $args = [])
@ -161,6 +165,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listProvisionedModelThroughputsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listProvisionedModelThroughputsAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result putEnforcedGuardrailConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise putEnforcedGuardrailConfigurationAsync(array $args = [])
* @method \Aws\Result putModelInvocationLoggingConfiguration(array $args = []) * @method \Aws\Result putModelInvocationLoggingConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise putModelInvocationLoggingConfigurationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putModelInvocationLoggingConfigurationAsync(array $args = [])
* @method \Aws\Result putUseCaseForModelAccess(array $args = []) * @method \Aws\Result putUseCaseForModelAccess(array $args = [])
@ -187,6 +193,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateAutomatedReasoningPolicyAnnotationsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateAutomatedReasoningPolicyAnnotationsAsync(array $args = [])
* @method \Aws\Result updateAutomatedReasoningPolicyTestCase(array $args = []) * @method \Aws\Result updateAutomatedReasoningPolicyTestCase(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateAutomatedReasoningPolicyTestCaseAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateAutomatedReasoningPolicyTestCaseAsync(array $args = [])
* @method \Aws\Result updateCustomModelDeployment(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateCustomModelDeploymentAsync(array $args = [])
* @method \Aws\Result updateGuardrail(array $args = []) * @method \Aws\Result updateGuardrail(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateGuardrailAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateGuardrailAsync(array $args = [])
* @method \Aws\Result updateMarketplaceModelEndpoint(array $args = []) * @method \Aws\Result updateMarketplaceModelEndpoint(array $args = [])

View file

@ -5,12 +5,24 @@ use Aws\AwsClient;
/** /**
* This client is used to interact with the **Amazon Bedrock AgentCore Data Plane Fronting Layer** service. * This client is used to interact with the **Amazon Bedrock AgentCore Data Plane Fronting Layer** service.
* @method \Aws\Result batchCreateMemoryRecords(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchCreateMemoryRecordsAsync(array $args = [])
* @method \Aws\Result batchDeleteMemoryRecords(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchDeleteMemoryRecordsAsync(array $args = [])
* @method \Aws\Result batchUpdateMemoryRecords(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchUpdateMemoryRecordsAsync(array $args = [])
* @method \Aws\Result completeResourceTokenAuth(array $args = [])
* @method \GuzzleHttp\Promise\Promise completeResourceTokenAuthAsync(array $args = [])
* @method \Aws\Result createEvent(array $args = []) * @method \Aws\Result createEvent(array $args = [])
* @method \GuzzleHttp\Promise\Promise createEventAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createEventAsync(array $args = [])
* @method \Aws\Result deleteEvent(array $args = []) * @method \Aws\Result deleteEvent(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteEventAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteEventAsync(array $args = [])
* @method \Aws\Result deleteMemoryRecord(array $args = []) * @method \Aws\Result deleteMemoryRecord(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteMemoryRecordAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteMemoryRecordAsync(array $args = [])
* @method \Aws\Result evaluate(array $args = [])
* @method \GuzzleHttp\Promise\Promise evaluateAsync(array $args = [])
* @method \Aws\Result getAgentCard(array $args = [])
* @method \GuzzleHttp\Promise\Promise getAgentCardAsync(array $args = [])
* @method \Aws\Result getBrowserSession(array $args = []) * @method \Aws\Result getBrowserSession(array $args = [])
* @method \GuzzleHttp\Promise\Promise getBrowserSessionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getBrowserSessionAsync(array $args = [])
* @method \Aws\Result getCodeInterpreterSession(array $args = []) * @method \Aws\Result getCodeInterpreterSession(array $args = [])
@ -41,6 +53,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listCodeInterpreterSessionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listCodeInterpreterSessionsAsync(array $args = [])
* @method \Aws\Result listEvents(array $args = []) * @method \Aws\Result listEvents(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEventsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listEventsAsync(array $args = [])
* @method \Aws\Result listMemoryExtractionJobs(array $args = [])
* @method \GuzzleHttp\Promise\Promise listMemoryExtractionJobsAsync(array $args = [])
* @method \Aws\Result listMemoryRecords(array $args = []) * @method \Aws\Result listMemoryRecords(array $args = [])
* @method \GuzzleHttp\Promise\Promise listMemoryRecordsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listMemoryRecordsAsync(array $args = [])
* @method \Aws\Result listSessions(array $args = []) * @method \Aws\Result listSessions(array $args = [])
@ -51,10 +65,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise startBrowserSessionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startBrowserSessionAsync(array $args = [])
* @method \Aws\Result startCodeInterpreterSession(array $args = []) * @method \Aws\Result startCodeInterpreterSession(array $args = [])
* @method \GuzzleHttp\Promise\Promise startCodeInterpreterSessionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startCodeInterpreterSessionAsync(array $args = [])
* @method \Aws\Result startMemoryExtractionJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise startMemoryExtractionJobAsync(array $args = [])
* @method \Aws\Result stopBrowserSession(array $args = []) * @method \Aws\Result stopBrowserSession(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopBrowserSessionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopBrowserSessionAsync(array $args = [])
* @method \Aws\Result stopCodeInterpreterSession(array $args = []) * @method \Aws\Result stopCodeInterpreterSession(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopCodeInterpreterSessionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopCodeInterpreterSessionAsync(array $args = [])
* @method \Aws\Result stopRuntimeSession(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopRuntimeSessionAsync(array $args = [])
* @method \Aws\Result updateBrowserStream(array $args = []) * @method \Aws\Result updateBrowserStream(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateBrowserStreamAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateBrowserStreamAsync(array $args = [])
*/ */

View file

@ -15,6 +15,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createBrowserAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createBrowserAsync(array $args = [])
* @method \Aws\Result createCodeInterpreter(array $args = []) * @method \Aws\Result createCodeInterpreter(array $args = [])
* @method \GuzzleHttp\Promise\Promise createCodeInterpreterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createCodeInterpreterAsync(array $args = [])
* @method \Aws\Result createEvaluator(array $args = [])
* @method \GuzzleHttp\Promise\Promise createEvaluatorAsync(array $args = [])
* @method \Aws\Result createGateway(array $args = []) * @method \Aws\Result createGateway(array $args = [])
* @method \GuzzleHttp\Promise\Promise createGatewayAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createGatewayAsync(array $args = [])
* @method \Aws\Result createGatewayTarget(array $args = []) * @method \Aws\Result createGatewayTarget(array $args = [])
@ -23,6 +25,12 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createMemoryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createMemoryAsync(array $args = [])
* @method \Aws\Result createOauth2CredentialProvider(array $args = []) * @method \Aws\Result createOauth2CredentialProvider(array $args = [])
* @method \GuzzleHttp\Promise\Promise createOauth2CredentialProviderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createOauth2CredentialProviderAsync(array $args = [])
* @method \Aws\Result createOnlineEvaluationConfig(array $args = [])
* @method \GuzzleHttp\Promise\Promise createOnlineEvaluationConfigAsync(array $args = [])
* @method \Aws\Result createPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise createPolicyAsync(array $args = [])
* @method \Aws\Result createPolicyEngine(array $args = [])
* @method \GuzzleHttp\Promise\Promise createPolicyEngineAsync(array $args = [])
* @method \Aws\Result createWorkloadIdentity(array $args = []) * @method \Aws\Result createWorkloadIdentity(array $args = [])
* @method \GuzzleHttp\Promise\Promise createWorkloadIdentityAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createWorkloadIdentityAsync(array $args = [])
* @method \Aws\Result deleteAgentRuntime(array $args = []) * @method \Aws\Result deleteAgentRuntime(array $args = [])
@ -35,6 +43,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteBrowserAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteBrowserAsync(array $args = [])
* @method \Aws\Result deleteCodeInterpreter(array $args = []) * @method \Aws\Result deleteCodeInterpreter(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteCodeInterpreterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteCodeInterpreterAsync(array $args = [])
* @method \Aws\Result deleteEvaluator(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteEvaluatorAsync(array $args = [])
* @method \Aws\Result deleteGateway(array $args = []) * @method \Aws\Result deleteGateway(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteGatewayAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteGatewayAsync(array $args = [])
* @method \Aws\Result deleteGatewayTarget(array $args = []) * @method \Aws\Result deleteGatewayTarget(array $args = [])
@ -43,6 +53,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteMemoryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteMemoryAsync(array $args = [])
* @method \Aws\Result deleteOauth2CredentialProvider(array $args = []) * @method \Aws\Result deleteOauth2CredentialProvider(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteOauth2CredentialProviderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteOauth2CredentialProviderAsync(array $args = [])
* @method \Aws\Result deleteOnlineEvaluationConfig(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteOnlineEvaluationConfigAsync(array $args = [])
* @method \Aws\Result deletePolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise deletePolicyAsync(array $args = [])
* @method \Aws\Result deletePolicyEngine(array $args = [])
* @method \GuzzleHttp\Promise\Promise deletePolicyEngineAsync(array $args = [])
* @method \Aws\Result deleteResourcePolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteResourcePolicyAsync(array $args = [])
* @method \Aws\Result deleteWorkloadIdentity(array $args = []) * @method \Aws\Result deleteWorkloadIdentity(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteWorkloadIdentityAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteWorkloadIdentityAsync(array $args = [])
* @method \Aws\Result getAgentRuntime(array $args = []) * @method \Aws\Result getAgentRuntime(array $args = [])
@ -55,6 +73,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getBrowserAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getBrowserAsync(array $args = [])
* @method \Aws\Result getCodeInterpreter(array $args = []) * @method \Aws\Result getCodeInterpreter(array $args = [])
* @method \GuzzleHttp\Promise\Promise getCodeInterpreterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getCodeInterpreterAsync(array $args = [])
* @method \Aws\Result getEvaluator(array $args = [])
* @method \GuzzleHttp\Promise\Promise getEvaluatorAsync(array $args = [])
* @method \Aws\Result getGateway(array $args = []) * @method \Aws\Result getGateway(array $args = [])
* @method \GuzzleHttp\Promise\Promise getGatewayAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getGatewayAsync(array $args = [])
* @method \Aws\Result getGatewayTarget(array $args = []) * @method \Aws\Result getGatewayTarget(array $args = [])
@ -63,6 +83,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getMemoryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getMemoryAsync(array $args = [])
* @method \Aws\Result getOauth2CredentialProvider(array $args = []) * @method \Aws\Result getOauth2CredentialProvider(array $args = [])
* @method \GuzzleHttp\Promise\Promise getOauth2CredentialProviderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getOauth2CredentialProviderAsync(array $args = [])
* @method \Aws\Result getOnlineEvaluationConfig(array $args = [])
* @method \GuzzleHttp\Promise\Promise getOnlineEvaluationConfigAsync(array $args = [])
* @method \Aws\Result getPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise getPolicyAsync(array $args = [])
* @method \Aws\Result getPolicyEngine(array $args = [])
* @method \GuzzleHttp\Promise\Promise getPolicyEngineAsync(array $args = [])
* @method \Aws\Result getPolicyGeneration(array $args = [])
* @method \GuzzleHttp\Promise\Promise getPolicyGenerationAsync(array $args = [])
* @method \Aws\Result getResourcePolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise getResourcePolicyAsync(array $args = [])
* @method \Aws\Result getTokenVault(array $args = []) * @method \Aws\Result getTokenVault(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTokenVaultAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getTokenVaultAsync(array $args = [])
* @method \Aws\Result getWorkloadIdentity(array $args = []) * @method \Aws\Result getWorkloadIdentity(array $args = [])
@ -79,6 +109,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listBrowsersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listBrowsersAsync(array $args = [])
* @method \Aws\Result listCodeInterpreters(array $args = []) * @method \Aws\Result listCodeInterpreters(array $args = [])
* @method \GuzzleHttp\Promise\Promise listCodeInterpretersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listCodeInterpretersAsync(array $args = [])
* @method \Aws\Result listEvaluators(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEvaluatorsAsync(array $args = [])
* @method \Aws\Result listGatewayTargets(array $args = []) * @method \Aws\Result listGatewayTargets(array $args = [])
* @method \GuzzleHttp\Promise\Promise listGatewayTargetsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listGatewayTargetsAsync(array $args = [])
* @method \Aws\Result listGateways(array $args = []) * @method \Aws\Result listGateways(array $args = [])
@ -87,12 +119,28 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listMemoriesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listMemoriesAsync(array $args = [])
* @method \Aws\Result listOauth2CredentialProviders(array $args = []) * @method \Aws\Result listOauth2CredentialProviders(array $args = [])
* @method \GuzzleHttp\Promise\Promise listOauth2CredentialProvidersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listOauth2CredentialProvidersAsync(array $args = [])
* @method \Aws\Result listOnlineEvaluationConfigs(array $args = [])
* @method \GuzzleHttp\Promise\Promise listOnlineEvaluationConfigsAsync(array $args = [])
* @method \Aws\Result listPolicies(array $args = [])
* @method \GuzzleHttp\Promise\Promise listPoliciesAsync(array $args = [])
* @method \Aws\Result listPolicyEngines(array $args = [])
* @method \GuzzleHttp\Promise\Promise listPolicyEnginesAsync(array $args = [])
* @method \Aws\Result listPolicyGenerationAssets(array $args = [])
* @method \GuzzleHttp\Promise\Promise listPolicyGenerationAssetsAsync(array $args = [])
* @method \Aws\Result listPolicyGenerations(array $args = [])
* @method \GuzzleHttp\Promise\Promise listPolicyGenerationsAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result listWorkloadIdentities(array $args = []) * @method \Aws\Result listWorkloadIdentities(array $args = [])
* @method \GuzzleHttp\Promise\Promise listWorkloadIdentitiesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listWorkloadIdentitiesAsync(array $args = [])
* @method \Aws\Result putResourcePolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise putResourcePolicyAsync(array $args = [])
* @method \Aws\Result setTokenVaultCMK(array $args = []) * @method \Aws\Result setTokenVaultCMK(array $args = [])
* @method \GuzzleHttp\Promise\Promise setTokenVaultCMKAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise setTokenVaultCMKAsync(array $args = [])
* @method \Aws\Result startPolicyGeneration(array $args = [])
* @method \GuzzleHttp\Promise\Promise startPolicyGenerationAsync(array $args = [])
* @method \Aws\Result synchronizeGatewayTargets(array $args = [])
* @method \GuzzleHttp\Promise\Promise synchronizeGatewayTargetsAsync(array $args = [])
* @method \Aws\Result tagResource(array $args = []) * @method \Aws\Result tagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
* @method \Aws\Result untagResource(array $args = []) * @method \Aws\Result untagResource(array $args = [])
@ -103,6 +151,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateAgentRuntimeEndpointAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateAgentRuntimeEndpointAsync(array $args = [])
* @method \Aws\Result updateApiKeyCredentialProvider(array $args = []) * @method \Aws\Result updateApiKeyCredentialProvider(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateApiKeyCredentialProviderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateApiKeyCredentialProviderAsync(array $args = [])
* @method \Aws\Result updateEvaluator(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateEvaluatorAsync(array $args = [])
* @method \Aws\Result updateGateway(array $args = []) * @method \Aws\Result updateGateway(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateGatewayAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateGatewayAsync(array $args = [])
* @method \Aws\Result updateGatewayTarget(array $args = []) * @method \Aws\Result updateGatewayTarget(array $args = [])
@ -111,6 +161,12 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateMemoryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateMemoryAsync(array $args = [])
* @method \Aws\Result updateOauth2CredentialProvider(array $args = []) * @method \Aws\Result updateOauth2CredentialProvider(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateOauth2CredentialProviderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateOauth2CredentialProviderAsync(array $args = [])
* @method \Aws\Result updateOnlineEvaluationConfig(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateOnlineEvaluationConfigAsync(array $args = [])
* @method \Aws\Result updatePolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise updatePolicyAsync(array $args = [])
* @method \Aws\Result updatePolicyEngine(array $args = [])
* @method \GuzzleHttp\Promise\Promise updatePolicyEngineAsync(array $args = [])
* @method \Aws\Result updateWorkloadIdentity(array $args = []) * @method \Aws\Result updateWorkloadIdentity(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateWorkloadIdentityAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateWorkloadIdentityAsync(array $args = [])
*/ */

View file

@ -5,6 +5,8 @@ use Aws\AwsClient;
/** /**
* This client is used to interact with the **Data Automation for Amazon Bedrock** service. * This client is used to interact with the **Data Automation for Amazon Bedrock** service.
* @method \Aws\Result copyBlueprintStage(array $args = [])
* @method \GuzzleHttp\Promise\Promise copyBlueprintStageAsync(array $args = [])
* @method \Aws\Result createBlueprint(array $args = []) * @method \Aws\Result createBlueprint(array $args = [])
* @method \GuzzleHttp\Promise\Promise createBlueprintAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createBlueprintAsync(array $args = [])
* @method \Aws\Result createBlueprintVersion(array $args = []) * @method \Aws\Result createBlueprintVersion(array $args = [])
@ -17,8 +19,12 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteDataAutomationProjectAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteDataAutomationProjectAsync(array $args = [])
* @method \Aws\Result getBlueprint(array $args = []) * @method \Aws\Result getBlueprint(array $args = [])
* @method \GuzzleHttp\Promise\Promise getBlueprintAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getBlueprintAsync(array $args = [])
* @method \Aws\Result getBlueprintOptimizationStatus(array $args = [])
* @method \GuzzleHttp\Promise\Promise getBlueprintOptimizationStatusAsync(array $args = [])
* @method \Aws\Result getDataAutomationProject(array $args = []) * @method \Aws\Result getDataAutomationProject(array $args = [])
* @method \GuzzleHttp\Promise\Promise getDataAutomationProjectAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getDataAutomationProjectAsync(array $args = [])
* @method \Aws\Result invokeBlueprintOptimizationAsync(array $args = [])
* @method \GuzzleHttp\Promise\Promise invokeBlueprintOptimizationAsyncAsync(array $args = [])
* @method \Aws\Result listBlueprints(array $args = []) * @method \Aws\Result listBlueprints(array $args = [])
* @method \GuzzleHttp\Promise\Promise listBlueprintsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listBlueprintsAsync(array $args = [])
* @method \Aws\Result listDataAutomationProjects(array $args = []) * @method \Aws\Result listDataAutomationProjects(array $args = [])

View file

@ -7,6 +7,8 @@ use Aws\AwsClient;
* This client is used to interact with the **Runtime for Amazon Bedrock Data Automation** service. * This client is used to interact with the **Runtime for Amazon Bedrock Data Automation** service.
* @method \Aws\Result getDataAutomationStatus(array $args = []) * @method \Aws\Result getDataAutomationStatus(array $args = [])
* @method \GuzzleHttp\Promise\Promise getDataAutomationStatusAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getDataAutomationStatusAsync(array $args = [])
* @method \Aws\Result invokeDataAutomation(array $args = [])
* @method \GuzzleHttp\Promise\Promise invokeDataAutomationAsync(array $args = [])
* @method \Aws\Result invokeDataAutomationAsync(array $args = []) * @method \Aws\Result invokeDataAutomationAsync(array $args = [])
* @method \GuzzleHttp\Promise\Promise invokeDataAutomationAsyncAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise invokeDataAutomationAsyncAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])

View file

@ -5,10 +5,14 @@ use Aws\AwsClient;
/** /**
* This client is used to interact with the **AWS Billing** service. * This client is used to interact with the **AWS Billing** service.
* @method \Aws\Result associateSourceViews(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateSourceViewsAsync(array $args = [])
* @method \Aws\Result createBillingView(array $args = []) * @method \Aws\Result createBillingView(array $args = [])
* @method \GuzzleHttp\Promise\Promise createBillingViewAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createBillingViewAsync(array $args = [])
* @method \Aws\Result deleteBillingView(array $args = []) * @method \Aws\Result deleteBillingView(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteBillingViewAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteBillingViewAsync(array $args = [])
* @method \Aws\Result disassociateSourceViews(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateSourceViewsAsync(array $args = [])
* @method \Aws\Result getBillingView(array $args = []) * @method \Aws\Result getBillingView(array $args = [])
* @method \GuzzleHttp\Promise\Promise getBillingViewAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getBillingViewAsync(array $args = [])
* @method \Aws\Result getResourcePolicy(array $args = []) * @method \Aws\Result getResourcePolicy(array $args = [])

View file

@ -13,6 +13,10 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createJobAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createJobAsync(array $args = [])
* @method \Aws\Result createQuantumTask(array $args = []) * @method \Aws\Result createQuantumTask(array $args = [])
* @method \GuzzleHttp\Promise\Promise createQuantumTaskAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createQuantumTaskAsync(array $args = [])
* @method \Aws\Result createSpendingLimit(array $args = [])
* @method \GuzzleHttp\Promise\Promise createSpendingLimitAsync(array $args = [])
* @method \Aws\Result deleteSpendingLimit(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteSpendingLimitAsync(array $args = [])
* @method \Aws\Result getDevice(array $args = []) * @method \Aws\Result getDevice(array $args = [])
* @method \GuzzleHttp\Promise\Promise getDeviceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getDeviceAsync(array $args = [])
* @method \Aws\Result getJob(array $args = []) * @method \Aws\Result getJob(array $args = [])
@ -27,9 +31,13 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise searchJobsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchJobsAsync(array $args = [])
* @method \Aws\Result searchQuantumTasks(array $args = []) * @method \Aws\Result searchQuantumTasks(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchQuantumTasksAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchQuantumTasksAsync(array $args = [])
* @method \Aws\Result searchSpendingLimits(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchSpendingLimitsAsync(array $args = [])
* @method \Aws\Result tagResource(array $args = []) * @method \Aws\Result tagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
* @method \Aws\Result untagResource(array $args = []) * @method \Aws\Result untagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
* @method \Aws\Result updateSpendingLimit(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateSpendingLimitAsync(array $args = [])
*/ */
class BraketClient extends AwsClient {} class BraketClient extends AwsClient {}

View file

@ -157,6 +157,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateAnalysisTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateAnalysisTemplateAsync(array $args = [])
* @method \Aws\Result updateCollaboration(array $args = []) * @method \Aws\Result updateCollaboration(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateCollaborationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateCollaborationAsync(array $args = [])
* @method \Aws\Result updateCollaborationChangeRequest(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateCollaborationChangeRequestAsync(array $args = [])
* @method \Aws\Result updateConfiguredAudienceModelAssociation(array $args = []) * @method \Aws\Result updateConfiguredAudienceModelAssociation(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateConfiguredAudienceModelAssociationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateConfiguredAudienceModelAssociationAsync(array $args = [])
* @method \Aws\Result updateConfiguredTable(array $args = []) * @method \Aws\Result updateConfiguredTable(array $args = [])

View file

@ -61,6 +61,8 @@ class ClientResolver
__CLASS__, __CLASS__,
'_resolve_from_env_ini' '_resolve_from_env_ini'
]; ];
private const ANONYMOUS_SIGNATURE = 'anonymous';
private const DPOP_SIGNATURE = 'dpop';
/** @var array Map of types to a corresponding function */ /** @var array Map of types to a corresponding function */
private static $typeMap = [ private static $typeMap = [
@ -668,7 +670,10 @@ class ClientResolver
$args['credentials'] = CredentialProvider::fromCredentials( $args['credentials'] = CredentialProvider::fromCredentials(
new Credentials('', '') new Credentials('', '')
); );
$args['config']['signature_version'] = 'anonymous'; if ($args['config']['signature_version'] !== self::DPOP_SIGNATURE) {
$args['config']['signature_version'] = self::ANONYMOUS_SIGNATURE;
}
$args['config']['configured_signature_version'] = true; $args['config']['configured_signature_version'] = true;
} elseif ($value instanceof CacheInterface) { } elseif ($value instanceof CacheInterface) {
$args['credentials'] = CredentialProvider::defaultProvider($args); $args['credentials'] = CredentialProvider::defaultProvider($args);

View file

@ -50,6 +50,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeChangeSetAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeChangeSetAsync(array $args = [])
* @method \Aws\Result describeChangeSetHooks(array $args = []) * @method \Aws\Result describeChangeSetHooks(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeChangeSetHooksAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeChangeSetHooksAsync(array $args = [])
* @method \Aws\Result describeEvents(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeEventsAsync(array $args = [])
* @method \Aws\Result describeGeneratedTemplate(array $args = []) * @method \Aws\Result describeGeneratedTemplate(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeGeneratedTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeGeneratedTemplateAsync(array $args = [])
* @method \Aws\Result describeOrganizationsAccess(array $args = []) * @method \Aws\Result describeOrganizationsAccess(array $args = [])
@ -96,6 +98,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise executeStackRefactorAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise executeStackRefactorAsync(array $args = [])
* @method \Aws\Result getGeneratedTemplate(array $args = []) * @method \Aws\Result getGeneratedTemplate(array $args = [])
* @method \GuzzleHttp\Promise\Promise getGeneratedTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getGeneratedTemplateAsync(array $args = [])
* @method \Aws\Result getHookResult(array $args = [])
* @method \GuzzleHttp\Promise\Promise getHookResultAsync(array $args = [])
* @method \Aws\Result getStackPolicy(array $args = []) * @method \Aws\Result getStackPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise getStackPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getStackPolicyAsync(array $args = [])
* @method \Aws\Result getTemplate(array $args = []) * @method \Aws\Result getTemplate(array $args = [])

View file

@ -110,6 +110,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createAnycastIpListAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise createAnycastIpListAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result createCachePolicy(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result createCachePolicy(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise createCachePolicyAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise createCachePolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result createConnectionFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise createConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result createConnectionGroup(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result createConnectionGroup(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise createConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise createConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result createContinuousDeploymentPolicy(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result createContinuousDeploymentPolicy(array $args = []) (supported in versions 2020-05-31)
@ -134,12 +136,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise createRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result createResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result createResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise createResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise createResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result createTrustStore(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise createTrustStoreAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result createVpcOrigin(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result createVpcOrigin(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise createVpcOriginAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise createVpcOriginAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result deleteAnycastIpList(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result deleteAnycastIpList(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise deleteAnycastIpListAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise deleteAnycastIpListAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result deleteCachePolicy(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result deleteCachePolicy(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise deleteCachePolicyAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise deleteCachePolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result deleteConnectionFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise deleteConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result deleteConnectionGroup(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result deleteConnectionGroup(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise deleteConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise deleteConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result deleteContinuousDeploymentPolicy(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result deleteContinuousDeploymentPolicy(array $args = []) (supported in versions 2020-05-31)
@ -160,10 +166,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteOriginRequestPolicyAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise deleteOriginRequestPolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result deleteRealtimeLogConfig(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result deleteRealtimeLogConfig(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise deleteRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise deleteRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result deleteResourcePolicy(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise deleteResourcePolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result deleteResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result deleteResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise deleteResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise deleteResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result deleteTrustStore(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise deleteTrustStoreAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result deleteVpcOrigin(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result deleteVpcOrigin(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise deleteVpcOriginAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise deleteVpcOriginAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result describeConnectionFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise describeConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result describeFunction(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result describeFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise describeFunctionAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise describeFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result describeKeyValueStore(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result describeKeyValueStore(array $args = []) (supported in versions 2020-05-31)
@ -178,6 +190,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getCachePolicyAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise getCachePolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result getCachePolicyConfig(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result getCachePolicyConfig(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise getCachePolicyConfigAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise getCachePolicyConfigAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result getConnectionFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise getConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result getConnectionGroup(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result getConnectionGroup(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise getConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise getConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result getConnectionGroupByRoutingEndpoint(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result getConnectionGroupByRoutingEndpoint(array $args = []) (supported in versions 2020-05-31)
@ -212,10 +226,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getOriginRequestPolicyConfigAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise getOriginRequestPolicyConfigAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result getRealtimeLogConfig(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result getRealtimeLogConfig(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise getRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise getRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result getResourcePolicy(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise getResourcePolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result getResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result getResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise getResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise getResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result getResponseHeadersPolicyConfig(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result getResponseHeadersPolicyConfig(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise getResponseHeadersPolicyConfigAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise getResponseHeadersPolicyConfigAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result getTrustStore(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise getTrustStoreAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result getVpcOrigin(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result getVpcOrigin(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise getVpcOriginAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise getVpcOriginAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listAnycastIpLists(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listAnycastIpLists(array $args = []) (supported in versions 2020-05-31)
@ -224,6 +242,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listCachePoliciesAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listCachePoliciesAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listConflictingAliases(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listConflictingAliases(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listConflictingAliasesAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listConflictingAliasesAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listConnectionFunctions(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listConnectionFunctionsAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listConnectionGroups(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listConnectionGroups(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listConnectionGroupsAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listConnectionGroupsAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listContinuousDeploymentPolicies(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listContinuousDeploymentPolicies(array $args = []) (supported in versions 2020-05-31)
@ -236,16 +256,22 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listDistributionsByAnycastIpListIdAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listDistributionsByAnycastIpListIdAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDistributionsByCachePolicyId(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listDistributionsByCachePolicyId(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listDistributionsByCachePolicyIdAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listDistributionsByCachePolicyIdAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDistributionsByConnectionFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listDistributionsByConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDistributionsByConnectionMode(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listDistributionsByConnectionMode(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listDistributionsByConnectionModeAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listDistributionsByConnectionModeAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDistributionsByKeyGroup(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listDistributionsByKeyGroup(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listDistributionsByKeyGroupAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listDistributionsByKeyGroupAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDistributionsByOriginRequestPolicyId(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listDistributionsByOriginRequestPolicyId(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listDistributionsByOriginRequestPolicyIdAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listDistributionsByOriginRequestPolicyIdAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDistributionsByOwnedResource(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listDistributionsByOwnedResourceAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDistributionsByRealtimeLogConfig(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listDistributionsByRealtimeLogConfig(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listDistributionsByRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listDistributionsByRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDistributionsByResponseHeadersPolicyId(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listDistributionsByResponseHeadersPolicyId(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listDistributionsByResponseHeadersPolicyIdAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listDistributionsByResponseHeadersPolicyIdAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDistributionsByTrustStore(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listDistributionsByTrustStoreAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDistributionsByVpcOriginId(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listDistributionsByVpcOriginId(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listDistributionsByVpcOriginIdAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listDistributionsByVpcOriginIdAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listDomainConflicts(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listDomainConflicts(array $args = []) (supported in versions 2020-05-31)
@ -266,14 +292,26 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listRealtimeLogConfigsAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listRealtimeLogConfigsAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listResponseHeadersPolicies(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listResponseHeadersPolicies(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listResponseHeadersPoliciesAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listResponseHeadersPoliciesAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listTrustStores(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listTrustStoresAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result listVpcOrigins(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result listVpcOrigins(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise listVpcOriginsAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise listVpcOriginsAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result publishConnectionFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise publishConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result publishFunction(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result publishFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise publishFunctionAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise publishFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result putResourcePolicy(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise putResourcePolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result testConnectionFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise testConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result testFunction(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result testFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise testFunctionAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise testFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result updateAnycastIpList(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise updateAnycastIpListAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result updateCachePolicy(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result updateCachePolicy(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise updateCachePolicyAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise updateCachePolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result updateConnectionFunction(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise updateConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result updateConnectionGroup(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result updateConnectionGroup(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise updateConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise updateConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result updateContinuousDeploymentPolicy(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result updateContinuousDeploymentPolicy(array $args = []) (supported in versions 2020-05-31)
@ -298,6 +336,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise updateRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result updateResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result updateResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise updateResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise updateResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result updateTrustStore(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise updateTrustStoreAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result updateVpcOrigin(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result updateVpcOrigin(array $args = []) (supported in versions 2020-05-31)
* @method \GuzzleHttp\Promise\Promise updateVpcOriginAsync(array $args = []) (supported in versions 2020-05-31) * @method \GuzzleHttp\Promise\Promise updateVpcOriginAsync(array $args = []) (supported in versions 2020-05-31)
* @method \Aws\Result verifyDnsConfiguration(array $args = []) (supported in versions 2020-05-31) * @method \Aws\Result verifyDnsConfiguration(array $args = []) (supported in versions 2020-05-31)

View file

@ -72,6 +72,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listImportFailuresAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listImportFailuresAsync(array $args = [])
* @method \Aws\Result listImports(array $args = []) * @method \Aws\Result listImports(array $args = [])
* @method \GuzzleHttp\Promise\Promise listImportsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listImportsAsync(array $args = [])
* @method \Aws\Result listInsightsData(array $args = [])
* @method \GuzzleHttp\Promise\Promise listInsightsDataAsync(array $args = [])
* @method \Aws\Result listInsightsMetricData(array $args = []) * @method \Aws\Result listInsightsMetricData(array $args = [])
* @method \GuzzleHttp\Promise\Promise listInsightsMetricDataAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listInsightsMetricDataAsync(array $args = [])
* @method \Aws\Result listPublicKeys(array $args = []) * @method \Aws\Result listPublicKeys(array $args = [])

View file

@ -10,18 +10,26 @@ use Generator;
* *
* @method \Aws\Result associateKmsKey(array $args = []) * @method \Aws\Result associateKmsKey(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateKmsKeyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateKmsKeyAsync(array $args = [])
* @method \Aws\Result associateSourceToS3TableIntegration(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateSourceToS3TableIntegrationAsync(array $args = [])
* @method \Aws\Result cancelExportTask(array $args = []) * @method \Aws\Result cancelExportTask(array $args = [])
* @method \GuzzleHttp\Promise\Promise cancelExportTaskAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise cancelExportTaskAsync(array $args = [])
* @method \Aws\Result cancelImportTask(array $args = [])
* @method \GuzzleHttp\Promise\Promise cancelImportTaskAsync(array $args = [])
* @method \Aws\Result createDelivery(array $args = []) * @method \Aws\Result createDelivery(array $args = [])
* @method \GuzzleHttp\Promise\Promise createDeliveryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createDeliveryAsync(array $args = [])
* @method \Aws\Result createExportTask(array $args = []) * @method \Aws\Result createExportTask(array $args = [])
* @method \GuzzleHttp\Promise\Promise createExportTaskAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createExportTaskAsync(array $args = [])
* @method \Aws\Result createImportTask(array $args = [])
* @method \GuzzleHttp\Promise\Promise createImportTaskAsync(array $args = [])
* @method \Aws\Result createLogAnomalyDetector(array $args = []) * @method \Aws\Result createLogAnomalyDetector(array $args = [])
* @method \GuzzleHttp\Promise\Promise createLogAnomalyDetectorAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createLogAnomalyDetectorAsync(array $args = [])
* @method \Aws\Result createLogGroup(array $args = []) * @method \Aws\Result createLogGroup(array $args = [])
* @method \GuzzleHttp\Promise\Promise createLogGroupAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createLogGroupAsync(array $args = [])
* @method \Aws\Result createLogStream(array $args = []) * @method \Aws\Result createLogStream(array $args = [])
* @method \GuzzleHttp\Promise\Promise createLogStreamAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createLogStreamAsync(array $args = [])
* @method \Aws\Result createScheduledQuery(array $args = [])
* @method \GuzzleHttp\Promise\Promise createScheduledQueryAsync(array $args = [])
* @method \Aws\Result deleteAccountPolicy(array $args = []) * @method \Aws\Result deleteAccountPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteAccountPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteAccountPolicyAsync(array $args = [])
* @method \Aws\Result deleteDataProtectionPolicy(array $args = []) * @method \Aws\Result deleteDataProtectionPolicy(array $args = [])
@ -54,6 +62,8 @@ use Generator;
* @method \GuzzleHttp\Promise\Promise deleteResourcePolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteResourcePolicyAsync(array $args = [])
* @method \Aws\Result deleteRetentionPolicy(array $args = []) * @method \Aws\Result deleteRetentionPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteRetentionPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteRetentionPolicyAsync(array $args = [])
* @method \Aws\Result deleteScheduledQuery(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteScheduledQueryAsync(array $args = [])
* @method \Aws\Result deleteSubscriptionFilter(array $args = []) * @method \Aws\Result deleteSubscriptionFilter(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteSubscriptionFilterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteSubscriptionFilterAsync(array $args = [])
* @method \Aws\Result deleteTransformer(array $args = []) * @method \Aws\Result deleteTransformer(array $args = [])
@ -74,6 +84,10 @@ use Generator;
* @method \GuzzleHttp\Promise\Promise describeExportTasksAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeExportTasksAsync(array $args = [])
* @method \Aws\Result describeFieldIndexes(array $args = []) * @method \Aws\Result describeFieldIndexes(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeFieldIndexesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeFieldIndexesAsync(array $args = [])
* @method \Aws\Result describeImportTaskBatches(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeImportTaskBatchesAsync(array $args = [])
* @method \Aws\Result describeImportTasks(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeImportTasksAsync(array $args = [])
* @method \Aws\Result describeIndexPolicies(array $args = []) * @method \Aws\Result describeIndexPolicies(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeIndexPoliciesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeIndexPoliciesAsync(array $args = [])
* @method \Aws\Result describeLogGroups(array $args = []) * @method \Aws\Result describeLogGroups(array $args = [])
@ -92,6 +106,8 @@ use Generator;
* @method \GuzzleHttp\Promise\Promise describeSubscriptionFiltersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeSubscriptionFiltersAsync(array $args = [])
* @method \Aws\Result disassociateKmsKey(array $args = []) * @method \Aws\Result disassociateKmsKey(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateKmsKeyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateKmsKeyAsync(array $args = [])
* @method \Aws\Result disassociateSourceFromS3TableIntegration(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateSourceFromS3TableIntegrationAsync(array $args = [])
* @method \Aws\Result filterLogEvents(array $args = []) * @method \Aws\Result filterLogEvents(array $args = [])
* @method \GuzzleHttp\Promise\Promise filterLogEventsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise filterLogEventsAsync(array $args = [])
* @method \Aws\Result getDataProtectionPolicy(array $args = []) * @method \Aws\Result getDataProtectionPolicy(array $args = [])
@ -110,6 +126,8 @@ use Generator;
* @method \GuzzleHttp\Promise\Promise getLogAnomalyDetectorAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getLogAnomalyDetectorAsync(array $args = [])
* @method \Aws\Result getLogEvents(array $args = []) * @method \Aws\Result getLogEvents(array $args = [])
* @method \GuzzleHttp\Promise\Promise getLogEventsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getLogEventsAsync(array $args = [])
* @method \Aws\Result getLogFields(array $args = [])
* @method \GuzzleHttp\Promise\Promise getLogFieldsAsync(array $args = [])
* @method \Aws\Result getLogGroupFields(array $args = []) * @method \Aws\Result getLogGroupFields(array $args = [])
* @method \GuzzleHttp\Promise\Promise getLogGroupFieldsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getLogGroupFieldsAsync(array $args = [])
* @method \Aws\Result getLogObject(array $args = []) * @method \Aws\Result getLogObject(array $args = [])
@ -118,8 +136,14 @@ use Generator;
* @method \GuzzleHttp\Promise\Promise getLogRecordAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getLogRecordAsync(array $args = [])
* @method \Aws\Result getQueryResults(array $args = []) * @method \Aws\Result getQueryResults(array $args = [])
* @method \GuzzleHttp\Promise\Promise getQueryResultsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getQueryResultsAsync(array $args = [])
* @method \Aws\Result getScheduledQuery(array $args = [])
* @method \GuzzleHttp\Promise\Promise getScheduledQueryAsync(array $args = [])
* @method \Aws\Result getScheduledQueryHistory(array $args = [])
* @method \GuzzleHttp\Promise\Promise getScheduledQueryHistoryAsync(array $args = [])
* @method \Aws\Result getTransformer(array $args = []) * @method \Aws\Result getTransformer(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTransformerAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getTransformerAsync(array $args = [])
* @method \Aws\Result listAggregateLogGroupSummaries(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAggregateLogGroupSummariesAsync(array $args = [])
* @method \Aws\Result listAnomalies(array $args = []) * @method \Aws\Result listAnomalies(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAnomaliesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listAnomaliesAsync(array $args = [])
* @method \Aws\Result listIntegrations(array $args = []) * @method \Aws\Result listIntegrations(array $args = [])
@ -130,6 +154,10 @@ use Generator;
* @method \GuzzleHttp\Promise\Promise listLogGroupsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listLogGroupsAsync(array $args = [])
* @method \Aws\Result listLogGroupsForQuery(array $args = []) * @method \Aws\Result listLogGroupsForQuery(array $args = [])
* @method \GuzzleHttp\Promise\Promise listLogGroupsForQueryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listLogGroupsForQueryAsync(array $args = [])
* @method \Aws\Result listScheduledQueries(array $args = [])
* @method \GuzzleHttp\Promise\Promise listScheduledQueriesAsync(array $args = [])
* @method \Aws\Result listSourcesForS3TableIntegration(array $args = [])
* @method \GuzzleHttp\Promise\Promise listSourcesForS3TableIntegrationAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result listTagsLogGroup(array $args = []) * @method \Aws\Result listTagsLogGroup(array $args = [])
@ -154,6 +182,8 @@ use Generator;
* @method \GuzzleHttp\Promise\Promise putIntegrationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putIntegrationAsync(array $args = [])
* @method \Aws\Result putLogEvents(array $args = []) * @method \Aws\Result putLogEvents(array $args = [])
* @method \GuzzleHttp\Promise\Promise putLogEventsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putLogEventsAsync(array $args = [])
* @method \Aws\Result putLogGroupDeletionProtection(array $args = [])
* @method \GuzzleHttp\Promise\Promise putLogGroupDeletionProtectionAsync(array $args = [])
* @method \Aws\Result putMetricFilter(array $args = []) * @method \Aws\Result putMetricFilter(array $args = [])
* @method \GuzzleHttp\Promise\Promise putMetricFilterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putMetricFilterAsync(array $args = [])
* @method \Aws\Result putQueryDefinition(array $args = []) * @method \Aws\Result putQueryDefinition(array $args = [])
@ -190,6 +220,8 @@ use Generator;
* @method \GuzzleHttp\Promise\Promise updateDeliveryConfigurationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateDeliveryConfigurationAsync(array $args = [])
* @method \Aws\Result updateLogAnomalyDetector(array $args = []) * @method \Aws\Result updateLogAnomalyDetector(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateLogAnomalyDetectorAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateLogAnomalyDetectorAsync(array $args = [])
* @method \Aws\Result updateScheduledQuery(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateScheduledQueryAsync(array $args = [])
*/ */
class CloudWatchLogsClient extends AwsClient { class CloudWatchLogsClient extends AwsClient {
static $streamingCommands = [ static $streamingCommands = [

View file

@ -0,0 +1,55 @@
<?php
namespace Aws\ComputeOptimizerAutomation;
use Aws\AwsClient;
/**
* This client is used to interact with the **Compute Optimizer Automation** service.
* @method \Aws\Result associateAccounts(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateAccountsAsync(array $args = [])
* @method \Aws\Result createAutomationRule(array $args = [])
* @method \GuzzleHttp\Promise\Promise createAutomationRuleAsync(array $args = [])
* @method \Aws\Result deleteAutomationRule(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteAutomationRuleAsync(array $args = [])
* @method \Aws\Result disassociateAccounts(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateAccountsAsync(array $args = [])
* @method \Aws\Result getAutomationEvent(array $args = [])
* @method \GuzzleHttp\Promise\Promise getAutomationEventAsync(array $args = [])
* @method \Aws\Result getAutomationRule(array $args = [])
* @method \GuzzleHttp\Promise\Promise getAutomationRuleAsync(array $args = [])
* @method \Aws\Result getEnrollmentConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise getEnrollmentConfigurationAsync(array $args = [])
* @method \Aws\Result listAccounts(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAccountsAsync(array $args = [])
* @method \Aws\Result listAutomationEventSteps(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAutomationEventStepsAsync(array $args = [])
* @method \Aws\Result listAutomationEventSummaries(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAutomationEventSummariesAsync(array $args = [])
* @method \Aws\Result listAutomationEvents(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAutomationEventsAsync(array $args = [])
* @method \Aws\Result listAutomationRulePreview(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAutomationRulePreviewAsync(array $args = [])
* @method \Aws\Result listAutomationRulePreviewSummaries(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAutomationRulePreviewSummariesAsync(array $args = [])
* @method \Aws\Result listAutomationRules(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAutomationRulesAsync(array $args = [])
* @method \Aws\Result listRecommendedActionSummaries(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRecommendedActionSummariesAsync(array $args = [])
* @method \Aws\Result listRecommendedActions(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRecommendedActionsAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result rollbackAutomationEvent(array $args = [])
* @method \GuzzleHttp\Promise\Promise rollbackAutomationEventAsync(array $args = [])
* @method \Aws\Result startAutomationEvent(array $args = [])
* @method \GuzzleHttp\Promise\Promise startAutomationEventAsync(array $args = [])
* @method \Aws\Result tagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
* @method \Aws\Result untagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
* @method \Aws\Result updateAutomationRule(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateAutomationRuleAsync(array $args = [])
* @method \Aws\Result updateEnrollmentConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateEnrollmentConfigurationAsync(array $args = [])
*/
class ComputeOptimizerAutomationClient extends AwsClient {}

View file

@ -0,0 +1,9 @@
<?php
namespace Aws\ComputeOptimizerAutomation\Exception;
use Aws\Exception\AwsException;
/**
* Represents an error interacting with the **Compute Optimizer Automation** service.
*/
class ComputeOptimizerAutomationException extends AwsException {}

View file

@ -238,8 +238,11 @@ class ConfigurationResolver
"services {$data[$profile]['services']}" "services {$data[$profile]['services']}"
); );
if (!isset($services_section[$options['subsection']][$options['key']]) if (empty($options['subsection']) || empty($options['key'])) {
) { return null;
}
if (!isset($services_section[$options['subsection']][$options['key']])) {
return null; return null;
} }

View file

@ -13,10 +13,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise associateApprovedOriginAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateApprovedOriginAsync(array $args = [])
* @method \Aws\Result associateBot(array $args = []) * @method \Aws\Result associateBot(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateBotAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateBotAsync(array $args = [])
* @method \Aws\Result associateContactWithUser(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateContactWithUserAsync(array $args = [])
* @method \Aws\Result associateDefaultVocabulary(array $args = []) * @method \Aws\Result associateDefaultVocabulary(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateDefaultVocabularyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateDefaultVocabularyAsync(array $args = [])
* @method \Aws\Result associateEmailAddressAlias(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateEmailAddressAliasAsync(array $args = [])
* @method \Aws\Result associateFlow(array $args = []) * @method \Aws\Result associateFlow(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateFlowAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateFlowAsync(array $args = [])
* @method \Aws\Result associateHoursOfOperations(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateHoursOfOperationsAsync(array $args = [])
* @method \Aws\Result associateInstanceStorageConfig(array $args = []) * @method \Aws\Result associateInstanceStorageConfig(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateInstanceStorageConfigAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateInstanceStorageConfigAsync(array $args = [])
* @method \Aws\Result associateLambdaFunction(array $args = []) * @method \Aws\Result associateLambdaFunction(array $args = [])
@ -31,12 +37,22 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise associateRoutingProfileQueuesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateRoutingProfileQueuesAsync(array $args = [])
* @method \Aws\Result associateSecurityKey(array $args = []) * @method \Aws\Result associateSecurityKey(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateSecurityKeyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateSecurityKeyAsync(array $args = [])
* @method \Aws\Result associateSecurityProfiles(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateSecurityProfilesAsync(array $args = [])
* @method \Aws\Result associateTrafficDistributionGroupUser(array $args = []) * @method \Aws\Result associateTrafficDistributionGroupUser(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateTrafficDistributionGroupUserAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateTrafficDistributionGroupUserAsync(array $args = [])
* @method \Aws\Result associateUserProficiencies(array $args = []) * @method \Aws\Result associateUserProficiencies(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateUserProficienciesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateUserProficienciesAsync(array $args = [])
* @method \Aws\Result associateWorkspace(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateWorkspaceAsync(array $args = [])
* @method \Aws\Result batchAssociateAnalyticsDataSet(array $args = []) * @method \Aws\Result batchAssociateAnalyticsDataSet(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchAssociateAnalyticsDataSetAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise batchAssociateAnalyticsDataSetAsync(array $args = [])
* @method \Aws\Result batchCreateDataTableValue(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchCreateDataTableValueAsync(array $args = [])
* @method \Aws\Result batchDeleteDataTableValue(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchDeleteDataTableValueAsync(array $args = [])
* @method \Aws\Result batchDescribeDataTableValue(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchDescribeDataTableValueAsync(array $args = [])
* @method \Aws\Result batchDisassociateAnalyticsDataSet(array $args = []) * @method \Aws\Result batchDisassociateAnalyticsDataSet(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchDisassociateAnalyticsDataSetAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise batchDisassociateAnalyticsDataSetAsync(array $args = [])
* @method \Aws\Result batchGetAttachedFileMetadata(array $args = []) * @method \Aws\Result batchGetAttachedFileMetadata(array $args = [])
@ -45,6 +61,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise batchGetFlowAssociationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise batchGetFlowAssociationAsync(array $args = [])
* @method \Aws\Result batchPutContact(array $args = []) * @method \Aws\Result batchPutContact(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchPutContactAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise batchPutContactAsync(array $args = [])
* @method \Aws\Result batchUpdateDataTableValue(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchUpdateDataTableValueAsync(array $args = [])
* @method \Aws\Result claimPhoneNumber(array $args = []) * @method \Aws\Result claimPhoneNumber(array $args = [])
* @method \GuzzleHttp\Promise\Promise claimPhoneNumberAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise claimPhoneNumberAsync(array $args = [])
* @method \Aws\Result completeAttachedFileUpload(array $args = []) * @method \Aws\Result completeAttachedFileUpload(array $args = [])
@ -57,8 +75,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createContactFlowAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createContactFlowAsync(array $args = [])
* @method \Aws\Result createContactFlowModule(array $args = []) * @method \Aws\Result createContactFlowModule(array $args = [])
* @method \GuzzleHttp\Promise\Promise createContactFlowModuleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createContactFlowModuleAsync(array $args = [])
* @method \Aws\Result createContactFlowModuleAlias(array $args = [])
* @method \GuzzleHttp\Promise\Promise createContactFlowModuleAliasAsync(array $args = [])
* @method \Aws\Result createContactFlowModuleVersion(array $args = [])
* @method \GuzzleHttp\Promise\Promise createContactFlowModuleVersionAsync(array $args = [])
* @method \Aws\Result createContactFlowVersion(array $args = []) * @method \Aws\Result createContactFlowVersion(array $args = [])
* @method \GuzzleHttp\Promise\Promise createContactFlowVersionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createContactFlowVersionAsync(array $args = [])
* @method \Aws\Result createDataTable(array $args = [])
* @method \GuzzleHttp\Promise\Promise createDataTableAsync(array $args = [])
* @method \Aws\Result createDataTableAttribute(array $args = [])
* @method \GuzzleHttp\Promise\Promise createDataTableAttributeAsync(array $args = [])
* @method \Aws\Result createEmailAddress(array $args = []) * @method \Aws\Result createEmailAddress(array $args = [])
* @method \GuzzleHttp\Promise\Promise createEmailAddressAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createEmailAddressAsync(array $args = [])
* @method \Aws\Result createEvaluationForm(array $args = []) * @method \Aws\Result createEvaluationForm(array $args = [])
@ -93,6 +119,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createSecurityProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createSecurityProfileAsync(array $args = [])
* @method \Aws\Result createTaskTemplate(array $args = []) * @method \Aws\Result createTaskTemplate(array $args = [])
* @method \GuzzleHttp\Promise\Promise createTaskTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createTaskTemplateAsync(array $args = [])
* @method \Aws\Result createTestCase(array $args = [])
* @method \GuzzleHttp\Promise\Promise createTestCaseAsync(array $args = [])
* @method \Aws\Result createTrafficDistributionGroup(array $args = []) * @method \Aws\Result createTrafficDistributionGroup(array $args = [])
* @method \GuzzleHttp\Promise\Promise createTrafficDistributionGroupAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createTrafficDistributionGroupAsync(array $args = [])
* @method \Aws\Result createUseCase(array $args = []) * @method \Aws\Result createUseCase(array $args = [])
@ -107,6 +135,10 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createViewVersionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createViewVersionAsync(array $args = [])
* @method \Aws\Result createVocabulary(array $args = []) * @method \Aws\Result createVocabulary(array $args = [])
* @method \GuzzleHttp\Promise\Promise createVocabularyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createVocabularyAsync(array $args = [])
* @method \Aws\Result createWorkspace(array $args = [])
* @method \GuzzleHttp\Promise\Promise createWorkspaceAsync(array $args = [])
* @method \Aws\Result createWorkspacePage(array $args = [])
* @method \GuzzleHttp\Promise\Promise createWorkspacePageAsync(array $args = [])
* @method \Aws\Result deactivateEvaluationForm(array $args = []) * @method \Aws\Result deactivateEvaluationForm(array $args = [])
* @method \GuzzleHttp\Promise\Promise deactivateEvaluationFormAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deactivateEvaluationFormAsync(array $args = [])
* @method \Aws\Result deleteAttachedFile(array $args = []) * @method \Aws\Result deleteAttachedFile(array $args = [])
@ -117,8 +149,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteContactFlowAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteContactFlowAsync(array $args = [])
* @method \Aws\Result deleteContactFlowModule(array $args = []) * @method \Aws\Result deleteContactFlowModule(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteContactFlowModuleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteContactFlowModuleAsync(array $args = [])
* @method \Aws\Result deleteContactFlowModuleAlias(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteContactFlowModuleAliasAsync(array $args = [])
* @method \Aws\Result deleteContactFlowModuleVersion(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteContactFlowModuleVersionAsync(array $args = [])
* @method \Aws\Result deleteContactFlowVersion(array $args = []) * @method \Aws\Result deleteContactFlowVersion(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteContactFlowVersionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteContactFlowVersionAsync(array $args = [])
* @method \Aws\Result deleteDataTable(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteDataTableAsync(array $args = [])
* @method \Aws\Result deleteDataTableAttribute(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteDataTableAttributeAsync(array $args = [])
* @method \Aws\Result deleteEmailAddress(array $args = []) * @method \Aws\Result deleteEmailAddress(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteEmailAddressAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteEmailAddressAsync(array $args = [])
* @method \Aws\Result deleteEvaluationForm(array $args = []) * @method \Aws\Result deleteEvaluationForm(array $args = [])
@ -149,6 +189,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteSecurityProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteSecurityProfileAsync(array $args = [])
* @method \Aws\Result deleteTaskTemplate(array $args = []) * @method \Aws\Result deleteTaskTemplate(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteTaskTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteTaskTemplateAsync(array $args = [])
* @method \Aws\Result deleteTestCase(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteTestCaseAsync(array $args = [])
* @method \Aws\Result deleteTrafficDistributionGroup(array $args = []) * @method \Aws\Result deleteTrafficDistributionGroup(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteTrafficDistributionGroupAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteTrafficDistributionGroupAsync(array $args = [])
* @method \Aws\Result deleteUseCase(array $args = []) * @method \Aws\Result deleteUseCase(array $args = [])
@ -163,6 +205,12 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteViewVersionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteViewVersionAsync(array $args = [])
* @method \Aws\Result deleteVocabulary(array $args = []) * @method \Aws\Result deleteVocabulary(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteVocabularyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteVocabularyAsync(array $args = [])
* @method \Aws\Result deleteWorkspace(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteWorkspaceAsync(array $args = [])
* @method \Aws\Result deleteWorkspaceMedia(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteWorkspaceMediaAsync(array $args = [])
* @method \Aws\Result deleteWorkspacePage(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteWorkspacePageAsync(array $args = [])
* @method \Aws\Result describeAgentStatus(array $args = []) * @method \Aws\Result describeAgentStatus(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeAgentStatusAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeAgentStatusAsync(array $args = [])
* @method \Aws\Result describeAuthenticationProfile(array $args = []) * @method \Aws\Result describeAuthenticationProfile(array $args = [])
@ -175,6 +223,12 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeContactFlowAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeContactFlowAsync(array $args = [])
* @method \Aws\Result describeContactFlowModule(array $args = []) * @method \Aws\Result describeContactFlowModule(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeContactFlowModuleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeContactFlowModuleAsync(array $args = [])
* @method \Aws\Result describeContactFlowModuleAlias(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeContactFlowModuleAliasAsync(array $args = [])
* @method \Aws\Result describeDataTable(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeDataTableAsync(array $args = [])
* @method \Aws\Result describeDataTableAttribute(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeDataTableAttributeAsync(array $args = [])
* @method \Aws\Result describeEmailAddress(array $args = []) * @method \Aws\Result describeEmailAddress(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeEmailAddressAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeEmailAddressAsync(array $args = [])
* @method \Aws\Result describeEvaluationForm(array $args = []) * @method \Aws\Result describeEvaluationForm(array $args = [])
@ -205,6 +259,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeRuleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeRuleAsync(array $args = [])
* @method \Aws\Result describeSecurityProfile(array $args = []) * @method \Aws\Result describeSecurityProfile(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeSecurityProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeSecurityProfileAsync(array $args = [])
* @method \Aws\Result describeTestCase(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeTestCaseAsync(array $args = [])
* @method \Aws\Result describeTrafficDistributionGroup(array $args = []) * @method \Aws\Result describeTrafficDistributionGroup(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeTrafficDistributionGroupAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeTrafficDistributionGroupAsync(array $args = [])
* @method \Aws\Result describeUser(array $args = []) * @method \Aws\Result describeUser(array $args = [])
@ -217,14 +273,20 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeViewAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeViewAsync(array $args = [])
* @method \Aws\Result describeVocabulary(array $args = []) * @method \Aws\Result describeVocabulary(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeVocabularyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeVocabularyAsync(array $args = [])
* @method \Aws\Result describeWorkspace(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeWorkspaceAsync(array $args = [])
* @method \Aws\Result disassociateAnalyticsDataSet(array $args = []) * @method \Aws\Result disassociateAnalyticsDataSet(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateAnalyticsDataSetAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateAnalyticsDataSetAsync(array $args = [])
* @method \Aws\Result disassociateApprovedOrigin(array $args = []) * @method \Aws\Result disassociateApprovedOrigin(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateApprovedOriginAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateApprovedOriginAsync(array $args = [])
* @method \Aws\Result disassociateBot(array $args = []) * @method \Aws\Result disassociateBot(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateBotAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateBotAsync(array $args = [])
* @method \Aws\Result disassociateEmailAddressAlias(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateEmailAddressAliasAsync(array $args = [])
* @method \Aws\Result disassociateFlow(array $args = []) * @method \Aws\Result disassociateFlow(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateFlowAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateFlowAsync(array $args = [])
* @method \Aws\Result disassociateHoursOfOperations(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateHoursOfOperationsAsync(array $args = [])
* @method \Aws\Result disassociateInstanceStorageConfig(array $args = []) * @method \Aws\Result disassociateInstanceStorageConfig(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateInstanceStorageConfigAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateInstanceStorageConfigAsync(array $args = [])
* @method \Aws\Result disassociateLambdaFunction(array $args = []) * @method \Aws\Result disassociateLambdaFunction(array $args = [])
@ -239,12 +301,18 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise disassociateRoutingProfileQueuesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateRoutingProfileQueuesAsync(array $args = [])
* @method \Aws\Result disassociateSecurityKey(array $args = []) * @method \Aws\Result disassociateSecurityKey(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateSecurityKeyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateSecurityKeyAsync(array $args = [])
* @method \Aws\Result disassociateSecurityProfiles(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateSecurityProfilesAsync(array $args = [])
* @method \Aws\Result disassociateTrafficDistributionGroupUser(array $args = []) * @method \Aws\Result disassociateTrafficDistributionGroupUser(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateTrafficDistributionGroupUserAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateTrafficDistributionGroupUserAsync(array $args = [])
* @method \Aws\Result disassociateUserProficiencies(array $args = []) * @method \Aws\Result disassociateUserProficiencies(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateUserProficienciesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateUserProficienciesAsync(array $args = [])
* @method \Aws\Result disassociateWorkspace(array $args = [])
* @method \GuzzleHttp\Promise\Promise disassociateWorkspaceAsync(array $args = [])
* @method \Aws\Result dismissUserContact(array $args = []) * @method \Aws\Result dismissUserContact(array $args = [])
* @method \GuzzleHttp\Promise\Promise dismissUserContactAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise dismissUserContactAsync(array $args = [])
* @method \Aws\Result evaluateDataTableValues(array $args = [])
* @method \GuzzleHttp\Promise\Promise evaluateDataTableValuesAsync(array $args = [])
* @method \Aws\Result getAttachedFile(array $args = []) * @method \Aws\Result getAttachedFile(array $args = [])
* @method \GuzzleHttp\Promise\Promise getAttachedFileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getAttachedFileAsync(array $args = [])
* @method \Aws\Result getContactAttributes(array $args = []) * @method \Aws\Result getContactAttributes(array $args = [])
@ -269,10 +337,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getPromptFileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getPromptFileAsync(array $args = [])
* @method \Aws\Result getTaskTemplate(array $args = []) * @method \Aws\Result getTaskTemplate(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTaskTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getTaskTemplateAsync(array $args = [])
* @method \Aws\Result getTestCaseExecutionSummary(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTestCaseExecutionSummaryAsync(array $args = [])
* @method \Aws\Result getTrafficDistribution(array $args = []) * @method \Aws\Result getTrafficDistribution(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTrafficDistributionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getTrafficDistributionAsync(array $args = [])
* @method \Aws\Result importPhoneNumber(array $args = []) * @method \Aws\Result importPhoneNumber(array $args = [])
* @method \GuzzleHttp\Promise\Promise importPhoneNumberAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise importPhoneNumberAsync(array $args = [])
* @method \Aws\Result importWorkspaceMedia(array $args = [])
* @method \GuzzleHttp\Promise\Promise importWorkspaceMediaAsync(array $args = [])
* @method \Aws\Result listAgentStatuses(array $args = []) * @method \Aws\Result listAgentStatuses(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAgentStatusesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listAgentStatusesAsync(array $args = [])
* @method \Aws\Result listAnalyticsDataAssociations(array $args = []) * @method \Aws\Result listAnalyticsDataAssociations(array $args = [])
@ -287,8 +359,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listAuthenticationProfilesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listAuthenticationProfilesAsync(array $args = [])
* @method \Aws\Result listBots(array $args = []) * @method \Aws\Result listBots(array $args = [])
* @method \GuzzleHttp\Promise\Promise listBotsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listBotsAsync(array $args = [])
* @method \Aws\Result listChildHoursOfOperations(array $args = [])
* @method \GuzzleHttp\Promise\Promise listChildHoursOfOperationsAsync(array $args = [])
* @method \Aws\Result listContactEvaluations(array $args = []) * @method \Aws\Result listContactEvaluations(array $args = [])
* @method \GuzzleHttp\Promise\Promise listContactEvaluationsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listContactEvaluationsAsync(array $args = [])
* @method \Aws\Result listContactFlowModuleAliases(array $args = [])
* @method \GuzzleHttp\Promise\Promise listContactFlowModuleAliasesAsync(array $args = [])
* @method \Aws\Result listContactFlowModuleVersions(array $args = [])
* @method \GuzzleHttp\Promise\Promise listContactFlowModuleVersionsAsync(array $args = [])
* @method \Aws\Result listContactFlowModules(array $args = []) * @method \Aws\Result listContactFlowModules(array $args = [])
* @method \GuzzleHttp\Promise\Promise listContactFlowModulesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listContactFlowModulesAsync(array $args = [])
* @method \Aws\Result listContactFlowVersions(array $args = []) * @method \Aws\Result listContactFlowVersions(array $args = [])
@ -297,8 +375,18 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listContactFlowsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listContactFlowsAsync(array $args = [])
* @method \Aws\Result listContactReferences(array $args = []) * @method \Aws\Result listContactReferences(array $args = [])
* @method \GuzzleHttp\Promise\Promise listContactReferencesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listContactReferencesAsync(array $args = [])
* @method \Aws\Result listDataTableAttributes(array $args = [])
* @method \GuzzleHttp\Promise\Promise listDataTableAttributesAsync(array $args = [])
* @method \Aws\Result listDataTablePrimaryValues(array $args = [])
* @method \GuzzleHttp\Promise\Promise listDataTablePrimaryValuesAsync(array $args = [])
* @method \Aws\Result listDataTableValues(array $args = [])
* @method \GuzzleHttp\Promise\Promise listDataTableValuesAsync(array $args = [])
* @method \Aws\Result listDataTables(array $args = [])
* @method \GuzzleHttp\Promise\Promise listDataTablesAsync(array $args = [])
* @method \Aws\Result listDefaultVocabularies(array $args = []) * @method \Aws\Result listDefaultVocabularies(array $args = [])
* @method \GuzzleHttp\Promise\Promise listDefaultVocabulariesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listDefaultVocabulariesAsync(array $args = [])
* @method \Aws\Result listEntitySecurityProfiles(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEntitySecurityProfilesAsync(array $args = [])
* @method \Aws\Result listEvaluationFormVersions(array $args = []) * @method \Aws\Result listEvaluationFormVersions(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEvaluationFormVersionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listEvaluationFormVersionsAsync(array $args = [])
* @method \Aws\Result listEvaluationForms(array $args = []) * @method \Aws\Result listEvaluationForms(array $args = [])
@ -337,6 +425,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listQuickConnectsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listQuickConnectsAsync(array $args = [])
* @method \Aws\Result listRealtimeContactAnalysisSegmentsV2(array $args = []) * @method \Aws\Result listRealtimeContactAnalysisSegmentsV2(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRealtimeContactAnalysisSegmentsV2Async(array $args = []) * @method \GuzzleHttp\Promise\Promise listRealtimeContactAnalysisSegmentsV2Async(array $args = [])
* @method \Aws\Result listRoutingProfileManualAssignmentQueues(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRoutingProfileManualAssignmentQueuesAsync(array $args = [])
* @method \Aws\Result listRoutingProfileQueues(array $args = []) * @method \Aws\Result listRoutingProfileQueues(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRoutingProfileQueuesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listRoutingProfileQueuesAsync(array $args = [])
* @method \Aws\Result listRoutingProfiles(array $args = []) * @method \Aws\Result listRoutingProfiles(array $args = [])
@ -347,6 +437,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listSecurityKeysAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listSecurityKeysAsync(array $args = [])
* @method \Aws\Result listSecurityProfileApplications(array $args = []) * @method \Aws\Result listSecurityProfileApplications(array $args = [])
* @method \GuzzleHttp\Promise\Promise listSecurityProfileApplicationsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listSecurityProfileApplicationsAsync(array $args = [])
* @method \Aws\Result listSecurityProfileFlowModules(array $args = [])
* @method \GuzzleHttp\Promise\Promise listSecurityProfileFlowModulesAsync(array $args = [])
* @method \Aws\Result listSecurityProfilePermissions(array $args = []) * @method \Aws\Result listSecurityProfilePermissions(array $args = [])
* @method \GuzzleHttp\Promise\Promise listSecurityProfilePermissionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listSecurityProfilePermissionsAsync(array $args = [])
* @method \Aws\Result listSecurityProfiles(array $args = []) * @method \Aws\Result listSecurityProfiles(array $args = [])
@ -355,6 +447,12 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result listTaskTemplates(array $args = []) * @method \Aws\Result listTaskTemplates(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTaskTemplatesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTaskTemplatesAsync(array $args = [])
* @method \Aws\Result listTestCaseExecutionRecords(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTestCaseExecutionRecordsAsync(array $args = [])
* @method \Aws\Result listTestCaseExecutions(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTestCaseExecutionsAsync(array $args = [])
* @method \Aws\Result listTestCases(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTestCasesAsync(array $args = [])
* @method \Aws\Result listTrafficDistributionGroupUsers(array $args = []) * @method \Aws\Result listTrafficDistributionGroupUsers(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTrafficDistributionGroupUsersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTrafficDistributionGroupUsersAsync(array $args = [])
* @method \Aws\Result listTrafficDistributionGroups(array $args = []) * @method \Aws\Result listTrafficDistributionGroups(array $args = [])
@ -371,6 +469,12 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listViewVersionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listViewVersionsAsync(array $args = [])
* @method \Aws\Result listViews(array $args = []) * @method \Aws\Result listViews(array $args = [])
* @method \GuzzleHttp\Promise\Promise listViewsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listViewsAsync(array $args = [])
* @method \Aws\Result listWorkspaceMedia(array $args = [])
* @method \GuzzleHttp\Promise\Promise listWorkspaceMediaAsync(array $args = [])
* @method \Aws\Result listWorkspacePages(array $args = [])
* @method \GuzzleHttp\Promise\Promise listWorkspacePagesAsync(array $args = [])
* @method \Aws\Result listWorkspaces(array $args = [])
* @method \GuzzleHttp\Promise\Promise listWorkspacesAsync(array $args = [])
* @method \Aws\Result monitorContact(array $args = []) * @method \Aws\Result monitorContact(array $args = [])
* @method \GuzzleHttp\Promise\Promise monitorContactAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise monitorContactAsync(array $args = [])
* @method \Aws\Result pauseContact(array $args = []) * @method \Aws\Result pauseContact(array $args = [])
@ -389,14 +493,20 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise searchAgentStatusesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchAgentStatusesAsync(array $args = [])
* @method \Aws\Result searchAvailablePhoneNumbers(array $args = []) * @method \Aws\Result searchAvailablePhoneNumbers(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchAvailablePhoneNumbersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchAvailablePhoneNumbersAsync(array $args = [])
* @method \Aws\Result searchContactEvaluations(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchContactEvaluationsAsync(array $args = [])
* @method \Aws\Result searchContactFlowModules(array $args = []) * @method \Aws\Result searchContactFlowModules(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchContactFlowModulesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchContactFlowModulesAsync(array $args = [])
* @method \Aws\Result searchContactFlows(array $args = []) * @method \Aws\Result searchContactFlows(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchContactFlowsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchContactFlowsAsync(array $args = [])
* @method \Aws\Result searchContacts(array $args = []) * @method \Aws\Result searchContacts(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchContactsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchContactsAsync(array $args = [])
* @method \Aws\Result searchDataTables(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchDataTablesAsync(array $args = [])
* @method \Aws\Result searchEmailAddresses(array $args = []) * @method \Aws\Result searchEmailAddresses(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchEmailAddressesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchEmailAddressesAsync(array $args = [])
* @method \Aws\Result searchEvaluationForms(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchEvaluationFormsAsync(array $args = [])
* @method \Aws\Result searchHoursOfOperationOverrides(array $args = []) * @method \Aws\Result searchHoursOfOperationOverrides(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchHoursOfOperationOverridesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchHoursOfOperationOverridesAsync(array $args = [])
* @method \Aws\Result searchHoursOfOperations(array $args = []) * @method \Aws\Result searchHoursOfOperations(array $args = [])
@ -415,12 +525,20 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise searchRoutingProfilesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchRoutingProfilesAsync(array $args = [])
* @method \Aws\Result searchSecurityProfiles(array $args = []) * @method \Aws\Result searchSecurityProfiles(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchSecurityProfilesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchSecurityProfilesAsync(array $args = [])
* @method \Aws\Result searchTestCases(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchTestCasesAsync(array $args = [])
* @method \Aws\Result searchUserHierarchyGroups(array $args = []) * @method \Aws\Result searchUserHierarchyGroups(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchUserHierarchyGroupsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchUserHierarchyGroupsAsync(array $args = [])
* @method \Aws\Result searchUsers(array $args = []) * @method \Aws\Result searchUsers(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchUsersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchUsersAsync(array $args = [])
* @method \Aws\Result searchViews(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchViewsAsync(array $args = [])
* @method \Aws\Result searchVocabularies(array $args = []) * @method \Aws\Result searchVocabularies(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchVocabulariesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchVocabulariesAsync(array $args = [])
* @method \Aws\Result searchWorkspaceAssociations(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchWorkspaceAssociationsAsync(array $args = [])
* @method \Aws\Result searchWorkspaces(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchWorkspacesAsync(array $args = [])
* @method \Aws\Result sendChatIntegrationEvent(array $args = []) * @method \Aws\Result sendChatIntegrationEvent(array $args = [])
* @method \GuzzleHttp\Promise\Promise sendChatIntegrationEventAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise sendChatIntegrationEventAsync(array $args = [])
* @method \Aws\Result sendOutboundEmail(array $args = []) * @method \Aws\Result sendOutboundEmail(array $args = [])
@ -431,6 +549,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise startChatContactAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startChatContactAsync(array $args = [])
* @method \Aws\Result startContactEvaluation(array $args = []) * @method \Aws\Result startContactEvaluation(array $args = [])
* @method \GuzzleHttp\Promise\Promise startContactEvaluationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startContactEvaluationAsync(array $args = [])
* @method \Aws\Result startContactMediaProcessing(array $args = [])
* @method \GuzzleHttp\Promise\Promise startContactMediaProcessingAsync(array $args = [])
* @method \Aws\Result startContactRecording(array $args = []) * @method \Aws\Result startContactRecording(array $args = [])
* @method \GuzzleHttp\Promise\Promise startContactRecordingAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startContactRecordingAsync(array $args = [])
* @method \Aws\Result startContactStreaming(array $args = []) * @method \Aws\Result startContactStreaming(array $args = [])
@ -447,14 +567,20 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise startScreenSharingAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startScreenSharingAsync(array $args = [])
* @method \Aws\Result startTaskContact(array $args = []) * @method \Aws\Result startTaskContact(array $args = [])
* @method \GuzzleHttp\Promise\Promise startTaskContactAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startTaskContactAsync(array $args = [])
* @method \Aws\Result startTestCaseExecution(array $args = [])
* @method \GuzzleHttp\Promise\Promise startTestCaseExecutionAsync(array $args = [])
* @method \Aws\Result startWebRTCContact(array $args = []) * @method \Aws\Result startWebRTCContact(array $args = [])
* @method \GuzzleHttp\Promise\Promise startWebRTCContactAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startWebRTCContactAsync(array $args = [])
* @method \Aws\Result stopContact(array $args = []) * @method \Aws\Result stopContact(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopContactAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopContactAsync(array $args = [])
* @method \Aws\Result stopContactMediaProcessing(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopContactMediaProcessingAsync(array $args = [])
* @method \Aws\Result stopContactRecording(array $args = []) * @method \Aws\Result stopContactRecording(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopContactRecordingAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopContactRecordingAsync(array $args = [])
* @method \Aws\Result stopContactStreaming(array $args = []) * @method \Aws\Result stopContactStreaming(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopContactStreamingAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopContactStreamingAsync(array $args = [])
* @method \Aws\Result stopTestCaseExecution(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopTestCaseExecutionAsync(array $args = [])
* @method \Aws\Result submitContactEvaluation(array $args = []) * @method \Aws\Result submitContactEvaluation(array $args = [])
* @method \GuzzleHttp\Promise\Promise submitContactEvaluationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise submitContactEvaluationAsync(array $args = [])
* @method \Aws\Result suspendContactRecording(array $args = []) * @method \Aws\Result suspendContactRecording(array $args = [])
@ -483,6 +609,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateContactFlowContentAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateContactFlowContentAsync(array $args = [])
* @method \Aws\Result updateContactFlowMetadata(array $args = []) * @method \Aws\Result updateContactFlowMetadata(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateContactFlowMetadataAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateContactFlowMetadataAsync(array $args = [])
* @method \Aws\Result updateContactFlowModuleAlias(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateContactFlowModuleAliasAsync(array $args = [])
* @method \Aws\Result updateContactFlowModuleContent(array $args = []) * @method \Aws\Result updateContactFlowModuleContent(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateContactFlowModuleContentAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateContactFlowModuleContentAsync(array $args = [])
* @method \Aws\Result updateContactFlowModuleMetadata(array $args = []) * @method \Aws\Result updateContactFlowModuleMetadata(array $args = [])
@ -493,6 +621,12 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateContactRoutingDataAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateContactRoutingDataAsync(array $args = [])
* @method \Aws\Result updateContactSchedule(array $args = []) * @method \Aws\Result updateContactSchedule(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateContactScheduleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateContactScheduleAsync(array $args = [])
* @method \Aws\Result updateDataTableAttribute(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateDataTableAttributeAsync(array $args = [])
* @method \Aws\Result updateDataTableMetadata(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateDataTableMetadataAsync(array $args = [])
* @method \Aws\Result updateDataTablePrimaryValues(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateDataTablePrimaryValuesAsync(array $args = [])
* @method \Aws\Result updateEmailAddressMetadata(array $args = []) * @method \Aws\Result updateEmailAddressMetadata(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateEmailAddressMetadataAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateEmailAddressMetadataAsync(array $args = [])
* @method \Aws\Result updateEvaluationForm(array $args = []) * @method \Aws\Result updateEvaluationForm(array $args = [])
@ -549,6 +683,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateSecurityProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateSecurityProfileAsync(array $args = [])
* @method \Aws\Result updateTaskTemplate(array $args = []) * @method \Aws\Result updateTaskTemplate(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateTaskTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateTaskTemplateAsync(array $args = [])
* @method \Aws\Result updateTestCase(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateTestCaseAsync(array $args = [])
* @method \Aws\Result updateTrafficDistribution(array $args = []) * @method \Aws\Result updateTrafficDistribution(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateTrafficDistributionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateTrafficDistributionAsync(array $args = [])
* @method \Aws\Result updateUserHierarchy(array $args = []) * @method \Aws\Result updateUserHierarchy(array $args = [])
@ -571,5 +707,13 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateViewContentAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateViewContentAsync(array $args = [])
* @method \Aws\Result updateViewMetadata(array $args = []) * @method \Aws\Result updateViewMetadata(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateViewMetadataAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateViewMetadataAsync(array $args = [])
* @method \Aws\Result updateWorkspaceMetadata(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateWorkspaceMetadataAsync(array $args = [])
* @method \Aws\Result updateWorkspacePage(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateWorkspacePageAsync(array $args = [])
* @method \Aws\Result updateWorkspaceTheme(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateWorkspaceThemeAsync(array $args = [])
* @method \Aws\Result updateWorkspaceVisibility(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateWorkspaceVisibilityAsync(array $args = [])
*/ */
class ConnectClient extends AwsClient {} class ConnectClient extends AwsClient {}

View file

@ -69,6 +69,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listTemplatesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTemplatesAsync(array $args = [])
* @method \Aws\Result putCaseEventConfiguration(array $args = []) * @method \Aws\Result putCaseEventConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise putCaseEventConfigurationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putCaseEventConfigurationAsync(array $args = [])
* @method \Aws\Result searchAllRelatedItems(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchAllRelatedItemsAsync(array $args = [])
* @method \Aws\Result searchCases(array $args = []) * @method \Aws\Result searchCases(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchCasesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchCasesAsync(array $args = [])
* @method \Aws\Result searchRelatedItems(array $args = []) * @method \Aws\Result searchRelatedItems(array $args = [])

View file

@ -73,6 +73,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listCostAllocationTagsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listCostAllocationTagsAsync(array $args = [])
* @method \Aws\Result listCostCategoryDefinitions(array $args = []) * @method \Aws\Result listCostCategoryDefinitions(array $args = [])
* @method \GuzzleHttp\Promise\Promise listCostCategoryDefinitionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listCostCategoryDefinitionsAsync(array $args = [])
* @method \Aws\Result listCostCategoryResourceAssociations(array $args = [])
* @method \GuzzleHttp\Promise\Promise listCostCategoryResourceAssociationsAsync(array $args = [])
* @method \Aws\Result listSavingsPlansPurchaseRecommendationGeneration(array $args = []) * @method \Aws\Result listSavingsPlansPurchaseRecommendationGeneration(array $args = [])
* @method \GuzzleHttp\Promise\Promise listSavingsPlansPurchaseRecommendationGenerationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listSavingsPlansPurchaseRecommendationGenerationAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])

View file

@ -9,6 +9,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getPreferencesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getPreferencesAsync(array $args = [])
* @method \Aws\Result getRecommendation(array $args = []) * @method \Aws\Result getRecommendation(array $args = [])
* @method \GuzzleHttp\Promise\Promise getRecommendationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getRecommendationAsync(array $args = [])
* @method \Aws\Result listEfficiencyMetrics(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEfficiencyMetricsAsync(array $args = [])
* @method \Aws\Result listEnrollmentStatuses(array $args = []) * @method \Aws\Result listEnrollmentStatuses(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEnrollmentStatusesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listEnrollmentStatusesAsync(array $args = [])
* @method \Aws\Result listRecommendationSummaries(array $args = []) * @method \Aws\Result listRecommendationSummaries(array $args = [])

View file

@ -36,6 +36,7 @@ class AssumeRoleWithWebIdentityCredentialProvider
/** @var integer */ /** @var integer */
private $tokenFileReadAttempts; private $tokenFileReadAttempts;
/** @var string */ /** @var string */
private $source; private $source;
@ -72,15 +73,15 @@ class AssumeRoleWithWebIdentityCredentialProvider
$this->tokenFileReadAttempts = 0; $this->tokenFileReadAttempts = 0;
$this->session = $config['SessionName'] $this->session = $config['SessionName']
?? 'aws-sdk-php-' . round(microtime(true) * 1000); ?? 'aws-sdk-php-' . round(microtime(true) * 1000);
$region = $config['region'] ?? 'us-east-1';
if (isset($config['client'])) { if (isset($config['client'])) {
$this->client = $config['client']; $this->client = $config['client'];
} else { } else {
$this->client = new StsClient([ $region = $config['region']
'credentials' => false, ?? getEnv(CredentialProvider::ENV_REGION)
'region' => $region, ?: null;
'version' => 'latest'
]); $this->client = $this->createDefaultStsClient($region);
} }
$this->source = $config['source'] $this->source = $config['source']
@ -167,4 +168,34 @@ class AssumeRoleWithWebIdentityCredentialProvider
); );
}); });
} }
/**
* @param string|null $region
*
* @return StsClient
*/
private function createDefaultStsClient(
?string $region
): StsClient
{
if (empty($region)) {
$region = CredentialProvider::FALLBACK_REGION;
trigger_error(
'NOTICE: STS client created without explicit `region` configuration.' . PHP_EOL
. "Defaulting to {$region}. This fallback behavior may be removed." . PHP_EOL
. 'To avoid potential disruptions, configure a region using one of the following methods:' . PHP_EOL
. '(1) Pass `region` in the `$config` array when calling the provider,' . PHP_EOL
. '(2) Set the `AWS_REGION` environment variable.' . PHP_EOL
. 'OR provide an STS client in the `$config` array when creating the provider as `client`.' . PHP_EOL
. 'See: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/assume-role-with-web-identity-provider.html'
. PHP_EOL,
E_USER_NOTICE
);
}
return new StsClient([
'credentials' => false,
'region' => $region
]);
}
} }

View file

@ -43,15 +43,18 @@ use GuzzleHttp\Promise;
*/ */
class CredentialProvider class CredentialProvider
{ {
const ENV_ARN = 'AWS_ROLE_ARN'; public const ENV_ARN = 'AWS_ROLE_ARN';
const ENV_KEY = 'AWS_ACCESS_KEY_ID'; public const ENV_KEY = 'AWS_ACCESS_KEY_ID';
const ENV_PROFILE = 'AWS_PROFILE'; public const ENV_PROFILE = 'AWS_PROFILE';
const ENV_ROLE_SESSION_NAME = 'AWS_ROLE_SESSION_NAME'; public const ENV_ROLE_SESSION_NAME = 'AWS_ROLE_SESSION_NAME';
const ENV_SECRET = 'AWS_SECRET_ACCESS_KEY'; public const ENV_SECRET = 'AWS_SECRET_ACCESS_KEY';
const ENV_ACCOUNT_ID = 'AWS_ACCOUNT_ID'; public const ENV_ACCOUNT_ID = 'AWS_ACCOUNT_ID';
const ENV_SESSION = 'AWS_SESSION_TOKEN'; public const ENV_SESSION = 'AWS_SESSION_TOKEN';
const ENV_TOKEN_FILE = 'AWS_WEB_IDENTITY_TOKEN_FILE'; public const ENV_TOKEN_FILE = 'AWS_WEB_IDENTITY_TOKEN_FILE';
const ENV_SHARED_CREDENTIALS_FILE = 'AWS_SHARED_CREDENTIALS_FILE'; public const ENV_SHARED_CREDENTIALS_FILE = 'AWS_SHARED_CREDENTIALS_FILE';
public const ENV_CONFIG_FILE = 'AWS_CONFIG_FILE';
public const ENV_REGION = 'AWS_REGION';
public const FALLBACK_REGION = 'us-east-1';
public const REFRESH_WINDOW = 60; public const REFRESH_WINDOW = 60;
/** /**
@ -80,6 +83,7 @@ class CredentialProvider
$cacheable = [ $cacheable = [
'web_identity', 'web_identity',
'sso', 'sso',
'login',
'process_credentials', 'process_credentials',
'process_config', 'process_config',
'ecs', 'ecs',
@ -92,24 +96,24 @@ class CredentialProvider
'env' => self::env(), 'env' => self::env(),
'web_identity' => self::assumeRoleWithWebIdentityCredentialProvider($config), 'web_identity' => self::assumeRoleWithWebIdentityCredentialProvider($config),
]; ];
if ( if (!isset($config['use_aws_shared_config_files'])
!isset($config['use_aws_shared_config_files'])
|| $config['use_aws_shared_config_files'] !== false || $config['use_aws_shared_config_files'] !== false
) { ) {
$defaultChain['sso'] = self::sso( $defaultChain['sso'] = self::sso(
$profileName, $profileName,
self::getHomeDir() . '/.aws/config', self::getConfigFileName(),
$config $config
); );
$defaultChain['login'] = self::login($profileName, $config);
$defaultChain['process_credentials'] = self::process(); $defaultChain['process_credentials'] = self::process();
$defaultChain['ini'] = self::ini(); $defaultChain['ini'] = self::ini(null, null, $config);
$defaultChain['process_config'] = self::process( $defaultChain['process_config'] = self::process(
'profile ' . $profileName, 'profile ' . $profileName,
self::getHomeDir() . '/.aws/config' self::getConfigFileName()
); );
$defaultChain['ini_config'] = self::ini( $defaultChain['ini_config'] = self::ini(
'profile '. $profileName, 'profile '. $profileName,
self::getHomeDir() . '/.aws/config' self::getConfigFileName()
); );
} }
@ -337,11 +341,12 @@ class CredentialProvider
* *
* @return callable * @return callable
*/ */
public static function sso($ssoProfileName = 'default', public static function sso(
$ssoProfileName = 'default',
$filename = null, $filename = null,
$config = [] $config = []
) { ) {
$filename = $filename ?: (self::getHomeDir() . '/.aws/config'); $filename = $filename ?? self::getConfigFileName();
return function () use ($ssoProfileName, $filename, $config) { return function () use ($ssoProfileName, $filename, $config) {
if (!@is_readable($filename)) { if (!@is_readable($filename)) {
@ -487,17 +492,13 @@ class CredentialProvider
*/ */
public static function ini($profile = null, $filename = null, array $config = []) public static function ini($profile = null, $filename = null, array $config = [])
{ {
$filename = self::getFileName($filename); $filename = self::getCredentialsFileName($filename);
$profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default');
return function () use ($profile, $filename, $config) { return function () use ($profile, $filename, $config) {
$preferStaticCredentials = isset($config['preferStaticCredentials']) $preferStaticCredentials = $config['preferStaticCredentials'] ?? false;
? $config['preferStaticCredentials'] $disableAssumeRole = $config['disableAssumeRole'] ?? false;
: false; $stsClient = $config['stsClient'] ?? null;
$disableAssumeRole = isset($config['disableAssumeRole'])
? $config['disableAssumeRole']
: false;
$stsClient = isset($config['stsClient']) ? $config['stsClient'] : null;
if (!@is_readable($filename)) { if (!@is_readable($filename)) {
return self::reject("Cannot read credentials from $filename"); return self::reject("Cannot read credentials from $filename");
@ -581,7 +582,7 @@ class CredentialProvider
*/ */
public static function process($profile = null, $filename = null) public static function process($profile = null, $filename = null)
{ {
$filename = self::getFileName($filename); $filename = self::getCredentialsFileName($filename);
$profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default');
return function () use ($profile, $filename) { return function () use ($profile, $filename) {
@ -657,6 +658,41 @@ class CredentialProvider
}; };
} }
/**
* Login credential provider for AWS local development using console credentials
*
* @param string|null $profileName profile containing your console login session information
* @param array $config region used for refresh requests.
* pass `'region' => <your_region>` to configure a region,
* otherwise, provider construction falls back to AWS_REGION,
* then the profile specified for `login`
*
* @return callable
*/
public static function login(
?string $profileName = null,
array $config = [],
): callable
{
$resolvedProfile = $profileName ?? getenv(self::ENV_PROFILE) ?: 'default';
return static function () use ($resolvedProfile, $config) {
try {
$provider = new LoginCredentialProvider(
$resolvedProfile,
$config['region'] ?? null
);
} catch (\Exception $e) {
return self::reject(
"Failed to initialize login credential provider for profile '{$resolvedProfile}': "
. $e->getMessage()
);
}
return $provider();
};
}
/** /**
* Assumes role for profile that includes role_arn * Assumes role for profile that includes role_arn
* *
@ -670,13 +706,11 @@ class CredentialProvider
$config = [] $config = []
) { ) {
$roleProfile = $profiles[$profileName]; $roleProfile = $profiles[$profileName];
$roleArn = isset($roleProfile['role_arn']) ? $roleProfile['role_arn'] : ''; $roleArn = $roleProfile['role_arn'] ?? '';
$roleSessionName = isset($roleProfile['role_session_name']) $roleSessionName = $roleProfile['role_session_name']
? $roleProfile['role_session_name'] ?? 'aws-sdk-php-' . round(microtime(true) * 1000);
: 'aws-sdk-php-' . round(microtime(true) * 1000);
if ( if (empty($roleProfile['source_profile'])
empty($roleProfile['source_profile'])
== empty($roleProfile['credential_source']) == empty($roleProfile['credential_source'])
) { ) {
return self::reject("Either source_profile or credential_source must be set " . return self::reject("Either source_profile or credential_source must be set " .
@ -708,9 +742,6 @@ class CredentialProvider
} }
if (empty($stsClient)) { if (empty($stsClient)) {
$sourceRegion = isset($profiles[$sourceProfileName]['region'])
? $profiles[$sourceProfileName]['region']
: 'us-east-1';
$config['preferStaticCredentials'] = true; $config['preferStaticCredentials'] = true;
$sourceCredentials = null; $sourceCredentials = null;
if (!empty($roleProfile['source_profile'])){ if (!empty($roleProfile['source_profile'])){
@ -723,11 +754,13 @@ class CredentialProvider
$filename $filename
); );
} }
$stsClient = new StsClient([
'credentials' => $sourceCredentials, $region = $profiles[$sourceProfileName]['region']
'region' => $sourceRegion, ?? $config['region']
'version' => '2011-06-15', ?? getEnv(self::ENV_REGION)
]); ?: null;
$stsClient = self::createDefaultStsClient($sourceCredentials, $region);
} }
$result = $stsClient->assumeRole([ $result = $stsClient->assumeRole([
@ -747,7 +780,7 @@ class CredentialProvider
* *
* @return null|string * @return null|string
*/ */
private static function getHomeDir() public static function getHomeDir()
{ {
// On Linux/Unix-like systems, use the HOME environment variable // On Linux/Unix-like systems, use the HOME environment variable
if ($homeDir = getenv('HOME')) { if ($homeDir = getenv('HOME')) {
@ -764,7 +797,7 @@ class CredentialProvider
/** /**
* Gets profiles from specified $filename, or default ini files. * Gets profiles from specified $filename, or default ini files.
*/ */
private static function loadProfiles($filename) public static function loadProfiles($filename)
{ {
$profileData = \Aws\parse_ini_file($filename, true, INI_SCANNER_RAW); $profileData = \Aws\parse_ini_file($filename, true, INI_SCANNER_RAW);
@ -772,7 +805,7 @@ class CredentialProvider
if ($filename === self::getHomeDir() . '/.aws/credentials' if ($filename === self::getHomeDir() . '/.aws/credentials'
&& getenv('AWS_SDK_LOAD_NONDEFAULT_CONFIG') && getenv('AWS_SDK_LOAD_NONDEFAULT_CONFIG')
) { ) {
$configFilename = self::getHomeDir() . '/.aws/config'; $configFilename = self::getConfigFileName();
$configProfileData = \Aws\parse_ini_file($configFilename, true, INI_SCANNER_RAW); $configProfileData = \Aws\parse_ini_file($configFilename, true, INI_SCANNER_RAW);
foreach ($configProfileData as $name => $profile) { foreach ($configProfileData as $name => $profile) {
// standardize config profile names // standardize config profile names
@ -789,7 +822,8 @@ class CredentialProvider
/** /**
* Gets profiles from ~/.aws/credentials and ~/.aws/config ini files * Gets profiles from ~/.aws/credentials and ~/.aws/config ini files
*/ */
private static function loadDefaultProfiles() { private static function loadDefaultProfiles()
{
$profiles = []; $profiles = [];
$credFile = self::getHomeDir() . '/.aws/credentials'; $credFile = self::getHomeDir() . '/.aws/credentials';
$configFile = self::getHomeDir() . '/.aws/config'; $configFile = self::getHomeDir() . '/.aws/config';
@ -860,15 +894,32 @@ class CredentialProvider
} }
/** /**
* Locates shared configuration file by first checking for AWS_CONFIG,
* then falling back to the default location. Returns the path of the
* resolved configuration file.
*
* @return string
*/
public static function getConfigFileName(): string
{
return getenv(self::ENV_CONFIG_FILE) ?: self::getHomeDir() . '/.aws/config';
}
/**
* Locates credentials file by first checking for AWS_SHARED_CREDENTIALS_FILE,
* then falling back to the default location. Returns the path of the
* resolved credentials file.
*
* @param $filename * @param $filename
* @return string * @return string
*/ */
private static function getFileName($filename) public static function getCredentialsFileName($filename): string
{ {
if (!isset($filename)) { if (!isset($filename)) {
$filename = getenv(self::ENV_SHARED_CREDENTIALS_FILE) ?: $filename = getenv(self::ENV_SHARED_CREDENTIALS_FILE) ?:
(self::getHomeDir() . '/.aws/credentials'); (self::getHomeDir() . '/.aws/credentials');
} }
return $filename; return $filename;
} }
@ -1026,5 +1077,37 @@ class CredentialProvider
$ssoCredentials = $ssoResponse['roleCredentials']; $ssoCredentials = $ssoResponse['roleCredentials'];
return $ssoCredentials; return $ssoCredentials;
} }
/**
* @param CredentialsInterface $credentials
* @param string|null $region
*
* @return StsClient
*/
private static function createDefaultStsClient(
CredentialsInterface|callable $credentials,
?string $region
): StsClient
{
if (empty($region)) {
$region = self::FALLBACK_REGION;
trigger_error(
'NOTICE: STS client created without explicit `region` configuration.' . PHP_EOL
. "Defaulting to `{$region}`. This fallback behavior may be removed." . PHP_EOL
. 'To avoid potential disruptions, configure a `region` using one of the following methods:' . PHP_EOL
. '(1) Add `region` to your source profile in ~/.aws/credentials,' . PHP_EOL
. '(2) Pass `region` in the `$config` array when calling the provider,' . PHP_EOL
. '(3) Set the `AWS_REGION` environment variable.' . PHP_EOL
. 'See: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials_assume_role.html#assume-role-with-profile'
. PHP_EOL,
E_USER_NOTICE
);
}
return new StsClient([
'credentials' => $credentials,
'region' => $region
]);
}
} }

View file

@ -19,4 +19,5 @@ final class CredentialSources
const PROFILE_SSO = 'profile_sso'; const PROFILE_SSO = 'profile_sso';
const PROFILE_SSO_LEGACY = 'profile_sso_legacy'; const PROFILE_SSO_LEGACY = 'profile_sso_legacy';
const PROFILE_PROCESS = 'profile_process'; const PROFILE_PROCESS = 'profile_process';
const PROFILE_LOGIN = 'profile_login';
} }

View file

@ -0,0 +1,527 @@
<?php
namespace Aws\Credentials;
use Aws\Configuration\ConfigurationResolver;
use Aws\Exception\CredentialsException;
use Aws\Signin\SigninClient;
use Aws\Signin\Exception\SigninException;
use GuzzleHttp\Promise;
/**
* Credential provider for login using console credentials
*/
final class LoginCredentialProvider
{
private const EXT_OPENSSL = 'openssl';
private const DEFAULT_REFRESH_THRESHOLD = 180; // 3 minutes
private const ENV_CACHE_DIRECTORY = 'AWS_LOGIN_CACHE_DIRECTORY';
private const DEFAULT_CACHE_DIRECTORY = '/.aws/login/cache';
private const REAUTHENTICATE_MSG = ' Please reauthenticate using `aws login`.';
private const PROFILE_DEFAULT = 'default';
private const PROFILE_SECONDARY = 'profile ';
private const GRANT_TYPE = 'refresh_token';
private const REQUEST_KEY_GRANT_TYPE = 'grantType';
private const REQUEST_KEY_CLIENT_ID = 'clientId';
private const REQUEST_KEY_REFRESH_TOKEN = 'refreshToken';
private const REQUEST_KEY_TOKEN_INPUT = 'tokenInput';
private const RESULT_TOKEN_OUTPUT = 'tokenOutput';
private const RESULT_EXPIRES_IN = 'expiresIn';
private const CLIENT_SIGNATURE_DPOP = 'dpop';
private const KEY_CLIENT_SIGNATURE_VERSION = 'signature_version';
private const KEY_CLIENT_REGION = 'region';
private const KEY_CLIENT_CREDENTIALS = 'credentials';
private const KEY_PROFILE_LOGIN_SESSION = 'login_session';
private const KEY_ACCESS_TOKEN = 'accessToken';
private const KEY_DPOP_KEY = 'dpopKey';
private const KEY_ACCESS_KEY_ID = 'accessKeyId';
private const KEY_SECRET_ACCESS_KEY = 'secretAccessKey';
private const KEY_SESSION_TOKEN = 'sessionToken';
private const KEY_ACCOUNT_ID = 'accountId';
private const KEY_EXPIRES_AT = 'expiresAt';
private const REQUIRED_CACHE_KEYS = [
self::KEY_ACCESS_TOKEN,
self::REQUEST_KEY_CLIENT_ID,
self::REQUEST_KEY_REFRESH_TOKEN,
self::KEY_DPOP_KEY
];
private const REQUIRED_ACCESS_TOKEN_KEYS = [
self::KEY_ACCESS_KEY_ID,
self::KEY_SECRET_ACCESS_KEY,
self::KEY_SESSION_TOKEN,
self::KEY_ACCOUNT_ID,
self::KEY_EXPIRES_AT
];
/** @var string The profile name used for login session configuration */
private string $profileName;
/** @var SigninClient The Signin service client used for token refresh operations */
private SigninClient $client;
/** @var string The file path to the cached token location */
private string $tokenLocation;
/** @var array|null The cached token data including access token, refresh token, and DPoP key */
private ?array $token = null;
/**
* @param string $profileName Profile containing your console login session information
* @param string|null $region Region used for refresh requests. If not provided,
* attempts will be made to resolve a region using
* `AWS_REGION`, then the profile specified for `login`.
*/
public function __construct(
string $profileName,
?string $region = null
) {
if (!extension_loaded(self::EXT_OPENSSL)) {
throw new \RuntimeException(
'The `openssl` extension is required to use Login credentials. '
. 'Please install or enable the `openssl` extension.'
);
}
$this->profileName = $profileName;
$this->client = $this->createSigninClient($profileName, $region);
$this->tokenLocation = $this->resolveTokenLocation($profileName);
}
/**
* Returns a promise that resolves to AWS credentials
*
* This method loads the cached token, refreshes it if necessary,
* and returns AWS credentials sourced from the access token.
*
* @return Promise\PromiseInterface A promise that resolves to a Credentials object
* @throws CredentialsException If re-authentication is required or credentials cannot be loaded
* @throws SigninException If the token refresh fails with a SigninException
*/
public function __invoke(): Promise\PromiseInterface
{
return Promise\Coroutine::of(function () {
$this->token ??= $this->loadToken();
$credentials = $this->token[self::KEY_ACCESS_TOKEN];
if ($this->shouldRefresh($credentials)) {
try {
$credentials = yield from $this->refresh($credentials);
} catch (CredentialsException $e) {
// For specific re-authentication errors, re-throw
throw $e;
} catch (SigninException $e) {
// For SigninException not handled by refresh(), re-throw
throw new CredentialsException(
'Unable to refresh login credentials: ' . $e->getAwsErrorMessage(),
$e->getCode(),
$e
);
} catch (\Exception $e) {
// For other refresh failures, log and continue with existing token
trigger_error(
'Continuing with existing token after refresh failure: ' . $e->getMessage(),
E_USER_NOTICE
);
}
}
yield $credentials;
});
}
/**
* Refreshes the access token using the refresh token and returns new credentials,
* or, if refreshed from another source, returns the externally refreshed credentials.
*
* @param Credentials $currentCredentials The current credentials to refresh
*
* @return \Generator Generator that yields and returns refreshed credentials
* @throws CredentialsException If re-authentication is required due to expired or changed credentials
* @throws SigninException If the token refresh fails with a SigninException
* @throws \Exception For unexpected errors during refresh
*/
private function refresh(Credentials $currentCredentials): \Generator
{
// Check for external refresh
if ($refreshedToken = $this->getExternalRefresh($currentCredentials)) {
$this->token = $refreshedToken;
return $refreshedToken[self::KEY_ACCESS_TOKEN];
}
try {
$refreshed = (yield $this->client->createOAuth2TokenAsync([
self::REQUEST_KEY_TOKEN_INPUT => [
self::REQUEST_KEY_CLIENT_ID => $this->token[self::REQUEST_KEY_CLIENT_ID],
self::REQUEST_KEY_GRANT_TYPE => self::GRANT_TYPE,
self::REQUEST_KEY_REFRESH_TOKEN => $this->token[self::REQUEST_KEY_REFRESH_TOKEN]
],
self::KEY_DPOP_KEY => $this->token[self::KEY_DPOP_KEY]
]))->get(self::RESULT_TOKEN_OUTPUT);
$newCredentials = self::createCredentials(
$refreshed[self::KEY_ACCESS_TOKEN],
time() + $refreshed[self::RESULT_EXPIRES_IN],
$currentCredentials->getAccountId()
);
$this->token[self::KEY_ACCESS_TOKEN] = $newCredentials;
$this->token[self::REQUEST_KEY_REFRESH_TOKEN] = $refreshed[self::REQUEST_KEY_REFRESH_TOKEN];
} catch (\Exception $e) {
throw $this->handleRefreshException($e);
}
try {
$this->writeToCache();
} catch (\JsonException|\RuntimeException $e) {
trigger_error(
'Failed to update credential cache during refresh: ' . $e->getMessage()
. '. Using refreshed credentials in memory.',
E_USER_NOTICE
);
}
return $newCredentials;
}
/**
* Gets externally refreshed token if token has been refreshed from another source.
* If the new token does not need refreshing, returns it.
*
* @param Credentials $currentCredentials Current credentials to compare against
* @return array|null Returns the updated token array if externally refreshed, null otherwise
*/
private function getExternalRefresh(Credentials $currentCredentials): ?array
{
try {
$latestToken = $this->loadToken();
$latestCredentials = $latestToken[self::KEY_ACCESS_TOKEN];
// Refresh token must be different
if ($latestToken[self::REQUEST_KEY_REFRESH_TOKEN]
=== $this->token[self::REQUEST_KEY_REFRESH_TOKEN]
) {
return null;
}
// Expiration must be newer
if ($latestCredentials->getExpiration()
<= $currentCredentials->getExpiration()
) {
return null;
}
// New token should not need refresh itself
if ($this->shouldRefresh($latestCredentials)) {
return null;
}
return $latestToken;
} catch (\Exception $e) {
return null;
}
}
/**
* Writes the updated access token and refresh token to the cache file
*
* @throws \JsonException|\RuntimeException
*/
private function writeToCache(): void
{
$credentials = $this->token[self::KEY_ACCESS_TOKEN];
$updates = [
self::KEY_ACCESS_TOKEN => [
self::KEY_ACCESS_KEY_ID => $credentials->getAccessKeyId(),
self::KEY_SECRET_ACCESS_KEY => $credentials->getSecretKey(),
self::KEY_SESSION_TOKEN => $credentials->getSecurityToken(),
self::KEY_ACCOUNT_ID => $credentials->getAccountId(),
self::KEY_EXPIRES_AT => gmdate('Y-m-d\TH:i:s\Z', $credentials->getExpiration())
],
self::REQUEST_KEY_REFRESH_TOKEN => $this->token[self::REQUEST_KEY_REFRESH_TOKEN]
];
$existing = json_decode(
file_get_contents($this->tokenLocation), true, 512, JSON_THROW_ON_ERROR
);
$merged = array_merge($existing, $updates);
$result = file_put_contents(
$this->tokenLocation,
json_encode($merged, JSON_THROW_ON_ERROR),
LOCK_EX
);
if (!$result) {
throw new \RuntimeException('Failed to write cache file');
}
}
/**
* Loads and validates the token from the cache file
*
* @return array The loaded token data with Credentials object, DPoP key, and other fields
* @throws CredentialsException If the cache file is invalid, missing required keys,
* or DPoP key cannot be loaded
*/
private function loadToken(): array
{
try {
$cached = json_decode(
file_get_contents($this->tokenLocation),
true, 512, JSON_THROW_ON_ERROR
);
} catch (\JsonException $e) {
throw new CredentialsException(
'Invalid JSON in cache file: ' . $e->getMessage(),
0,
$e
);
}
if (self::hasAllRequiredKeys($cached, self::REQUIRED_CACHE_KEYS)
&& self::hasAllRequiredKeys(
$cached[self::KEY_ACCESS_TOKEN] ?? [],
self::REQUIRED_ACCESS_TOKEN_KEYS
)
) {
// Convert expiresAt to Unix timestamp
$expiresAt = strtotime($cached[self::KEY_ACCESS_TOKEN][self::KEY_EXPIRES_AT]);
if ($expiresAt === false) {
throw new CredentialsException(
'Invalid expiration date format in cached token `'
. self::KEY_EXPIRES_AT . '` field.' . self::REAUTHENTICATE_MSG
);
}
$cached[self::KEY_ACCESS_TOKEN] = self::createCredentials(
$cached[self::KEY_ACCESS_TOKEN],
$expiresAt,
$cached[self::KEY_ACCESS_TOKEN][self::KEY_ACCOUNT_ID]
);
// Load DPoP key
$cached[self::KEY_DPOP_KEY] = openssl_pkey_get_private($cached[self::KEY_DPOP_KEY]);
if ($cached[self::KEY_DPOP_KEY] === false) {
$error = openssl_error_string();
throw new CredentialsException(
'Failed to load DPoP private key from cached token for profile '
. "{$this->profileName}: " . ($error ? ": {$error}" : '.')
. self::REAUTHENTICATE_MSG
);
}
return $cached;
}
throw new CredentialsException(
'Missing required keys in cached token for profile '
. $this->profileName . '.' . self::REAUTHENTICATE_MSG
);
}
/**
* @param Credentials $credentials The credentials to check for expiration
*
* @return bool True if the token expires within the refresh threshold
*/
private function shouldRefresh(Credentials $credentials): bool
{
return ($credentials->getExpiration() - time()) <= self::DEFAULT_REFRESH_THRESHOLD;
}
/**
* Handles exceptions thrown during token refresh
*
* @param \Exception $e The exception thrown during refresh
*
* @return \Exception The exception to be thrown (either transformed or original)
*/
private function handleRefreshException(\Exception $e): \Exception
{
if ($e instanceof SigninException) {
trigger_error(
'Failed to refresh login credentials: ' . $e->getAwsErrorMessage(),
E_USER_NOTICE
);
if ($e->getAwsErrorCode() === 'AccessDeniedException') {
$error = strtolower($e->get('error'));
switch ($error) {
case 'token_expired':
return new CredentialsException(
'Your session has expired.' . self::REAUTHENTICATE_MSG,
0,
$e
);
case 'user_credentials_changed':
return new CredentialsException(
'Unable to refresh credentials because of a change in your password. '
. 'Please reauthenticate with your new password.',
0,
$e
);
case 'insufficient_permissions':
return new CredentialsException(
'Unable to refresh credentials due to insufficient permissions. '
. 'You may be missing permission for the `CreateOAuth2Token` action.',
0,
$e
);
}
}
return $e;
}
// For all other exceptions
trigger_error(
'Unexpected error refreshing login credentials: ' . $e->getMessage(),
E_USER_NOTICE
);
return $e;
}
/**
* Resolves the cache file location for the given profile
*
* @param string $profileName The profile name to resolve the token location for
*
* @return string The full path to the cache file
* @throws CredentialsException If the profile doesn't exist, lacks login_session,
* or cache file is not readable
*/
private function resolveTokenLocation(string $profileName): string
{
$configFile = CredentialProvider::getConfigFileName();
if (!is_readable($configFile)) {
throw new CredentialsException(
'Unable to load configuration file at ' . $configFile
. '. Please ensure the file exists at the specified location.'
);
}
// Ensure profile and session are set
$profiles = CredentialProvider::loadProfiles($configFile);
if ($profileName === self::PROFILE_DEFAULT) {
$profileData = $profiles[self::PROFILE_DEFAULT] ?? null;
} elseif (str_starts_with($profileName, self::PROFILE_SECONDARY)) {
$profileData = $profiles[$profileName] ?? null;
} else {
// Try without prefix first, then with prefix
$profileData = $profiles[$profileName]
?? $profiles[self::PROFILE_SECONDARY . $profileName]
?? null;
}
if (!$profileData) {
throw new CredentialsException(
"Profile '{$profileName}' does not exist. "
. "Please ensure the specified profile is set at {$configFile}."
);
}
if (empty($session = $profileData[self::KEY_PROFILE_LOGIN_SESSION] ?? null)) {
throw new CredentialsException(
"Profile '{$profileName}' did not contain a "
. self::KEY_PROFILE_LOGIN_SESSION . " value. "
. 're-authentication using `aws login` may be needed.'
);
}
// Resolve location and ensure it exists
$cacheDirectory = getenv(self::ENV_CACHE_DIRECTORY)
?: CredentialProvider::getHomeDir() . self::DEFAULT_CACHE_DIRECTORY;
$cacheFile = $cacheDirectory . DIRECTORY_SEPARATOR . hash('sha256', trim($session)) . '.json';
if (!@is_readable($cacheFile)) {
throw new CredentialsException(
"Failed to load cached credentials for profile "
. "'{$profileName}'." . self::REAUTHENTICATE_MSG
);
}
return $cacheFile;
}
/**
* Creates a SigninClient configured for DPoP authentication
*
* @param string $profile
* @param string|null $region The AWS region for the Signin service
*
* @return SigninClient A configured SigninClient instance with DPoP signature version
*/
private function createSigninClient(string $profile, ?string $region): SigninClient
{
$resolvedRegion = $region
?? ConfigurationResolver::env(self::KEY_CLIENT_REGION)
?? ConfigurationResolver::ini(self::KEY_CLIENT_REGION, 'string', $profile)
?? ConfigurationResolver::ini(
self::KEY_CLIENT_REGION,
'string',
self::PROFILE_SECONDARY . $profile
);
if (empty($resolvedRegion)) {
throw new CredentialsException(
'Unable to determine region for the Sign-In service client '
. ' used for refreshing Login credentials. You can provide a region in-code '
. 'when constructing the provider, by setting the AWS_REGION environment variable'
. ', or by setting a `region` in your specified profile.'
);
}
return new SigninClient([
self::KEY_CLIENT_REGION => $resolvedRegion,
self::KEY_CLIENT_SIGNATURE_VERSION => self::CLIENT_SIGNATURE_DPOP,
self::KEY_CLIENT_CREDENTIALS => false
]);
}
/**
* Creates a Credentials object from token data
*
* @param array $tokenData The token data containing access key, secret, and session token
* @param int $expiration Unix timestamp for credential expiration
* @param string $accountId The AWS account ID
*
* @return Credentials The created Credentials object
*/
private static function createCredentials(
array $tokenData,
int $expiration,
string $accountId
): Credentials
{
return new Credentials(
$tokenData[self::KEY_ACCESS_KEY_ID],
$tokenData[self::KEY_SECRET_ACCESS_KEY],
$tokenData[self::KEY_SESSION_TOKEN],
$expiration,
$accountId,
CredentialSources::PROFILE_LOGIN
);
}
/**
* Checks if all required keys are present and non-empty in the data array
*
* @param array $data The data array to check
* @param array $requiredKeys The list of keys that must be present and non-empty
*
* @return bool True if all required keys are present and non-empty, false otherwise
*/
private static function hasAllRequiredKeys(
array $data,
array $requiredKeys
): bool
{
foreach ($requiredKeys as $key) {
if (empty($data[$key])) {
return false;
}
}
return true;
}
}

View file

@ -9,6 +9,10 @@ use GuzzleHttp\Psr7\Stream;
*/ */
abstract class AbstractCryptoClientV2 abstract class AbstractCryptoClientV2
{ {
const KEY_COMMITMENT_POLICIES = [
'FORBID_ENCRYPT_ALLOW_DECRYPT'
];
public static $supportedCiphers = ['gcm']; public static $supportedCiphers = ['gcm'];
public static $supportedKeyWraps = [ public static $supportedKeyWraps = [
@ -19,6 +23,18 @@ abstract class AbstractCryptoClientV2
public static $legacySecurityProfiles = ['V2_AND_LEGACY']; public static $legacySecurityProfiles = ['V2_AND_LEGACY'];
/**
* Returns if the passed policy name is supported for encryption by the SDK.
*
* @param string $policy The name of a key commitment policy to verify is registered.
*
* @return bool If the key commitment policy passed is in our supported list.
*/
public static function isSupportedKeyCommitmentPolicy(string $policy): bool
{
return in_array($policy, self::KEY_COMMITMENT_POLICIES, strict: true);
}
/** /**
* Returns if the passed cipher name is supported for encryption by the SDK. * Returns if the passed cipher name is supported for encryption by the SDK.
* *

View file

@ -0,0 +1,151 @@
<?php
namespace Aws\Crypto;
use Aws\Crypto\Cipher\CipherMethod;
use GuzzleHttp\Psr7\AppendStream;
use GuzzleHttp\Psr7\Stream;
/**
* @internal
*/
abstract class AbstractCryptoClientV3
{
const SUPPORTED_SECURITY_PROFILES = ['V3', 'V3_AND_LEGACY'];
const LEGACY_SECURITY_PROFILES = ['V3_AND_LEGACY'];
const KEY_COMMITMENT_POLICIES = [
'FORBID_ENCRYPT_ALLOW_DECRYPT',
'REQUIRE_ENCRYPT_ALLOW_DECRYPT',
'REQUIRE_ENCRYPT_REQUIRE_DECRYPT'
];
public static array $supportedCiphers = ['gcm'];
public static array $supportedKeyWraps = [
KmsMaterialsProviderV3::WRAP_ALGORITHM_NAME
];
/**
* Returns if the passed policy name is supported for encryption by the SDK.
*
* @param string $policy The name of a key commitment policy to verify is registered.
*
* @return bool If the key commitment policy passed is in our supported list.
*/
public static function isSupportedKeyCommitmentPolicy(string $policy): bool
{
return in_array($policy, AbstractCryptoClientV3::KEY_COMMITMENT_POLICIES, strict: true);
}
/**
* Returns if the passed cipher name is supported for encryption by the SDK.
*
* @param string $cipherName The name of a cipher to verify is registered.
*
* @return bool If the cipher passed is in our supported list.
*/
public static function isSupportedCipher(string $cipherName): bool
{
return in_array($cipherName, self::$supportedCiphers, true);
}
/**
* Returns an identifier recognizable by `openssl_*` functions, such as
* `aes-256-gcm`
*
* @param string $cipherName Name of the cipher being used for encrypting
* or decrypting.
* @param int $keySize Size of the encryption key, in bits, that will be
* used.
*
* @return string
*/
abstract protected function getCipherOpenSslName(
$cipherName,
$keySize
);
/**
* Constructs a CipherMethod for the given name, initialized with the other
* data passed for use in encrypting or decrypting.
*
* @param string $cipherName Name of the cipher to generate for encrypting.
* @param string $iv Base Initialization Vector for the cipher.
* @param int $keySize Size of the encryption key, in bits, that will be
* used.
*
* @return CipherMethod
*
* @internal
*/
abstract protected function buildCipherMethod(
$cipherName,
$iv,
$keySize
);
/**
* Performs a reverse lookup to get the openssl_* cipher name from the
* AESName passed in from the MetadataEnvelope.
*
* @param string $aesName
*
* @return string
*
* @internal
*/
abstract protected function getCipherFromAesName($aesName);
/**
* Dependency to provide an interface for building an encryption stream for
* data given cipher details, metadata, and materials to do so.
*
* @param Stream $plaintext Plain-text data to be encrypted using the
* materials, algorithm, and data provided.
* @param AlgorithmSuite $algorithmSuite AlgorithmSuite for use in encryption.
* @param array $options Options for use in encryption, including cipher
* options, and encryption context.
* @param MaterialsProviderV3 $provider A provider to supply and encrypt
* materials used in encryption.
* @param MetadataEnvelope $envelope A storage envelope for encryption
* metadata to be added to.
*
* @return AppendStream
*
* @internal
*/
abstract public function encrypt(
Stream $plaintext,
AlgorithmSuite $algorithmSuite,
array $options,
MaterialsProviderV3 $provider,
MetadataEnvelope $envelope
): AppendStream;
/**
* Dependency to provide an interface for building a decryption stream for
* cipher text given metadata and materials to do so.
*
* @param string $cipherText Plain-text data to be decrypted using the
* materials, algorithm, and data provided.
* @param MaterialsProviderInterface $provider A provider to supply and encrypt
* materials used in encryption.
* @param MetadataEnvelope $envelope A storage envelope for encryption
* metadata to be read from.
* @param string $commitmentPolicy Commitment Policy to use for decrypting objects.
* @param array $options Options used for decryption.
*
* @return AesStreamInterface
*
* @internal
*/
abstract public function decrypt(
string $cipherText,
MaterialsProviderInterfaceV3 $provider,
MetadataEnvelope $envelope,
string $commitmentPolicy,
array $options = []
): AesStreamInterface;
}

View file

@ -0,0 +1,26 @@
<?php
namespace Aws\Crypto;
class AlgorithmConstants
{
/**
* The maximum number of 16-byte blocks that can be encrypted with a
* GCM cipher. Note the maximum bit-length of the plaintext is (2^39 - 256),
* which translates to a maximum byte-length of (2^36 - 32), which in turn
* translates to a maximum block-length of (2^32 - 2).
*
* Reference: NIST Special Publication 800-38D.
* @link http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf
*/
public const GCM_MAX_CONTENT_LENGTH_BITS = (1 << 39) - 256;
/**
* The Maximum length of the content that can be encrypted in CBC mode.
*/
public const CBC_MAX_CONTENT_LENGTH_BYTES = 1 << 55;
/**
* The maximum number of bytes that can be securely encrypted per a single key using AES/CTR.
*/
public const CTR_MAX_CONTENT_LENGTH_BYTES = -1;
}

View file

@ -0,0 +1,227 @@
<?php
namespace Aws\Crypto;
use Aws\S3\Crypto\S3EncryptionClientV3;
enum AlgorithmSuite: int
{
case ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY = 0x0073;
case ALG_AES_256_GCM_IV12_TAG16_NO_KDF = 0x0072;
case ALG_AES_256_CBC_IV16_NO_KDF = 0x0070;
public function getId(): int
{
return $this->value;
}
public function isLegacy(): bool
{
return match ($this) {
self::ALG_AES_256_CBC_IV16_NO_KDF => true,
default => false,
};
}
public function isKeyCommitting(): bool
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => true,
default => false,
};
}
public function getDataKeyAlgorithm(): string
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF,
self::ALG_AES_256_CBC_IV16_NO_KDF => "AES",
};
}
public function getDataKeyLengthBits(): string
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF,
self::ALG_AES_256_CBC_IV16_NO_KDF => "256",
};
}
public function getCipherName(): string
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => "gcm",
self::ALG_AES_256_CBC_IV16_NO_KDF => "cbc",
};
}
public function getCipherBlockSizeBits(): int
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF,
self::ALG_AES_256_CBC_IV16_NO_KDF => 128,
};
}
public function getCipherBlockSizeBytes(): int
{
return $this->getCipherBlockSizeBits() / 8;
}
public function getIvLengthBits(): int
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => 96,
self::ALG_AES_256_CBC_IV16_NO_KDF => 128,
};
}
public function getIvLengthBytes(): int
{
return $this->getIvLengthBits() / 8;
}
public function getCipherTagLengthBits(): int
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => 128,
self::ALG_AES_256_CBC_IV16_NO_KDF => 0,
};
}
public function getCipherTagLengthInBytes(): int
{
return $this->getCipherTagLengthBits() / 8;
}
public function getCipherMaxContentLengthBits(): int
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => AlgorithmConstants::GCM_MAX_CONTENT_LENGTH_BITS,
self::ALG_AES_256_CBC_IV16_NO_KDF => AlgorithmConstants::CBC_MAX_CONTENT_LENGTH_BYTES,
};
}
public function getCipherMaxContentLengthBytes(): int
{
return $this->getCipherMaxContentLengthBits() / 8;
}
public function getHashingAlgorithm(): string
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => "sha512",
default => "",
};
}
public function getDerivationInputKeyLengthBits(): int
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 256,
default => 0,
};
}
public function getDerivationInputKeyLengthBytes(): int
{
return $this->getDerivationInputKeyLengthBits() / 8;
}
public function getDerivationOutputKeyLengthBits(): int
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 256,
default => 0,
};
}
public function getDerivationOutputKeyLengthBytes(): int
{
return $this->getDerivationOutputKeyLengthBits() / 8;
}
public function getCommitmentInputKeyLengthBits(): int
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 256,
default => 0,
};
}
public function getCommitmentInputKeyLengthBytes(): int
{
return $this->getCommitmentInputKeyLengthBits() / 8;
}
public function getCommitmentOutputKeyLengthBits(): int
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 224,
default => 0,
};
}
public function getCommitmentOutputKeyLengthBytes(): int
{
return $this->getCommitmentOutputKeyLengthBits() / 8;
}
public function getKeyCommitmentSaltLengthBits(): int
{
return match ($this) {
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 224,
default => 0,
};
}
//= ../specification/s3-encryption/client.md#key-commitment
//# The S3EC MUST validate the configured Encryption Algorithm against the provided key commitment policy.
public static function validateCommitmentPolicyOnEncrypt(
array $cipherOptions,
string $keyCommitmentPolicy
): self {
$cipherOptions['Cipher'] = strtolower($cipherOptions['Cipher']);
//= ../specification/s3-encryption/client.md#encryption-algorithm
//# The S3EC MUST validate that the configured encryption algorithm is not legacy.
if (!S3EncryptionClientV3::isSupportedCipher($cipherOptions['Cipher'])) {
//= ../specification/s3-encryption/client.md#encryption-algorithm
//# If the configured encryption algorithm is legacy, then the S3EC MUST throw an exception.
throw new \InvalidArgumentException('The cipher requested is not'
. ' supported by the SDK.');
}
if (empty($cipherOptions['KeySize'])) {
$cipherOptions['KeySize'] = 256;
}
if (!is_int($cipherOptions['KeySize'])) {
throw new \InvalidArgumentException('The cipher "KeySize" must be'
. ' an integer.');
}
if (!MaterialsProviderV3::isSupportedKeySize($cipherOptions['KeySize'])) {
throw new \InvalidArgumentException('The cipher "KeySize" requested'
. ' is not supported by AES (256).');
}
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
//# When the commitment policy is FORBID_ENCRYPT_ALLOW_DECRYPT, the S3EC MUST NOT encrypt using an algorithm suite which supports key commitment.
if ($keyCommitmentPolicy === 'FORBID_ENCRYPT_ALLOW_DECRYPT') {
return self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF;
} else {
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
//# When the commitment policy is REQUIRE_ENCRYPT_ALLOW_DECRYPT, the S3EC MUST only encrypt using an algorithm suite which supports key commitment.
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
//# When the commitment policy is REQUIRE_ENCRYPT_REQUIRE_DECRYPT, the S3EC MUST only encrypt using an algorithm suite which supports key commitment.
return self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY;
}
}
}

View file

@ -60,10 +60,65 @@ trait DecryptionTraitV2
MaterialsProviderInterfaceV2 $provider, MaterialsProviderInterfaceV2 $provider,
MetadataEnvelope $envelope, MetadataEnvelope $envelope,
array $options = [] array $options = []
) { )
$options['@CipherOptions'] = !empty($options['@CipherOptions']) {
? $options['@CipherOptions'] $commitmentPolicy = $this->getKeyCommitmentPolicy($options);
: []; unset($options['@CommitmentPolicy']);
if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) {
if ($commitmentPolicy !== "FORBID_ENCRYPT_ALLOW_DECRYPT") {
throw new CryptoException(
"The requested item is encrypted"
. " with Key Commitment. The current policy {$commitmentPolicy}"
. " conflicts with the object metadata. Select an appropriate"
. " '@CommitmentPolicy' to decrypt this item."
);
}
$algorithmSuite = AlgorithmSuite::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY;
$options['@CipherOptions'] = $options['@CipherOptions'] ?? [];
$options['@CipherOptions']['Iv'] = str_repeat("\1", 12);
$options['@CipherOptions']['TagLength'] = $algorithmSuite->getCipherTagLengthInBytes();
$materialDescription = json_decode(
$envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3],
true
);
$cek = $provider->decryptCek(
base64_decode($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3]),
$materialDescription,
$options
);
$options['@CipherOptions']['KeySize'] = strlen($cek) * 8;
$options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName(
$this->numericalContenCipherToAesName($envelope)
);
$this->validateOptionsAndEnvelope($options, $envelope);
$messageId = base64_decode($envelope[MetadataEnvelope::MESSAGE_ID_V3]);
$commitmentKey = base64_decode($envelope[MetadataEnvelope::KEY_COMMITMENT_V3]);
if (strlen($messageId) !== ($algorithmSuite->getKeyCommitmentSaltLengthBits()) / 8) {
throw new CryptoException("Invalid MessageId length found in object envelope.");
}
if (strlen($commitmentKey) !== $algorithmSuite->getCommitmentOutputKeyLengthBytes()) {
throw new CryptoException("Invalid Commitment Key length found in object envelope.");
}
$decryptionStream = $this->getCommitingDecryptingStream(
$cipherText,
$cek,
$options['@CipherOptions'],
$messageId,
$commitmentKey,
$algorithmSuite
);
unset($cek);
return $decryptionStream;
} else {
$options['@CipherOptions'] = $options['@CipherOptions'] ?? [];
$options['@CipherOptions']['Iv'] = base64_decode( $options['@CipherOptions']['Iv'] = base64_decode(
$envelope[MetadataEnvelope::IV_HEADER] $envelope[MetadataEnvelope::IV_HEADER]
); );
@ -97,11 +152,46 @@ trait DecryptionTraitV2
return $decryptionStream; return $decryptionStream;
} }
}
private function buildMaterialDescription(
MetadataEnvelope $envelope
): array
{
switch ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]) {
case 12:
return ['aws:x-amz-cek-alg' => '115'];
default:
throw new CryptoException(
"Unknown Encrypted Data Key "
. "wrapping algorithm found: "
. "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}"
);
}
}
private function numericalContenCipherToAesName(
MetadataEnvelope $envelope
): string
{
switch ($envelope[MetadataEnvelope::CONTENT_CIPHER_V3]) {
case 115:
return 'AES/GCM/NoPadding';
default:
throw new CryptoException(
"Unknown Encrypted Data Key "
. "wrapping algorithm found: "
. "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}"
);
}
}
private function getTagFromCiphertextStream( private function getTagFromCiphertextStream(
StreamInterface $cipherText, StreamInterface $cipherText,
$tagLength $tagLength
) { )
{
$cipherTextSize = $cipherText->getSize(); $cipherTextSize = $cipherText->getSize();
if ($cipherTextSize == null || $cipherTextSize <= 0) { if ($cipherTextSize == null || $cipherTextSize <= 0) {
throw new \RuntimeException('Cannot decrypt a stream of unknown' throw new \RuntimeException('Cannot decrypt a stream of unknown'
@ -117,7 +207,8 @@ trait DecryptionTraitV2
private function getStrippedCiphertextStream( private function getStrippedCiphertextStream(
StreamInterface $cipherText, StreamInterface $cipherText,
$tagLength $tagLength
) { )
{
$cipherTextSize = $cipherText->getSize(); $cipherTextSize = $cipherText->getSize();
if ($cipherTextSize == null || $cipherTextSize <= 0) { if ($cipherTextSize == null || $cipherTextSize <= 0) {
throw new \RuntimeException('Cannot decrypt a stream of unknown' throw new \RuntimeException('Cannot decrypt a stream of unknown'
@ -130,7 +221,7 @@ trait DecryptionTraitV2
); );
} }
private function validateOptionsAndEnvelope($options, $envelope) private function validateOptionsAndEnvelope($options, $envelope): void
{ {
$allowedCiphers = AbstractCryptoClientV2::$supportedCiphers; $allowedCiphers = AbstractCryptoClientV2::$supportedCiphers;
$allowedKeywraps = AbstractCryptoClientV2::$supportedKeyWraps; $allowedKeywraps = AbstractCryptoClientV2::$supportedKeyWraps;
@ -160,29 +251,32 @@ trait DecryptionTraitV2
. " This profile allows decryption with: " . " This profile allows decryption with: "
. implode(", ", $allowedCiphers)); . implode(", ", $allowedCiphers));
} }
if (!in_array(
$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) {
$allowedKeywraps if ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3] !== '12') {
)) { throw new CryptoException("The requested object is encrypted with"
if (in_array( . " the keywrap schema '{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}',"
$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], . " which is not supported for decryption with the current security"
AbstractCryptoClient::$supportedKeyWraps) . " profile.");
) { }
} else {
if (!in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], $allowedKeywraps)) {
if (in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], AbstractCryptoClient::$supportedKeyWraps)) {
throw $v1SchemaException; throw $v1SchemaException;
} }
throw new CryptoException("The requested object is encrypted with" throw new CryptoException("The requested object is encrypted with"
. " the keywrap schema '{$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER]}'," . " the keywrap schema '{$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER]}',"
. " which is not supported for decryption with the current security" . " which is not supported for decryption with the current security"
. " profile."); . " profile.");
} }
$matdesc = json_decode( $matdesc = json_decode(
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER], $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER],
true true
); );
if (isset($matdesc['aws:x-amz-cek-alg']) if (isset($matdesc['aws:x-amz-cek-alg'])
&& $envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] !== && ($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]
$matdesc['aws:x-amz-cek-alg'] !== $matdesc['aws:x-amz-cek-alg'])
) { ) {
throw new CryptoException("There is a mismatch in specified content" throw new CryptoException("There is a mismatch in specified content"
. " encryption algrithm between the materials description value" . " encryption algrithm between the materials description value"
@ -190,6 +284,7 @@ trait DecryptionTraitV2
. " vs. {$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]}."); . " vs. {$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]}.");
} }
} }
}
/** /**
* Generates a stream that wraps the cipher text with the proper cipher and * Generates a stream that wraps the cipher text with the proper cipher and
@ -210,7 +305,8 @@ trait DecryptionTraitV2
$cipherText, $cipherText,
$cek, $cek,
$cipherOptions $cipherOptions
) { )
{
$cipherTextStream = Psr7\Utils::streamFor($cipherText); $cipherTextStream = Psr7\Utils::streamFor($cipherText);
switch ($cipherOptions['Cipher']) { switch ($cipherOptions['Cipher']) {
case 'gcm': case 'gcm':
@ -227,9 +323,7 @@ trait DecryptionTraitV2
$cek, $cek,
$cipherOptions['Iv'], $cipherOptions['Iv'],
$cipherOptions['Tag'], $cipherOptions['Tag'],
$cipherOptions['Aad'] = isset($cipherOptions['Aad']) $cipherOptions['Aad'] = $cipherOptions['Aad'] ?? '',
? $cipherOptions['Aad']
: '',
$cipherOptions['TagLength'] ?: null, $cipherOptions['TagLength'] ?: null,
$cipherOptions['KeySize'] $cipherOptions['KeySize']
); );
@ -246,4 +340,85 @@ trait DecryptionTraitV2
); );
} }
} }
/**
* Generates a stream that wraps the cipher text with the proper cipher and
* uses the content encryption key (CEK) to derive both a derived content encryption key
* and a commitment key to decrypt the data when read.
*
* @param string $cipherText Plain-text data to be encrypted using the
* materials, algorithm, and data provided.
* @param string $cek A content encryption key for use by the stream for
* encrypting the plaintext data.
* @param array $cipherOptions Options for use in determining the cipher to
* be used for encrypting data.
* @param string $messageId a string value used to calculate both a commitment
* key and derived content encryption key
* @param string $commitmentKey a string value to compare with the calculated commitment
* key value, if the values don't match an exception is raised.
*
* @return AesStreamInterface | CryptoException
*
* @internal
*/
protected function getCommitingDecryptingStream(
string $cipherText,
string $cek,
array $cipherOptions,
string $messageId,
string $commitmentKey,
AlgorithmSuite $algorithmSuite
): AesStreamInterface|CryptoException
{
$algorithmSuiteIdAsBytes = pack('n', $algorithmSuite->getId());
$derivedEncryptionKeyInfo = $algorithmSuiteIdAsBytes . "DERIVEKEY";
$commitmentKeyInfo = $algorithmSuiteIdAsBytes . "COMMITKEY";
$derivedEncryptionKey = hash_hkdf(
$algorithmSuite->getHashingAlgorithm(),
$cek,
$algorithmSuite->getDerivationOutputKeyLengthBytes(),
$derivedEncryptionKeyInfo,
$messageId
);
$calculatedCommitmentKey = hash_hkdf(
$algorithmSuite->getHashingAlgorithm(),
$cek,
$algorithmSuite->getCommitmentOutputKeyLengthBytes(),
$commitmentKeyInfo,
$messageId
);
if ($commitmentKey != $calculatedCommitmentKey) {
throw new CryptoException("Calculated commitment key does "
. "not match expected commitment key value ");
}
$cipherTextStream = Psr7\Utils::streamFor($cipherText);
switch ($cipherOptions['Cipher']) {
case 'gcm':
$cipherOptions['Tag'] = $this->getTagFromCiphertextStream(
$cipherTextStream,
$cipherOptions['TagLength']
);
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
? $cipherOptions['Aad'] + $algorithmSuiteIdAsBytes
: $algorithmSuiteIdAsBytes;
return new AesGcmDecryptingStream(
$this->getStrippedCiphertextStream(
$cipherTextStream,
$cipherOptions['TagLength']
),
$derivedEncryptionKey,
$cipherOptions['Iv'],
$cipherOptions['Tag'],
$cipherOptions['Aad'],
$cipherOptions['TagLength'] ?: null,
$cipherOptions['KeySize']
);
default:
throw new CryptoException("Unsupported Cipher used for key commitment messages."
. " Found {$cipherOptions["Cipher"]}. Only 'gcm' is supported.");
}
}
} }

View file

@ -0,0 +1,530 @@
<?php
namespace Aws\Crypto;
use Aws\Crypto\Cipher\CipherMethod;
use Aws\Exception\CryptoException;
use GuzzleHttp\Psr7;
use GuzzleHttp\Psr7\LimitStream;
use PHPUnit\Framework\Constraint\IsEmpty;
use Psr\Http\Message\StreamInterface;
trait DecryptionTraitV3
{
/**
* Dependency to reverse lookup the openssl_* cipher name from the AESName
* in the MetadataEnvelope.
*
* @param string $aesName
*
* @return string
*
* @internal
*/
abstract protected function getCipherFromAesName($aesName);
/**
* Dependency to generate a CipherMethod from a set of inputs for loading
* in to an AesDecryptingStream.
*
* @param string $cipherName Name of the cipher to generate for decrypting.
* @param string $iv Base Initialization Vector for the cipher.
* @param int $keySize Size of the encryption key, in bits, that will be
* used.
*
* @return Cipher\CipherMethod
*
* @internal
*/
abstract protected function buildCipherMethod(
$cipherName,
$iv,
$keySize
);
/**
* Builds an AesStreamInterface using cipher options loaded from the
* MetadataEnvelope and MaterialsProvider. Can decrypt data from both the
* legacy and V3 encryption client workflows.
*
* @param string $cipherText Plain-text data to be encrypted using the
* materials, algorithm, and data provided.
* @param MaterialsProviderInterfaceV3 $provider A provider to supply and encrypt
* materials used in encryption.
* @param MetadataEnvelope $envelope A storage envelope for encryption
* metadata to be read from.
* @param string $commitmentPolicy Commitment Policy to use for decrypting objects.
* @param array $options Options used for decryption.
*
* @return AesStreamInterface
*
* @throws \InvalidArgumentException Thrown when a value in $cipherOptions
* is not valid.
*
* @internal
*/
public function decrypt(
string $cipherText,
MaterialsProviderInterfaceV3 $provider,
MetadataEnvelope $envelope,
string $commitmentPolicy,
array $options = []
): AesStreamInterface
{
if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) {
$this->checkEnvelopeForExclusiveMapKeys(
$envelope,
MetadataEnvelope::getV2Fields(),
"Expected V3 only fields but found V2 fields in header metadata."
);
// PHP only supports one commiting algorithm suite
$algorithmSuite = AlgorithmSuite::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY;
$options['@CipherOptions'] = $options['@CipherOptions'] ?? [];
$options['@CipherOptions']['Iv'] = str_repeat("\1", 12);
$options['@CipherOptions']['TagLength'] = $algorithmSuite->getCipherTagLengthInBytes();
//= ../specification/s3-encryption/data-format/content-metadata.md#v3-only
//= type=implication
//# - The wrapping algorithm value "12" MUST be translated to kms+context upon retrieval, and vice versa on write.
$materialDescription = $this->buildMaterialDescription($envelope);
$cek = $provider->decryptCek(
base64_decode($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3]),
$materialDescription,
$options
);
$options['@CipherOptions']['KeySize'] = strlen($cek) * 8;
$options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName(
$this->numericalContenCipherToAesName($envelope)
);
$this->validateOptionsAndEnvelope($options, $envelope, $commitmentPolicy);
$messageId = base64_decode($envelope[MetadataEnvelope::MESSAGE_ID_V3]);
$commitmentKey = base64_decode($envelope[MetadataEnvelope::KEY_COMMITMENT_V3]);
if (strlen($messageId) !== ($algorithmSuite->getKeyCommitmentSaltLengthBits()) / 8) {
throw new CryptoException("Invalid MessageId length found in object envelope.");
}
if (strlen($commitmentKey) !== $algorithmSuite->getCommitmentOutputKeyLengthBytes()) {
throw new CryptoException("Invalid Commitment Key length found in object envelope.");
}
$decryptionStream = $this->getCommitingDecryptingStream(
$cipherText,
$cek,
$options['@CipherOptions'],
$messageId,
$commitmentKey,
$algorithmSuite
);
unset($cek);
return $decryptionStream;
} else {
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
//# When the commitment policy is REQUIRE_ENCRYPT_REQUIRE_DECRYPT,
//# the S3EC MUST NOT allow decryption using algorithm suites which do not support key commitment.
if ($commitmentPolicy == "REQUIRE_ENCRYPT_REQUIRE_DECRYPT") {
//= ../specification/s3-encryption/client.md#key-commitment
//# If the configured Encryption Algorithm is incompatible with
//# the key commitment policy, then it MUST throw an exception.
throw new CryptoException("Message is encrypted with a "
. "non commiting algorithm but commitment policy is set "
. "to {$commitmentPolicy}. Select a valid commitment "
. "policy to decrypt this object. ");
}
$this->checkEnvelopeForExclusiveMapKeys(
$envelope,
MetadataEnvelope::getV3Fields(),
"Expected V2 only fields but found V3 fields in header metadata."
);
$options['@CipherOptions'] = $options['@CipherOptions'] ?? [];
$options['@CipherOptions']['Iv'] = base64_decode(
$envelope[MetadataEnvelope::IV_HEADER]
);
$options['@CipherOptions']['TagLength'] =
$envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] / 8;
$cek = $provider->decryptCek(
base64_decode(
$envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER]
),
json_decode(
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER],
true
),
$options
);
$options['@CipherOptions']['KeySize'] = strlen($cek) * 8;
$options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName(
$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]
);
//= ../specification/s3-encryption/decryption.md#key-commitment
//= type=implication
//# The S3EC MUST validate the algorithm suite used for decryption
//# against the key commitment policy before attempting to decrypt
//# the content ciphertext.
$this->validateOptionsAndEnvelope($options, $envelope, $commitmentPolicy);
$decryptionStream = $this->getNonCommitingDecryptingStream(
$cipherText,
$cek,
$options['@CipherOptions']
);
unset($cek);
return $decryptionStream;
}
}
private function checkEnvelopeForExclusiveMapKeys(
MetadataEnvelope $envelope,
array $exclusiveKeys,
string $errorMessage
): void
{
foreach ($exclusiveKeys as $exclusiveKey) {
//= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status
//# If there are multiple mapkeys which are meant to be exclusive, such as "x-amz-key", "x-amz-key-v2", and "x-amz-3" then the S3EC SHOULD throw an exception.
if (isset($envelope[$exclusiveKey])) {
throw new CryptoException($errorMessage);
}
}
}
private function numericalContenCipherToAesName(
MetadataEnvelope $envelope
): string
{
switch ($envelope[MetadataEnvelope::CONTENT_CIPHER_V3]) {
case 115:
return 'AES/GCM/NoPadding';
default:
throw new CryptoException(
"Unknown Encrypted Data Key "
. "wrapping algorithm found: "
. "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}"
);
}
}
private function buildMaterialDescription(
MetadataEnvelope $envelope
): array
{
switch ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]) {
case 12:
return json_decode(
$envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3],
true
);
default:
throw new CryptoException(
"Unknown Encrypted Data Key "
. "wrapping algorithm found: "
. "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}"
);
}
}
private function getTagFromCiphertextStream(
StreamInterface $cipherText,
$tagLength
): string
{
$cipherTextSize = $cipherText->getSize();
if ($cipherTextSize == null || $cipherTextSize <= 0) {
throw new \RuntimeException('Cannot decrypt a stream of unknown size');
}
return (string) new LimitStream(
$cipherText,
$tagLength,
$cipherTextSize - $tagLength
);
}
private function getStrippedCiphertextStream(
StreamInterface $cipherText,
$tagLength
): LimitStream
{
$cipherTextSize = $cipherText->getSize();
if ($cipherTextSize == null || $cipherTextSize <= 0) {
throw new \RuntimeException('Cannot decrypt a stream of unknown size');
}
return new LimitStream(
$cipherText,
$cipherTextSize - $tagLength,
0
);
}
private function validateOptionsAndEnvelope(
array $options,
MetadataEnvelope $envelope,
string $commitmentPolicy
): void
{
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
//# When the commitment policy is REQUIRE_ENCRYPT_ALLOW_DECRYPT,
//# the S3EC MUST allow decryption using algorithm suites which do not support key commitment.
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
//# When the commitment policy is FORBID_ENCRYPT_ALLOW_DECRYPT,
//# the S3EC MUST allow decryption using algorithm suites which do not support key commitment.
$allowedCiphers = AbstractCryptoClientV3::$supportedCiphers;
$allowedKeywraps = AbstractCryptoClientV3::$supportedKeyWraps;
//= ../specification/s3-encryption/client.md#enable-legacy-wrapping-algorithms
//# When enabled, the S3EC MUST be able to decrypt objects encrypted with all
//# supported wrapping algorithms (both legacy and fully supported).
if ($options['@SecurityProfile'] == 'V3_AND_LEGACY') {
$allowedCiphers = array_unique(array_merge(
$allowedCiphers,
AbstractCryptoClient::$supportedCiphers
));
$allowedKeywraps = array_unique(array_merge(
$allowedKeywraps,
AbstractCryptoClient::$supportedKeyWraps
));
}
$v1SchemaException = new CryptoException("The requested object is encrypted"
. " with V1 encryption schemas that have been disabled by"
. " client configuration @SecurityProfile=V3. Retry with"
. " V3_AND_LEGACY enabled or reencrypt the object.");
if (!in_array($options['@CipherOptions']['Cipher'], $allowedCiphers)) {
//= ../specification/s3-encryption/client.md#enable-legacy-wrapping-algorithms
//= type=implication
//# When disabled, the S3EC MUST NOT decrypt objects encrypted using legacy wrapping algorithms;
//# it MUST throw an exception when attempting to decrypt an object encrypted with a legacy wrapping algorithm.
//= ../specification/s3-encryption/decryption.md#legacy-decryption
//# The S3EC MUST NOT decrypt objects encrypted using legacy unauthenticated algorithm suites unless specifically configured to do so.
if (in_array($options['@CipherOptions']['Cipher'], AbstractCryptoClient::$supportedCiphers)) {
//= ../specification/s3-encryption/decryption.md#legacy-decryption
//# If the S3EC is not configured to enable legacy unauthenticated content decryption, the client MUST throw an exception when attempting to decrypt an object encrypted with a legacy unauthenticated algorithm suite.
throw $v1SchemaException;
}
throw new CryptoException("The requested object is encrypted with"
. " the cipher '{$options['@CipherOptions']['Cipher']}', which is not"
. " supported for decryption with the selected security profile."
. " This profile allows decryption with: "
. implode(", ", $allowedCiphers));
}
if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) {
if ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3] !== '12') {
throw new CryptoException("The requested object is encrypted with"
. " the keywrap schema '{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}',"
. " which is not supported for decryption with the current security"
. " profile.");
}
} else {
if (!in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], $allowedKeywraps)) {
if (in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], AbstractCryptoClient::$supportedKeyWraps)) {
throw $v1SchemaException;
}
throw new CryptoException("The requested object is encrypted with"
. " the keywrap schema '{$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER]}',"
. " which is not supported for decryption with the current security"
. " profile.");
}
$matdesc = json_decode(
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER],
true
);
if (isset($matdesc['aws:x-amz-cek-alg'])
&& ($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]
!== $matdesc['aws:x-amz-cek-alg'])
) {
throw new CryptoException("There is a mismatch in specified content"
. " encryption algrithm between the materials description value"
. " and the metadata envelope value: {$matdesc['aws:x-amz-cek-alg']}"
. " vs. {$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]}.");
}
}
//= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status
//= type=implication
//# - If the metadata contains "x-amz-3" and "x-amz-d" and "x-amz-i" then the object MUST be considered an S3EC-encrypted object using the V3 format.
if (!MetadataEnvelope::isV3Envelope($envelope)
&& $commitmentPolicy == "REQUIRE_ENCRYPT_REQUIRE_DECRYPT"
) {
//= ../specification/s3-encryption/decryption.md#key-commitment
//# If the commitment policy requires decryption using a committing algorithm suite
//# and the algorithm suite associated with the object does not support key commitment,
//# then the S3EC MUST throw an exception.
throw new CryptoException("There is a mismatch in specified"
. "commitment policy value {$commitmentPolicy} and"
. "Metadata Envelope found in object.");
}
}
/**
* Generates a stream that wraps the cipher text with the proper cipher and
* uses the content encryption key (CEK) to decrypt the data when read.
*
* @param string $cipherText Plain-text data to be encrypted using the
* materials, algorithm, and data provided.
* @param string $cek A content encryption key for use by the stream for
* encrypting the plaintext data.
* @param array $cipherOptions Options for use in determining the cipher to
* be used for encrypting data.
*
* @return AesStreamInterface
*
* @internal
*/
protected function getNonCommitingDecryptingStream(
string $cipherText,
string $cek,
array $cipherOptions
): AesStreamInterface
{
$cipherTextStream = Psr7\Utils::streamFor($cipherText);
switch ($cipherOptions['Cipher']) {
case 'gcm':
$cipherOptions['Tag'] = $this->getTagFromCiphertextStream(
$cipherTextStream,
$cipherOptions['TagLength']
);
return new AesGcmDecryptingStream(
$this->getStrippedCiphertextStream(
$cipherTextStream,
$cipherOptions['TagLength']
),
$cek,
$cipherOptions['Iv'],
$cipherOptions['Tag'],
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
? $cipherOptions['Aad']
: '',
$cipherOptions['TagLength'] ?: null,
$cipherOptions['KeySize']
);
default:
$cipherMethod = $this->buildCipherMethod(
$cipherOptions['Cipher'],
$cipherOptions['Iv'],
$cipherOptions['KeySize']
);
return new AesDecryptingStream(
$cipherTextStream,
$cek,
$cipherMethod
);
}
}
/**
* Generates a stream that wraps the cipher text with the proper cipher and
* uses the content encryption key (CEK) to derive both a derived content encryption key
* and a commitment key to decrypt the data when read.
*
* @param string $cipherText Plain-text data to be encrypted using the
* materials, algorithm, and data provided.
* @param string $cek A content encryption key for use by the stream for
* encrypting the plaintext data.
* @param array $cipherOptions Options for use in determining the cipher to
* be used for encrypting data.
* @param string $messageId a string value used to calculate both a commitment
* key and derived content encryption key
* @param string $commitmentKey a string value to compare with the calculated commitment
* key value, if the values don't match an exception is raised.
*
* @return AesStreamInterface | CryptoException
*
* @internal
*/
protected function getCommitingDecryptingStream(
string $cipherText,
string $cek,
array $cipherOptions,
string $messageId,
string $commitmentKey,
AlgorithmSuite $algorithmSuite
): AesStreamInterface|CryptoException
{
$algorithmSuiteIdAsBytes = pack('n', $algorithmSuite->getId());
$derivedEncryptionKeyInfo = $algorithmSuiteIdAsBytes . "DERIVEKEY";
$commitmentKeyInfo = $algorithmSuiteIdAsBytes . "COMMITKEY";
$calculatedCommitmentKey = hash_hkdf(
$algorithmSuite->getHashingAlgorithm(),
$cek,
$algorithmSuite->getCommitmentOutputKeyLengthBytes(),
$commitmentKeyInfo,
$messageId
);
//= ../specification/s3-encryption/decryption.md#decrypting-with-commitment
//= type=implication
//# When using an algorithm suite which supports key commitment, the client MUST verify that the [derived key commitment](./key-derivation.md#hkdf-operation) contains the same bytes as the stored key commitment retrieved from the stored object's metadata.
if (
//= ../specification/s3-encryption/decryption.md#decrypting-with-commitment
//= type=implication
//# When using an algorithm suite which supports key commitment,
//# the verification of the derived key commitment value MUST be done in constant time.
!hash_equals($commitmentKey, $calculatedCommitmentKey)
) {
//= ../specification/s3-encryption/decryption.md#decrypting-with-commitment
//= type=implication
//# When using an algorithm suite which supports key commitment, the client MUST
//# throw an exception when the derived key commitment value
//# and stored key commitment value do not match.
throw new CryptoException("Calculated commitment key does "
. "not match expected commitment key value ");
}
//= ../specification/s3-encryption/decryption.md#decrypting-with-commitment
//= type=implication
//# When using an algorithm suite which supports key commitment,
//# the client MUST verify the key commitment values match before
//# deriving the [derived encryption key](./key-derivation.md#hkdf-operation).
$derivedEncryptionKey = hash_hkdf(
$algorithmSuite->getHashingAlgorithm(),
$cek,
$algorithmSuite->getDerivationOutputKeyLengthBytes(),
$derivedEncryptionKeyInfo,
$messageId
);
$cipherTextStream = Psr7\Utils::streamFor($cipherText);
switch ($cipherOptions['Cipher']) {
case 'gcm':
$cipherOptions['Tag'] = $this->getTagFromCiphertextStream(
$cipherTextStream,
$cipherOptions['TagLength']
);
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
? $cipherOptions['Aad'] + $algorithmSuiteIdAsBytes
: $algorithmSuiteIdAsBytes;
return new AesGcmDecryptingStream(
$this->getStrippedCiphertextStream(
$cipherTextStream,
$cipherOptions['TagLength']
),
$derivedEncryptionKey,
$cipherOptions['Iv'],
$cipherOptions['Tag'],
$cipherOptions['Aad'],
$cipherOptions['TagLength'] ?: null,
$cipherOptions['KeySize']
);
default:
throw new CryptoException("Unsupported Cipher used for key commitment messages."
. " Found {$cipherOptions["Cipher"]}. Only 'gcm' is supported.");
}
}
}

View file

@ -85,9 +85,7 @@ trait EncryptionTraitV2
. ' an integer.'); . ' an integer.');
} }
if (!MaterialsProviderV2::isSupportedKeySize( if (!MaterialsProviderV2::isSupportedKeySize($cipherOptions['KeySize'])) {
$cipherOptions['KeySize']
)) {
throw new \InvalidArgumentException('The cipher "KeySize" requested' throw new \InvalidArgumentException('The cipher "KeySize" requested'
. ' is not supported by AES (128 or 256).'); . ' is not supported by AES (128 or 256).');
} }
@ -130,12 +128,12 @@ trait EncryptionTraitV2
$provider->getWrapAlgorithmName(); $provider->getWrapAlgorithmName();
$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] = $aesName; $envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] = $aesName;
$envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER] = $envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER] =
strlen($plaintext); (string) strlen($plaintext);
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER] = $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER] =
json_encode($materialsDescription); json_encode($materialsDescription);
if (!empty($cipherOptions['Tag'])) { if (!empty($cipherOptions['Tag'])) {
$envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] = $envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] =
strlen($cipherOptions['Tag']) * 8; (string) (strlen($cipherOptions['Tag']) * 8);
} }
return $encryptingStream; return $encryptingStream;
@ -170,9 +168,7 @@ trait EncryptionTraitV2
$plaintext, $plaintext,
$cek, $cek,
$cipherOptions['Iv'], $cipherOptions['Iv'],
$cipherOptions['Aad'] = isset($cipherOptions['Aad']) $cipherOptions['Aad'] = $cipherOptions['Aad'] ?? '',
? $cipherOptions['Aad']
: '',
$cipherOptions['TagLength'], $cipherOptions['TagLength'],
$cipherOptions['KeySize'] $cipherOptions['KeySize']
); );

View file

@ -0,0 +1,474 @@
<?php
namespace Aws\Crypto;
use Aws\Crypto\Cipher\CipherMethod;
use Aws\Exception\CryptoException;
use GuzzleHttp\Psr7;
use GuzzleHttp\Psr7\AppendStream;
use GuzzleHttp\Psr7\Stream;
use Psr\Http\Message\StreamInterface;
trait EncryptionTraitV3
{
private static array $allowedOptions = [
'Cipher' => true,
'KeySize' => true,
'Aad' => true,
];
private static array $encryptClasses = [
'gcm' => AesGcmEncryptingStream::class
];
/**
* Dependency to generate a CipherMethod from a set of inputs for loading
* in to an AesEncryptingStream.
*
* @param string $cipherName Name of the cipher to generate for encrypting.
* @param string $iv Base Initialization Vector for the cipher.
* @param int $keySize Size of the encryption key, in bits, that will be
* used.
*
* @return Cipher\CipherMethod
*
* @internal
*/
abstract protected function buildCipherMethod(
$cipherName,
$iv,
$keySize
);
/**
* Builds an AesStreamInterface and populates encryption metadata into the
* supplied envelope.
*
* @param Stream $plaintext Plain-text data to be encrypted using the
* materials, algorithm, and data provided.
* @param AlgorithmSuite $algorithmSuite Algorithm Suite for use in encryption
* @param array $options Options for use in encryption, including cipher
* options, and encryption context.
* @param MaterialsProviderV3 $provider A provider to supply and encrypt
* materials used in encryption.
* @param MetadataEnvelope $envelope A storage envelope for encryption
* metadata to be added to.
*
* @return AppendStream
*
* @throws \InvalidArgumentException Thrown when a value in $options['@CipherOptions']
* is not valid.
*s
* @internal
*/
public function encrypt(
Stream $plaintext,
AlgorithmSuite $algorithmSuite,
array $options,
MaterialsProviderV3 $provider,
MetadataEnvelope $envelope
): AppendStream
{
$options = array_change_key_case($options);
$cipherOptions = array_intersect_key(
$options['@cipheroptions'],
self::$allowedOptions
);
//= ../specification/s3-encryption/encryption.md#content-encryption
//= type=implication
//# The client MUST validate that the length of the plaintext bytes does not exceed
//# the algorithm suite's cipher's maximum content length in bytes.
if (strlen($plaintext) > $algorithmSuite->getCipherMaxContentLengthBytes()) {
throw new \InvalidArgumentException("The contentLength of the object you are attempting"
. " to encrypt exceeds the maximum length allowed for GCM encryption.");
}
$cipherOptions['Cipher'] = strtolower($cipherOptions['Cipher']);
if (!self::isSupportedCipher($cipherOptions['Cipher'])) {
throw new \InvalidArgumentException('The cipher requested is not'
. ' supported by the SDK.');
}
if (empty($cipherOptions['KeySize'])) {
$cipherOptions['KeySize'] = 256;
}
if (!is_int($cipherOptions['KeySize'])) {
throw new \InvalidArgumentException('The cipher "KeySize" must be'
. ' an integer.');
}
if (!MaterialsProviderV3::isSupportedKeySize($cipherOptions['KeySize'])) {
throw new \InvalidArgumentException('The cipher "KeySize" requested'
. ' is not supported by AES (256).');
}
$encryptClass = self::$encryptClasses[$algorithmSuite->getCipherName()];
$aesName = $encryptClass::getStaticAesName();
$materialsDescription = $algorithmSuite->isKeyCommitting()
? ['aws:x-amz-cek-alg' => '115']
: ['aws:x-amz-cek-alg' => $aesName];
$keys = $provider->generateCek(
$algorithmSuite->getDataKeyLengthBits(),
$materialsDescription,
$options
);
// Some providers modify materials description based on options
if (isset($keys['UpdatedContext'])) {
$materialsDescription = $keys['UpdatedContext'];
}
if ($algorithmSuite->isKeyCommitting()) {
return $this->encryptCommitingStream(
$plaintext,
$algorithmSuite,
$cipherOptions,
$keys,
$materialsDescription,
$provider,
$envelope
);
} else {
return $this->encryptNonCommitingStream(
$plaintext,
$cipherOptions,
$keys,
$materialsDescription,
$aesName,
$provider,
$envelope
);
}
}
private function encryptNonCommitingStream(
Stream $plaintext,
array &$cipherOptions,
array $keys,
array $materialsDescription,
string $aesName,
MaterialsProviderV3 $provider,
MetadataEnvelope $envelope
): AppendStream
{
//= ../specification/s3-encryption/encryption.md#content-encryption
//# The generated IV or Message ID MUST be set or returned from the
//# encryption process such that it can be included in the content metadata.
//= ../specification/s3-encryption/encryption.md#content-encryption
//# The client MUST generate an IV or Message ID using the length of the IV or Message ID defined in the algorithm suite.
$cipherOptions['Iv'] = $provider->generateIv(
$this->getCipherOpenSslName(
$cipherOptions['Cipher'],
$cipherOptions['KeySize']
)
);
// Some providers modify materials description based on options
if (isset($keys['UpdatedContext'])) {
$materialsDescription = $keys['UpdatedContext'];
}
$encryptingStream = $this->getNonCommittingEncryptingStream(
$plaintext,
$keys['Plaintext'],
$cipherOptions
);
// Populate envelope data
//= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status
//# - If the metadata contains "x-amz-iv" and "x-amz-metadata-x-amz-key-v2" then the object MUST be considered as an S3EC-encrypted object using the V2 format.
$envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER] = $keys['Ciphertext'];
unset($keys);
$envelope[MetadataEnvelope::IV_HEADER] =
base64_encode($cipherOptions['Iv']);
$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER] =
$provider->getWrapAlgorithmName();
$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] = $aesName;
$envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER] =
(string) strlen($plaintext);
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER] =
json_encode($materialsDescription);
if (!empty($cipherOptions['Tag'])) {
$envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] =
(string) (strlen($cipherOptions['Tag']) * 8);
}
if (!MetadataEnvelope::isV2Envelope($envelope)) {
throw new CryptoException("Error while writing metadata envelope."
. " Not all required fields were set.");
}
return $encryptingStream;
}
private function encryptCommitingStream(
Stream $plaintext,
AlgorithmSuite $algorithmSuite,
array &$options,
array $keys,
array $materialsDescription,
MaterialsProviderV3 $provider,
MetadataEnvelope $envelope
): AppendStream
{
//= ../specification/s3-encryption/encryption.md#content-encryption
//# The generated IV or Message ID MUST be set or returned from the
//# encryption process such that it can be included in the content metadata.
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# When encrypting or decrypting with ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
//# the IV used in the AES-GCM content encryption/decryption
//# MUST consist entirely of bytes with the value 0x01.
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# The IV's total length MUST match the IV length defined by the algorithm suite.
$options['Iv'] = str_repeat("\1", $algorithmSuite->getIvLengthBytes());
$messageId = $provider->generateIv(
$this->getCipherOpenSslName(
$algorithmSuite->getCipherName(),
//= ../specification/s3-encryption/encryption.md#content-encryption
//# The client MUST generate an IV or Message ID using the length of
//# the IV or Message ID defined in the algorithm suite.
$algorithmSuite->getKeyCommitmentSaltLengthBits()
)
);
// Some providers modify materials description based on options
if (isset($keys['UpdatedContext'])) {
$materialsDescription["aws:x-amz-cek-alg"] = (string) $algorithmSuite->getId();
}
$commitingEncryptingArray = $this->getCommitingEncryptionStream(
$plaintext,
$keys['Plaintext'],
$options,
$messageId,
$algorithmSuite
);
//= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-hkdf-sha512-commit-key
//= type=implication
//# The derived key commitment value MUST be set or returned from the encryption process
//# such that it can be included in the content metadata.
$commitmentKey = $commitingEncryptingArray[0];
$encryptionStream = $commitingEncryptingArray[1];
// Populate envelope data
$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3] = $keys['Ciphertext'];
unset($keys);
$envelope[MetadataEnvelope::CONTENT_CIPHER_V3] = $algorithmSuite->getId();
// we are able to always set the encryption context in the envelope because PHP
// only supports a KMS Material Provider.
$envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3] =
json_encode($materialsDescription);
//= ../specification/s3-encryption/data-format/content-metadata.md#v3-only
//# The Encryption Context value MUST be used for wrapping algorithm `kms+context` or `12`.
$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3] = '12';
$envelope[MetadataEnvelope::KEY_COMMITMENT_V3] = $commitmentKey;
$envelope[MetadataEnvelope::MESSAGE_ID_V3] = base64_encode($messageId);
if (!MetadataEnvelope::isV3Envelope($envelope)) {
throw new CryptoException("Error while writing metadata envelope."
. " Not all required fields were set.");
}
return $encryptionStream;
}
/**
* Generates a stream that wraps the plaintext with the proper cipher and
* uses the content encryption key (CEK) to encrypt the data when read.
*
* @param Stream $plaintext Plain-text data to be encrypted using the
* materials, algorithm, and data provided.
* @param string $cek A content encryption key for use by the stream for
* encrypting the plaintext data.
* @param array $cipherOptions Options for use in determining the cipher to
* be used for encrypting data.
*
* @return AppendStream returns an AppendStream
*
* @internal
*/
protected function getNonCommittingEncryptingStream(
Stream $plaintext,
string $cek,
array &$cipherOptions
): AppendStream
{
// Only 'gcm' is supported for encryption currently
switch ($cipherOptions['Cipher']) {
//= ../specification/s3-encryption/encryption.md#content-encryption
//= type=implication
//# The S3EC MUST use the encryption algorithm configured during [client](./client.md) initialization.
case 'gcm':
$cipherOptions['TagLength'] = 16;
$encryptClass = self::$encryptClasses['gcm'];
//= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-iv12-tag16-no-kdf
//= type=implication
//# The client MUST initialize the cipher, or call an AES-GCM encryption API,
//# with the plaintext data key, the generated IV, and the tag length defined
//# in the Algorithm Suite when encrypting with ALG_AES_256_GCM_IV12_TAG16_NO_KDF.
$cipherTextStream = new $encryptClass(
$plaintext,
$cek,
$cipherOptions['Iv'],
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
? $cipherOptions['Aad']
: '',
$cipherOptions['TagLength'],
$cipherOptions['KeySize']
);
if (!empty($cipherOptions['Aad'])) {
trigger_error("'Aad' has been supplied for content encryption"
. " with " . $cipherTextStream->getAesName() . ". The"
. " PHP SDK encryption client can decrypt an object"
. " encrypted in this way, but other AWS SDKs may not be"
. " able to.", E_USER_WARNING);
}
$appendStream = new AppendStream([
$cipherTextStream->createStream()
]);
//= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-iv12-tag16-no-kdf
//= type=implication
//# The client MUST append the GCM auth tag to the ciphertext if the underlying
//# crypto provider does not do so automatically.
$cipherOptions['Tag'] = $cipherTextStream->getTag();
$appendStream->addStream(Psr7\Utils::streamFor($cipherOptions['Tag']));
return $appendStream;
default:
throw new CryptoException("Unsupported Cipher used for key commitment messages."
. " Found {$cipherOptions["Cipher"]}. Only 'gcm' is supported.");
}
}
/**
* Generates a stream that wraps the plaintext with the proper cipher and
* uses the content encryption key (CEK) to encrypt the data when read.
*
* @param Stream $plaintext Plain-text data to be encrypted using the
* materials, algorithm, and data provided.
* @param string $cek A content encryption key for use by the stream for
* encrypting the plaintext data.
* @param array $cipherOptions Options for use in determining the cipher to
* be used for encrypting data.
* @param string $messageId salt value used for key extraction step in the key
* derivation process.
* @param AlgorithmSuite $algorithmSuite options used for key commitment
*
* @return array returns an array with two elements as follows: [commitmentKey, AppendStream]
*
* @internal
*/
protected function getCommitingEncryptionStream(
Stream $plaintext,
string $dek,
array &$cipherOptions,
string $messageId,
AlgorithmSuite $algorithmSuite
): array
{
$algorithmSuiteIdAsBytes = pack('n', $algorithmSuite->getId());
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# - The input info MUST be a concatenation of the algorithm suite ID as bytes followed by the string DERIVEKEY as UTF8 encoded bytes.
$derivedEncryptionKeyInfo = $algorithmSuiteIdAsBytes . "DERIVEKEY";
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# - The input info MUST be a concatenation of the algorithm suite ID as bytes followed by the string COMMITKEY as UTF8 encoded bytes.
$commitmentKeyInfo = $algorithmSuiteIdAsBytes . "COMMITKEY";
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# - The length of the input keying material MUST equal the key derivation
//# input length specified by the algorithm suite commit key derivation setting.
if (strlen($dek) !== $algorithmSuite->getDerivationInputKeyLengthBytes()) {
throw new CryptoException("Input Key Material length exceeds "
. "key derivation input length specified by the algorithm suite.");
}
//= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-hkdf-sha512-commit-key
//= type=implication
//# The client MUST use HKDF to derive the key commitment value and
//# the derived encrypting key as described in [Key Derivation](key-derivation.md).
$cek = hash_hkdf(
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# - The hash function MUST be specified by the algorithm suite commitment settings.
$algorithmSuite->getHashingAlgorithm(),
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# - The input keying material MUST be the plaintext data key (PDK) generated by the key provider.
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# - The DEK input pseudorandom key MUST be the output from the extract step.
$dek,
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# - The length of the output keying material MUST equal the encryption key length specified by the algorithm suite encryption settings.
$algorithmSuite->getDerivationOutputKeyLengthBytes(),
$derivedEncryptionKeyInfo,
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# - The salt MUST be the Message ID with the length defined in the algorithm suite.
$messageId
);
$commitmentKey = hash_hkdf(
$algorithmSuite->getHashingAlgorithm(),
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# - The CK input pseudorandom key MUST be the output from the extract step.
$dek,
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# - The length of the output keying material MUST equal the commit key length specified by the supported algorithm suites.
$algorithmSuite->getCommitmentOutputKeyLengthBytes(),
$commitmentKeyInfo,
$messageId
);
switch ($cipherOptions['Cipher']) {
// Only 'gcm' is supported for encryption currently
case 'gcm':
$cipherOptions['TagLength'] = $algorithmSuite->getCipherTagLengthInBytes();
$encryptClass = self::$encryptClasses[$algorithmSuite->getCipherName()];
if (!empty($cipherOptions['Aad'])) {
trigger_error("'Aad' has been supplied for content encryption"
. " with " . $encryptClass->getAesName() . ". The"
. " PHP SDK encryption client can decrypt an object"
. " encrypted in this way, but other AWS SDKs may not be"
. " able to.", E_USER_NOTICE);
}
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
? $cipherOptions['Aad'] + $algorithmSuiteIdAsBytes
: $algorithmSuiteIdAsBytes;
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
//= type=implication
//# The client MUST initialize the cipher, or call an AES-GCM encryption API,
//# with the derived encryption key, an IV containing only bytes with the value 0x01,
//# and the tag length defined in the Algorithm Suite when encrypting or
//# decrypting with ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY.
$cipherTextStream = new $encryptClass(
$plaintext,
$cek,
$cipherOptions['Iv'],
$cipherOptions['Aad'],
$cipherOptions['TagLength'],
$cipherOptions['KeySize']
);
$appendStream = new AppendStream([
$cipherTextStream->createStream()
]);
//= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-hkdf-sha512-commit-key
//= type=implication
//# The client MUST append the GCM auth tag to the ciphertext if the underlying
//# crypto provider does not do so automatically.
$cipherOptions['Tag'] = $cipherTextStream->getTag();
$appendStream->addStream(Psr7\Utils::streamFor($cipherOptions['Tag']));
return [base64_encode($commitmentKey), $appendStream];
default:
throw new CryptoException("Unsupported Cipher used for content encryption");
}
}
}

View file

@ -0,0 +1,159 @@
<?php
namespace Aws\Crypto;
use Aws\Exception\CryptoException;
use Aws\Kms\KmsClient;
/**
* Uses KMS to supply materials for encrypting and decrypting data. This
* V2 implementation should be used with the V2 encryption clients (i.e.
* S3EncryptionClientV2).
*/
class KmsMaterialsProviderV3 extends MaterialsProviderV3 implements MaterialsProviderInterfaceV3
{
const WRAP_ALGORITHM_NAME = 'kms+context';
private KmsClient $kmsClient;
private ?string $kmsKeyId;
/**
* @param KmsClient $kmsClient A KMS Client for use encrypting and
* decrypting keys.
* @param string $kmsKeyId The private KMS key id to be used for encrypting
* and decrypting keys.
*/
public function __construct(
KmsClient $kmsClient,
?string $kmsKeyId = null
) {
$this->kmsClient = $kmsClient;
$this->kmsKeyId = $kmsKeyId;
}
/**
* @inheritDoc
*/
public function getWrapAlgorithmName(): string
{
return self::WRAP_ALGORITHM_NAME;
}
/**
* @inheritDoc
*/
public function decryptCek(
string $encryptedCek,
array $materialDescription,
array $options
): string
{
$options = array_change_key_case($options);
$encryptionContext = null;
// no encryption context was provided we will use the one in the metadata
if (!isset($options['@kmsencryptioncontext'])) {
$encryptionContext = $materialDescription;
} else {
// encryption context was passed in, we have to make sure it is an array
// and that the reserved keywords were not used
if (!is_array($options['@kmsencryptioncontext'])) {
throw new CryptoException("'When using @KmsMaterialsProviderV3, it"
. " must be an associative array (or empty array).");
}
if (isset($options['@kmsencryptioncontext']['aws:x-amz-cek-alg'])) {
throw new CryptoException("Conflict in reserved @KmsEncryptionContext"
. " key aws:x-amz-cek-alg. This value is reserved for the S3"
. " Encryption Client and cannot be set by the user.");
}
if (isset($options['@kmsencryptioncontext']['kms_cmk_id'])) {
throw new CryptoException("Conflict in reserved @KmsEncryptionContext"
. " key kms_cmk_id. This value is reserved for the S3"
. " Encryption Client and cannot be set by the user.");
}
//= specification/s3-encryption/materials/s3-kms-keyring.md#kms-context
//= type=implication
//# When decrypting using Kms+Context mode, the KmsKeyring MUST validate the provided (request) encryption context with the stored (materials) encryption context.
// We are validating the encryption context to match S3EC V2 behavior
// Refer to KMSMaterialsHandler in the V2 client for details
$materialsDescriptionContextCopy = $materialDescription;
unset($materialsDescriptionContextCopy["aws:x-amz-cek-alg"]);
unset($materialsDescriptionContextCopy["kms_cmk_id"]);
$requestEncryptionContext = $options['@kmsencryptioncontext'];
//= specification/s3-encryption/materials/s3-kms-keyring.md#kms-context
//= type=implication
//# The stored encryption context with the two reserved keys removed MUST match the provided encryption context.
if ($materialsDescriptionContextCopy !== $requestEncryptionContext) {
//= specification/s3-encryption/materials/s3-kms-keyring.md#kms-context
//= type=implication
//# If the stored encryption context with the two reserved keys removed does not match the provided encryption context, the KmsKeyring MUST throw an exception.
throw new CryptoException("Provided encryption context does not match information retrieved from S3");
}
$encryptionContext = $materialDescription;
}
$params = [
'CiphertextBlob' => $encryptedCek,
'EncryptionContext' => $encryptionContext
];
if (empty($options['@kmsallowdecryptwithanycmk'])) {
if (empty($this->kmsKeyId)) {
throw new CryptoException('KMS CMK ID was not specified and the'
. ' operation is not opted-in to attempting to use any valid'
. ' CMK it discovers. Please specify a CMK ID, or explicitly'
. ' enable attempts to use any valid KMS CMK with the'
. ' @KmsAllowDecryptWithAnyCmk option.');
}
$params['KeyId'] = $this->kmsKeyId;
}
$result = $this->kmsClient->decrypt($params);
return $result['Plaintext'];
}
/**
* @inheritDoc
*/
public function generateCek($keySize, $context, $options): array
{
if (empty($this->kmsKeyId)) {
throw new CryptoException('A KMS key id is required for encryption'
. ' with KMS keywrap. Use a KmsMaterialsProviderV2 that has been'
. ' instantiated with a KMS key id.');
}
$options = array_change_key_case($options);
if (!isset($options['@kmsencryptioncontext'])
|| !is_array($options['@kmsencryptioncontext'])
) {
throw new CryptoException("'@KmsEncryptionContext' is a"
. " required argument when using KmsMaterialsProviderV3, and"
. " must be an associative array (or empty array).");
}
if (isset($options['@kmsencryptioncontext']['aws:x-amz-cek-alg'])) {
throw new CryptoException("Conflict in reserved @KmsEncryptionContext"
. " key aws:x-amz-cek-alg. This value is reserved for the S3"
. " Encryption Client and cannot be set by the user.");
}
if (isset($options['@kmsencryptioncontext']['kms_cmk_id'])) {
throw new CryptoException("Conflict in reserved @KmsEncryptionContext"
. " key kms_cmk_id. This value is reserved for the S3"
. " Encryption Client and cannot be set by the user.");
}
$context = array_merge($options['@kmsencryptioncontext'], $context);
$result = $this->kmsClient->generateDataKey([
'KeyId' => $this->kmsKeyId,
'KeySpec' => "AES_{$keySize}",
'EncryptionContext' => $context
]);
return [
'Plaintext' => $result['Plaintext'],
'Ciphertext' => base64_encode($result['CiphertextBlob']),
'UpdatedContext' => $context
];
}
}

View file

@ -0,0 +1,61 @@
<?php
namespace Aws\Crypto;
interface MaterialsProviderInterfaceV3
{
/**
* Returns if the requested size is supported by AES.
*
* @param int $keySize Size of the requested key in bits.
*
* @return bool
*/
public static function isSupportedKeySize(int $keySize): bool;
/**
* Returns the wrap algorithm name for this Provider.
*
* @return string
*/
public function getWrapAlgorithmName(): string;
/**
* Takes an encrypted content encryption key (CEK) and material description
* for use decrypting the key according to the Provider's specifications.
*
* @param string $encryptedCek Encrypted key to be decrypted by the Provider
* for use decrypting other data.
* @param array $materialDescription Material Description for use in
* decrypting the CEK.
* @param AlgorithmSuite $algorithmSuite AlgorithmSuite for use in decrypting the CEK.
*
* @return string
*/
public function decryptCek(
string $encryptedCek,
array $materialDescription,
array $options
): string;
/**
* @param string $keySize Length of a cipher key in bits for generating a
* random content encryption key (CEK).
* @param array $context Context map needed for key encryption
* @param array $options Additional options to be used in CEK generation
*
* @return array
*/
public function generateCek(
string $keySize,
array $context,
array $options
): array;
/**
* @param string $openSslName Cipher OpenSSL name to use for generating
* an initialization vector.
*
* @return string
*/
public function generateIv(string $openSslName): string;
}

View file

@ -0,0 +1,90 @@
<?php
namespace Aws\Crypto;
use Aws\Exception\CryptoException;
abstract class MaterialsProviderV3 implements MaterialsProviderInterfaceV3
{
private static array $supportedKeySizes = [
256 => true
];
/**
* Returns if the requested size is supported by AES.
*
* @param int $keySize Size of the requested key in bits.
*
* @return bool
*/
public static function isSupportedKeySize(int $keySize): bool
{
return isset(self::$supportedKeySizes[$keySize]);
}
/**
* Returns the wrap algorithm name for this Provider.
*
* @return string
*/
abstract public function getWrapAlgorithmName(): string;
/**
* Takes an encrypted content encryption key (CEK) and material description
* for use decrypting the key according to the Provider's specifications.
*
* @param string $encryptedCek Encrypted key to be decrypted by the Provider
* for use decrypting other data.
* @param array $materialDescription Material Description for use in
* decrypting the CEK.
* @param array $options Options for use in decrypting the CEK.
*
* @return string
*/
abstract public function decryptCek(
string $encryptedCek,
array $materialDescription,
array $options
): string;
/**
* @param string $keySize Length of a cipher key in bits for generating a
* random content encryption key (CEK).
* @param array $context Context map needed for key encryption
* @param array $options Additional options to be used in CEK generation
*
* @return array
*/
abstract public function generateCek(
string $keySize,
array $context,
array $options
): array;
/**
* @param string $openSslName Cipher OpenSSL name to use for generating
* an initialization vector.
*
* @return string
*/
public function generateIv(string $openSslName): string
{
$iv = null;
$cstrong = null;
if ($openSslName === "aes-96-gcm") {
$iv = openssl_random_pseudo_bytes(12, $cstrong);
} else if ($openSslName === "aes-224-gcm") {
$iv = openssl_random_pseudo_bytes(28, $cstrong);
} else {
$iv = openssl_random_pseudo_bytes(
openssl_cipher_iv_length($openSslName),
$cstrong
);
}
if (!$cstrong) {
throw new CryptoException("No strong cryptographic source available to generate a random IV.");
}
return $iv;
}
}

View file

@ -16,13 +16,63 @@ class MetadataEnvelope implements ArrayAccess, IteratorAggregate, JsonSerializab
{ {
use HasDataTrait; use HasDataTrait;
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# The "x-amz-" prefix denotes that the metadata is owned by an Amazon product
//# and MUST be prepended to all S3EC metadata mapkeys.
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-key-v2" MUST be present for V2 format objects.
const CONTENT_KEY_V2_HEADER = 'x-amz-key-v2'; const CONTENT_KEY_V2_HEADER = 'x-amz-key-v2';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-3") SHOULD be represented by a constant named "ENCRYPTED_DATA_KEY_V3" or similar in the implementation code.
const ENCRYPTED_DATA_KEY_V3 = 'x-amz-3';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-iv" MUST be present for V1 format objects.
const IV_HEADER = 'x-amz-iv'; const IV_HEADER = 'x-amz-iv';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-matdesc" MUST be present for V1 format objects.
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-matdesc" MUST be present for V2 format objects.
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-iv" MUST be present for V2 format objects.
const MATERIALS_DESCRIPTION_HEADER = 'x-amz-matdesc'; const MATERIALS_DESCRIPTION_HEADER = 'x-amz-matdesc';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-m") SHOULD be represented by a constant named "MAT_DESC_V3" or similar in the implementation code.
const MAT_DESC_V3 = 'x-amz-m';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-wrap-alg" MUST be present for V2 format objects.
const KEY_WRAP_ALGORITHM_HEADER = 'x-amz-wrap-alg'; const KEY_WRAP_ALGORITHM_HEADER = 'x-amz-wrap-alg';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-w") SHOULD be represented by a constant named "ENCRYPTED_DATA_KEY_ALGORITHM_V3" or similar in the implementation code.
const ENCRYPTED_DATA_KEY_ALGORITHM_V3 = 'x-amz-w';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-cek-alg" MUST be present for V2 format objects.
const CONTENT_CRYPTO_SCHEME_HEADER = 'x-amz-cek-alg'; const CONTENT_CRYPTO_SCHEME_HEADER = 'x-amz-cek-alg';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-c") SHOULD be represented by a constant named "CONTENT_CIPHER_V3" or similar in the implementation code.
const CONTENT_CIPHER_V3 = 'x-amz-c';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-tag-len" MUST be present for V2 format objects.
const CRYPTO_TAG_LENGTH_HEADER = 'x-amz-tag-len'; const CRYPTO_TAG_LENGTH_HEADER = 'x-amz-tag-len';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-unencrypted-content-length" SHOULD be present for V1 format objects.
const UNENCRYPTED_CONTENT_LENGTH_HEADER = 'x-amz-unencrypted-content-length'; const UNENCRYPTED_CONTENT_LENGTH_HEADER = 'x-amz-unencrypted-content-length';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-t") SHOULD be represented by a constant named "ENCRYPTION_CONTEXT_V3" or similar in the implementation code.
const ENCRYPTION_CONTEXT_V3 = 'x-amz-t';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-d") SHOULD be represented by a constant named "KEY_COMMITMENT_V3" or similar in the implementation code.
const KEY_COMMITMENT_V3 = 'x-amz-d';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-i") SHOULD be represented by a constant named "MESSAGE_ID_V3" or similar in the implementation code.
const MESSAGE_ID_V3 = 'x-amz-i';
private static $constants = []; private static $constants = [];
@ -30,6 +80,8 @@ class MetadataEnvelope implements ArrayAccess, IteratorAggregate, JsonSerializab
{ {
if (empty(self::$constants)) { if (empty(self::$constants)) {
$reflection = new \ReflectionClass(static::class); $reflection = new \ReflectionClass(static::class);
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# The "x-amz-meta-" prefix is automatically added by the S3 server and MUST NOT be included in implementation code.
foreach (array_values($reflection->getConstants()) as $constant) { foreach (array_values($reflection->getConstants()) as $constant) {
self::$constants[$constant] = true; self::$constants[$constant] = true;
} }
@ -45,6 +97,8 @@ class MetadataEnvelope implements ArrayAccess, IteratorAggregate, JsonSerializab
public function offsetSet($name, $value) public function offsetSet($name, $value)
{ {
$constants = self::getConstantValues(); $constants = self::getConstantValues();
//= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status
//# In general, if there is any deviation from the above format, with the exception of additional unrelated mapkeys, then the S3EC SHOULD throw an exception.
if (is_null($name) || !in_array($name, $constants)) { if (is_null($name) || !in_array($name, $constants)) {
throw new InvalidArgumentException('MetadataEnvelope fields must' throw new InvalidArgumentException('MetadataEnvelope fields must'
. ' must match a predefined offset; use the header constants.'); . ' must match a predefined offset; use the header constants.');
@ -58,4 +112,96 @@ class MetadataEnvelope implements ArrayAccess, IteratorAggregate, JsonSerializab
{ {
return $this->data; return $this->data;
} }
public static function isV2Envelope(MetadataEnvelope $envelope): bool
{
if (!isset($envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER])
|| !isset($envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER])
|| !isset($envelope[MetadataEnvelope::IV_HEADER])
|| !isset($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER])
|| !isset($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER])
|| !isset($envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER])
) {
return false;
}
return true;
}
public static function isV1Envelope(MetadataEnvelope $envelope): bool
{
if (!isset($envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-matdesc" MUST be present for V1 format objects.
|| !isset($envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-iv" MUST be present for V1 format objects.
|| !isset($envelope[MetadataEnvelope::IV_HEADER])
|| !isset($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER])
|| !isset($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-unencrypted-content-length" SHOULD be present for V1 format objects.
|| !isset($envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER])
) {
return false;
}
return true;
}
public static function isV3Envelope(MetadataEnvelope $envelope): bool
{
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-3" MUST be present for V3 format objects.
if (!isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-c" MUST be present for V3 format objects.
|| !isset($envelope[MetadataEnvelope::CONTENT_CIPHER_V3])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-d" MUST be present for V3 format objects.
|| !isset($envelope[MetadataEnvelope::KEY_COMMITMENT_V3])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-i" MUST be present for V3 format objects.
|| !isset($envelope[MetadataEnvelope::MESSAGE_ID_V3])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-w" MUST be present for V3 format objects.
|| !isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-t" SHOULD be present for V3 format objects that use KMS Encryption Context.
|| !isset($envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3])
) {
return false;
}
return true;
}
public static function getV2Fields(): array
{
return [
MetadataEnvelope::CONTENT_KEY_V2_HEADER,
MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER,
MetadataEnvelope::IV_HEADER,
MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER,
MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER,
MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER
];
}
public static function getV3Fields(): array
{
return [
MetadataEnvelope::ENCRYPTED_DATA_KEY_V3,
MetadataEnvelope::CONTENT_CIPHER_V3,
MetadataEnvelope::KEY_COMMITMENT_V3,
MetadataEnvelope::MESSAGE_ID_V3,
MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3,
MetadataEnvelope::ENCRYPTION_CONTEXT_V3
];
}
} }

View file

@ -25,6 +25,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createIntegrationWorkflowAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createIntegrationWorkflowAsync(array $args = [])
* @method \Aws\Result createProfile(array $args = []) * @method \Aws\Result createProfile(array $args = [])
* @method \GuzzleHttp\Promise\Promise createProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createProfileAsync(array $args = [])
* @method \Aws\Result createRecommender(array $args = [])
* @method \GuzzleHttp\Promise\Promise createRecommenderAsync(array $args = [])
* @method \Aws\Result createSegmentDefinition(array $args = []) * @method \Aws\Result createSegmentDefinition(array $args = [])
* @method \GuzzleHttp\Promise\Promise createSegmentDefinitionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createSegmentDefinitionAsync(array $args = [])
* @method \Aws\Result createSegmentEstimate(array $args = []) * @method \Aws\Result createSegmentEstimate(array $args = [])
@ -39,6 +41,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteDomainAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteDomainAsync(array $args = [])
* @method \Aws\Result deleteDomainLayout(array $args = []) * @method \Aws\Result deleteDomainLayout(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteDomainLayoutAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteDomainLayoutAsync(array $args = [])
* @method \Aws\Result deleteDomainObjectType(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteDomainObjectTypeAsync(array $args = [])
* @method \Aws\Result deleteEventStream(array $args = []) * @method \Aws\Result deleteEventStream(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteEventStreamAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteEventStreamAsync(array $args = [])
* @method \Aws\Result deleteEventTrigger(array $args = []) * @method \Aws\Result deleteEventTrigger(array $args = [])
@ -53,6 +57,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteProfileObjectAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteProfileObjectAsync(array $args = [])
* @method \Aws\Result deleteProfileObjectType(array $args = []) * @method \Aws\Result deleteProfileObjectType(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteProfileObjectTypeAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteProfileObjectTypeAsync(array $args = [])
* @method \Aws\Result deleteRecommender(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteRecommenderAsync(array $args = [])
* @method \Aws\Result deleteSegmentDefinition(array $args = []) * @method \Aws\Result deleteSegmentDefinition(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteSegmentDefinitionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteSegmentDefinitionAsync(array $args = [])
* @method \Aws\Result deleteWorkflow(array $args = []) * @method \Aws\Result deleteWorkflow(array $args = [])
@ -69,6 +75,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getDomainAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getDomainAsync(array $args = [])
* @method \Aws\Result getDomainLayout(array $args = []) * @method \Aws\Result getDomainLayout(array $args = [])
* @method \GuzzleHttp\Promise\Promise getDomainLayoutAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getDomainLayoutAsync(array $args = [])
* @method \Aws\Result getDomainObjectType(array $args = [])
* @method \GuzzleHttp\Promise\Promise getDomainObjectTypeAsync(array $args = [])
* @method \Aws\Result getEventStream(array $args = []) * @method \Aws\Result getEventStream(array $args = [])
* @method \GuzzleHttp\Promise\Promise getEventStreamAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getEventStreamAsync(array $args = [])
* @method \Aws\Result getEventTrigger(array $args = []) * @method \Aws\Result getEventTrigger(array $args = [])
@ -79,10 +87,18 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getIntegrationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getIntegrationAsync(array $args = [])
* @method \Aws\Result getMatches(array $args = []) * @method \Aws\Result getMatches(array $args = [])
* @method \GuzzleHttp\Promise\Promise getMatchesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getMatchesAsync(array $args = [])
* @method \Aws\Result getObjectTypeAttributeStatistics(array $args = [])
* @method \GuzzleHttp\Promise\Promise getObjectTypeAttributeStatisticsAsync(array $args = [])
* @method \Aws\Result getProfileHistoryRecord(array $args = [])
* @method \GuzzleHttp\Promise\Promise getProfileHistoryRecordAsync(array $args = [])
* @method \Aws\Result getProfileObjectType(array $args = []) * @method \Aws\Result getProfileObjectType(array $args = [])
* @method \GuzzleHttp\Promise\Promise getProfileObjectTypeAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getProfileObjectTypeAsync(array $args = [])
* @method \Aws\Result getProfileObjectTypeTemplate(array $args = []) * @method \Aws\Result getProfileObjectTypeTemplate(array $args = [])
* @method \GuzzleHttp\Promise\Promise getProfileObjectTypeTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getProfileObjectTypeTemplateAsync(array $args = [])
* @method \Aws\Result getProfileRecommendations(array $args = [])
* @method \GuzzleHttp\Promise\Promise getProfileRecommendationsAsync(array $args = [])
* @method \Aws\Result getRecommender(array $args = [])
* @method \GuzzleHttp\Promise\Promise getRecommenderAsync(array $args = [])
* @method \Aws\Result getSegmentDefinition(array $args = []) * @method \Aws\Result getSegmentDefinition(array $args = [])
* @method \GuzzleHttp\Promise\Promise getSegmentDefinitionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getSegmentDefinitionAsync(array $args = [])
* @method \Aws\Result getSegmentEstimate(array $args = []) * @method \Aws\Result getSegmentEstimate(array $args = [])
@ -109,6 +125,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listCalculatedAttributesForProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listCalculatedAttributesForProfileAsync(array $args = [])
* @method \Aws\Result listDomainLayouts(array $args = []) * @method \Aws\Result listDomainLayouts(array $args = [])
* @method \GuzzleHttp\Promise\Promise listDomainLayoutsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listDomainLayoutsAsync(array $args = [])
* @method \Aws\Result listDomainObjectTypes(array $args = [])
* @method \GuzzleHttp\Promise\Promise listDomainObjectTypesAsync(array $args = [])
* @method \Aws\Result listDomains(array $args = []) * @method \Aws\Result listDomains(array $args = [])
* @method \GuzzleHttp\Promise\Promise listDomainsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listDomainsAsync(array $args = [])
* @method \Aws\Result listEventStreams(array $args = []) * @method \Aws\Result listEventStreams(array $args = [])
@ -119,16 +137,24 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listIdentityResolutionJobsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listIdentityResolutionJobsAsync(array $args = [])
* @method \Aws\Result listIntegrations(array $args = []) * @method \Aws\Result listIntegrations(array $args = [])
* @method \GuzzleHttp\Promise\Promise listIntegrationsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listIntegrationsAsync(array $args = [])
* @method \Aws\Result listObjectTypeAttributeValues(array $args = [])
* @method \GuzzleHttp\Promise\Promise listObjectTypeAttributeValuesAsync(array $args = [])
* @method \Aws\Result listObjectTypeAttributes(array $args = []) * @method \Aws\Result listObjectTypeAttributes(array $args = [])
* @method \GuzzleHttp\Promise\Promise listObjectTypeAttributesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listObjectTypeAttributesAsync(array $args = [])
* @method \Aws\Result listProfileAttributeValues(array $args = []) * @method \Aws\Result listProfileAttributeValues(array $args = [])
* @method \GuzzleHttp\Promise\Promise listProfileAttributeValuesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listProfileAttributeValuesAsync(array $args = [])
* @method \Aws\Result listProfileHistoryRecords(array $args = [])
* @method \GuzzleHttp\Promise\Promise listProfileHistoryRecordsAsync(array $args = [])
* @method \Aws\Result listProfileObjectTypeTemplates(array $args = []) * @method \Aws\Result listProfileObjectTypeTemplates(array $args = [])
* @method \GuzzleHttp\Promise\Promise listProfileObjectTypeTemplatesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listProfileObjectTypeTemplatesAsync(array $args = [])
* @method \Aws\Result listProfileObjectTypes(array $args = []) * @method \Aws\Result listProfileObjectTypes(array $args = [])
* @method \GuzzleHttp\Promise\Promise listProfileObjectTypesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listProfileObjectTypesAsync(array $args = [])
* @method \Aws\Result listProfileObjects(array $args = []) * @method \Aws\Result listProfileObjects(array $args = [])
* @method \GuzzleHttp\Promise\Promise listProfileObjectsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listProfileObjectsAsync(array $args = [])
* @method \Aws\Result listRecommenderRecipes(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRecommenderRecipesAsync(array $args = [])
* @method \Aws\Result listRecommenders(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRecommendersAsync(array $args = [])
* @method \Aws\Result listRuleBasedMatches(array $args = []) * @method \Aws\Result listRuleBasedMatches(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRuleBasedMatchesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listRuleBasedMatchesAsync(array $args = [])
* @method \Aws\Result listSegmentDefinitions(array $args = []) * @method \Aws\Result listSegmentDefinitions(array $args = [])
@ -141,6 +167,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listWorkflowsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listWorkflowsAsync(array $args = [])
* @method \Aws\Result mergeProfiles(array $args = []) * @method \Aws\Result mergeProfiles(array $args = [])
* @method \GuzzleHttp\Promise\Promise mergeProfilesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise mergeProfilesAsync(array $args = [])
* @method \Aws\Result putDomainObjectType(array $args = [])
* @method \GuzzleHttp\Promise\Promise putDomainObjectTypeAsync(array $args = [])
* @method \Aws\Result putIntegration(array $args = []) * @method \Aws\Result putIntegration(array $args = [])
* @method \GuzzleHttp\Promise\Promise putIntegrationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putIntegrationAsync(array $args = [])
* @method \Aws\Result putProfileObject(array $args = []) * @method \Aws\Result putProfileObject(array $args = [])
@ -149,8 +177,12 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise putProfileObjectTypeAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putProfileObjectTypeAsync(array $args = [])
* @method \Aws\Result searchProfiles(array $args = []) * @method \Aws\Result searchProfiles(array $args = [])
* @method \GuzzleHttp\Promise\Promise searchProfilesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise searchProfilesAsync(array $args = [])
* @method \Aws\Result startRecommender(array $args = [])
* @method \GuzzleHttp\Promise\Promise startRecommenderAsync(array $args = [])
* @method \Aws\Result startUploadJob(array $args = []) * @method \Aws\Result startUploadJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise startUploadJobAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startUploadJobAsync(array $args = [])
* @method \Aws\Result stopRecommender(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopRecommenderAsync(array $args = [])
* @method \Aws\Result stopUploadJob(array $args = []) * @method \Aws\Result stopUploadJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopUploadJobAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopUploadJobAsync(array $args = [])
* @method \Aws\Result tagResource(array $args = []) * @method \Aws\Result tagResource(array $args = [])
@ -167,5 +199,7 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateEventTriggerAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateEventTriggerAsync(array $args = [])
* @method \Aws\Result updateProfile(array $args = []) * @method \Aws\Result updateProfile(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateProfileAsync(array $args = [])
* @method \Aws\Result updateRecommender(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateRecommenderAsync(array $args = [])
*/ */
class CustomerProfilesClient extends AwsClient {} class CustomerProfilesClient extends AwsClient {}

View file

@ -9,14 +9,20 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = [])
* @method \Aws\Result deleteCluster(array $args = []) * @method \Aws\Result deleteCluster(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = [])
* @method \Aws\Result deleteClusterPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteClusterPolicyAsync(array $args = [])
* @method \Aws\Result getCluster(array $args = []) * @method \Aws\Result getCluster(array $args = [])
* @method \GuzzleHttp\Promise\Promise getClusterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getClusterAsync(array $args = [])
* @method \Aws\Result getClusterPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise getClusterPolicyAsync(array $args = [])
* @method \Aws\Result getVpcEndpointServiceName(array $args = []) * @method \Aws\Result getVpcEndpointServiceName(array $args = [])
* @method \GuzzleHttp\Promise\Promise getVpcEndpointServiceNameAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getVpcEndpointServiceNameAsync(array $args = [])
* @method \Aws\Result listClusters(array $args = []) * @method \Aws\Result listClusters(array $args = [])
* @method \GuzzleHttp\Promise\Promise listClustersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listClustersAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result putClusterPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise putClusterPolicyAsync(array $args = [])
* @method \Aws\Result tagResource(array $args = []) * @method \Aws\Result tagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
* @method \Aws\Result untagResource(array $args = []) * @method \Aws\Result untagResource(array $args = [])

View file

@ -17,6 +17,10 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise associateEnvironmentRoleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateEnvironmentRoleAsync(array $args = [])
* @method \Aws\Result associateGovernedTerms(array $args = []) * @method \Aws\Result associateGovernedTerms(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateGovernedTermsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise associateGovernedTermsAsync(array $args = [])
* @method \Aws\Result batchGetAttributesMetadata(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchGetAttributesMetadataAsync(array $args = [])
* @method \Aws\Result batchPutAttributesMetadata(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchPutAttributesMetadataAsync(array $args = [])
* @method \Aws\Result cancelMetadataGenerationRun(array $args = []) * @method \Aws\Result cancelMetadataGenerationRun(array $args = [])
* @method \GuzzleHttp\Promise\Promise cancelMetadataGenerationRunAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise cancelMetadataGenerationRunAsync(array $args = [])
* @method \Aws\Result cancelSubscription(array $args = []) * @method \Aws\Result cancelSubscription(array $args = [])
@ -87,6 +91,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteAssetTypeAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteAssetTypeAsync(array $args = [])
* @method \Aws\Result deleteConnection(array $args = []) * @method \Aws\Result deleteConnection(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteConnectionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteConnectionAsync(array $args = [])
* @method \Aws\Result deleteDataExportConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteDataExportConfigurationAsync(array $args = [])
* @method \Aws\Result deleteDataProduct(array $args = []) * @method \Aws\Result deleteDataProduct(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteDataProductAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteDataProductAsync(array $args = [])
* @method \Aws\Result deleteDataSource(array $args = []) * @method \Aws\Result deleteDataSource(array $args = [])
@ -143,6 +149,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getAssetTypeAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getAssetTypeAsync(array $args = [])
* @method \Aws\Result getConnection(array $args = []) * @method \Aws\Result getConnection(array $args = [])
* @method \GuzzleHttp\Promise\Promise getConnectionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getConnectionAsync(array $args = [])
* @method \Aws\Result getDataExportConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise getDataExportConfigurationAsync(array $args = [])
* @method \Aws\Result getDataProduct(array $args = []) * @method \Aws\Result getDataProduct(array $args = [])
* @method \GuzzleHttp\Promise\Promise getDataProductAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getDataProductAsync(array $args = [])
* @method \Aws\Result getDataSource(array $args = []) * @method \Aws\Result getDataSource(array $args = [])
@ -273,6 +281,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise postLineageEventAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise postLineageEventAsync(array $args = [])
* @method \Aws\Result postTimeSeriesDataPoints(array $args = []) * @method \Aws\Result postTimeSeriesDataPoints(array $args = [])
* @method \GuzzleHttp\Promise\Promise postTimeSeriesDataPointsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise postTimeSeriesDataPointsAsync(array $args = [])
* @method \Aws\Result putDataExportConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise putDataExportConfigurationAsync(array $args = [])
* @method \Aws\Result putEnvironmentBlueprintConfiguration(array $args = []) * @method \Aws\Result putEnvironmentBlueprintConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise putEnvironmentBlueprintConfigurationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putEnvironmentBlueprintConfigurationAsync(array $args = [])
* @method \Aws\Result rejectPredictions(array $args = []) * @method \Aws\Result rejectPredictions(array $args = [])
@ -333,6 +343,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateProjectAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateProjectAsync(array $args = [])
* @method \Aws\Result updateProjectProfile(array $args = []) * @method \Aws\Result updateProjectProfile(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateProjectProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateProjectProfileAsync(array $args = [])
* @method \Aws\Result updateRootDomainUnitOwner(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateRootDomainUnitOwnerAsync(array $args = [])
* @method \Aws\Result updateRule(array $args = []) * @method \Aws\Result updateRule(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateRuleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateRuleAsync(array $args = [])
* @method \Aws\Result updateSubscriptionGrantStatus(array $args = []) * @method \Aws\Result updateSubscriptionGrantStatus(array $args = [])

View file

@ -11,6 +11,10 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise applyPendingMaintenanceActionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise applyPendingMaintenanceActionAsync(array $args = [])
* @method \Aws\Result batchStartRecommendations(array $args = []) * @method \Aws\Result batchStartRecommendations(array $args = [])
* @method \GuzzleHttp\Promise\Promise batchStartRecommendationsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise batchStartRecommendationsAsync(array $args = [])
* @method \Aws\Result cancelMetadataModelConversion(array $args = [])
* @method \GuzzleHttp\Promise\Promise cancelMetadataModelConversionAsync(array $args = [])
* @method \Aws\Result cancelMetadataModelCreation(array $args = [])
* @method \GuzzleHttp\Promise\Promise cancelMetadataModelCreationAsync(array $args = [])
* @method \Aws\Result cancelReplicationTaskAssessmentRun(array $args = []) * @method \Aws\Result cancelReplicationTaskAssessmentRun(array $args = [])
* @method \GuzzleHttp\Promise\Promise cancelReplicationTaskAssessmentRunAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise cancelReplicationTaskAssessmentRunAsync(array $args = [])
* @method \Aws\Result createDataMigration(array $args = []) * @method \Aws\Result createDataMigration(array $args = [])
@ -107,10 +111,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeFleetAdvisorSchemasAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeFleetAdvisorSchemasAsync(array $args = [])
* @method \Aws\Result describeInstanceProfiles(array $args = []) * @method \Aws\Result describeInstanceProfiles(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeInstanceProfilesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeInstanceProfilesAsync(array $args = [])
* @method \Aws\Result describeMetadataModel(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeMetadataModelAsync(array $args = [])
* @method \Aws\Result describeMetadataModelAssessments(array $args = []) * @method \Aws\Result describeMetadataModelAssessments(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeMetadataModelAssessmentsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeMetadataModelAssessmentsAsync(array $args = [])
* @method \Aws\Result describeMetadataModelChildren(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeMetadataModelChildrenAsync(array $args = [])
* @method \Aws\Result describeMetadataModelConversions(array $args = []) * @method \Aws\Result describeMetadataModelConversions(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeMetadataModelConversionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeMetadataModelConversionsAsync(array $args = [])
* @method \Aws\Result describeMetadataModelCreations(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeMetadataModelCreationsAsync(array $args = [])
* @method \Aws\Result describeMetadataModelExportsAsScript(array $args = []) * @method \Aws\Result describeMetadataModelExportsAsScript(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeMetadataModelExportsAsScriptAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeMetadataModelExportsAsScriptAsync(array $args = [])
* @method \Aws\Result describeMetadataModelExportsToTarget(array $args = []) * @method \Aws\Result describeMetadataModelExportsToTarget(array $args = [])
@ -155,6 +165,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeTableStatisticsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeTableStatisticsAsync(array $args = [])
* @method \Aws\Result exportMetadataModelAssessment(array $args = []) * @method \Aws\Result exportMetadataModelAssessment(array $args = [])
* @method \GuzzleHttp\Promise\Promise exportMetadataModelAssessmentAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise exportMetadataModelAssessmentAsync(array $args = [])
* @method \Aws\Result getTargetSelectionRules(array $args = [])
* @method \GuzzleHttp\Promise\Promise getTargetSelectionRulesAsync(array $args = [])
* @method \Aws\Result importCertificate(array $args = []) * @method \Aws\Result importCertificate(array $args = [])
* @method \GuzzleHttp\Promise\Promise importCertificateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise importCertificateAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])
@ -203,6 +215,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise startMetadataModelAssessmentAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startMetadataModelAssessmentAsync(array $args = [])
* @method \Aws\Result startMetadataModelConversion(array $args = []) * @method \Aws\Result startMetadataModelConversion(array $args = [])
* @method \GuzzleHttp\Promise\Promise startMetadataModelConversionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startMetadataModelConversionAsync(array $args = [])
* @method \Aws\Result startMetadataModelCreation(array $args = [])
* @method \GuzzleHttp\Promise\Promise startMetadataModelCreationAsync(array $args = [])
* @method \Aws\Result startMetadataModelExportAsScript(array $args = []) * @method \Aws\Result startMetadataModelExportAsScript(array $args = [])
* @method \GuzzleHttp\Promise\Promise startMetadataModelExportAsScriptAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startMetadataModelExportAsScriptAsync(array $args = [])
* @method \Aws\Result startMetadataModelExportToTarget(array $args = []) * @method \Aws\Result startMetadataModelExportToTarget(array $args = [])

View file

@ -15,6 +15,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createAccessEntryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createAccessEntryAsync(array $args = [])
* @method \Aws\Result createAddon(array $args = []) * @method \Aws\Result createAddon(array $args = [])
* @method \GuzzleHttp\Promise\Promise createAddonAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createAddonAsync(array $args = [])
* @method \Aws\Result createCapability(array $args = [])
* @method \GuzzleHttp\Promise\Promise createCapabilityAsync(array $args = [])
* @method \Aws\Result createCluster(array $args = []) * @method \Aws\Result createCluster(array $args = [])
* @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = [])
* @method \Aws\Result createEksAnywhereSubscription(array $args = []) * @method \Aws\Result createEksAnywhereSubscription(array $args = [])
@ -29,6 +31,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteAccessEntryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteAccessEntryAsync(array $args = [])
* @method \Aws\Result deleteAddon(array $args = []) * @method \Aws\Result deleteAddon(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteAddonAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteAddonAsync(array $args = [])
* @method \Aws\Result deleteCapability(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteCapabilityAsync(array $args = [])
* @method \Aws\Result deleteCluster(array $args = []) * @method \Aws\Result deleteCluster(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = [])
* @method \Aws\Result deleteEksAnywhereSubscription(array $args = []) * @method \Aws\Result deleteEksAnywhereSubscription(array $args = [])
@ -49,6 +53,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeAddonConfigurationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeAddonConfigurationAsync(array $args = [])
* @method \Aws\Result describeAddonVersions(array $args = []) * @method \Aws\Result describeAddonVersions(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeAddonVersionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeAddonVersionsAsync(array $args = [])
* @method \Aws\Result describeCapability(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeCapabilityAsync(array $args = [])
* @method \Aws\Result describeCluster(array $args = []) * @method \Aws\Result describeCluster(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeClusterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeClusterAsync(array $args = [])
* @method \Aws\Result describeClusterVersions(array $args = []) * @method \Aws\Result describeClusterVersions(array $args = [])
@ -81,6 +87,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listAddonsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listAddonsAsync(array $args = [])
* @method \Aws\Result listAssociatedAccessPolicies(array $args = []) * @method \Aws\Result listAssociatedAccessPolicies(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAssociatedAccessPoliciesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listAssociatedAccessPoliciesAsync(array $args = [])
* @method \Aws\Result listCapabilities(array $args = [])
* @method \GuzzleHttp\Promise\Promise listCapabilitiesAsync(array $args = [])
* @method \Aws\Result listClusters(array $args = []) * @method \Aws\Result listClusters(array $args = [])
* @method \GuzzleHttp\Promise\Promise listClustersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listClustersAsync(array $args = [])
* @method \Aws\Result listEksAnywhereSubscriptions(array $args = []) * @method \Aws\Result listEksAnywhereSubscriptions(array $args = [])
@ -111,6 +119,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateAccessEntryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateAccessEntryAsync(array $args = [])
* @method \Aws\Result updateAddon(array $args = []) * @method \Aws\Result updateAddon(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateAddonAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateAddonAsync(array $args = [])
* @method \Aws\Result updateCapability(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateCapabilityAsync(array $args = [])
* @method \Aws\Result updateClusterConfig(array $args = []) * @method \Aws\Result updateClusterConfig(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateClusterConfigAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateClusterConfigAsync(array $args = [])
* @method \Aws\Result updateClusterVersion(array $args = []) * @method \Aws\Result updateClusterVersion(array $args = [])

View file

@ -8,7 +8,7 @@ use Aws\Api\ApiProvider;
use Aws\PresignUrlMiddleware; use Aws\PresignUrlMiddleware;
/** /**
* Client used to interact with Amazon EC2. * Client used to interact with **Amazon EC2**.
* *
* @method \Aws\Result acceptVpcPeeringConnection(array $args = []) * @method \Aws\Result acceptVpcPeeringConnection(array $args = [])
* @method \GuzzleHttp\Promise\Promise acceptVpcPeeringConnectionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise acceptVpcPeeringConnectionAsync(array $args = [])
@ -502,6 +502,10 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise cancelImageLaunchPermissionAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise cancelImageLaunchPermissionAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result copyFpgaImage(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result copyFpgaImage(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise copyFpgaImageAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise copyFpgaImageAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result copyVolumes(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise copyVolumesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createCapacityManagerDataExport(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createCapacityManagerDataExportAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createCapacityReservation(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createCapacityReservation(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createCapacityReservationAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createCapacityReservationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createCapacityReservationBySplitting(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createCapacityReservationBySplitting(array $args = []) (supported in versions 2016-11-15)
@ -536,12 +540,20 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise createInstanceConnectEndpointAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createInstanceConnectEndpointAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createInstanceEventWindow(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createInstanceEventWindow(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createInstanceEventWindowAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createInstanceEventWindowAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createInterruptibleCapacityReservationAllocation(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createInterruptibleCapacityReservationAllocationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createIpam(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createIpam(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createIpamAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createIpamAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createIpamExternalResourceVerificationToken(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createIpamExternalResourceVerificationToken(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createIpamExternalResourceVerificationTokenAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createIpamExternalResourceVerificationTokenAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createIpamPolicy(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createIpamPolicyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createIpamPool(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createIpamPool(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createIpamPoolAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createIpamPoolAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createIpamPrefixListResolver(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createIpamPrefixListResolverAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createIpamPrefixListResolverTarget(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createIpamPrefixListResolverTargetAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createIpamResourceDiscovery(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createIpamResourceDiscovery(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createIpamResourceDiscoveryAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createIpamResourceDiscoveryAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createIpamScope(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createIpamScope(array $args = []) (supported in versions 2016-11-15)
@ -604,6 +616,10 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise createTransitGatewayConnectAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createTransitGatewayConnectAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createTransitGatewayConnectPeer(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createTransitGatewayConnectPeer(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createTransitGatewayConnectPeerAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createTransitGatewayConnectPeerAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createTransitGatewayMeteringPolicy(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createTransitGatewayMeteringPolicyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createTransitGatewayMeteringPolicyEntry(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createTransitGatewayMeteringPolicyEntryAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createTransitGatewayMulticastDomain(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createTransitGatewayMulticastDomain(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createTransitGatewayMulticastDomainAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createTransitGatewayMulticastDomainAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createTransitGatewayPeeringAttachment(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createTransitGatewayPeeringAttachment(array $args = []) (supported in versions 2016-11-15)
@ -630,10 +646,16 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise createVerifiedAccessTrustProviderAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createVerifiedAccessTrustProviderAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createVpcBlockPublicAccessExclusion(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createVpcBlockPublicAccessExclusion(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createVpcBlockPublicAccessExclusionAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createVpcBlockPublicAccessExclusionAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createVpcEncryptionControl(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createVpcEncryptionControlAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createVpcEndpointConnectionNotification(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createVpcEndpointConnectionNotification(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createVpcEndpointConnectionNotificationAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createVpcEndpointConnectionNotificationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createVpcEndpointServiceConfiguration(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result createVpcEndpointServiceConfiguration(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createVpcEndpointServiceConfigurationAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise createVpcEndpointServiceConfigurationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result createVpnConcentrator(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise createVpnConcentratorAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteCapacityManagerDataExport(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteCapacityManagerDataExportAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteCarrierGateway(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteCarrierGateway(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteCarrierGatewayAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteCarrierGatewayAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteClientVpnEndpoint(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteClientVpnEndpoint(array $args = []) (supported in versions 2016-11-15)
@ -660,8 +682,14 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise deleteIpamAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteIpamAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteIpamExternalResourceVerificationToken(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteIpamExternalResourceVerificationToken(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteIpamExternalResourceVerificationTokenAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteIpamExternalResourceVerificationTokenAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteIpamPolicy(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteIpamPolicyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteIpamPool(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteIpamPool(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteIpamPoolAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteIpamPoolAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteIpamPrefixListResolver(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteIpamPrefixListResolverAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteIpamPrefixListResolverTarget(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteIpamPrefixListResolverTargetAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteIpamResourceDiscovery(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteIpamResourceDiscovery(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteIpamResourceDiscoveryAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteIpamResourceDiscoveryAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteIpamScope(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteIpamScope(array $args = []) (supported in versions 2016-11-15)
@ -720,6 +748,10 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise deleteTransitGatewayConnectAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteTransitGatewayConnectAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteTransitGatewayConnectPeer(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteTransitGatewayConnectPeer(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteTransitGatewayConnectPeerAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteTransitGatewayConnectPeerAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteTransitGatewayMeteringPolicy(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteTransitGatewayMeteringPolicyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteTransitGatewayMeteringPolicyEntry(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteTransitGatewayMeteringPolicyEntryAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteTransitGatewayMulticastDomain(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteTransitGatewayMulticastDomain(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteTransitGatewayMulticastDomainAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteTransitGatewayMulticastDomainAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteTransitGatewayPeeringAttachment(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteTransitGatewayPeeringAttachment(array $args = []) (supported in versions 2016-11-15)
@ -746,10 +778,14 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise deleteVerifiedAccessTrustProviderAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteVerifiedAccessTrustProviderAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteVpcBlockPublicAccessExclusion(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteVpcBlockPublicAccessExclusion(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteVpcBlockPublicAccessExclusionAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteVpcBlockPublicAccessExclusionAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteVpcEncryptionControl(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteVpcEncryptionControlAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteVpcEndpointConnectionNotifications(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteVpcEndpointConnectionNotifications(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteVpcEndpointConnectionNotificationsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteVpcEndpointConnectionNotificationsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteVpcEndpointServiceConfigurations(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deleteVpcEndpointServiceConfigurations(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteVpcEndpointServiceConfigurationsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deleteVpcEndpointServiceConfigurationsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deleteVpnConcentrator(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deleteVpnConcentratorAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deprovisionByoipCidr(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deprovisionByoipCidr(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise deprovisionByoipCidrAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise deprovisionByoipCidrAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result deprovisionIpamByoasn(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result deprovisionIpamByoasn(array $args = []) (supported in versions 2016-11-15)
@ -784,10 +820,14 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise describeCapacityBlockStatusAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeCapacityBlockStatusAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeCapacityBlocks(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeCapacityBlocks(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeCapacityBlocksAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeCapacityBlocksAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeCapacityManagerDataExports(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeCapacityManagerDataExportsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeCapacityReservationBillingRequests(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeCapacityReservationBillingRequests(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeCapacityReservationBillingRequestsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeCapacityReservationBillingRequestsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeCapacityReservationFleets(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeCapacityReservationFleets(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeCapacityReservationFleetsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeCapacityReservationFleetsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeCapacityReservationTopology(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeCapacityReservationTopologyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeCapacityReservations(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeCapacityReservations(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeCapacityReservationsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeCapacityReservationsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeCarrierGateways(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeCarrierGateways(array $args = []) (supported in versions 2016-11-15)
@ -844,6 +884,10 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise describeInstanceEventWindowsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeInstanceEventWindowsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeInstanceImageMetadata(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeInstanceImageMetadata(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeInstanceImageMetadataAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeInstanceImageMetadataAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeInstanceSqlHaHistoryStates(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeInstanceSqlHaHistoryStatesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeInstanceSqlHaStates(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeInstanceSqlHaStatesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeInstanceTopology(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeInstanceTopology(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeInstanceTopologyAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeInstanceTopologyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeInstanceTypeOfferings(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeInstanceTypeOfferings(array $args = []) (supported in versions 2016-11-15)
@ -854,8 +898,14 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise describeIpamByoasnAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeIpamByoasnAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeIpamExternalResourceVerificationTokens(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeIpamExternalResourceVerificationTokens(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeIpamExternalResourceVerificationTokensAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeIpamExternalResourceVerificationTokensAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeIpamPolicies(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeIpamPoliciesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeIpamPools(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeIpamPools(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeIpamPoolsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeIpamPoolsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeIpamPrefixListResolverTargets(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeIpamPrefixListResolverTargetsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeIpamPrefixListResolvers(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeIpamPrefixListResolversAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeIpamResourceDiscoveries(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeIpamResourceDiscoveries(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeIpamResourceDiscoveriesAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeIpamResourceDiscoveriesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeIpamResourceDiscoveryAssociations(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeIpamResourceDiscoveryAssociations(array $args = []) (supported in versions 2016-11-15)
@ -938,6 +988,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise describeTransitGatewayConnectPeersAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeTransitGatewayConnectPeersAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeTransitGatewayConnects(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeTransitGatewayConnects(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeTransitGatewayConnectsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeTransitGatewayConnectsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeTransitGatewayMeteringPolicies(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeTransitGatewayMeteringPoliciesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeTransitGatewayMulticastDomains(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeTransitGatewayMulticastDomains(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeTransitGatewayMulticastDomainsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeTransitGatewayMulticastDomainsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeTransitGatewayPeeringAttachments(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeTransitGatewayPeeringAttachments(array $args = []) (supported in versions 2016-11-15)
@ -970,6 +1022,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise describeVpcBlockPublicAccessExclusionsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeVpcBlockPublicAccessExclusionsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeVpcBlockPublicAccessOptions(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeVpcBlockPublicAccessOptions(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeVpcBlockPublicAccessOptionsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeVpcBlockPublicAccessOptionsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeVpcEncryptionControls(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeVpcEncryptionControlsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeVpcEndpointAssociations(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeVpcEndpointAssociations(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeVpcEndpointAssociationsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeVpcEndpointAssociationsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeVpcEndpointConnectionNotifications(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeVpcEndpointConnectionNotifications(array $args = []) (supported in versions 2016-11-15)
@ -980,6 +1034,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise describeVpcEndpointServiceConfigurationsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeVpcEndpointServiceConfigurationsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeVpcEndpointServicePermissions(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result describeVpcEndpointServicePermissions(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeVpcEndpointServicePermissionsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise describeVpcEndpointServicePermissionsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result describeVpnConcentrators(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise describeVpnConcentratorsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result detachVerifiedAccessTrustProvider(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result detachVerifiedAccessTrustProvider(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise detachVerifiedAccessTrustProviderAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise detachVerifiedAccessTrustProviderAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableAddressTransfer(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result disableAddressTransfer(array $args = []) (supported in versions 2016-11-15)
@ -988,6 +1044,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise disableAllowedImagesSettingsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise disableAllowedImagesSettingsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableAwsNetworkPerformanceMetricSubscription(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result disableAwsNetworkPerformanceMetricSubscription(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise disableAwsNetworkPerformanceMetricSubscriptionAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise disableAwsNetworkPerformanceMetricSubscriptionAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableCapacityManager(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise disableCapacityManagerAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableEbsEncryptionByDefault(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result disableEbsEncryptionByDefault(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise disableEbsEncryptionByDefaultAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise disableEbsEncryptionByDefaultAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableFastLaunch(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result disableFastLaunch(array $args = []) (supported in versions 2016-11-15)
@ -1002,8 +1060,12 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise disableImageDeprecationAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise disableImageDeprecationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableImageDeregistrationProtection(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result disableImageDeregistrationProtection(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise disableImageDeregistrationProtectionAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise disableImageDeregistrationProtectionAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableInstanceSqlHaStandbyDetections(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise disableInstanceSqlHaStandbyDetectionsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableIpamOrganizationAdminAccount(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result disableIpamOrganizationAdminAccount(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise disableIpamOrganizationAdminAccountAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise disableIpamOrganizationAdminAccountAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableIpamPolicy(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise disableIpamPolicyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableRouteServerPropagation(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result disableRouteServerPropagation(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise disableRouteServerPropagationAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise disableRouteServerPropagationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result disableSerialConsoleAccess(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result disableSerialConsoleAccess(array $args = []) (supported in versions 2016-11-15)
@ -1050,6 +1112,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise enableAllowedImagesSettingsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise enableAllowedImagesSettingsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result enableAwsNetworkPerformanceMetricSubscription(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result enableAwsNetworkPerformanceMetricSubscription(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise enableAwsNetworkPerformanceMetricSubscriptionAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise enableAwsNetworkPerformanceMetricSubscriptionAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result enableCapacityManager(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise enableCapacityManagerAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result enableEbsEncryptionByDefault(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result enableEbsEncryptionByDefault(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise enableEbsEncryptionByDefaultAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise enableEbsEncryptionByDefaultAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result enableFastLaunch(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result enableFastLaunch(array $args = []) (supported in versions 2016-11-15)
@ -1064,8 +1128,12 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise enableImageDeprecationAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise enableImageDeprecationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result enableImageDeregistrationProtection(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result enableImageDeregistrationProtection(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise enableImageDeregistrationProtectionAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise enableImageDeregistrationProtectionAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result enableInstanceSqlHaStandbyDetections(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise enableInstanceSqlHaStandbyDetectionsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result enableIpamOrganizationAdminAccount(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result enableIpamOrganizationAdminAccount(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise enableIpamOrganizationAdminAccountAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise enableIpamOrganizationAdminAccountAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result enableIpamPolicy(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise enableIpamPolicyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result enableReachabilityAnalyzerOrganizationSharing(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result enableReachabilityAnalyzerOrganizationSharing(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise enableReachabilityAnalyzerOrganizationSharingAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise enableReachabilityAnalyzerOrganizationSharingAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result enableRouteServerPropagation(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result enableRouteServerPropagation(array $args = []) (supported in versions 2016-11-15)
@ -1096,6 +1164,12 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise getAssociatedIpv6PoolCidrsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getAssociatedIpv6PoolCidrsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getAwsNetworkPerformanceData(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getAwsNetworkPerformanceData(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getAwsNetworkPerformanceDataAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getAwsNetworkPerformanceDataAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getCapacityManagerAttributes(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getCapacityManagerAttributesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getCapacityManagerMetricData(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getCapacityManagerMetricDataAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getCapacityManagerMetricDimensions(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getCapacityManagerMetricDimensionsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getCapacityReservationUsage(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getCapacityReservationUsage(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getCapacityReservationUsageAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getCapacityReservationUsageAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getCoipPoolUsage(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getCoipPoolUsage(array $args = []) (supported in versions 2016-11-15)
@ -1108,10 +1182,14 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise getEbsDefaultKmsKeyIdAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getEbsDefaultKmsKeyIdAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getEbsEncryptionByDefault(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getEbsEncryptionByDefault(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getEbsEncryptionByDefaultAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getEbsEncryptionByDefaultAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getEnabledIpamPolicy(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getEnabledIpamPolicyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getFlowLogsIntegrationTemplate(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getFlowLogsIntegrationTemplate(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getFlowLogsIntegrationTemplateAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getFlowLogsIntegrationTemplateAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getGroupsForCapacityReservation(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getGroupsForCapacityReservation(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getGroupsForCapacityReservationAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getGroupsForCapacityReservationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getImageAncestry(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getImageAncestryAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getImageBlockPublicAccessState(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getImageBlockPublicAccessState(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getImageBlockPublicAccessStateAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getImageBlockPublicAccessStateAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getInstanceMetadataDefaults(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getInstanceMetadataDefaults(array $args = []) (supported in versions 2016-11-15)
@ -1130,10 +1208,20 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise getIpamDiscoveredPublicAddressesAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getIpamDiscoveredPublicAddressesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getIpamDiscoveredResourceCidrs(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getIpamDiscoveredResourceCidrs(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getIpamDiscoveredResourceCidrsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getIpamDiscoveredResourceCidrsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getIpamPolicyAllocationRules(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getIpamPolicyAllocationRulesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getIpamPolicyOrganizationTargets(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getIpamPolicyOrganizationTargetsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getIpamPoolAllocations(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getIpamPoolAllocations(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getIpamPoolAllocationsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getIpamPoolAllocationsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getIpamPoolCidrs(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getIpamPoolCidrs(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getIpamPoolCidrsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getIpamPoolCidrsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getIpamPrefixListResolverRules(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getIpamPrefixListResolverRulesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getIpamPrefixListResolverVersionEntries(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getIpamPrefixListResolverVersionEntriesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getIpamPrefixListResolverVersions(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getIpamPrefixListResolverVersionsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getIpamResourceCidrs(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getIpamResourceCidrs(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getIpamResourceCidrsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getIpamResourceCidrsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getLaunchTemplateData(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getLaunchTemplateData(array $args = []) (supported in versions 2016-11-15)
@ -1164,6 +1252,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise getSubnetCidrReservationsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getSubnetCidrReservationsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getTransitGatewayAttachmentPropagations(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getTransitGatewayAttachmentPropagations(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getTransitGatewayAttachmentPropagationsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getTransitGatewayAttachmentPropagationsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getTransitGatewayMeteringPolicyEntries(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getTransitGatewayMeteringPolicyEntriesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getTransitGatewayMulticastDomainAssociations(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getTransitGatewayMulticastDomainAssociations(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getTransitGatewayMulticastDomainAssociationsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getTransitGatewayMulticastDomainAssociationsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getTransitGatewayPolicyTableAssociations(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getTransitGatewayPolicyTableAssociations(array $args = []) (supported in versions 2016-11-15)
@ -1182,6 +1272,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise getVerifiedAccessEndpointTargetsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getVerifiedAccessEndpointTargetsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getVerifiedAccessGroupPolicy(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getVerifiedAccessGroupPolicy(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getVerifiedAccessGroupPolicyAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getVerifiedAccessGroupPolicyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getVpcResourcesBlockingEncryptionEnforcement(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getVpcResourcesBlockingEncryptionEnforcementAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getVpnConnectionDeviceSampleConfiguration(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getVpnConnectionDeviceSampleConfiguration(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise getVpnConnectionDeviceSampleConfigurationAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise getVpnConnectionDeviceSampleConfigurationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result getVpnConnectionDeviceTypes(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result getVpnConnectionDeviceTypes(array $args = []) (supported in versions 2016-11-15)
@ -1194,6 +1286,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise listImagesInRecycleBinAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise listImagesInRecycleBinAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result listSnapshotsInRecycleBin(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result listSnapshotsInRecycleBin(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise listSnapshotsInRecycleBinAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise listSnapshotsInRecycleBinAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result listVolumesInRecycleBin(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise listVolumesInRecycleBinAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result lockSnapshot(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result lockSnapshot(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise lockSnapshotAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise lockSnapshotAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyAddressAttribute(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyAddressAttribute(array $args = []) (supported in versions 2016-11-15)
@ -1236,8 +1330,14 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise modifyInstanceNetworkPerformanceOptionsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise modifyInstanceNetworkPerformanceOptionsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyIpam(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyIpam(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyIpamAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise modifyIpamAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyIpamPolicyAllocationRules(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyIpamPolicyAllocationRulesAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyIpamPool(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyIpamPool(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyIpamPoolAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise modifyIpamPoolAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyIpamPrefixListResolver(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyIpamPrefixListResolverAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyIpamPrefixListResolverTarget(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyIpamPrefixListResolverTargetAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyIpamResourceCidr(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyIpamResourceCidr(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyIpamResourceCidrAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise modifyIpamResourceCidrAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyIpamResourceDiscovery(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyIpamResourceDiscovery(array $args = []) (supported in versions 2016-11-15)
@ -1268,6 +1368,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise modifyTrafficMirrorSessionAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise modifyTrafficMirrorSessionAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyTransitGateway(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyTransitGateway(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyTransitGatewayAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise modifyTransitGatewayAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyTransitGatewayMeteringPolicy(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyTransitGatewayMeteringPolicyAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyTransitGatewayPrefixListReference(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyTransitGatewayPrefixListReference(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyTransitGatewayPrefixListReferenceAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise modifyTransitGatewayPrefixListReferenceAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyTransitGatewayVpcAttachment(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyTransitGatewayVpcAttachment(array $args = []) (supported in versions 2016-11-15)
@ -1292,6 +1394,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise modifyVpcBlockPublicAccessExclusionAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise modifyVpcBlockPublicAccessExclusionAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyVpcBlockPublicAccessOptions(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyVpcBlockPublicAccessOptions(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyVpcBlockPublicAccessOptionsAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise modifyVpcBlockPublicAccessOptionsAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyVpcEncryptionControl(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyVpcEncryptionControlAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyVpcEndpointConnectionNotification(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyVpcEndpointConnectionNotification(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise modifyVpcEndpointConnectionNotificationAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise modifyVpcEndpointConnectionNotificationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result modifyVpcEndpointServiceConfiguration(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result modifyVpcEndpointServiceConfiguration(array $args = []) (supported in versions 2016-11-15)
@ -1366,6 +1470,8 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise restoreSnapshotFromRecycleBinAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise restoreSnapshotFromRecycleBinAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result restoreSnapshotTier(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result restoreSnapshotTier(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise restoreSnapshotTierAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise restoreSnapshotTierAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result restoreVolumeFromRecycleBin(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise restoreVolumeFromRecycleBinAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result revokeClientVpnIngress(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result revokeClientVpnIngress(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise revokeClientVpnIngressAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise revokeClientVpnIngressAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result searchLocalGatewayRoutes(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result searchLocalGatewayRoutes(array $args = []) (supported in versions 2016-11-15)
@ -1392,6 +1498,10 @@ use Aws\PresignUrlMiddleware;
* @method \GuzzleHttp\Promise\Promise unassignPrivateNatGatewayAddressAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise unassignPrivateNatGatewayAddressAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result unlockSnapshot(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result unlockSnapshot(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise unlockSnapshotAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise unlockSnapshotAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result updateCapacityManagerOrganizationsAccess(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise updateCapacityManagerOrganizationsAccessAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result updateInterruptibleCapacityReservationAllocation(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise updateInterruptibleCapacityReservationAllocationAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result updateSecurityGroupRuleDescriptionsEgress(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result updateSecurityGroupRuleDescriptionsEgress(array $args = []) (supported in versions 2016-11-15)
* @method \GuzzleHttp\Promise\Promise updateSecurityGroupRuleDescriptionsEgressAsync(array $args = []) (supported in versions 2016-11-15) * @method \GuzzleHttp\Promise\Promise updateSecurityGroupRuleDescriptionsEgressAsync(array $args = []) (supported in versions 2016-11-15)
* @method \Aws\Result updateSecurityGroupRuleDescriptionsIngress(array $args = []) (supported in versions 2016-11-15) * @method \Aws\Result updateSecurityGroupRuleDescriptionsIngress(array $args = []) (supported in versions 2016-11-15)

View file

@ -34,10 +34,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteRepositoryCreationTemplateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteRepositoryCreationTemplateAsync(array $args = [])
* @method \Aws\Result deleteRepositoryPolicy(array $args = []) * @method \Aws\Result deleteRepositoryPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteRepositoryPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteRepositoryPolicyAsync(array $args = [])
* @method \Aws\Result deleteSigningConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteSigningConfigurationAsync(array $args = [])
* @method \Aws\Result deregisterPullTimeUpdateExclusion(array $args = [])
* @method \GuzzleHttp\Promise\Promise deregisterPullTimeUpdateExclusionAsync(array $args = [])
* @method \Aws\Result describeImageReplicationStatus(array $args = []) * @method \Aws\Result describeImageReplicationStatus(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeImageReplicationStatusAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeImageReplicationStatusAsync(array $args = [])
* @method \Aws\Result describeImageScanFindings(array $args = []) * @method \Aws\Result describeImageScanFindings(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeImageScanFindingsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeImageScanFindingsAsync(array $args = [])
* @method \Aws\Result describeImageSigningStatus(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeImageSigningStatusAsync(array $args = [])
* @method \Aws\Result describeImages(array $args = []) * @method \Aws\Result describeImages(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeImagesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeImagesAsync(array $args = [])
* @method \Aws\Result describePullThroughCacheRules(array $args = []) * @method \Aws\Result describePullThroughCacheRules(array $args = [])
@ -64,10 +70,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getRegistryScanningConfigurationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getRegistryScanningConfigurationAsync(array $args = [])
* @method \Aws\Result getRepositoryPolicy(array $args = []) * @method \Aws\Result getRepositoryPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise getRepositoryPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getRepositoryPolicyAsync(array $args = [])
* @method \Aws\Result getSigningConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise getSigningConfigurationAsync(array $args = [])
* @method \Aws\Result initiateLayerUpload(array $args = []) * @method \Aws\Result initiateLayerUpload(array $args = [])
* @method \GuzzleHttp\Promise\Promise initiateLayerUploadAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise initiateLayerUploadAsync(array $args = [])
* @method \Aws\Result listImageReferrers(array $args = [])
* @method \GuzzleHttp\Promise\Promise listImageReferrersAsync(array $args = [])
* @method \Aws\Result listImages(array $args = []) * @method \Aws\Result listImages(array $args = [])
* @method \GuzzleHttp\Promise\Promise listImagesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listImagesAsync(array $args = [])
* @method \Aws\Result listPullTimeUpdateExclusions(array $args = [])
* @method \GuzzleHttp\Promise\Promise listPullTimeUpdateExclusionsAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result putAccountSetting(array $args = []) * @method \Aws\Result putAccountSetting(array $args = [])
@ -86,6 +98,10 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise putRegistryScanningConfigurationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putRegistryScanningConfigurationAsync(array $args = [])
* @method \Aws\Result putReplicationConfiguration(array $args = []) * @method \Aws\Result putReplicationConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise putReplicationConfigurationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putReplicationConfigurationAsync(array $args = [])
* @method \Aws\Result putSigningConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise putSigningConfigurationAsync(array $args = [])
* @method \Aws\Result registerPullTimeUpdateExclusion(array $args = [])
* @method \GuzzleHttp\Promise\Promise registerPullTimeUpdateExclusionAsync(array $args = [])
* @method \Aws\Result setRepositoryPolicy(array $args = []) * @method \Aws\Result setRepositoryPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise setRepositoryPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise setRepositoryPolicyAsync(array $args = [])
* @method \Aws\Result startImageScan(array $args = []) * @method \Aws\Result startImageScan(array $args = [])
@ -96,6 +112,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
* @method \Aws\Result untagResource(array $args = []) * @method \Aws\Result untagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
* @method \Aws\Result updateImageStorageClass(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateImageStorageClassAsync(array $args = [])
* @method \Aws\Result updatePullThroughCacheRule(array $args = []) * @method \Aws\Result updatePullThroughCacheRule(array $args = [])
* @method \GuzzleHttp\Promise\Promise updatePullThroughCacheRuleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updatePullThroughCacheRuleAsync(array $args = [])
* @method \Aws\Result updateRepositoryCreationTemplate(array $args = []) * @method \Aws\Result updateRepositoryCreationTemplate(array $args = [])

View file

@ -10,6 +10,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createCapacityProviderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createCapacityProviderAsync(array $args = [])
* @method \Aws\Result createCluster(array $args = []) * @method \Aws\Result createCluster(array $args = [])
* @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = [])
* @method \Aws\Result createExpressGatewayService(array $args = [])
* @method \GuzzleHttp\Promise\Promise createExpressGatewayServiceAsync(array $args = [])
* @method \Aws\Result createService(array $args = []) * @method \Aws\Result createService(array $args = [])
* @method \GuzzleHttp\Promise\Promise createServiceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createServiceAsync(array $args = [])
* @method \Aws\Result createTaskSet(array $args = []) * @method \Aws\Result createTaskSet(array $args = [])
@ -22,6 +24,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteCapacityProviderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteCapacityProviderAsync(array $args = [])
* @method \Aws\Result deleteCluster(array $args = []) * @method \Aws\Result deleteCluster(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = [])
* @method \Aws\Result deleteExpressGatewayService(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteExpressGatewayServiceAsync(array $args = [])
* @method \Aws\Result deleteService(array $args = []) * @method \Aws\Result deleteService(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteServiceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteServiceAsync(array $args = [])
* @method \Aws\Result deleteTaskDefinitions(array $args = []) * @method \Aws\Result deleteTaskDefinitions(array $args = [])
@ -38,6 +42,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeClustersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeClustersAsync(array $args = [])
* @method \Aws\Result describeContainerInstances(array $args = []) * @method \Aws\Result describeContainerInstances(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeContainerInstancesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeContainerInstancesAsync(array $args = [])
* @method \Aws\Result describeExpressGatewayService(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeExpressGatewayServiceAsync(array $args = [])
* @method \Aws\Result describeServiceDeployments(array $args = []) * @method \Aws\Result describeServiceDeployments(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeServiceDeploymentsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeServiceDeploymentsAsync(array $args = [])
* @method \Aws\Result describeServiceRevisions(array $args = []) * @method \Aws\Result describeServiceRevisions(array $args = [])
@ -118,6 +124,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateContainerAgentAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateContainerAgentAsync(array $args = [])
* @method \Aws\Result updateContainerInstancesState(array $args = []) * @method \Aws\Result updateContainerInstancesState(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateContainerInstancesStateAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateContainerInstancesStateAsync(array $args = [])
* @method \Aws\Result updateExpressGatewayService(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateExpressGatewayServiceAsync(array $args = [])
* @method \Aws\Result updateService(array $args = []) * @method \Aws\Result updateService(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateServiceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateServiceAsync(array $args = [])
* @method \Aws\Result updateServicePrimaryTaskSet(array $args = []) * @method \Aws\Result updateServicePrimaryTaskSet(array $args = [])

View file

@ -1,44 +0,0 @@
<?php
namespace Aws\ElasticTranscoder;
use Aws\AwsClient;
/**
* This client is used to interact with the **Amazon Elastic Transcoder** service.
*
* @method \Aws\Result cancelJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise cancelJobAsync(array $args = [])
* @method \Aws\Result createJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise createJobAsync(array $args = [])
* @method \Aws\Result createPipeline(array $args = [])
* @method \GuzzleHttp\Promise\Promise createPipelineAsync(array $args = [])
* @method \Aws\Result createPreset(array $args = [])
* @method \GuzzleHttp\Promise\Promise createPresetAsync(array $args = [])
* @method \Aws\Result deletePipeline(array $args = [])
* @method \GuzzleHttp\Promise\Promise deletePipelineAsync(array $args = [])
* @method \Aws\Result deletePreset(array $args = [])
* @method \GuzzleHttp\Promise\Promise deletePresetAsync(array $args = [])
* @method \Aws\Result listJobsByPipeline(array $args = [])
* @method \GuzzleHttp\Promise\Promise listJobsByPipelineAsync(array $args = [])
* @method \Aws\Result listJobsByStatus(array $args = [])
* @method \GuzzleHttp\Promise\Promise listJobsByStatusAsync(array $args = [])
* @method \Aws\Result listPipelines(array $args = [])
* @method \GuzzleHttp\Promise\Promise listPipelinesAsync(array $args = [])
* @method \Aws\Result listPresets(array $args = [])
* @method \GuzzleHttp\Promise\Promise listPresetsAsync(array $args = [])
* @method \Aws\Result readJob(array $args = [])
* @method \GuzzleHttp\Promise\Promise readJobAsync(array $args = [])
* @method \Aws\Result readPipeline(array $args = [])
* @method \GuzzleHttp\Promise\Promise readPipelineAsync(array $args = [])
* @method \Aws\Result readPreset(array $args = [])
* @method \GuzzleHttp\Promise\Promise readPresetAsync(array $args = [])
* @method \Aws\Result testRole(array $args = [])
* @method \GuzzleHttp\Promise\Promise testRoleAsync(array $args = [])
* @method \Aws\Result updatePipeline(array $args = [])
* @method \GuzzleHttp\Promise\Promise updatePipelineAsync(array $args = [])
* @method \Aws\Result updatePipelineNotifications(array $args = [])
* @method \GuzzleHttp\Promise\Promise updatePipelineNotificationsAsync(array $args = [])
* @method \Aws\Result updatePipelineStatus(array $args = [])
* @method \GuzzleHttp\Promise\Promise updatePipelineStatusAsync(array $args = [])
*/
class ElasticTranscoderClient extends AwsClient {}

View file

@ -1,9 +0,0 @@
<?php
namespace Aws\ElasticTranscoder\Exception;
use Aws\Exception\AwsException;
/**
* Represents an error interacting with the Amazon Elastic Transcoder service.
*/
class ElasticTranscoderException extends AwsException {}

View file

@ -322,8 +322,8 @@ class EndpointDiscoveryMiddleware
// If no more cached endpoints, make discovery call // If no more cached endpoints, make discovery call
// if none made within cooldown for given key // if none made within cooldown for given key
if (time() - $this->discoveryTimes[$cacheKey] if (isset($this->discoveryTimes[$cacheKey])
< self::$discoveryCooldown && time() - $this->discoveryTimes[$cacheKey] < self::$discoveryCooldown
) { ) {
// If no more cached endpoints and it's required, // If no more cached endpoints and it's required,

View file

@ -19,6 +19,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise disassociateEipFromVlanAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disassociateEipFromVlanAsync(array $args = [])
* @method \Aws\Result getEnvironment(array $args = []) * @method \Aws\Result getEnvironment(array $args = [])
* @method \GuzzleHttp\Promise\Promise getEnvironmentAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getEnvironmentAsync(array $args = [])
* @method \Aws\Result getVersions(array $args = [])
* @method \GuzzleHttp\Promise\Promise getVersionsAsync(array $args = [])
* @method \Aws\Result listEnvironmentHosts(array $args = []) * @method \Aws\Result listEnvironmentHosts(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEnvironmentHostsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listEnvironmentHostsAsync(array $args = [])
* @method \Aws\Result listEnvironmentVlans(array $args = []) * @method \Aws\Result listEnvironmentVlans(array $args = [])

View file

@ -137,6 +137,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteGlueIdentityCenterConfigurationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteGlueIdentityCenterConfigurationAsync(array $args = [])
* @method \Aws\Result deleteIntegration(array $args = []) * @method \Aws\Result deleteIntegration(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteIntegrationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteIntegrationAsync(array $args = [])
* @method \Aws\Result deleteIntegrationResourceProperty(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteIntegrationResourcePropertyAsync(array $args = [])
* @method \Aws\Result deleteIntegrationTableProperties(array $args = []) * @method \Aws\Result deleteIntegrationTableProperties(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteIntegrationTablePropertiesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteIntegrationTablePropertiesAsync(array $args = [])
* @method \Aws\Result deleteJob(array $args = []) * @method \Aws\Result deleteJob(array $args = [])
@ -271,6 +273,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getMLTransformsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getMLTransformsAsync(array $args = [])
* @method \Aws\Result getMapping(array $args = []) * @method \Aws\Result getMapping(array $args = [])
* @method \GuzzleHttp\Promise\Promise getMappingAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getMappingAsync(array $args = [])
* @method \Aws\Result getMaterializedViewRefreshTaskRun(array $args = [])
* @method \GuzzleHttp\Promise\Promise getMaterializedViewRefreshTaskRunAsync(array $args = [])
* @method \Aws\Result getPartition(array $args = []) * @method \Aws\Result getPartition(array $args = [])
* @method \GuzzleHttp\Promise\Promise getPartitionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getPartitionAsync(array $args = [])
* @method \Aws\Result getPartitionIndexes(array $args = []) * @method \Aws\Result getPartitionIndexes(array $args = [])
@ -367,10 +371,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listDevEndpointsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listDevEndpointsAsync(array $args = [])
* @method \Aws\Result listEntities(array $args = []) * @method \Aws\Result listEntities(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEntitiesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listEntitiesAsync(array $args = [])
* @method \Aws\Result listIntegrationResourceProperties(array $args = [])
* @method \GuzzleHttp\Promise\Promise listIntegrationResourcePropertiesAsync(array $args = [])
* @method \Aws\Result listJobs(array $args = []) * @method \Aws\Result listJobs(array $args = [])
* @method \GuzzleHttp\Promise\Promise listJobsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listJobsAsync(array $args = [])
* @method \Aws\Result listMLTransforms(array $args = []) * @method \Aws\Result listMLTransforms(array $args = [])
* @method \GuzzleHttp\Promise\Promise listMLTransformsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listMLTransformsAsync(array $args = [])
* @method \Aws\Result listMaterializedViewRefreshTaskRuns(array $args = [])
* @method \GuzzleHttp\Promise\Promise listMaterializedViewRefreshTaskRunsAsync(array $args = [])
* @method \Aws\Result listRegistries(array $args = []) * @method \Aws\Result listRegistries(array $args = [])
* @method \GuzzleHttp\Promise\Promise listRegistriesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listRegistriesAsync(array $args = [])
* @method \Aws\Result listSchemaVersions(array $args = []) * @method \Aws\Result listSchemaVersions(array $args = [])
@ -439,6 +447,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise startMLEvaluationTaskRunAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startMLEvaluationTaskRunAsync(array $args = [])
* @method \Aws\Result startMLLabelingSetGenerationTaskRun(array $args = []) * @method \Aws\Result startMLLabelingSetGenerationTaskRun(array $args = [])
* @method \GuzzleHttp\Promise\Promise startMLLabelingSetGenerationTaskRunAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startMLLabelingSetGenerationTaskRunAsync(array $args = [])
* @method \Aws\Result startMaterializedViewRefreshTaskRun(array $args = [])
* @method \GuzzleHttp\Promise\Promise startMaterializedViewRefreshTaskRunAsync(array $args = [])
* @method \Aws\Result startTrigger(array $args = []) * @method \Aws\Result startTrigger(array $args = [])
* @method \GuzzleHttp\Promise\Promise startTriggerAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startTriggerAsync(array $args = [])
* @method \Aws\Result startWorkflowRun(array $args = []) * @method \Aws\Result startWorkflowRun(array $args = [])
@ -451,6 +461,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise stopCrawlerAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopCrawlerAsync(array $args = [])
* @method \Aws\Result stopCrawlerSchedule(array $args = []) * @method \Aws\Result stopCrawlerSchedule(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopCrawlerScheduleAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopCrawlerScheduleAsync(array $args = [])
* @method \Aws\Result stopMaterializedViewRefreshTaskRun(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopMaterializedViewRefreshTaskRunAsync(array $args = [])
* @method \Aws\Result stopSession(array $args = []) * @method \Aws\Result stopSession(array $args = [])
* @method \GuzzleHttp\Promise\Promise stopSessionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise stopSessionAsync(array $args = [])
* @method \Aws\Result stopTrigger(array $args = []) * @method \Aws\Result stopTrigger(array $args = [])

View file

@ -11,6 +11,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createConfigAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createConfigAsync(array $args = [])
* @method \Aws\Result createDataflowEndpointGroup(array $args = []) * @method \Aws\Result createDataflowEndpointGroup(array $args = [])
* @method \GuzzleHttp\Promise\Promise createDataflowEndpointGroupAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createDataflowEndpointGroupAsync(array $args = [])
* @method \Aws\Result createDataflowEndpointGroupV2(array $args = [])
* @method \GuzzleHttp\Promise\Promise createDataflowEndpointGroupV2Async(array $args = [])
* @method \Aws\Result createEphemeris(array $args = []) * @method \Aws\Result createEphemeris(array $args = [])
* @method \GuzzleHttp\Promise\Promise createEphemerisAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createEphemerisAsync(array $args = [])
* @method \Aws\Result createMissionProfile(array $args = []) * @method \Aws\Result createMissionProfile(array $args = [])
@ -29,6 +31,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeEphemerisAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeEphemerisAsync(array $args = [])
* @method \Aws\Result getAgentConfiguration(array $args = []) * @method \Aws\Result getAgentConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise getAgentConfigurationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getAgentConfigurationAsync(array $args = [])
* @method \Aws\Result getAgentTaskResponseUrl(array $args = [])
* @method \GuzzleHttp\Promise\Promise getAgentTaskResponseUrlAsync(array $args = [])
* @method \Aws\Result getMissionProfileConfig(array $args = []) * @method \Aws\Result getMissionProfileConfig(array $args = [])
* @method \GuzzleHttp\Promise\Promise getMissionProfileConfigAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getMissionProfileConfigAsync(array $args = [])
* @method \Aws\Result getDataflowEndpointGroup(array $args = []) * @method \Aws\Result getDataflowEndpointGroup(array $args = [])

View file

@ -87,6 +87,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getInvitationsCountAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getInvitationsCountAsync(array $args = [])
* @method \Aws\Result getMalwareProtectionPlan(array $args = []) * @method \Aws\Result getMalwareProtectionPlan(array $args = [])
* @method \GuzzleHttp\Promise\Promise getMalwareProtectionPlanAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getMalwareProtectionPlanAsync(array $args = [])
* @method \Aws\Result getMalwareScan(array $args = [])
* @method \GuzzleHttp\Promise\Promise getMalwareScanAsync(array $args = [])
* @method \Aws\Result getMalwareScanSettings(array $args = []) * @method \Aws\Result getMalwareScanSettings(array $args = [])
* @method \GuzzleHttp\Promise\Promise getMalwareScanSettingsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getMalwareScanSettingsAsync(array $args = [])
* @method \Aws\Result getMasterAccount(array $args = []) * @method \Aws\Result getMasterAccount(array $args = [])
@ -123,6 +125,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listInvitationsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listInvitationsAsync(array $args = [])
* @method \Aws\Result listMalwareProtectionPlans(array $args = []) * @method \Aws\Result listMalwareProtectionPlans(array $args = [])
* @method \GuzzleHttp\Promise\Promise listMalwareProtectionPlansAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listMalwareProtectionPlansAsync(array $args = [])
* @method \Aws\Result listMalwareScans(array $args = [])
* @method \GuzzleHttp\Promise\Promise listMalwareScansAsync(array $args = [])
* @method \Aws\Result listMembers(array $args = []) * @method \Aws\Result listMembers(array $args = [])
* @method \GuzzleHttp\Promise\Promise listMembersAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listMembersAsync(array $args = [])
* @method \Aws\Result listOrganizationAdminAccounts(array $args = []) * @method \Aws\Result listOrganizationAdminAccounts(array $args = [])
@ -137,6 +141,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listThreatIntelSetsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listThreatIntelSetsAsync(array $args = [])
* @method \Aws\Result listTrustedEntitySets(array $args = []) * @method \Aws\Result listTrustedEntitySets(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTrustedEntitySetsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTrustedEntitySetsAsync(array $args = [])
* @method \Aws\Result sendObjectMalwareScan(array $args = [])
* @method \GuzzleHttp\Promise\Promise sendObjectMalwareScanAsync(array $args = [])
* @method \Aws\Result startMalwareScan(array $args = []) * @method \Aws\Result startMalwareScan(array $args = [])
* @method \GuzzleHttp\Promise\Promise startMalwareScanAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise startMalwareScanAsync(array $args = [])
* @method \Aws\Result startMonitoringMembers(array $args = []) * @method \Aws\Result startMonitoringMembers(array $args = [])

View file

@ -6,12 +6,16 @@ use Aws\AwsClient;
/** /**
* This client is used to interact with the **AWS Identity and Access Management (AWS IAM)** service. * This client is used to interact with the **AWS Identity and Access Management (AWS IAM)** service.
* *
* @method \Aws\Result acceptDelegationRequest(array $args = [])
* @method \GuzzleHttp\Promise\Promise acceptDelegationRequestAsync(array $args = [])
* @method \Aws\Result addClientIDToOpenIDConnectProvider(array $args = []) * @method \Aws\Result addClientIDToOpenIDConnectProvider(array $args = [])
* @method \GuzzleHttp\Promise\Promise addClientIDToOpenIDConnectProviderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise addClientIDToOpenIDConnectProviderAsync(array $args = [])
* @method \Aws\Result addRoleToInstanceProfile(array $args = []) * @method \Aws\Result addRoleToInstanceProfile(array $args = [])
* @method \GuzzleHttp\Promise\Promise addRoleToInstanceProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise addRoleToInstanceProfileAsync(array $args = [])
* @method \Aws\Result addUserToGroup(array $args = []) * @method \Aws\Result addUserToGroup(array $args = [])
* @method \GuzzleHttp\Promise\Promise addUserToGroupAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise addUserToGroupAsync(array $args = [])
* @method \Aws\Result associateDelegationRequest(array $args = [])
* @method \GuzzleHttp\Promise\Promise associateDelegationRequestAsync(array $args = [])
* @method \Aws\Result attachGroupPolicy(array $args = []) * @method \Aws\Result attachGroupPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise attachGroupPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise attachGroupPolicyAsync(array $args = [])
* @method \Aws\Result attachRolePolicy(array $args = []) * @method \Aws\Result attachRolePolicy(array $args = [])
@ -24,6 +28,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createAccessKeyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createAccessKeyAsync(array $args = [])
* @method \Aws\Result createAccountAlias(array $args = []) * @method \Aws\Result createAccountAlias(array $args = [])
* @method \GuzzleHttp\Promise\Promise createAccountAliasAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createAccountAliasAsync(array $args = [])
* @method \Aws\Result createDelegationRequest(array $args = [])
* @method \GuzzleHttp\Promise\Promise createDelegationRequestAsync(array $args = [])
* @method \Aws\Result createGroup(array $args = []) * @method \Aws\Result createGroup(array $args = [])
* @method \GuzzleHttp\Promise\Promise createGroupAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createGroupAsync(array $args = [])
* @method \Aws\Result createInstanceProfile(array $args = []) * @method \Aws\Result createInstanceProfile(array $args = [])
@ -106,12 +112,16 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise disableOrganizationsRootCredentialsManagementAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disableOrganizationsRootCredentialsManagementAsync(array $args = [])
* @method \Aws\Result disableOrganizationsRootSessions(array $args = []) * @method \Aws\Result disableOrganizationsRootSessions(array $args = [])
* @method \GuzzleHttp\Promise\Promise disableOrganizationsRootSessionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise disableOrganizationsRootSessionsAsync(array $args = [])
* @method \Aws\Result disableOutboundWebIdentityFederation(array $args = [])
* @method \GuzzleHttp\Promise\Promise disableOutboundWebIdentityFederationAsync(array $args = [])
* @method \Aws\Result enableMFADevice(array $args = []) * @method \Aws\Result enableMFADevice(array $args = [])
* @method \GuzzleHttp\Promise\Promise enableMFADeviceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise enableMFADeviceAsync(array $args = [])
* @method \Aws\Result enableOrganizationsRootCredentialsManagement(array $args = []) * @method \Aws\Result enableOrganizationsRootCredentialsManagement(array $args = [])
* @method \GuzzleHttp\Promise\Promise enableOrganizationsRootCredentialsManagementAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise enableOrganizationsRootCredentialsManagementAsync(array $args = [])
* @method \Aws\Result enableOrganizationsRootSessions(array $args = []) * @method \Aws\Result enableOrganizationsRootSessions(array $args = [])
* @method \GuzzleHttp\Promise\Promise enableOrganizationsRootSessionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise enableOrganizationsRootSessionsAsync(array $args = [])
* @method \Aws\Result enableOutboundWebIdentityFederation(array $args = [])
* @method \GuzzleHttp\Promise\Promise enableOutboundWebIdentityFederationAsync(array $args = [])
* @method \Aws\Result generateCredentialReport(array $args = []) * @method \Aws\Result generateCredentialReport(array $args = [])
* @method \GuzzleHttp\Promise\Promise generateCredentialReportAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise generateCredentialReportAsync(array $args = [])
* @method \Aws\Result generateOrganizationsAccessReport(array $args = []) * @method \Aws\Result generateOrganizationsAccessReport(array $args = [])
@ -132,10 +142,14 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getContextKeysForPrincipalPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getContextKeysForPrincipalPolicyAsync(array $args = [])
* @method \Aws\Result getCredentialReport(array $args = []) * @method \Aws\Result getCredentialReport(array $args = [])
* @method \GuzzleHttp\Promise\Promise getCredentialReportAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getCredentialReportAsync(array $args = [])
* @method \Aws\Result getDelegationRequest(array $args = [])
* @method \GuzzleHttp\Promise\Promise getDelegationRequestAsync(array $args = [])
* @method \Aws\Result getGroup(array $args = []) * @method \Aws\Result getGroup(array $args = [])
* @method \GuzzleHttp\Promise\Promise getGroupAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getGroupAsync(array $args = [])
* @method \Aws\Result getGroupPolicy(array $args = []) * @method \Aws\Result getGroupPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise getGroupPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getGroupPolicyAsync(array $args = [])
* @method \Aws\Result getHumanReadableSummary(array $args = [])
* @method \GuzzleHttp\Promise\Promise getHumanReadableSummaryAsync(array $args = [])
* @method \Aws\Result getInstanceProfile(array $args = []) * @method \Aws\Result getInstanceProfile(array $args = [])
* @method \GuzzleHttp\Promise\Promise getInstanceProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getInstanceProfileAsync(array $args = [])
* @method \Aws\Result getLoginProfile(array $args = []) * @method \Aws\Result getLoginProfile(array $args = [])
@ -146,6 +160,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getOpenIDConnectProviderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getOpenIDConnectProviderAsync(array $args = [])
* @method \Aws\Result getOrganizationsAccessReport(array $args = []) * @method \Aws\Result getOrganizationsAccessReport(array $args = [])
* @method \GuzzleHttp\Promise\Promise getOrganizationsAccessReportAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getOrganizationsAccessReportAsync(array $args = [])
* @method \Aws\Result getOutboundWebIdentityFederationInfo(array $args = [])
* @method \GuzzleHttp\Promise\Promise getOutboundWebIdentityFederationInfoAsync(array $args = [])
* @method \Aws\Result getPolicy(array $args = []) * @method \Aws\Result getPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise getPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getPolicyAsync(array $args = [])
* @method \Aws\Result getPolicyVersion(array $args = []) * @method \Aws\Result getPolicyVersion(array $args = [])
@ -180,6 +196,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listAttachedRolePoliciesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listAttachedRolePoliciesAsync(array $args = [])
* @method \Aws\Result listAttachedUserPolicies(array $args = []) * @method \Aws\Result listAttachedUserPolicies(array $args = [])
* @method \GuzzleHttp\Promise\Promise listAttachedUserPoliciesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listAttachedUserPoliciesAsync(array $args = [])
* @method \Aws\Result listDelegationRequests(array $args = [])
* @method \GuzzleHttp\Promise\Promise listDelegationRequestsAsync(array $args = [])
* @method \Aws\Result listEntitiesForPolicy(array $args = []) * @method \Aws\Result listEntitiesForPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise listEntitiesForPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listEntitiesForPolicyAsync(array $args = [])
* @method \Aws\Result listGroupPolicies(array $args = []) * @method \Aws\Result listGroupPolicies(array $args = [])
@ -250,6 +268,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise putUserPermissionsBoundaryAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putUserPermissionsBoundaryAsync(array $args = [])
* @method \Aws\Result putUserPolicy(array $args = []) * @method \Aws\Result putUserPolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise putUserPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise putUserPolicyAsync(array $args = [])
* @method \Aws\Result rejectDelegationRequest(array $args = [])
* @method \GuzzleHttp\Promise\Promise rejectDelegationRequestAsync(array $args = [])
* @method \Aws\Result removeClientIDFromOpenIDConnectProvider(array $args = []) * @method \Aws\Result removeClientIDFromOpenIDConnectProvider(array $args = [])
* @method \GuzzleHttp\Promise\Promise removeClientIDFromOpenIDConnectProviderAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise removeClientIDFromOpenIDConnectProviderAsync(array $args = [])
* @method \Aws\Result removeRoleFromInstanceProfile(array $args = []) * @method \Aws\Result removeRoleFromInstanceProfile(array $args = [])
@ -260,6 +280,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise resetServiceSpecificCredentialAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise resetServiceSpecificCredentialAsync(array $args = [])
* @method \Aws\Result resyncMFADevice(array $args = []) * @method \Aws\Result resyncMFADevice(array $args = [])
* @method \GuzzleHttp\Promise\Promise resyncMFADeviceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise resyncMFADeviceAsync(array $args = [])
* @method \Aws\Result sendDelegationToken(array $args = [])
* @method \GuzzleHttp\Promise\Promise sendDelegationTokenAsync(array $args = [])
* @method \Aws\Result setDefaultPolicyVersion(array $args = []) * @method \Aws\Result setDefaultPolicyVersion(array $args = [])
* @method \GuzzleHttp\Promise\Promise setDefaultPolicyVersionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise setDefaultPolicyVersionAsync(array $args = [])
* @method \Aws\Result setSecurityTokenServicePreferences(array $args = []) * @method \Aws\Result setSecurityTokenServicePreferences(array $args = [])
@ -306,6 +328,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateAccountPasswordPolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateAccountPasswordPolicyAsync(array $args = [])
* @method \Aws\Result updateAssumeRolePolicy(array $args = []) * @method \Aws\Result updateAssumeRolePolicy(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateAssumeRolePolicyAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateAssumeRolePolicyAsync(array $args = [])
* @method \Aws\Result updateDelegationRequest(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateDelegationRequestAsync(array $args = [])
* @method \Aws\Result updateGroup(array $args = []) * @method \Aws\Result updateGroup(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateGroupAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateGroupAsync(array $args = [])
* @method \Aws\Result updateLoginProfile(array $args = []) * @method \Aws\Result updateLoginProfile(array $args = [])

View file

@ -9,21 +9,35 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise batchGetInvoiceProfileAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise batchGetInvoiceProfileAsync(array $args = [])
* @method \Aws\Result createInvoiceUnit(array $args = []) * @method \Aws\Result createInvoiceUnit(array $args = [])
* @method \GuzzleHttp\Promise\Promise createInvoiceUnitAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createInvoiceUnitAsync(array $args = [])
* @method \Aws\Result createProcurementPortalPreference(array $args = [])
* @method \GuzzleHttp\Promise\Promise createProcurementPortalPreferenceAsync(array $args = [])
* @method \Aws\Result deleteInvoiceUnit(array $args = []) * @method \Aws\Result deleteInvoiceUnit(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteInvoiceUnitAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteInvoiceUnitAsync(array $args = [])
* @method \Aws\Result deleteProcurementPortalPreference(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteProcurementPortalPreferenceAsync(array $args = [])
* @method \Aws\Result getInvoicePDF(array $args = [])
* @method \GuzzleHttp\Promise\Promise getInvoicePDFAsync(array $args = [])
* @method \Aws\Result getInvoiceUnit(array $args = []) * @method \Aws\Result getInvoiceUnit(array $args = [])
* @method \GuzzleHttp\Promise\Promise getInvoiceUnitAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getInvoiceUnitAsync(array $args = [])
* @method \Aws\Result getProcurementPortalPreference(array $args = [])
* @method \GuzzleHttp\Promise\Promise getProcurementPortalPreferenceAsync(array $args = [])
* @method \Aws\Result listInvoiceSummaries(array $args = []) * @method \Aws\Result listInvoiceSummaries(array $args = [])
* @method \GuzzleHttp\Promise\Promise listInvoiceSummariesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listInvoiceSummariesAsync(array $args = [])
* @method \Aws\Result listInvoiceUnits(array $args = []) * @method \Aws\Result listInvoiceUnits(array $args = [])
* @method \GuzzleHttp\Promise\Promise listInvoiceUnitsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listInvoiceUnitsAsync(array $args = [])
* @method \Aws\Result listProcurementPortalPreferences(array $args = [])
* @method \GuzzleHttp\Promise\Promise listProcurementPortalPreferencesAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = []) * @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result putProcurementPortalPreference(array $args = [])
* @method \GuzzleHttp\Promise\Promise putProcurementPortalPreferenceAsync(array $args = [])
* @method \Aws\Result tagResource(array $args = []) * @method \Aws\Result tagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
* @method \Aws\Result untagResource(array $args = []) * @method \Aws\Result untagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
* @method \Aws\Result updateInvoiceUnit(array $args = []) * @method \Aws\Result updateInvoiceUnit(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateInvoiceUnitAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateInvoiceUnitAsync(array $args = [])
* @method \Aws\Result updateProcurementPortalPreferenceStatus(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateProcurementPortalPreferenceStatusAsync(array $args = [])
*/ */
class InvoicingClient extends AwsClient {} class InvoicingClient extends AwsClient {}

View file

@ -9,8 +9,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise createSuiteDefinitionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise createSuiteDefinitionAsync(array $args = [])
* @method \Aws\Result deleteSuiteDefinition(array $args = []) * @method \Aws\Result deleteSuiteDefinition(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteSuiteDefinitionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteSuiteDefinitionAsync(array $args = [])
* @method \Aws\Result getEndpoint(array $args = []) * @method \Aws\Result getDeviceAdvisorEndpoint(array $args = [])
* @method \GuzzleHttp\Promise\Promise getEndpointAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getDeviceAdvisorEndpointAsync(array $args = [])
* @method \Aws\Result getSuiteDefinition(array $args = []) * @method \Aws\Result getSuiteDefinition(array $args = [])
* @method \GuzzleHttp\Promise\Promise getSuiteDefinitionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getSuiteDefinitionAsync(array $args = [])
* @method \Aws\Result getSuiteRun(array $args = []) * @method \Aws\Result getSuiteRun(array $args = [])

View file

@ -1,9 +0,0 @@
<?php
namespace Aws\IoTFleetHub\Exception;
use Aws\Exception\AwsException;
/**
* Represents an error interacting with the **AWS IoT Fleet Hub** service.
*/
class IoTFleetHubException extends AwsException {}

View file

@ -1,25 +0,0 @@
<?php
namespace Aws\IoTFleetHub;
use Aws\AwsClient;
/**
* This client is used to interact with the **AWS IoT Fleet Hub** service.
* @method \Aws\Result createApplication(array $args = [])
* @method \GuzzleHttp\Promise\Promise createApplicationAsync(array $args = [])
* @method \Aws\Result deleteApplication(array $args = [])
* @method \GuzzleHttp\Promise\Promise deleteApplicationAsync(array $args = [])
* @method \Aws\Result describeApplication(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeApplicationAsync(array $args = [])
* @method \Aws\Result listApplications(array $args = [])
* @method \GuzzleHttp\Promise\Promise listApplicationsAsync(array $args = [])
* @method \Aws\Result listTagsForResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
* @method \Aws\Result tagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
* @method \Aws\Result untagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
* @method \Aws\Result updateApplication(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateApplicationAsync(array $args = [])
*/
class IoTFleetHubClient extends AwsClient {}

View file

@ -75,6 +75,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getManagedThingAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getManagedThingAsync(array $args = [])
* @method \Aws\Result getManagedThingCapabilities(array $args = []) * @method \Aws\Result getManagedThingCapabilities(array $args = [])
* @method \GuzzleHttp\Promise\Promise getManagedThingCapabilitiesAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getManagedThingCapabilitiesAsync(array $args = [])
* @method \Aws\Result getManagedThingCertificate(array $args = [])
* @method \GuzzleHttp\Promise\Promise getManagedThingCertificateAsync(array $args = [])
* @method \Aws\Result getManagedThingConnectivityData(array $args = []) * @method \Aws\Result getManagedThingConnectivityData(array $args = [])
* @method \GuzzleHttp\Promise\Promise getManagedThingConnectivityDataAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getManagedThingConnectivityDataAsync(array $args = [])
* @method \Aws\Result getManagedThingMetaData(array $args = []) * @method \Aws\Result getManagedThingMetaData(array $args = [])

View file

@ -268,8 +268,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise getBucketsAggregationAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getBucketsAggregationAsync(array $args = [])
* @method \Aws\Result getCardinality(array $args = []) * @method \Aws\Result getCardinality(array $args = [])
* @method \GuzzleHttp\Promise\Promise getCardinalityAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getCardinalityAsync(array $args = [])
* @method \Aws\Result getCommand(array $args = []) * @method \Aws\Result getDeviceCommand(array $args = [])
* @method \GuzzleHttp\Promise\Promise getCommandAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getDeviceCommandAsync(array $args = [])
* @method \Aws\Result getCommandExecution(array $args = []) * @method \Aws\Result getCommandExecution(array $args = [])
* @method \GuzzleHttp\Promise\Promise getCommandExecutionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getCommandExecutionAsync(array $args = [])
* @method \Aws\Result getEffectivePolicies(array $args = []) * @method \Aws\Result getEffectivePolicies(array $args = [])

View file

@ -39,6 +39,10 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeConfigurationRevisionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeConfigurationRevisionAsync(array $args = [])
* @method \Aws\Result describeReplicator(array $args = []) * @method \Aws\Result describeReplicator(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeReplicatorAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeReplicatorAsync(array $args = [])
* @method \Aws\Result describeTopic(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeTopicAsync(array $args = [])
* @method \Aws\Result describeTopicPartitions(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeTopicPartitionsAsync(array $args = [])
* @method \Aws\Result describeVpcConnection(array $args = []) * @method \Aws\Result describeVpcConnection(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeVpcConnectionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeVpcConnectionAsync(array $args = [])
* @method \Aws\Result batchDisassociateScramSecret(array $args = []) * @method \Aws\Result batchDisassociateScramSecret(array $args = [])
@ -73,6 +77,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise listClientVpcConnectionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listClientVpcConnectionsAsync(array $args = [])
* @method \Aws\Result listVpcConnections(array $args = []) * @method \Aws\Result listVpcConnections(array $args = [])
* @method \GuzzleHttp\Promise\Promise listVpcConnectionsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise listVpcConnectionsAsync(array $args = [])
* @method \Aws\Result listTopics(array $args = [])
* @method \GuzzleHttp\Promise\Promise listTopicsAsync(array $args = [])
* @method \Aws\Result rejectClientVpcConnection(array $args = []) * @method \Aws\Result rejectClientVpcConnection(array $args = [])
* @method \GuzzleHttp\Promise\Promise rejectClientVpcConnectionAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise rejectClientVpcConnectionAsync(array $args = [])
* @method \Aws\Result deleteClusterPolicy(array $args = []) * @method \Aws\Result deleteClusterPolicy(array $args = [])
@ -103,6 +109,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateConnectivityAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateConnectivityAsync(array $args = [])
* @method \Aws\Result updateMonitoring(array $args = []) * @method \Aws\Result updateMonitoring(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateMonitoringAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateMonitoringAsync(array $args = [])
* @method \Aws\Result updateRebalancing(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateRebalancingAsync(array $args = [])
* @method \Aws\Result updateReplicationInfo(array $args = []) * @method \Aws\Result updateReplicationInfo(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateReplicationInfoAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateReplicationInfoAsync(array $args = [])
* @method \Aws\Result updateSecurity(array $args = []) * @method \Aws\Result updateSecurity(array $args = [])

View file

@ -18,6 +18,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise deleteStreamAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deleteStreamAsync(array $args = [])
* @method \Aws\Result deregisterStreamConsumer(array $args = []) * @method \Aws\Result deregisterStreamConsumer(array $args = [])
* @method \GuzzleHttp\Promise\Promise deregisterStreamConsumerAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise deregisterStreamConsumerAsync(array $args = [])
* @method \Aws\Result describeAccountSettings(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeAccountSettingsAsync(array $args = [])
* @method \Aws\Result describeLimits(array $args = []) * @method \Aws\Result describeLimits(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeLimitsAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeLimitsAsync(array $args = [])
* @method \Aws\Result describeStream(array $args = []) * @method \Aws\Result describeStream(array $args = [])
@ -70,9 +72,15 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
* @method \Aws\Result untagResource(array $args = []) * @method \Aws\Result untagResource(array $args = [])
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
* @method \Aws\Result updateAccountSettings(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateAccountSettingsAsync(array $args = [])
* @method \Aws\Result updateMaxRecordSize(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateMaxRecordSizeAsync(array $args = [])
* @method \Aws\Result updateShardCount(array $args = []) * @method \Aws\Result updateShardCount(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateShardCountAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateShardCountAsync(array $args = [])
* @method \Aws\Result updateStreamMode(array $args = []) * @method \Aws\Result updateStreamMode(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateStreamModeAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateStreamModeAsync(array $args = [])
* @method \Aws\Result updateStreamWarmThroughput(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateStreamWarmThroughputAsync(array $args = [])
*/ */
class KinesisClient extends AwsClient {} class KinesisClient extends AwsClient {}

View file

@ -29,6 +29,8 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise describeSignalingChannelAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeSignalingChannelAsync(array $args = [])
* @method \Aws\Result describeStream(array $args = []) * @method \Aws\Result describeStream(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeStreamAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise describeStreamAsync(array $args = [])
* @method \Aws\Result describeStreamStorageConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise describeStreamStorageConfigurationAsync(array $args = [])
* @method \Aws\Result getDataEndpoint(array $args = []) * @method \Aws\Result getDataEndpoint(array $args = [])
* @method \GuzzleHttp\Promise\Promise getDataEndpointAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise getDataEndpointAsync(array $args = [])
* @method \Aws\Result getSignalingChannelEndpoint(array $args = []) * @method \Aws\Result getSignalingChannelEndpoint(array $args = [])
@ -65,5 +67,7 @@ use Aws\AwsClient;
* @method \GuzzleHttp\Promise\Promise updateSignalingChannelAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateSignalingChannelAsync(array $args = [])
* @method \Aws\Result updateStream(array $args = []) * @method \Aws\Result updateStream(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateStreamAsync(array $args = []) * @method \GuzzleHttp\Promise\Promise updateStreamAsync(array $args = [])
* @method \Aws\Result updateStreamStorageConfiguration(array $args = [])
* @method \GuzzleHttp\Promise\Promise updateStreamStorageConfigurationAsync(array $args = [])
*/ */
class KinesisVideoClient extends AwsClient {} class KinesisVideoClient extends AwsClient {}

Some files were not shown because too many files have changed in this diff Show more