Skip to content

Commit

Permalink
backport of commit 16e9c14 (#19442)
Browse files Browse the repository at this point in the history
Co-authored-by: Jordan Reimer <zofskeez@gmail.com>
  • Loading branch information
1 parent 9f545bd commit 90d3dc6
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
3 changes: 3 additions & 0 deletions changelog/19428.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
ui: Fixes crypto.randomUUID error in unsecure contexts from third party ember-data library
```
26 changes: 26 additions & 0 deletions ui/app/initializers/ember-data-identifiers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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
// 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();
});
}

export default {
name: 'ember-data-identifiers',
initialize,
};

0 comments on commit 90d3dc6

Please sign in to comment.