OK,
So first up, thank you both of you for your responses. Very much appreciated and yes, John, we did exchange some emails on this. It was thanks to those emails that I found the SDK and in the SDK documentation, it recommends using the forum. I figured I'd move here since others may have insights, others may benefit from your insights and I wanted to spread the load 
OK, so on to the issue at hand. Beginning with the 429. I looked at the articles you referenced, John (some of which I was already aware of) however they all seem to deal with using the main Genesys Cloud API, rather than the Archy one. I understand the principle and purpose of a 429 and I also understand what I am supposed to do, the problem is I can't figure out how to do it in the SDK!
You linked to an interesting video on the build-in functionality for the Java SDK and hinted that this was being added to the others. Has this, in fact, been done? If so, can you point me at the location in the docs where it is discussed (I can't seem to find it!) If not, then my question becomes "how do I detect the 429 response in order to deal with it appropriately?" Part of the challenge I have is that all these calls are async. My JavaScript-foo is still somewhat immature, so I haven't figured out how to wait for one iteration to complete before requesting the next. As I said, I am putting a delay into the loop, but as you said, that delay is insufficient! I could up it, but whatever value I use would be arbitrary and risks making the runtime excessive!
Moving on to Q2. I am pretty much doing what you say. I stated with the code you (John) sent me and which you included here. I then check for isArchActionGetParticipantData
/ isArchActionSetParticipantData
and then have a loop to go through the attributeNameValuePairs
property. Here's where I come unstuck. (Again, this might be my lack of foo!) From the Docs, attributeNameValuePairs
is of type ArchBaseNameValuePairs
. This has a length property and a Method getNamedValueByIndex(index)
which returns a single name value pair of type ArchBaseNameValuePair.
This in turn has a Member called name
, of type ArchBaseValue
. Now what? The ArchBaseValue
has Methods for getting a variable or an expression. which would be the value, but not the string literal. So I'm lost. I know I'm missing something obvious, but the more I look at this, the more the words seem to blur! 
I also tried going down the path of exporting the flows as yaml files and then processing those. Despite not getting an error, no file gets written to disk! NO idea why - any clues?
Finally, and I know this is almost definitely a "Lack of foo" problem, but how do I wait for all the callbacks to complete before writing my audit file to disk? With the main audit, I am using Promise.all, but that doesn't seem to work here?
It seems to me that a large part of the problem (for me) is that the async nature of it all is getting in my way. The utility isn't "real time" as such it would probably be easier if I could write it synchronously. Are the actual API calls themselves documented anywhere? I appreciate all the work that has gone into the SDK (although, I would personally prefer it if the "style" was the same as the main API's SDK) but for my use-case, it might be easier to just call the endpoints myself? This would also allow me to use a different language / environment, if I so chose.