Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get the Amazon Cognito Identity SDK working in Aurelia?

I am trying to get the Amazon Cognito Identity SDK working in Aurelia. I do not have a lot of Javascript experience and am very unfamiliar with the various dependency systems.

I installed the Cognito SDK using: npm install --save amazon-cognito-identity-js

I then edited my aurelia_project/aurelia.json file as suggested in the Aurelia documentation to include a new client library dependency in build.bundles vendor-bundle dependencies:

"sjcl",
"jsbn",
{
  "name": "aws-sdk",
  "path": "../node_modules/aws-sdk/",
  "main": "dist/aws-sdk"
},
{
  "name": "amazon-cognito-identity-js",
  "path": "../node_modules/amazon-cognito-identity-js/dist",
  "main": "amazon-cognito-identity.min"
}

However, when I try to run the code using au run I get the error: Error: ENOENT: no such file or directory, open '/Users/nathanskone/Projects/scc/aurelia-app/src/xmlbuilder.js'

I have tried to include xmlbuilder in my aurelia.json to no avail. When it is included I end up getting this error about lodash: Error: ENOENT: no such file or directory, open '/Users/nathanskone/Projects/scc/aurelia-app/src/lodash/object/assign.js'

I haven't found any way to get past the lodash error.

Is there anyone out there familiar with the Aurelia dependency system that could help?

Thanks, Nathan

EDIT #2: While I got past the xmlbuilder/lodash errors, I have run into further errors trying to bundle the aws-sdk. Here is my current aurelia.json:

"dependencies": [
  {
    "name": "xmlbuilder",
    "path": "../node_modules/xmlbuilder/lib",
    "main": "index"
  },
  {
    "name": "aws-sdk",
    "path": "../node_modules/aws-sdk",
    "main": "index",
    "resources": ["lib/region_config.json"]
  },

And the error I am currently getting:

Error: ENOENT: no such file or directory, open '/Users/nathanskone/Projects/scc/aurelia-app/src/crypto.js'

If I remove the resources (lib/region_config.json) then I get this error instead: Error: ENOENT: no such file or directory, open '/Users/nathanskone/Projects/scc/aurelia-app/node_modules/aws-sdk/lib/region_config.json.js'

I think crypto is actually an object defined in aws-sdk/lib/util.js, which is required by aws-sdk/lib/region_config.js.

like image 539
Nathan Skone Avatar asked Sep 27 '16 00:09

Nathan Skone


People also ask

How do I get a Cognito identity ID?

Retrieving an Amazon Cognito identity If an identity ID is already set on your provider, you can call credentialsProvider. identityId to retrieve that identity, which is cached locally. However, if an identity ID is not set on your provider, calling credentialsProvider. identityId will return nil .

What is Cognito SDK?

Service Description. Amazon Cognito Federated Identities is a web service that delivers scoped temporary credentials to mobile devices and other untrusted environments. It uniquely identifies a device and supplies the user with a consistent identity over the lifetime of an application.


1 Answers

Try the compiled library instead, using the compiled lib bundled just fine. Also the library seems to define window.AWS, so injecting it or not will work

{
    "name": "aws-sdk",
    "path": "../node_modules/aws-sdk/dist",
    "main": "aws-sdk.min",
    "exports": "AWS"
}

UPDATE:

It seems the only way to import those libraries is by using the prepend section, the libraries write to the window variable so it can still be accesible to your app scripts, only by not importing them like ES6 modules.

    "prepend": [
      "node_modules/aws-sdk/dist/aws-sdk.min.js",
      "node_modules/amazon-cognito-identity-js/dist/aws-cognito-sdk.min.js",
      "node_modules/amazon-cognito-identity-js/dist/amazon-cognito-identity.min.js",
      "node_modules/bluebird/js/browser/bluebird.core.js",
      "scripts/require.js"
    ],
like image 134
jsachs Avatar answered Nov 02 '22 07:11

jsachs