@ecodev/natural 62.1.2 → 63.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ecodev-natural-vanilla.mjs +1193 -0
- package/fesm2022/ecodev-natural-vanilla.mjs.map +1 -0
- package/fesm2022/ecodev-natural.mjs +436 -425
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/lib/classes/network-activity.service.d.ts +54 -0
- package/lib/classes/validators.d.ts +1 -1
- package/lib/modules/columns-picker/columns-picker.component.d.ts +2 -2
- package/lib/modules/common/services/seo.provider.d.ts +2 -2
- package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +1 -1
- package/lib/modules/file/abstract-file.d.ts +6 -3
- package/lib/modules/file/component/file.component.d.ts +2 -2
- package/lib/modules/file/file-drop.directive.d.ts +2 -3
- package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +2 -3
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -3
- package/lib/modules/icon/icon.module.d.ts +2 -2
- package/lib/modules/panels/panels.service.d.ts +1 -2
- package/lib/modules/relations/relations.component.d.ts +3 -3
- package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +2 -3
- package/lib/modules/search/group/group.component.d.ts +2 -3
- package/lib/modules/search/input/input.component.d.ts +5 -5
- package/lib/modules/search/search/search.component.d.ts +2 -2
- package/lib/modules/select/abstract-select.component.d.ts +3 -3
- package/lib/modules/select/select/select.component.d.ts +1 -1
- package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +1 -1
- package/lib/modules/table-button/table-button.component.d.ts +4 -2
- package/package.json +16 -14
- package/public-api.d.ts +1 -0
- package/src/lib/_natural.theme.scss +1 -2
- package/vanilla/index.d.ts +5 -0
- package/vanilla/package.json +3 -0
- package/vanilla/public-api.d.ts +11 -0
- package/vanilla/src/lib/classes/crypto.d.ts +8 -0
- package/vanilla/src/lib/classes/data-source.d.ts +32 -0
- package/vanilla/src/lib/classes/query-variable-manager-utils.d.ts +2 -0
- package/vanilla/src/lib/classes/query-variable-manager.d.ts +91 -0
- package/vanilla/src/lib/classes/signing.d.ts +7 -0
- package/vanilla/src/lib/classes/utility.d.ts +77 -0
- package/vanilla/src/lib/modules/search/classes/graphql-doctrine.types.d.ts +83 -0
- package/vanilla/src/lib/modules/search/classes/utils.d.ts +17 -0
- package/vanilla/src/lib/modules/search/types/dropdown-component.d.ts +20 -0
- package/vanilla/src/lib/modules/search/types/facet.d.ts +75 -0
- package/vanilla/src/lib/modules/search/types/values.d.ts +32 -0
- package/vanilla/src/lib/services/abstract-model.service.d.ts +244 -0
- package/vanilla/src/lib/services/debounce.service.d.ts +52 -0
- package/vanilla/src/lib/types/types.d.ts +100 -0
- package/esm2022/ecodev-natural.mjs +0 -5
- package/esm2022/lib/classes/abstract-detail.mjs +0 -229
- package/esm2022/lib/classes/abstract-editable-list.mjs +0 -99
- package/esm2022/lib/classes/abstract-list.mjs +0 -461
- package/esm2022/lib/classes/abstract-navigable-list.mjs +0 -133
- package/esm2022/lib/classes/apollo-utils.mjs +0 -59
- package/esm2022/lib/classes/crypto.mjs +0 -23
- package/esm2022/lib/classes/cumulative-changes.mjs +0 -50
- package/esm2022/lib/classes/data-source.mjs +0 -71
- package/esm2022/lib/classes/providers.mjs +0 -13
- package/esm2022/lib/classes/query-variable-manager-utils.mjs +0 -14
- package/esm2022/lib/classes/query-variable-manager.mjs +0 -172
- package/esm2022/lib/classes/rxjs.mjs +0 -54
- package/esm2022/lib/classes/signing.mjs +0 -38
- package/esm2022/lib/classes/tld.mjs +0 -1476
- package/esm2022/lib/classes/utility.mjs +0 -234
- package/esm2022/lib/classes/validators.mjs +0 -179
- package/esm2022/lib/directives/http-prefix.directive.mjs +0 -47
- package/esm2022/lib/modules/alert/alert.service.mjs +0 -53
- package/esm2022/lib/modules/alert/confirm.component.mjs +0 -16
- package/esm2022/lib/modules/alert/public-api.mjs +0 -6
- package/esm2022/lib/modules/avatar/component/avatar.component.mjs +0 -203
- package/esm2022/lib/modules/avatar/public-api.mjs +0 -6
- package/esm2022/lib/modules/avatar/service/avatar.service.mjs +0 -63
- package/esm2022/lib/modules/avatar/sources/gravatar.mjs +0 -29
- package/esm2022/lib/modules/avatar/sources/image.mjs +0 -13
- package/esm2022/lib/modules/avatar/sources/initials.mjs +0 -39
- package/esm2022/lib/modules/avatar/sources/source.mjs +0 -16
- package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +0 -145
- package/esm2022/lib/modules/columns-picker/public-api.mjs +0 -5
- package/esm2022/lib/modules/columns-picker/types.mjs +0 -2
- package/esm2022/lib/modules/common/directives/background-density.directive.mjs +0 -63
- package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +0 -93
- package/esm2022/lib/modules/common/directives/src-density.directive.mjs +0 -72
- package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +0 -24
- package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +0 -17
- package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +0 -24
- package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +0 -140
- package/esm2022/lib/modules/common/public-api.mjs +0 -14
- package/esm2022/lib/modules/common/services/memory-storage.mjs +0 -110
- package/esm2022/lib/modules/common/services/seo.provider.mjs +0 -23
- package/esm2022/lib/modules/common/services/seo.service.mjs +0 -235
- package/esm2022/lib/modules/detail-header/detail-header.component.mjs +0 -84
- package/esm2022/lib/modules/detail-header/public-api.mjs +0 -5
- package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +0 -72
- package/esm2022/lib/modules/dialog-trigger/public-api.mjs +0 -5
- package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +0 -100
- package/esm2022/lib/modules/dropdown-components/public-api.mjs +0 -14
- package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +0 -39
- package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +0 -173
- package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +0 -134
- package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +0 -80
- package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +0 -48
- package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +0 -110
- package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +0 -64
- package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +0 -175
- package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +0 -62
- package/esm2022/lib/modules/dropdown-components/types.mjs +0 -41
- package/esm2022/lib/modules/dropdown-components/utils.mjs +0 -35
- package/esm2022/lib/modules/file/abstract-file.mjs +0 -230
- package/esm2022/lib/modules/file/component/file.component.mjs +0 -172
- package/esm2022/lib/modules/file/file-drop.directive.mjs +0 -111
- package/esm2022/lib/modules/file/file-select.directive.mjs +0 -26
- package/esm2022/lib/modules/file/file.service.mjs +0 -43
- package/esm2022/lib/modules/file/public-api.mjs +0 -9
- package/esm2022/lib/modules/file/types.mjs +0 -2
- package/esm2022/lib/modules/file/utils.mjs +0 -129
- package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +0 -30
- package/esm2022/lib/modules/fixed-button/public-api.mjs +0 -5
- package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +0 -56
- package/esm2022/lib/modules/fixed-button-detail/public-api.mjs +0 -5
- package/esm2022/lib/modules/hierarchic-selector/classes/flat-node.mjs +0 -18
- package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs +0 -2
- package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs +0 -2
- package/esm2022/lib/modules/hierarchic-selector/classes/model-node.mjs +0 -14
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +0 -398
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +0 -243
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +0 -38
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +0 -22
- package/esm2022/lib/modules/hierarchic-selector/public-api.mjs +0 -10
- package/esm2022/lib/modules/icon/icon.directive.mjs +0 -96
- package/esm2022/lib/modules/icon/icon.module.mjs +0 -33
- package/esm2022/lib/modules/icon/public-api.mjs +0 -6
- package/esm2022/lib/modules/logger/error-handler.mjs +0 -87
- package/esm2022/lib/modules/logger/error.module.mjs +0 -22
- package/esm2022/lib/modules/logger/public-api.mjs +0 -6
- package/esm2022/lib/modules/matomo/matomo.service.mjs +0 -96
- package/esm2022/lib/modules/matomo/public-api.mjs +0 -5
- package/esm2022/lib/modules/panels/abstract-panel.mjs +0 -76
- package/esm2022/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs +0 -12
- package/esm2022/lib/modules/panels/panels.component.mjs +0 -27
- package/esm2022/lib/modules/panels/panels.module.mjs +0 -10
- package/esm2022/lib/modules/panels/panels.service.mjs +0 -329
- package/esm2022/lib/modules/panels/panels.urlmatcher.mjs +0 -75
- package/esm2022/lib/modules/panels/public-api.mjs +0 -11
- package/esm2022/lib/modules/panels/types.mjs +0 -3
- package/esm2022/lib/modules/relations/public-api.mjs +0 -5
- package/esm2022/lib/modules/relations/relations.component.mjs +0 -254
- package/esm2022/lib/modules/search/classes/graphql-doctrine.mjs +0 -111
- package/esm2022/lib/modules/search/classes/graphql-doctrine.types.mjs +0 -14
- package/esm2022/lib/modules/search/classes/transformers.mjs +0 -142
- package/esm2022/lib/modules/search/classes/url.mjs +0 -53
- package/esm2022/lib/modules/search/classes/utils.mjs +0 -25
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container-animations.mjs +0 -44
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +0 -87
- package/esm2022/lib/modules/search/dropdown-container/dropdown-ref.mjs +0 -24
- package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +0 -90
- package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +0 -45
- package/esm2022/lib/modules/search/group/group.component.mjs +0 -53
- package/esm2022/lib/modules/search/input/input.component.mjs +0 -365
- package/esm2022/lib/modules/search/public-api.mjs +0 -7
- package/esm2022/lib/modules/search/search/search.component.mjs +0 -102
- package/esm2022/lib/modules/search/types/dropdown-component.mjs +0 -2
- package/esm2022/lib/modules/search/types/facet.mjs +0 -2
- package/esm2022/lib/modules/search/types/values.mjs +0 -2
- package/esm2022/lib/modules/select/abstract-select.component.mjs +0 -232
- package/esm2022/lib/modules/select/public-api.mjs +0 -7
- package/esm2022/lib/modules/select/select/select.component.mjs +0 -310
- package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +0 -57
- package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +0 -155
- package/esm2022/lib/modules/sidenav/public-api.mjs +0 -9
- package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +0 -15
- package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +0 -90
- package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +0 -11
- package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +0 -50
- package/esm2022/lib/modules/sidenav/sidenav.service.mjs +0 -196
- package/esm2022/lib/modules/stamp/public-api.mjs +0 -5
- package/esm2022/lib/modules/stamp/stamp.component.mjs +0 -23
- package/esm2022/lib/modules/table-button/public-api.mjs +0 -5
- package/esm2022/lib/modules/table-button/table-button.component.mjs +0 -78
- package/esm2022/lib/services/abstract-model.service.mjs +0 -526
- package/esm2022/lib/services/debounce.service.mjs +0 -149
- package/esm2022/lib/services/enum.service.mjs +0 -64
- package/esm2022/lib/services/link-mutation.service.mjs +0 -154
- package/esm2022/lib/services/persistence.service.mjs +0 -115
- package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +0 -63
- package/esm2022/lib/types/types.mjs +0 -2
- package/esm2022/public-api.mjs +0 -46
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { map, take, takeUntil, tap, timer } from 'rxjs';
|
|
2
|
-
import { DestroyRef } from '@angular/core';
|
|
3
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
-
/**
|
|
5
|
-
* Behave like setTimeout(), but with a mandatory cancel mechanism.
|
|
6
|
-
*
|
|
7
|
-
* This is typically useful to replace setTimeout() in components where the callback
|
|
8
|
-
* would crash if executed after the component destruction. That can easily happen
|
|
9
|
-
* when the user navigates quickly between pages.
|
|
10
|
-
*
|
|
11
|
-
* Typical usage in a component would be:
|
|
12
|
-
*
|
|
13
|
-
* ```ts
|
|
14
|
-
* cancellableTimeout(inject(DestroyRef)).subscribe(myCallback);
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* or
|
|
18
|
-
*
|
|
19
|
-
* ```ts
|
|
20
|
-
* cancellableTimeout(this.ngUnsubscribe).subscribe(myCallback);
|
|
21
|
-
* ```
|
|
22
|
-
*
|
|
23
|
-
* Instead of the more error-prone:
|
|
24
|
-
*
|
|
25
|
-
* ```ts
|
|
26
|
-
* public foo(): void {
|
|
27
|
-
* this.timeout = setTimeout(myCallBack);
|
|
28
|
-
* }
|
|
29
|
-
*
|
|
30
|
-
* public ngOnDestroy(): void {
|
|
31
|
-
* if (this.timeout) {
|
|
32
|
-
* clearTimeout(this.timeout);
|
|
33
|
-
* this.timeout = null;
|
|
34
|
-
* }
|
|
35
|
-
* }
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
export function cancellableTimeout(canceller, milliSeconds = 0) {
|
|
39
|
-
return timer(milliSeconds).pipe(take(1), canceller instanceof DestroyRef ? takeUntilDestroyed(canceller) : takeUntil(canceller), map(() => undefined));
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* For debugging purpose only, will dump in console everything that happen to
|
|
43
|
-
* the observable
|
|
44
|
-
*/
|
|
45
|
-
export function debug(debugName) {
|
|
46
|
-
return tap({
|
|
47
|
-
subscribe: () => console.log('SUBSCRIBE', debugName),
|
|
48
|
-
unsubscribe: () => console.log('UNSUBSCRIBE', debugName),
|
|
49
|
-
next: value => console.log('NEXT', debugName, value),
|
|
50
|
-
error: error => console.log('ERROR', debugName, error),
|
|
51
|
-
complete: () => console.log('COMPLETE', debugName),
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnhqcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3J4anMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEdBQUcsRUFBd0MsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFOUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUEyQyxFQUFFLFlBQVksR0FBRyxDQUFDO0lBQzVGLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsWUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3RGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FDdkIsQ0FBQztBQUNOLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFJLFNBQWlCO0lBQ3RDLE9BQU8sR0FBRyxDQUFJO1FBQ1YsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQztRQUNwRCxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDO1FBQ3hELElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDcEQsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQztRQUN0RCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDO0tBQ3JELENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge21hcCwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlLCB0YWtlLCB0YWtlVW50aWwsIHRhcCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEZXN0cm95UmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbi8qKlxuICogQmVoYXZlIGxpa2Ugc2V0VGltZW91dCgpLCBidXQgd2l0aCBhIG1hbmRhdG9yeSBjYW5jZWwgbWVjaGFuaXNtLlxuICpcbiAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWZ1bCB0byByZXBsYWNlIHNldFRpbWVvdXQoKSBpbiBjb21wb25lbnRzIHdoZXJlIHRoZSBjYWxsYmFja1xuICogd291bGQgY3Jhc2ggaWYgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGNvbXBvbmVudCBkZXN0cnVjdGlvbi4gVGhhdCBjYW4gZWFzaWx5IGhhcHBlblxuICogd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgcXVpY2tseSBiZXR3ZWVuIHBhZ2VzLlxuICpcbiAqIFR5cGljYWwgdXNhZ2UgaW4gYSBjb21wb25lbnQgd291bGQgYmU6XG4gKlxuICogYGBgdHNcbiAqIGNhbmNlbGxhYmxlVGltZW91dChpbmplY3QoRGVzdHJveVJlZikpLnN1YnNjcmliZShteUNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIG9yXG4gKlxuICogYGBgdHNcbiAqIGNhbmNlbGxhYmxlVGltZW91dCh0aGlzLm5nVW5zdWJzY3JpYmUpLnN1YnNjcmliZShteUNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIEluc3RlYWQgb2YgdGhlIG1vcmUgZXJyb3ItcHJvbmU6XG4gKlxuICogYGBgdHNcbiAqIHB1YmxpYyBmb28oKTogdm9pZCB7XG4gKiAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChteUNhbGxCYWNrKTtcbiAqIH1cbiAqXG4gKiBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gKiAgICAgaWYgKHRoaXMudGltZW91dCkge1xuICogICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAqICAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAqICAgICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxsYWJsZVRpbWVvdXQoY2FuY2VsbGVyOiBPYnNlcnZhYmxlPHVua25vd24+IHwgRGVzdHJveVJlZiwgbWlsbGlTZWNvbmRzID0gMCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aW1lcihtaWxsaVNlY29uZHMpLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIGNhbmNlbGxlciBpbnN0YW5jZW9mIERlc3Ryb3lSZWYgPyB0YWtlVW50aWxEZXN0cm95ZWQoY2FuY2VsbGVyKSA6IHRha2VVbnRpbChjYW5jZWxsZXIpLFxuICAgICAgICBtYXAoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICApO1xufVxuXG4vKipcbiAqIEZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5LCB3aWxsIGR1bXAgaW4gY29uc29sZSBldmVyeXRoaW5nIHRoYXQgaGFwcGVuIHRvXG4gKiB0aGUgb2JzZXJ2YWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVidWc8VD4oZGVidWdOYW1lOiBzdHJpbmcpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICAgIHJldHVybiB0YXA8VD4oe1xuICAgICAgICBzdWJzY3JpYmU6ICgpID0+IGNvbnNvbGUubG9nKCdTVUJTQ1JJQkUnLCBkZWJ1Z05hbWUpLFxuICAgICAgICB1bnN1YnNjcmliZTogKCkgPT4gY29uc29sZS5sb2coJ1VOU1VCU0NSSUJFJywgZGVidWdOYW1lKSxcbiAgICAgICAgbmV4dDogdmFsdWUgPT4gY29uc29sZS5sb2coJ05FWFQnLCBkZWJ1Z05hbWUsIHZhbHVlKSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IGNvbnNvbGUubG9nKCdFUlJPUicsIGRlYnVnTmFtZSwgZXJyb3IpLFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ0NPTVBMRVRFJywgZGVidWdOYW1lKSxcbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { hmacSha256 } from './crypto';
|
|
2
|
-
import { from, switchMap } from 'rxjs';
|
|
3
|
-
function getOperations(req) {
|
|
4
|
-
if (req.body instanceof FormData) {
|
|
5
|
-
const operations = req.body.get('operations');
|
|
6
|
-
if (typeof operations !== 'string') {
|
|
7
|
-
throw new Error('Cannot sign a GraphQL query that is using FormData but that is missing the key `operations`');
|
|
8
|
-
}
|
|
9
|
-
return operations;
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
return JSON.stringify(req.body);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Sign all HTTP POST requests that are GraphQL queries against `/graphql` endpoint with a custom signature.
|
|
17
|
-
*
|
|
18
|
-
* The server will validate the signature before executing the GraphQL query.
|
|
19
|
-
*/
|
|
20
|
-
export function graphqlQuerySigner(key) {
|
|
21
|
-
return (req, next) => {
|
|
22
|
-
const mustSign = req.method === 'POST' && /\/graphql(\?|$)/.exec(req.url);
|
|
23
|
-
if (!mustSign) {
|
|
24
|
-
return next(req);
|
|
25
|
-
}
|
|
26
|
-
const operations = getOperations(req);
|
|
27
|
-
const timestamp = Math.round(Date.now() / 1000);
|
|
28
|
-
const payload = timestamp + operations;
|
|
29
|
-
return from(hmacSha256(key, payload)).pipe(switchMap(hash => {
|
|
30
|
-
const header = `v1.${timestamp}.${hash}`;
|
|
31
|
-
const signedRequest = req.clone({
|
|
32
|
-
headers: req.headers.set('X-Signature', header),
|
|
33
|
-
});
|
|
34
|
-
return next(signedRequest);
|
|
35
|
-
}));
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3NpZ25pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVyQyxTQUFTLGFBQWEsQ0FBQyxHQUF5QjtJQUM1QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLFlBQVksUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUNYLDZGQUE2RixDQUNoRyxDQUFDO1FBQ04sQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBVztJQUMxQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ1osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBRXZDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3RDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNiLE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3pDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO2FBQ2xELENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwSW50ZXJjZXB0b3JGbiwgSHR0cFJlcXVlc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7aG1hY1NoYTI1Nn0gZnJvbSAnLi9jcnlwdG8nO1xuaW1wb3J0IHtmcm9tLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25zKHJlcTogSHR0cFJlcXVlc3Q8dW5rbm93bj4pOiBzdHJpbmcge1xuICAgIGlmIChyZXEuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbnMgPSByZXEuYm9keS5nZXQoJ29wZXJhdGlvbnMnKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcGVyYXRpb25zICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdDYW5ub3Qgc2lnbiBhIEdyYXBoUUwgcXVlcnkgdGhhdCBpcyB1c2luZyBGb3JtRGF0YSBidXQgdGhhdCBpcyBtaXNzaW5nIHRoZSBrZXkgYG9wZXJhdGlvbnNgJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wZXJhdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcS5ib2R5KTtcbiAgICB9XG59XG5cbi8qKlxuICogU2lnbiBhbGwgSFRUUCBQT1NUIHJlcXVlc3RzIHRoYXQgYXJlIEdyYXBoUUwgcXVlcmllcyBhZ2FpbnN0IGAvZ3JhcGhxbGAgZW5kcG9pbnQgd2l0aCBhIGN1c3RvbSBzaWduYXR1cmUuXG4gKlxuICogVGhlIHNlcnZlciB3aWxsIHZhbGlkYXRlIHRoZSBzaWduYXR1cmUgYmVmb3JlIGV4ZWN1dGluZyB0aGUgR3JhcGhRTCBxdWVyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWxRdWVyeVNpZ25lcihrZXk6IHN0cmluZyk6IEh0dHBJbnRlcmNlcHRvckZuIHtcbiAgICByZXR1cm4gKHJlcSwgbmV4dCkgPT4ge1xuICAgICAgICBjb25zdCBtdXN0U2lnbiA9IHJlcS5tZXRob2QgPT09ICdQT1NUJyAmJiAvXFwvZ3JhcGhxbChcXD98JCkvLmV4ZWMocmVxLnVybCk7XG4gICAgICAgIGlmICghbXVzdFNpZ24pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcGVyYXRpb25zID0gZ2V0T3BlcmF0aW9ucyhyZXEpO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRpbWVzdGFtcCArIG9wZXJhdGlvbnM7XG5cbiAgICAgICAgcmV0dXJuIGZyb20oaG1hY1NoYTI1NihrZXksIHBheWxvYWQpKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGhhc2ggPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IGB2MS4ke3RpbWVzdGFtcH0uJHtoYXNofWA7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkUmVxdWVzdCA9IHJlcS5jbG9uZSh7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLnNldCgnWC1TaWduYXR1cmUnLCBoZWFkZXIpLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoc2lnbmVkUmVxdWVzdCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9O1xufVxuIl19
|