From 86ccd6a8e6c571187f3df836ee48a05807dd4b91 Mon Sep 17 00:00:00 2001 From: Jordan Reimer Date: Thu, 2 Mar 2023 09:28:26 -0700 Subject: [PATCH 1/4] adds initializer to configure ember data id generation --- ui/app/initializers/ember-data-identifiers.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 ui/app/initializers/ember-data-identifiers.js diff --git a/ui/app/initializers/ember-data-identifiers.js b/ui/app/initializers/ember-data-identifiers.js new file mode 100644 index 000000000000..df03e27ff15d --- /dev/null +++ b/ui/app/initializers/ember-data-identifiers.js @@ -0,0 +1,17 @@ +import { setIdentifierGenerationMethod } from '@ember-data/store'; +import { v4 as uuidv4 } from 'uuid'; + +export function initialize() { + // see this GH issue for more information https://github.com/emberjs/data/issues/8106 + // Ember Data uses uuidv4 library to generate ids which relies on the crypto API which is no available in unsecure contexts + // the suggested polyfill is not working so we need to define our own id generation method + // the uuid library was brought in to replace other usages of crypto in the app so it is safe to use + setIdentifierGenerationMethod((resource) => { + return resource.lid || uuidv4(); + }); +} + +export default { + name: 'ember-data-identifiers', + initialize, +}; From f49990725603216c49d5704b5c1b7ea685dde87a Mon Sep 17 00:00:00 2001 From: Jordan Reimer Date: Thu, 2 Mar 2023 09:35:53 -0700 Subject: [PATCH 2/4] updates comments --- ui/app/initializers/ember-data-identifiers.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/app/initializers/ember-data-identifiers.js b/ui/app/initializers/ember-data-identifiers.js index df03e27ff15d..9da714a860d8 100644 --- a/ui/app/initializers/ember-data-identifiers.js +++ b/ui/app/initializers/ember-data-identifiers.js @@ -4,8 +4,8 @@ import { v4 as uuidv4 } from 'uuid'; export function initialize() { // see this GH issue for more information https://github.com/emberjs/data/issues/8106 // Ember Data uses uuidv4 library to generate ids which relies on the crypto API which is no available in unsecure contexts - // the suggested polyfill is not working so we need to define our own id generation method - // the uuid library was brought in to replace other usages of crypto in the app so it is safe to use + // the suggested polyfill was added in 4.6.2 so until we upgrade we need to define our own id generation method + // the uuid library was brought in to replace other usages of crypto in the app so it is safe to use in unsecure contexts setIdentifierGenerationMethod((resource) => { return resource.lid || uuidv4(); }); From 5b22fc3e129c260aa85f11b70a50d056b42c4c93 Mon Sep 17 00:00:00 2001 From: Jordan Reimer Date: Thu, 2 Mar 2023 09:46:12 -0700 Subject: [PATCH 3/4] adds changelog entry --- changelog/19428.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 changelog/19428.txt diff --git a/changelog/19428.txt b/changelog/19428.txt new file mode 100644 index 000000000000..c1ae6d54bbcb --- /dev/null +++ b/changelog/19428.txt @@ -0,0 +1,3 @@ +```release-note:bug +ui: Fixes crypto.randomUUID error in unsecure contexts from third party ember-data library +``` \ No newline at end of file From 1efd3c0c00969fd180cab848dfdc8a366a82bb00 Mon Sep 17 00:00:00 2001 From: Jordan Reimer Date: Thu, 2 Mar 2023 11:55:35 -0700 Subject: [PATCH 4/4] adds check for id to ember data identifier config --- ui/app/initializers/ember-data-identifiers.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/ui/app/initializers/ember-data-identifiers.js b/ui/app/initializers/ember-data-identifiers.js index 9da714a860d8..c22c2af7fe63 100644 --- a/ui/app/initializers/ember-data-identifiers.js +++ b/ui/app/initializers/ember-data-identifiers.js @@ -1,13 +1,22 @@ import { setIdentifierGenerationMethod } from '@ember-data/store'; +import { dasherize } from '@ember/string'; import { v4 as uuidv4 } from 'uuid'; export function initialize() { // see this GH issue for more information https://github.com/emberjs/data/issues/8106 // Ember Data uses uuidv4 library to generate ids which relies on the crypto API which is no available in unsecure contexts // the suggested polyfill was added in 4.6.2 so until we upgrade we need to define our own id generation method + // https://api.emberjs.com/ember-data/4.5/classes/IdentifierCache/methods/getOrCreateRecordIdentifier?anchor=getOrCreateRecordIdentifier // the uuid library was brought in to replace other usages of crypto in the app so it is safe to use in unsecure contexts - setIdentifierGenerationMethod((resource) => { - return resource.lid || uuidv4(); + // adapted from defaultGenerationMethod -- https://github.com/emberjs/data/blob/v4.5.0/packages/store/addon/-private/identifier-cache.ts#LL82-L94C2 + setIdentifierGenerationMethod((data) => { + if (data.lid) { + return data.lid; + } + if (data.id) { + return `@lid:${dasherize(data.type)}-${data.id}`; + } + return uuidv4(); }); }