@lifeready/core 1.0.12 → 1.0.15
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/README.md +62 -62
- package/bundles/lifeready-core.umd.js +14315 -14315
- package/bundles/lifeready-core.umd.js.map +1 -1
- package/bundles/lifeready-core.umd.min.js.map +1 -1
- package/esm2015/lib/_common/ast.js +40 -40
- package/esm2015/lib/_common/deferred-promise.js +24 -24
- package/esm2015/lib/_common/exceptions.js +157 -157
- package/esm2015/lib/_common/queries.gql.js +190 -190
- package/esm2015/lib/_common/run-outside-angular.js +79 -79
- package/esm2015/lib/_common/types.js +1 -1
- package/esm2015/lib/_common/utils.js +52 -52
- package/esm2015/lib/api/contact-card.gql.js +79 -79
- package/esm2015/lib/api/contact-card.service.js +154 -154
- package/esm2015/lib/api/contact-card2.gql.js +60 -60
- package/esm2015/lib/api/contact-card2.service.js +103 -103
- package/esm2015/lib/api/file.service.js +74 -74
- package/esm2015/lib/api/key-exchange.gql.js +188 -188
- package/esm2015/lib/api/key-exchange.service.js +442 -442
- package/esm2015/lib/api/key-exchange.types.js +18 -18
- package/esm2015/lib/api/key-exchange2.gql.js +171 -171
- package/esm2015/lib/api/key-exchange2.service.js +479 -479
- package/esm2015/lib/api/lock.gql.js +40 -40
- package/esm2015/lib/api/lock.service.js +64 -64
- package/esm2015/lib/api/lr-apollo.service.js +46 -46
- package/esm2015/lib/api/lr-graphql/index.js +6 -6
- package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -155
- package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -213
- package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -51
- package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -48
- package/esm2015/lib/api/lr-graphql/lr.service.js +18 -18
- package/esm2015/lib/api/message.service.js +138 -138
- package/esm2015/lib/api/persist.service.js +181 -181
- package/esm2015/lib/api/query-processor/common-processors.service.js +93 -93
- package/esm2015/lib/api/query-processor/index.js +3 -3
- package/esm2015/lib/api/query-processor/query-processor.service.js +262 -262
- package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -109
- package/esm2015/lib/api/shared-contact-card.service.js +119 -119
- package/esm2015/lib/api/shared-contact-card2.gql.js +41 -41
- package/esm2015/lib/api/shared-contact-card2.service.js +117 -117
- package/esm2015/lib/api/time.service.js +146 -146
- package/esm2015/lib/api/types/graphql.types.js +7 -7
- package/esm2015/lib/api/types/index.js +3 -3
- package/esm2015/lib/api/types/lr-graphql.types.js +101 -101
- package/esm2015/lib/auth/auth.config.js +57 -57
- package/esm2015/lib/auth/auth.gql.js +48 -48
- package/esm2015/lib/auth/auth.types.js +27 -27
- package/esm2015/lib/auth/idle.service.js +168 -168
- package/esm2015/lib/auth/idle.types.js +7 -7
- package/esm2015/lib/auth/lbop.service.js +355 -355
- package/esm2015/lib/auth/life-ready-auth.service.js +488 -488
- package/esm2015/lib/auth/password.service.js +320 -320
- package/esm2015/lib/auth/register.service.js +172 -172
- package/esm2015/lib/auth/two-factor.service.js +74 -74
- package/esm2015/lib/category/category-meta.service.js +99 -99
- package/esm2015/lib/category/category.gql.js +406 -406
- package/esm2015/lib/category/category.service.js +390 -390
- package/esm2015/lib/category/category.types.js +29 -29
- package/esm2015/lib/cryptography/cryptography.types.js +11 -11
- package/esm2015/lib/cryptography/encryption.service.js +189 -189
- package/esm2015/lib/cryptography/key-factory.service.js +237 -237
- package/esm2015/lib/cryptography/key-graph.service.js +299 -299
- package/esm2015/lib/cryptography/key-meta.service.js +200 -200
- package/esm2015/lib/cryptography/key.service.js +124 -124
- package/esm2015/lib/cryptography/slip39.service.js +169 -169
- package/esm2015/lib/cryptography/web-crypto.service.js +29 -29
- package/esm2015/lib/items2/item2.gql.js +139 -139
- package/esm2015/lib/items2/item2.service.js +498 -498
- package/esm2015/lib/items2/item2.types.js +1 -1
- package/esm2015/lib/life-ready.config.js +84 -84
- package/esm2015/lib/life-ready.module.js +74 -74
- package/esm2015/lib/notification/notification.gql.js +43 -43
- package/esm2015/lib/notification/notification.service.js +118 -118
- package/esm2015/lib/plan/plan.gql.js +123 -123
- package/esm2015/lib/plan/plan.service.js +149 -149
- package/esm2015/lib/plan/plan.types.js +11 -11
- package/esm2015/lib/record/record-attachment.service.js +101 -101
- package/esm2015/lib/record/record.gql.js +179 -179
- package/esm2015/lib/record/record.service.js +206 -206
- package/esm2015/lib/record/record.types.js +15 -15
- package/esm2015/lib/record-type/record-type.service.js +75 -75
- package/esm2015/lib/record-type/record-type.types.js +28 -28
- package/esm2015/lib/scenario/scenario.constants.js +2 -2
- package/esm2015/lib/scenario/scenario.controller.js +34 -34
- package/esm2015/lib/scenario/scenario.gql.js +72 -72
- package/esm2015/lib/scenario/scenario.gql.private.js +198 -198
- package/esm2015/lib/scenario/scenario.service.js +538 -538
- package/esm2015/lib/scenario/scenario.types.js +1 -1
- package/esm2015/lib/trusted-parties/tp-assembly.gql.private.js +22 -22
- package/esm2015/lib/trusted-parties/tp-assembly.js +362 -362
- package/esm2015/lib/trusted-parties/tp-assembly.types.js +1 -1
- package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +113 -113
- package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -129
- package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -4
- package/esm2015/lib/trusted-parties/tp-password-reset.controller.js +34 -34
- package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +236 -236
- package/esm2015/lib/trusted-parties/tp-password-reset.service.js +95 -95
- package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -148
- package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -326
- package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -41
- package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -87
- package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -215
- package/esm2015/lib/users/profile-details.service.js +214 -214
- package/esm2015/lib/users/profile.gql.js +97 -97
- package/esm2015/lib/users/profile.service.js +169 -169
- package/esm2015/lib/users/profile.types.js +34 -34
- package/esm2015/lib/users/user.gql.js +60 -60
- package/esm2015/lib/users/user.service.js +79 -79
- package/esm2015/lib/users/user.types.js +5 -5
- package/esm2015/lifeready-core.js +13 -13
- package/esm2015/public-api.js +71 -71
- package/fesm2015/lifeready-core.js +12258 -12258
- package/fesm2015/lifeready-core.js.map +1 -1
- package/lib/_common/ast.d.ts +11 -11
- package/lib/_common/deferred-promise.d.ts +12 -12
- package/lib/_common/exceptions.d.ts +109 -109
- package/lib/_common/queries.gql.d.ts +10 -10
- package/lib/_common/run-outside-angular.d.ts +14 -14
- package/lib/_common/types.d.ts +10 -10
- package/lib/_common/utils.d.ts +9 -9
- package/lib/api/contact-card.gql.d.ts +7 -7
- package/lib/api/contact-card.service.d.ts +52 -52
- package/lib/api/contact-card2.gql.d.ts +34 -34
- package/lib/api/contact-card2.service.d.ts +49 -49
- package/lib/api/file.service.d.ts +18 -18
- package/lib/api/key-exchange.gql.d.ts +9 -9
- package/lib/api/key-exchange.service.d.ts +39 -39
- package/lib/api/key-exchange.types.d.ts +196 -196
- package/lib/api/key-exchange2.gql.d.ts +125 -125
- package/lib/api/key-exchange2.service.d.ts +187 -187
- package/lib/api/lock.gql.d.ts +27 -27
- package/lib/api/lock.service.d.ts +34 -34
- package/lib/api/lr-apollo.service.d.ts +15 -15
- package/lib/api/lr-graphql/index.d.ts +5 -5
- package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -60
- package/lib/api/lr-graphql/lr-merged-mutation.d.ts +28 -28
- package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -28
- package/lib/api/lr-graphql/lr-mutation.d.ts +8 -8
- package/lib/api/lr-graphql/lr.service.d.ts +9 -9
- package/lib/api/message.service.d.ts +58 -58
- package/lib/api/persist.service.d.ts +31 -31
- package/lib/api/query-processor/common-processors.service.d.ts +36 -36
- package/lib/api/query-processor/index.d.ts +2 -2
- package/lib/api/query-processor/query-processor.service.d.ts +18 -18
- package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -15
- package/lib/api/shared-contact-card.service.d.ts +33 -33
- package/lib/api/shared-contact-card2.gql.d.ts +36 -36
- package/lib/api/shared-contact-card2.service.d.ts +45 -45
- package/lib/api/time.service.d.ts +16 -16
- package/lib/api/types/graphql.types.d.ts +29 -29
- package/lib/api/types/index.d.ts +2 -2
- package/lib/api/types/lr-graphql.types.d.ts +502 -502
- package/lib/auth/auth.config.d.ts +5 -5
- package/lib/auth/auth.gql.d.ts +15 -15
- package/lib/auth/auth.types.d.ts +66 -66
- package/lib/auth/idle.service.d.ts +40 -40
- package/lib/auth/idle.types.d.ts +10 -10
- package/lib/auth/lbop.service.d.ts +91 -91
- package/lib/auth/life-ready-auth.service.d.ts +61 -61
- package/lib/auth/password.service.d.ts +78 -78
- package/lib/auth/register.service.d.ts +25 -25
- package/lib/auth/two-factor.service.d.ts +15 -15
- package/lib/category/category-meta.service.d.ts +23 -23
- package/lib/category/category.gql.d.ts +45 -45
- package/lib/category/category.service.d.ts +67 -67
- package/lib/category/category.types.d.ts +79 -79
- package/lib/cryptography/cryptography.types.d.ts +83 -83
- package/lib/cryptography/encryption.service.d.ts +41 -41
- package/lib/cryptography/key-factory.service.d.ts +38 -38
- package/lib/cryptography/key-graph.service.d.ts +41 -41
- package/lib/cryptography/key-meta.service.d.ts +44 -44
- package/lib/cryptography/key.service.d.ts +36 -36
- package/lib/cryptography/slip39.service.d.ts +43 -43
- package/lib/cryptography/web-crypto.service.d.ts +5 -5
- package/lib/items2/item2.gql.d.ts +123 -123
- package/lib/items2/item2.service.d.ts +203 -203
- package/lib/items2/item2.types.d.ts +70 -70
- package/lib/life-ready.config.d.ts +14 -14
- package/lib/life-ready.module.d.ts +5 -5
- package/lib/notification/notification.gql.d.ts +37 -37
- package/lib/notification/notification.service.d.ts +63 -63
- package/lib/plan/plan.gql.d.ts +11 -11
- package/lib/plan/plan.service.d.ts +33 -33
- package/lib/plan/plan.types.d.ts +31 -31
- package/lib/record/record-attachment.service.d.ts +16 -16
- package/lib/record/record.gql.d.ts +14 -14
- package/lib/record/record.service.d.ts +25 -25
- package/lib/record/record.types.d.ts +57 -57
- package/lib/record-type/record-type.service.d.ts +11 -11
- package/lib/record-type/record-type.types.d.ts +50 -50
- package/lib/scenario/scenario.constants.d.ts +1 -1
- package/lib/scenario/scenario.controller.d.ts +10 -10
- package/lib/scenario/scenario.gql.d.ts +62 -62
- package/lib/scenario/scenario.gql.private.d.ts +16 -16
- package/lib/scenario/scenario.service.d.ts +233 -233
- package/lib/scenario/scenario.types.d.ts +50 -50
- package/lib/trusted-parties/tp-assembly.d.ts +177 -177
- package/lib/trusted-parties/tp-assembly.gql.private.d.ts +5 -5
- package/lib/trusted-parties/tp-assembly.types.d.ts +38 -38
- package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -20
- package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -35
- package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -3
- package/lib/trusted-parties/tp-password-reset.controller.d.ts +10 -10
- package/lib/trusted-parties/tp-password-reset.gql.d.ts +223 -223
- package/lib/trusted-parties/tp-password-reset.service.d.ts +188 -188
- package/lib/trusted-parties/trusted-party.gql.d.ts +9 -9
- package/lib/trusted-parties/trusted-party.service.d.ts +44 -44
- package/lib/trusted-parties/trusted-party.types.d.ts +102 -102
- package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -79
- package/lib/trusted-parties/trusted-party2.service.d.ts +114 -114
- package/lib/users/profile-details.service.d.ts +21 -21
- package/lib/users/profile.gql.d.ts +11 -11
- package/lib/users/profile.service.d.ts +35 -35
- package/lib/users/profile.types.d.ts +96 -96
- package/lib/users/user.gql.d.ts +9 -9
- package/lib/users/user.service.d.ts +12 -12
- package/lib/users/user.types.d.ts +23 -23
- package/lifeready-core.d.ts +12 -12
- package/package.json +1 -1
- package/public-api.d.ts +67 -67
|
@@ -1,117 +1,117 @@
|
|
|
1
|
-
import { __awaiter, __decorate } from "tslib";
|
|
2
|
-
import { Injectable, NgZone } from '@angular/core';
|
|
3
|
-
import { EncryptionService } from '../cryptography/encryption.service';
|
|
4
|
-
import { KeyGraphService } from '../cryptography/key-graph.service';
|
|
5
|
-
import { KeyService } from '../cryptography/key.service';
|
|
6
|
-
import { RunOutsideAngular } from '../_common/run-outside-angular';
|
|
7
|
-
import { LrGraphQLService, LrMutation } from './lr-graphql';
|
|
8
|
-
import { GetOwnedContactCardKeyIdsQuery, GetReceivedContactCardKeyIdQuery, UpdateOwnedContactCardMutation, UpdateReceivedContactCardMutation, } from './shared-contact-card2.gql';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "../cryptography/key.service";
|
|
11
|
-
import * as i2 from "../cryptography/key-graph.service";
|
|
12
|
-
import * as i3 from "../cryptography/encryption.service";
|
|
13
|
-
import * as i4 from "./lr-graphql/lr-graphql.service";
|
|
14
|
-
let SharedContactCard2Service = class SharedContactCard2Service {
|
|
15
|
-
constructor(ngZone, keyService, keyGraph, encryptionService, lrGraphQL) {
|
|
16
|
-
this.ngZone = ngZone;
|
|
17
|
-
this.keyService = keyService;
|
|
18
|
-
this.keyGraph = keyGraph;
|
|
19
|
-
this.encryptionService = encryptionService;
|
|
20
|
-
this.lrGraphQL = lrGraphQL;
|
|
21
|
-
}
|
|
22
|
-
getOwnedContactCardKeyIds(id) {
|
|
23
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
const { ownedContactCard: cc } = yield this.lrGraphQL.query({
|
|
25
|
-
query: GetOwnedContactCardKeyIdsQuery,
|
|
26
|
-
variables: {
|
|
27
|
-
id,
|
|
28
|
-
},
|
|
29
|
-
});
|
|
30
|
-
return {
|
|
31
|
-
sharedKeyId: cc.sharedKey.id,
|
|
32
|
-
ownerKeyId: cc.ownerKey.id,
|
|
33
|
-
};
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
getReceivedContactCardKeyId(id) {
|
|
37
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
-
return (yield this.lrGraphQL.query({
|
|
39
|
-
query: GetReceivedContactCardKeyIdQuery,
|
|
40
|
-
variables: {
|
|
41
|
-
id,
|
|
42
|
-
},
|
|
43
|
-
})).receivedContactCard.receiverKey.id;
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
updateOwnedContactCard({ id, ownerKeyId, sharedKeyId, ownerPlainDataJson, ownerCipherDataClearJson, sharedCipherDataClearJson, }) {
|
|
47
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
let ownerKey;
|
|
49
|
-
let sharedKey;
|
|
50
|
-
try {
|
|
51
|
-
ownerKey = yield this.keyGraph.getKey(ownerKeyId);
|
|
52
|
-
sharedKey = yield this.keyGraph.getKey(sharedKeyId);
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
const keys = yield this.getOwnedContactCardKeyIds(id);
|
|
56
|
-
// try again
|
|
57
|
-
ownerKey = yield this.keyGraph.getKey(keys.ownerKeyId);
|
|
58
|
-
sharedKey = yield this.keyGraph.getKey(keys.sharedKeyId);
|
|
59
|
-
}
|
|
60
|
-
const sigPxk = yield this.keyService.getCurrentSigPxk();
|
|
61
|
-
const sharedCipherData = yield this.encryptionService.encrypt(sharedKey.jwk, sharedCipherDataClearJson);
|
|
62
|
-
const sharedCipherDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, sharedCipherData));
|
|
63
|
-
const ownerPlainDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, ownerPlainDataJson));
|
|
64
|
-
const ownerCipherData = yield this.encryptionService.encryptToString(ownerKey.jwk, ownerCipherDataClearJson);
|
|
65
|
-
return new LrMutation({
|
|
66
|
-
mutation: UpdateOwnedContactCardMutation,
|
|
67
|
-
variables: {
|
|
68
|
-
input: {
|
|
69
|
-
id,
|
|
70
|
-
ownerCipherData,
|
|
71
|
-
ownerKeyId: ownerKey.id,
|
|
72
|
-
sharedCipherDataSig,
|
|
73
|
-
sharedKeyId: sharedKey.id,
|
|
74
|
-
sigPxkId: sigPxk.id,
|
|
75
|
-
ownerPlainDataSig,
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
updateReceivedContactCard({ id, receiverKeyId, receiverCipherDataClearJson, }) {
|
|
82
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
-
const receiverKey = yield this.keyGraph.getKey(receiverKeyId, () => this.getReceivedContactCardKeyId(id));
|
|
84
|
-
const receiverCipherData = yield this.encryptionService.encryptToString(receiverKey.jwk, receiverCipherDataClearJson);
|
|
85
|
-
return new LrMutation({
|
|
86
|
-
mutation: UpdateReceivedContactCardMutation,
|
|
87
|
-
variables: {
|
|
88
|
-
input: {
|
|
89
|
-
id,
|
|
90
|
-
receiverCipherData,
|
|
91
|
-
receiverKeyId: receiverKey.id,
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
SharedContactCard2Service.ɵprov = i0.ɵɵdefineInjectable({ factory: function SharedContactCard2Service_Factory() { return new SharedContactCard2Service(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.KeyService), i0.ɵɵinject(i2.KeyGraphService), i0.ɵɵinject(i3.EncryptionService), i0.ɵɵinject(i4.LrGraphQLService)); }, token: SharedContactCard2Service, providedIn: "root" });
|
|
99
|
-
SharedContactCard2Service.decorators = [
|
|
100
|
-
{ type: Injectable, args: [{
|
|
101
|
-
providedIn: 'root',
|
|
102
|
-
},] }
|
|
103
|
-
];
|
|
104
|
-
SharedContactCard2Service.ctorParameters = () => [
|
|
105
|
-
{ type: NgZone },
|
|
106
|
-
{ type: KeyService },
|
|
107
|
-
{ type: KeyGraphService },
|
|
108
|
-
{ type: EncryptionService },
|
|
109
|
-
{ type: LrGraphQLService }
|
|
110
|
-
];
|
|
111
|
-
SharedContactCard2Service = __decorate([
|
|
112
|
-
RunOutsideAngular({
|
|
113
|
-
ngZoneName: 'ngZone',
|
|
114
|
-
})
|
|
115
|
-
], SharedContactCard2Service);
|
|
116
|
-
export { SharedContactCard2Service };
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhY3QtY2FyZDIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL3NoYXJlZC1jb250YWN0LWNhcmQyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGdDQUFnQyxFQUNoQyw4QkFBOEIsRUFDOUIsaUNBQWlDLEdBQ2xDLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztJQXFCdkIseUJBQXlCLFNBQXpCLHlCQUF5QjtJQUNwQyxZQUNVLE1BQWMsRUFDZCxVQUFzQixFQUN0QixRQUF5QixFQUN6QixpQkFBb0MsRUFDcEMsU0FBMkI7UUFKM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUNsQyxDQUFDO0lBRVUseUJBQXlCLENBQUMsRUFBa0I7O1lBQ3hELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENB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QUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQ2pFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsQ0FDckMsQ0FBQztZQUVGLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUNyRSxXQUFXLENBQUMsR0FBRyxFQUNmLDJCQUEyQixDQUM1QixDQUFDO1lBRUYsT0FBTyxJQUFJLFVBQVUsQ0FBQztnQkFDcEIsUUFBUSxFQUFFLGlDQUFpQztnQkFDM0MsU0FBUyxFQUFFO29CQUNULEtBQUssRUFBRTt3QkFDTCxFQUFFO3dCQUNGLGtCQUFrQjt3QkFDbEIsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFO3FCQUM5QjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtDQUNGLENBQUE7OztZQXZIQSxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQXBDb0IsTUFBTTtZQUlsQixVQUFVO1lBRFYsZUFBZTtZQURmLGlCQUFpQjtZQVFqQixnQkFBZ0I7O0FBMkJaLHlCQUF5QjtJQU5yQyxpQkFBaUIsQ0FBQztRQUNqQixVQUFVLEVBQUUsUUFBUTtLQUNyQixDQUFDO0dBSVcseUJBQXlCLENBb0hyQztTQXBIWSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEtleSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHkudHlwZXMnO1xuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcbmltcG9ydCB7XG4gIENvbnRhY3RDYXJkUmVjZWl2ZXJDaXBoZXJEYXRhLFxuICBTZW5kQ29udGFjdENhcmRJbnB1dCxcbn0gZnJvbSAnLi9rZXktZXhjaGFuZ2UyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTHJHcmFwaFFMU2VydmljZSwgTHJNdXRhdGlvbiB9IGZyb20gJy4vbHItZ3JhcGhxbCc7XG5pbXBvcnQge1xuICBHZXRPd25lZENvbnRhY3RDYXJkS2V5SWRzUXVlcnksXG4gIEdldFJlY2VpdmVkQ29udGFjdENhcmRLZXlJZFF1ZXJ5LFxuICBVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24sXG4gIFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRNdXRhdGlvbixcbn0gZnJvbSAnLi9zaGFyZWQtY29udGFjdC1jYXJkMi5ncWwnO1xuaW1wb3J0IHsgTHJSZWxheUlkSW5wdXQgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVPd25lZENvbnRhY3RDYXJkSW5wdXQgZXh0ZW5kcyBTZW5kQ29udGFjdENhcmRJbnB1dCB7XG4gIGlkOiBMclJlbGF5SWRJbnB1dDtcbiAgb3duZXJLZXlJZD86IExyUmVsYXlJZElucHV0O1xuICBzaGFyZWRLZXlJZD86IExyUmVsYXlJZElucHV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRJbnB1dFxuICBleHRlbmRzIENvbnRhY3RDYXJkUmVjZWl2ZXJDaXBoZXJEYXRhIHtcbiAgaWQ6IExyUmVsYXlJZElucHV0O1xuICByZWNlaXZlcktleUlkPzogTHJSZWxheUlkSW5wdXQ7XG59XG5cbkBSdW5PdXRzaWRlQW5ndWxhcih7XG4gIG5nWm9uZU5hbWU6ICduZ1pvbmUnLFxufSlcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTaGFyZWRDb250YWN0Q2FyZDJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbHJHcmFwaFFMOiBMckdyYXBoUUxTZXJ2aWNlXG4gICkge31cblxuICBwcml2YXRlIGFzeW5jIGdldE93bmVkQ29udGFjdENhcmRLZXlJZHMoaWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgY29uc3QgeyBvd25lZENvbnRhY3RDYXJkOiBjYyB9ID0gYXdhaXQgdGhpcy5sckdyYXBoUUwucXVlcnkoe1xuICAgICAgcXVlcnk6IEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkS2V5SWQ6IGNjLnNoYXJlZEtleS5pZCxcbiAgICAgIG93bmVyS2V5SWQ6IGNjLm93bmVyS2V5LmlkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJlY2VpdmVkQ29udGFjdENhcmRLZXlJZChpZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5sckdyYXBoUUwucXVlcnkoe1xuICAgICAgICBxdWVyeTogR2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkUXVlcnksXG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApLnJlY2VpdmVkQ29udGFjdENhcmQucmVjZWl2ZXJLZXkuaWQ7XG4gIH1cblxuICBhc3luYyB1cGRhdGVPd25lZENvbnRhY3RDYXJkKHtcbiAgICBpZCxcbiAgICBvd25lcktleUlkLFxuICAgIHNoYXJlZEtleUlkLFxuICAgIG93bmVyUGxhaW5EYXRhSnNvbixcbiAgICBvd25lckNpcGhlckRhdGFDbGVhckpzb24sXG4gICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgfTogVXBkYXRlT3duZWRDb250YWN0Q2FyZElucHV0KSB7XG4gICAgbGV0IG93bmVyS2V5OiBLZXk7XG4gICAgbGV0IHNoYXJlZEtleTogS2V5O1xuXG4gICAgdHJ5IHtcbiAgICAgIG93bmVyS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkob3duZXJLZXlJZCk7XG4gICAgICBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShzaGFyZWRLZXlJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCB0aGlzLmdldE93bmVkQ29udGFjdENhcmRLZXlJZHMoaWQpO1xuXG4gICAgICAvLyB0cnkgYWdhaW5cbiAgICAgIG93bmVyS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoa2V5cy5vd25lcktleUlkKTtcbiAgICAgIHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KGtleXMuc2hhcmVkS2V5SWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ1B4ayA9IGF3YWl0IHRoaXMua2V5U2VydmljZS5nZXRDdXJyZW50U2lnUHhrKCk7XG5cbiAgICBjb25zdCBzaGFyZWRDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxuICAgICAgc2hhcmVkS2V5Lmp3ayxcbiAgICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb25cbiAgICApO1xuICAgIGNvbnN0IHNoYXJlZENpcGhlckRhdGFTaWcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCBzaGFyZWRDaXBoZXJEYXRhKVxuICAgICk7XG5cbiAgICBjb25zdCBvd25lclBsYWluRGF0YVNpZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssIG93bmVyUGxhaW5EYXRhSnNvbilcbiAgICApO1xuXG4gICAgY29uc3Qgb3duZXJDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBvd25lcktleS5qd2ssXG4gICAgICBvd25lckNpcGhlckRhdGFDbGVhckpzb25cbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvd25lckNpcGhlckRhdGEsXG4gICAgICAgICAgb3duZXJLZXlJZDogb3duZXJLZXkuaWQsXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YVNpZyxcbiAgICAgICAgICBzaGFyZWRLZXlJZDogc2hhcmVkS2V5LmlkLFxuICAgICAgICAgIHNpZ1B4a0lkOiBzaWdQeGsuaWQsXG4gICAgICAgICAgb3duZXJQbGFpbkRhdGFTaWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZCh7XG4gICAgaWQsXG4gICAgcmVjZWl2ZXJLZXlJZCxcbiAgICByZWNlaXZlckNpcGhlckRhdGFDbGVhckpzb24sXG4gIH06IFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRJbnB1dCkge1xuICAgIGNvbnN0IHJlY2VpdmVyS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkocmVjZWl2ZXJLZXlJZCwgKCkgPT5cbiAgICAgIHRoaXMuZ2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkKGlkKVxuICAgICk7XG5cbiAgICBjb25zdCByZWNlaXZlckNpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHJlY2VpdmVyS2V5Lmp3ayxcbiAgICAgIHJlY2VpdmVyQ2lwaGVyRGF0YUNsZWFySnNvblxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIHJlY2VpdmVyQ2lwaGVyRGF0YSxcbiAgICAgICAgICByZWNlaXZlcktleUlkOiByZWNlaXZlcktleS5pZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
1
|
+
import { __awaiter, __decorate } from "tslib";
|
|
2
|
+
import { Injectable, NgZone } from '@angular/core';
|
|
3
|
+
import { EncryptionService } from '../cryptography/encryption.service';
|
|
4
|
+
import { KeyGraphService } from '../cryptography/key-graph.service';
|
|
5
|
+
import { KeyService } from '../cryptography/key.service';
|
|
6
|
+
import { RunOutsideAngular } from '../_common/run-outside-angular';
|
|
7
|
+
import { LrGraphQLService, LrMutation } from './lr-graphql';
|
|
8
|
+
import { GetOwnedContactCardKeyIdsQuery, GetReceivedContactCardKeyIdQuery, UpdateOwnedContactCardMutation, UpdateReceivedContactCardMutation, } from './shared-contact-card2.gql';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../cryptography/key.service";
|
|
11
|
+
import * as i2 from "../cryptography/key-graph.service";
|
|
12
|
+
import * as i3 from "../cryptography/encryption.service";
|
|
13
|
+
import * as i4 from "./lr-graphql/lr-graphql.service";
|
|
14
|
+
let SharedContactCard2Service = class SharedContactCard2Service {
|
|
15
|
+
constructor(ngZone, keyService, keyGraph, encryptionService, lrGraphQL) {
|
|
16
|
+
this.ngZone = ngZone;
|
|
17
|
+
this.keyService = keyService;
|
|
18
|
+
this.keyGraph = keyGraph;
|
|
19
|
+
this.encryptionService = encryptionService;
|
|
20
|
+
this.lrGraphQL = lrGraphQL;
|
|
21
|
+
}
|
|
22
|
+
getOwnedContactCardKeyIds(id) {
|
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
const { ownedContactCard: cc } = yield this.lrGraphQL.query({
|
|
25
|
+
query: GetOwnedContactCardKeyIdsQuery,
|
|
26
|
+
variables: {
|
|
27
|
+
id,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
sharedKeyId: cc.sharedKey.id,
|
|
32
|
+
ownerKeyId: cc.ownerKey.id,
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
getReceivedContactCardKeyId(id) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
return (yield this.lrGraphQL.query({
|
|
39
|
+
query: GetReceivedContactCardKeyIdQuery,
|
|
40
|
+
variables: {
|
|
41
|
+
id,
|
|
42
|
+
},
|
|
43
|
+
})).receivedContactCard.receiverKey.id;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
updateOwnedContactCard({ id, ownerKeyId, sharedKeyId, ownerPlainDataJson, ownerCipherDataClearJson, sharedCipherDataClearJson, }) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
let ownerKey;
|
|
49
|
+
let sharedKey;
|
|
50
|
+
try {
|
|
51
|
+
ownerKey = yield this.keyGraph.getKey(ownerKeyId);
|
|
52
|
+
sharedKey = yield this.keyGraph.getKey(sharedKeyId);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
const keys = yield this.getOwnedContactCardKeyIds(id);
|
|
56
|
+
// try again
|
|
57
|
+
ownerKey = yield this.keyGraph.getKey(keys.ownerKeyId);
|
|
58
|
+
sharedKey = yield this.keyGraph.getKey(keys.sharedKeyId);
|
|
59
|
+
}
|
|
60
|
+
const sigPxk = yield this.keyService.getCurrentSigPxk();
|
|
61
|
+
const sharedCipherData = yield this.encryptionService.encrypt(sharedKey.jwk, sharedCipherDataClearJson);
|
|
62
|
+
const sharedCipherDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, sharedCipherData));
|
|
63
|
+
const ownerPlainDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, ownerPlainDataJson));
|
|
64
|
+
const ownerCipherData = yield this.encryptionService.encryptToString(ownerKey.jwk, ownerCipherDataClearJson);
|
|
65
|
+
return new LrMutation({
|
|
66
|
+
mutation: UpdateOwnedContactCardMutation,
|
|
67
|
+
variables: {
|
|
68
|
+
input: {
|
|
69
|
+
id,
|
|
70
|
+
ownerCipherData,
|
|
71
|
+
ownerKeyId: ownerKey.id,
|
|
72
|
+
sharedCipherDataSig,
|
|
73
|
+
sharedKeyId: sharedKey.id,
|
|
74
|
+
sigPxkId: sigPxk.id,
|
|
75
|
+
ownerPlainDataSig,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
updateReceivedContactCard({ id, receiverKeyId, receiverCipherDataClearJson, }) {
|
|
82
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
const receiverKey = yield this.keyGraph.getKey(receiverKeyId, () => this.getReceivedContactCardKeyId(id));
|
|
84
|
+
const receiverCipherData = yield this.encryptionService.encryptToString(receiverKey.jwk, receiverCipherDataClearJson);
|
|
85
|
+
return new LrMutation({
|
|
86
|
+
mutation: UpdateReceivedContactCardMutation,
|
|
87
|
+
variables: {
|
|
88
|
+
input: {
|
|
89
|
+
id,
|
|
90
|
+
receiverCipherData,
|
|
91
|
+
receiverKeyId: receiverKey.id,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
SharedContactCard2Service.ɵprov = i0.ɵɵdefineInjectable({ factory: function SharedContactCard2Service_Factory() { return new SharedContactCard2Service(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.KeyService), i0.ɵɵinject(i2.KeyGraphService), i0.ɵɵinject(i3.EncryptionService), i0.ɵɵinject(i4.LrGraphQLService)); }, token: SharedContactCard2Service, providedIn: "root" });
|
|
99
|
+
SharedContactCard2Service.decorators = [
|
|
100
|
+
{ type: Injectable, args: [{
|
|
101
|
+
providedIn: 'root',
|
|
102
|
+
},] }
|
|
103
|
+
];
|
|
104
|
+
SharedContactCard2Service.ctorParameters = () => [
|
|
105
|
+
{ type: NgZone },
|
|
106
|
+
{ type: KeyService },
|
|
107
|
+
{ type: KeyGraphService },
|
|
108
|
+
{ type: EncryptionService },
|
|
109
|
+
{ type: LrGraphQLService }
|
|
110
|
+
];
|
|
111
|
+
SharedContactCard2Service = __decorate([
|
|
112
|
+
RunOutsideAngular({
|
|
113
|
+
ngZoneName: 'ngZone',
|
|
114
|
+
})
|
|
115
|
+
], SharedContactCard2Service);
|
|
116
|
+
export { SharedContactCard2Service };
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhY3QtY2FyZDIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9rYy1jbGllbnQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL3NoYXJlZC1jb250YWN0LWNhcmQyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGdDQUFnQyxFQUNoQyw4QkFBOEIsRUFDOUIsaUNBQWlDLEdBQ2xDLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztJQXFCdkIseUJBQXlCLFNBQXpCLHlCQUF5QjtJQUNwQyxZQUNVLE1BQWMsRUFDZCxVQUFzQixFQUN0QixRQUF5QixFQUN6QixpQkFBb0MsRUFDcEMsU0FBMkI7UUFKM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUNsQyxDQUFDO0lBRVUseUJBQXlCLENBQUMsRUFBa0I7O1lBQ3hELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dC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QUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQ2pFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsQ0FDckMsQ0FBQztZQUVGLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUNyRSxXQUFXLENBQUMsR0FBRyxFQUNmLDJCQUEyQixDQUM1QixDQUFDO1lBRUYsT0FBTyxJQUFJLFVBQVUsQ0FBQztnQkFDcEIsUUFBUSxFQUFFLGlDQUFpQztnQkFDM0MsU0FBUyxFQUFFO29CQUNULEtBQUssRUFBRTt3QkFDTCxFQUFFO3dCQUNGLGtCQUFrQjt3QkFDbEIsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFO3FCQUM5QjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtDQUNGLENBQUE7OztZQXZIQSxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQXBDb0IsTUFBTTtZQUlsQixVQUFVO1lBRFYsZUFBZTtZQURmLGlCQUFpQjtZQVFqQixnQkFBZ0I7O0FBMkJaLHlCQUF5QjtJQU5yQyxpQkFBaUIsQ0FBQztRQUNqQixVQUFVLEVBQUUsUUFBUTtLQUNyQixDQUFDO0dBSVcseUJBQXlCLENBb0hyQztTQXBIWSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgS2V5IH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeS50eXBlcyc7XHJcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XHJcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSdW5PdXRzaWRlQW5ndWxhciB9IGZyb20gJy4uL19jb21tb24vcnVuLW91dHNpZGUtYW5ndWxhcic7XHJcbmltcG9ydCB7XHJcbiAgQ29udGFjdENhcmRSZWNlaXZlckNpcGhlckRhdGEsXHJcbiAgU2VuZENvbnRhY3RDYXJkSW5wdXQsXHJcbn0gZnJvbSAnLi9rZXktZXhjaGFuZ2UyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMckdyYXBoUUxTZXJ2aWNlLCBMck11dGF0aW9uIH0gZnJvbSAnLi9sci1ncmFwaHFsJztcclxuaW1wb3J0IHtcclxuICBHZXRPd25lZENvbnRhY3RDYXJkS2V5SWRzUXVlcnksXHJcbiAgR2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkUXVlcnksXHJcbiAgVXBkYXRlT3duZWRDb250YWN0Q2FyZE11dGF0aW9uLFxyXG4gIFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRNdXRhdGlvbixcclxufSBmcm9tICcuL3NoYXJlZC1jb250YWN0LWNhcmQyLmdxbCc7XHJcbmltcG9ydCB7IExyUmVsYXlJZElucHV0IH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU93bmVkQ29udGFjdENhcmRJbnB1dCBleHRlbmRzIFNlbmRDb250YWN0Q2FyZElucHV0IHtcclxuICBpZDogTHJSZWxheUlkSW5wdXQ7XHJcbiAgb3duZXJLZXlJZD86IExyUmVsYXlJZElucHV0O1xyXG4gIHNoYXJlZEtleUlkPzogTHJSZWxheUlkSW5wdXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZElucHV0XHJcbiAgZXh0ZW5kcyBDb250YWN0Q2FyZFJlY2VpdmVyQ2lwaGVyRGF0YSB7XHJcbiAgaWQ6IExyUmVsYXlJZElucHV0O1xyXG4gIHJlY2VpdmVyS2V5SWQ/OiBMclJlbGF5SWRJbnB1dDtcclxufVxyXG5cclxuQFJ1bk91dHNpZGVBbmd1bGFyKHtcclxuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcclxufSlcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNoYXJlZENvbnRhY3RDYXJkMlNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuICAgIHByaXZhdGUga2V5R3JhcGg6IEtleUdyYXBoU2VydmljZSxcclxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsckdyYXBoUUw6IExyR3JhcGhRTFNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0T3duZWRDb250YWN0Q2FyZEtleUlkcyhpZDogTHJSZWxheUlkSW5wdXQpIHtcclxuICAgIGNvbnN0IHsgb3duZWRDb250YWN0Q2FyZDogY2MgfSA9IGF3YWl0IHRoaXMubHJHcmFwaFFMLnF1ZXJ5KHtcclxuICAgICAgcXVlcnk6IEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeSxcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzaGFyZWRLZXlJZDogY2Muc2hhcmVkS2V5LmlkLFxyXG4gICAgICBvd25lcktleUlkOiBjYy5vd25lcktleS5pZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldFJlY2VpdmVkQ29udGFjdENhcmRLZXlJZChpZDogTHJSZWxheUlkSW5wdXQpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGF3YWl0IHRoaXMubHJHcmFwaFFMLnF1ZXJ5KHtcclxuICAgICAgICBxdWVyeTogR2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkUXVlcnksXHJcbiAgICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgKS5yZWNlaXZlZENvbnRhY3RDYXJkLnJlY2VpdmVyS2V5LmlkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlT3duZWRDb250YWN0Q2FyZCh7XHJcbiAgICBpZCxcclxuICAgIG93bmVyS2V5SWQsXHJcbiAgICBzaGFyZWRLZXlJZCxcclxuICAgIG93bmVyUGxhaW5EYXRhSnNvbixcclxuICAgIG93bmVyQ2lwaGVyRGF0YUNsZWFySnNvbixcclxuICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXHJcbiAgfTogVXBkYXRlT3duZWRDb250YWN0Q2FyZElucHV0KSB7XHJcbiAgICBsZXQgb3duZXJLZXk6IEtleTtcclxuICAgIGxldCBzaGFyZWRLZXk6IEtleTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBvd25lcktleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KG93bmVyS2V5SWQpO1xyXG4gICAgICBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShzaGFyZWRLZXlJZCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCBrZXlzID0gYXdhaXQgdGhpcy5nZXRPd25lZENvbnRhY3RDYXJkS2V5SWRzKGlkKTtcclxuXHJcbiAgICAgIC8vIHRyeSBhZ2FpblxyXG4gICAgICBvd25lcktleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KGtleXMub3duZXJLZXlJZCk7XHJcbiAgICAgIHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KGtleXMuc2hhcmVkS2V5SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNpZ1B4ayA9IGF3YWl0IHRoaXMua2V5U2VydmljZS5nZXRDdXJyZW50U2lnUHhrKCk7XHJcblxyXG4gICAgY29uc3Qgc2hhcmVkQ2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcclxuICAgICAgc2hhcmVkS2V5Lmp3ayxcclxuICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvblxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNoYXJlZENpcGhlckRhdGFTaWcgPSBKU09OLnN0cmluZ2lmeShcclxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssIHNoYXJlZENpcGhlckRhdGEpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG93bmVyUGxhaW5EYXRhU2lnID0gSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCBvd25lclBsYWluRGF0YUpzb24pXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG93bmVyQ2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxyXG4gICAgICBvd25lcktleS5qd2ssXHJcbiAgICAgIG93bmVyQ2lwaGVyRGF0YUNsZWFySnNvblxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xyXG4gICAgICBtdXRhdGlvbjogVXBkYXRlT3duZWRDb250YWN0Q2FyZE11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICBvd25lckNpcGhlckRhdGEsXHJcbiAgICAgICAgICBvd25lcktleUlkOiBvd25lcktleS5pZCxcclxuICAgICAgICAgIHNoYXJlZENpcGhlckRhdGFTaWcsXHJcbiAgICAgICAgICBzaGFyZWRLZXlJZDogc2hhcmVkS2V5LmlkLFxyXG4gICAgICAgICAgc2lnUHhrSWQ6IHNpZ1B4ay5pZCxcclxuICAgICAgICAgIG93bmVyUGxhaW5EYXRhU2lnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmQoe1xyXG4gICAgaWQsXHJcbiAgICByZWNlaXZlcktleUlkLFxyXG4gICAgcmVjZWl2ZXJDaXBoZXJEYXRhQ2xlYXJKc29uLFxyXG4gIH06IFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRJbnB1dCkge1xyXG4gICAgY29uc3QgcmVjZWl2ZXJLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShyZWNlaXZlcktleUlkLCAoKSA9PlxyXG4gICAgICB0aGlzLmdldFJlY2VpdmVkQ29udGFjdENhcmRLZXlJZChpZClcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcmVjZWl2ZXJDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXHJcbiAgICAgIHJlY2VpdmVyS2V5Lmp3ayxcclxuICAgICAgcmVjZWl2ZXJDaXBoZXJEYXRhQ2xlYXJKc29uXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XHJcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVSZWNlaXZlZENvbnRhY3RDYXJkTXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIHJlY2VpdmVyQ2lwaGVyRGF0YSxcclxuICAgICAgICAgIHJlY2VpdmVyS2V5SWQ6IHJlY2VpdmVyS2V5LmlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,146 +1,146 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
|
|
4
|
-
import { Apollo } from 'apollo-angular';
|
|
5
|
-
import gql from 'graphql-tag';
|
|
6
|
-
import * as moment_ from 'moment';
|
|
7
|
-
import { LrErrorCode, LrException, handleApolloError, } from '../_common/exceptions';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@aws-amplify/auth/lib-esm/Auth";
|
|
10
|
-
import * as i2 from "apollo-angular";
|
|
11
|
-
// "why?" you ask: https://stackoverflow.com/questions/59735280/angular-8-moment-error-cannot-call-a-namespace-moment
|
|
12
|
-
const moment = moment_;
|
|
13
|
-
export const ServerTimeQuery = gql `
|
|
14
|
-
query {
|
|
15
|
-
serverTime {
|
|
16
|
-
timestamp
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
`;
|
|
20
|
-
export class TimeService {
|
|
21
|
-
constructor(auth, apollo) {
|
|
22
|
-
this.auth = auth;
|
|
23
|
-
this.apollo = apollo;
|
|
24
|
-
this.VERIFY_ENABLED = true;
|
|
25
|
-
this.MAX_DIFF_MSEC = moment
|
|
26
|
-
.duration({ seconds: 30 })
|
|
27
|
-
.asMilliseconds();
|
|
28
|
-
this.offsetMs = null; // Millisecond offset of local clock.
|
|
29
|
-
this.verified = false; // Verified with independent time source
|
|
30
|
-
}
|
|
31
|
-
getAccessToken() {
|
|
32
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
-
try {
|
|
34
|
-
return (yield this.auth.currentAuthenticatedUser())
|
|
35
|
-
.getSignInUserSession()
|
|
36
|
-
.getAccessToken()
|
|
37
|
-
.getJwtToken();
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
return ''; // Not authenticated
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
// Get time from independent source to confirm.
|
|
45
|
-
verifyCognito() {
|
|
46
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
const accessToken = yield this.getAccessToken();
|
|
48
|
-
if (!accessToken) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
// Request headers from AWS Amplify Auth lib
|
|
52
|
-
// accept: */*
|
|
53
|
-
// accept-encoding: gzip, deflate, br
|
|
54
|
-
// accept-language: en-GB,en-US;q=0.9,en;q=0.8
|
|
55
|
-
// cache-control: no-cache
|
|
56
|
-
// content-length: 1089
|
|
57
|
-
// content-type: application/x-amz-json-1.1
|
|
58
|
-
// origin: http://localhost:4200
|
|
59
|
-
// pragma: no-cache
|
|
60
|
-
// referer: http://localhost:4200/
|
|
61
|
-
// sec-fetch-dest: empty
|
|
62
|
-
// sec-fetch-mode: cors
|
|
63
|
-
// sec-fetch-site: cross-site
|
|
64
|
-
// user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
|
|
65
|
-
// x-amz-target: AWSCognitoIdentityProviderService.GetUser
|
|
66
|
-
// x-amz-user-agent: aws-amplify/0.1.x js
|
|
67
|
-
// We are only interested in the Date field.
|
|
68
|
-
// AZ: I suppose we could use any end-point that provides a reliable Date field in the header. And we don't
|
|
69
|
-
// need to be authenticated. Even a 400 response would have a Date header. But the worry is that AWS might
|
|
70
|
-
// think it's some sort of attack, and block the IP or domain. At least in an authenticated call it can't be
|
|
71
|
-
// seen as illegitimate.
|
|
72
|
-
const response = yield fetch('https://cognito-idp.ap-southeast-2.amazonaws.com/', {
|
|
73
|
-
method: 'POST',
|
|
74
|
-
mode: 'cors',
|
|
75
|
-
cache: 'no-cache',
|
|
76
|
-
headers: {
|
|
77
|
-
'x-amz-target': 'AWSCognitoIdentityProviderService.GetUser',
|
|
78
|
-
'x-amz-user-agent': 'aws-amplify/0.1.x js',
|
|
79
|
-
'Content-Type': 'application/x-amz-json-1.1',
|
|
80
|
-
},
|
|
81
|
-
// redirect: 'follow', // manual, *follow, error
|
|
82
|
-
// referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
|
|
83
|
-
body: JSON.stringify({
|
|
84
|
-
AccessToken: accessToken,
|
|
85
|
-
}),
|
|
86
|
-
});
|
|
87
|
-
const now = Date.now();
|
|
88
|
-
const verifyTime = moment(response.headers.get('Date')).valueOf();
|
|
89
|
-
const serverTime = now + this.offsetMs;
|
|
90
|
-
const diff = Math.abs(serverTime - verifyTime);
|
|
91
|
-
if (diff > this.MAX_DIFF_MSEC) {
|
|
92
|
-
throw new LrException({
|
|
93
|
-
code: LrErrorCode.BadTimeSync,
|
|
94
|
-
message: `Server time does not match independent source. ServerTime: ${serverTime}, Cognito time: ${verifyTime}`,
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
this.verified = true;
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
refresh() {
|
|
101
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
-
const start = Date.now();
|
|
103
|
-
const res = yield this.apollo
|
|
104
|
-
.query({ query: ServerTimeQuery })
|
|
105
|
-
.toPromise();
|
|
106
|
-
const end = Date.now();
|
|
107
|
-
handleApolloError(res.errors);
|
|
108
|
-
const serverTime = parseInt(res.data.serverTime.timestamp, 10);
|
|
109
|
-
const roundtrip = end - start;
|
|
110
|
-
this.offsetMs = serverTime - (start + roundtrip / 2);
|
|
111
|
-
if (this.VERIFY_ENABLED) {
|
|
112
|
-
yield this.verifyCognito();
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
serverNow() {
|
|
117
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
118
|
-
let needsRefresh = false;
|
|
119
|
-
// First call
|
|
120
|
-
if (this.offsetMs === null) {
|
|
121
|
-
needsRefresh = true;
|
|
122
|
-
}
|
|
123
|
-
if (this.VERIFY_ENABLED) {
|
|
124
|
-
// logged in but not yet verified time matches.
|
|
125
|
-
if (!this.verified && (yield this.getAccessToken())) {
|
|
126
|
-
needsRefresh = true;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
if (needsRefresh) {
|
|
130
|
-
yield this.refresh();
|
|
131
|
-
}
|
|
132
|
-
return Date.now() + this.offsetMs;
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
TimeService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TimeService_Factory() { return new TimeService(i0.ɵɵinject(i1.AuthClass), i0.ɵɵinject(i2.Apollo)); }, token: TimeService, providedIn: "root" });
|
|
137
|
-
TimeService.decorators = [
|
|
138
|
-
{ type: Injectable, args: [{
|
|
139
|
-
providedIn: 'root',
|
|
140
|
-
},] }
|
|
141
|
-
];
|
|
142
|
-
TimeService.ctorParameters = () => [
|
|
143
|
-
{ type: AuthClass },
|
|
144
|
-
{ type: Apollo }
|
|
145
|
-
];
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hcGkvdGltZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDO0FBQzlCLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGlCQUFpQixHQUNsQixNQUFNLHVCQUF1QixDQUFDOzs7O0FBQy9CLHFIQUFxSDtBQUNySCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFFdkIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQTs7Ozs7O0NBTWpDLENBQUM7QUFTRixNQUFNLE9BQU8sV0FBVztJQVN0QixZQUFvQixJQUFlLEVBQVUsTUFBYztRQUF2QyxTQUFJLEdBQUosSUFBSSxDQUFXO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVJwRCxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUNaLGtCQUFhLEdBQUcsTUFBTTthQUNwQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDekIsY0FBYyxFQUFFLENBQUM7UUFFcEIsYUFBUSxHQUFXLElBQUksQ0FBQyxDQUFDLHFDQUFxQztRQUM5RCxhQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsd0NBQXdDO0lBRUksQ0FBQztJQUVqRCxjQUFjOztZQUMxQixJQUFJO2dCQUNGLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsd0JB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RXJELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDNUI7UUFDSCxDQUFDO0tBQUE7SUFFSyxTQUFTOztZQUNiLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztZQUV6QixhQUFhO1lBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtnQkFDMUIsWUFBWSxHQUFHLElBQUksQ0FBQzthQUNyQjtZQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdkIsK0NBQStDO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUU7b0JBQ25ELFlBQVksR0FBRyxJQUFJLENBQUM7aUJBQ3JCO2FBQ0Y7WUFFRCxJQUFJLFlBQVksRUFBRTtnQkFDaEIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDdEI7WUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3BDLENBQUM7S0FBQTs7OztZQWhJRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTFCUSxTQUFTO1lBQ1QsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGhDbGFzcyB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9hdXRoL2xpYi1lc20vQXV0aCc7XG5pbXBvcnQgeyBBcG9sbG8gfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQgZ3FsIGZyb20gJ2dyYXBocWwtdGFnJztcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gIExyRXJyb3JDb2RlLFxuICBMckV4Y2VwdGlvbixcbiAgaGFuZGxlQXBvbGxvRXJyb3IsXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG4vLyBcIndoeT9cIiB5b3UgYXNrOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81OTczNTI4MC9hbmd1bGFyLTgtbW9tZW50LWVycm9yLWNhbm5vdC1jYWxsLWEtbmFtZXNwYWNlLW1vbWVudFxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcblxuZXhwb3J0IGNvbnN0IFNlcnZlclRpbWVRdWVyeSA9IGdxbGBcbiAgcXVlcnkge1xuICAgIHNlcnZlclRpbWUge1xuICAgICAgdGltZXN0YW1wXG4gICAgfVxuICB9XG5gO1xuXG5pbnRlcmZhY2UgU2VydmVyVGltZSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVGltZVNlcnZpY2Uge1xuICBwdWJsaWMgVkVSSUZZX0VOQUJMRUQgPSB0cnVlO1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9ESUZGX01TRUMgPSBtb21lbnRcbiAgICAuZHVyYXRpb24oeyBzZWNvbmRzOiAzMCB9KVxuICAgIC5hc01pbGxpc2Vjb25kcygpO1xuXG4gIG9mZnNldE1zOiBudW1iZXIgPSBudWxsOyAvLyBNaWxsaXNlY29uZCBvZmZzZXQgb2YgbG9jYWwgY2xvY2suXG4gIHZlcmlmaWVkID0gZmFsc2U7IC8vIFZlcmlmaWVkIHdpdGggaW5kZXBlbmRlbnQgdGltZSBzb3VyY2VcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGg6IEF1dGhDbGFzcywgcHJpdmF0ZSBhcG9sbG86IEFwb2xsbykge31cblxuICBwcml2YXRlIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hdXRoLmN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcigpKVxuICAgICAgICAuZ2V0U2lnbkluVXNlclNlc3Npb24oKVxuICAgICAgICAuZ2V0QWNjZXNzVG9rZW4oKVxuICAgICAgICAuZ2V0Snd0VG9rZW4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuICcnOyAvLyBOb3QgYXV0aGVudGljYXRlZFxuICAgIH1cbiAgfVxuXG4gIC8vIEdldCB0aW1lIGZyb20gaW5kZXBlbmRlbnQgc291cmNlIHRvIGNvbmZpcm0uXG4gIHByaXZhdGUgYXN5bmMgdmVyaWZ5Q29nbml0bygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVxdWVzdCBoZWFkZXJzIGZyb20gQVdTIEFtcGxpZnkgQXV0aCBsaWJcbiAgICAvLyBhY2NlcHQ6ICovKlxuICAgIC8vIGFjY2VwdC1lbmNvZGluZzogZ3ppcCwgZGVmbGF0ZSwgYnJcbiAgICAvLyBhY2NlcHQtbGFuZ3VhZ2U6IGVuLUdCLGVuLVVTO3E9MC45LGVuO3E9MC44XG4gICAgLy8gY2FjaGUtY29udHJvbDogbm8tY2FjaGVcbiAgICAvLyBjb250ZW50LWxlbmd0aDogMTA4OVxuICAgIC8vIGNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC1hbXotanNvbi0xLjFcbiAgICAvLyBvcmlnaW46IGh0dHA6Ly9sb2NhbGhvc3Q6NDIwMFxuICAgIC8vIHByYWdtYTogbm8tY2FjaGVcbiAgICAvLyByZWZlcmVyOiBodHRwOi8vbG9jYWxob3N0OjQyMDAvXG4gICAgLy8gc2VjLWZldGNoLWRlc3Q6IGVtcHR5XG4gICAgLy8gc2VjLWZldGNoLW1vZGU6IGNvcnNcbiAgICAvLyBzZWMtZmV0Y2gtc2l0ZTogY3Jvc3Mtc2l0ZVxuICAgIC8vIHVzZXItYWdlbnQ6IE1vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzgwLjAuMzk4Ny4xMzIgU2FmYXJpLzUzNy4zNlxuICAgIC8vIHgtYW16LXRhcmdldDogQVdTQ29nbml0b0lkZW50aXR5UHJvdmlkZXJTZXJ2aWNlLkdldFVzZXJcbiAgICAvLyB4LWFtei11c2VyLWFnZW50OiBhd3MtYW1wbGlmeS8wLjEueCBqc1xuXG4gICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgRGF0ZSBmaWVsZC5cbiAgICAvLyBBWjogSSBzdXBwb3NlIHdlIGNvdWxkIHVzZSBhbnkgZW5kLXBvaW50IHRoYXQgcHJvdmlkZXMgYSByZWxpYWJsZSBEYXRlIGZpZWxkIGluIHRoZSBoZWFkZXIuIEFuZCB3ZSBkb24ndFxuICAgIC8vIG5lZWQgdG8gYmUgYXV0aGVudGljYXRlZC4gRXZlbiBhIDQwMCByZXNwb25zZSB3b3VsZCBoYXZlIGEgRGF0ZSBoZWFkZXIuIEJ1dCB0aGUgd29ycnkgaXMgdGhhdCBBV1MgbWlnaHRcbiAgICAvLyB0aGluayBpdCdzIHNvbWUgc29ydCBvZiBhdHRhY2ssIGFuZCBibG9jayB0aGUgSVAgb3IgZG9tYWluLiBBdCBsZWFzdCBpbiBhbiBhdXRoZW50aWNhdGVkIGNhbGwgaXQgY2FuJ3QgYmVcbiAgICAvLyBzZWVuIGFzIGlsbGVnaXRpbWF0ZS5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgJ2h0dHBzOi8vY29nbml0by1pZHAuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbS8nLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJywgLy8gKkdFVCwgUE9TVCwgUFVULCBERUxFVEUsIGV0Yy5cbiAgICAgICAgbW9kZTogJ2NvcnMnLCAvLyBuby1jb3JzLCAqY29ycywgc2FtZS1vcmlnaW5cbiAgICAgICAgY2FjaGU6ICduby1jYWNoZScsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICd4LWFtei10YXJnZXQnOiAnQVdTQ29nbml0b0lkZW50aXR5UHJvdmlkZXJTZXJ2aWNlLkdldFVzZXInLFxuICAgICAgICAgICd4LWFtei11c2VyLWFnZW50JzogJ2F3cy1hbXBsaWZ5LzAuMS54IGpzJyxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtYW16LWpzb24tMS4xJyxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcmVkaXJlY3Q6ICdmb2xsb3cnLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXG4gICAgICAgIC8vIHJlZmVycmVyUG9saWN5OiAnbm8tcmVmZXJyZXInLCAvLyBuby1yZWZlcnJlciwgKm5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlLCBvcmlnaW4sIG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiwgc2FtZS1vcmlnaW4sIHN0cmljdC1vcmlnaW4sIHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4sIHVuc2FmZS11cmxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIEFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgfSksIC8vIGJvZHkgZGF0YSB0eXBlIG11c3QgbWF0Y2ggXCJDb250ZW50LVR5cGVcIiBoZWFkZXJcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHZlcmlmeVRpbWUgPSBtb21lbnQocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0RhdGUnKSkudmFsdWVPZigpO1xuICAgIGNvbnN0IHNlcnZlclRpbWUgPSBub3cgKyB0aGlzLm9mZnNldE1zO1xuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhzZXJ2ZXJUaW1lIC0gdmVyaWZ5VGltZSk7XG5cbiAgICBpZiAoZGlmZiA+IHRoaXMuTUFYX0RJRkZfTVNFQykge1xuICAgICAgdGhyb3cgbmV3IExyRXhjZXB0aW9uKHtcbiAgICAgICAgY29kZTogTHJFcnJvckNvZGUuQmFkVGltZVN5bmMsXG4gICAgICAgIG1lc3NhZ2U6IGBTZXJ2ZXIgdGltZSBkb2VzIG5vdCBtYXRjaCBpbmRlcGVuZGVudCBzb3VyY2UuIFNlcnZlclRpbWU6ICR7c2VydmVyVGltZX0sIENvZ25pdG8gdGltZTogJHt2ZXJpZnlUaW1lfWAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcG9sbG9cbiAgICAgIC5xdWVyeTx7IHNlcnZlclRpbWU6IFNlcnZlclRpbWUgfT4oeyBxdWVyeTogU2VydmVyVGltZVF1ZXJ5IH0pXG4gICAgICAudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgZW5kID0gRGF0ZS5ub3coKTtcblxuICAgIGhhbmRsZUFwb2xsb0Vycm9yKHJlcy5lcnJvcnMpO1xuXG4gICAgY29uc3Qgc2VydmVyVGltZSA9IHBhcnNlSW50KHJlcy5kYXRhLnNlcnZlclRpbWUudGltZXN0YW1wLCAxMCk7XG5cbiAgICBjb25zdCByb3VuZHRyaXAgPSBlbmQgLSBzdGFydDtcbiAgICB0aGlzLm9mZnNldE1zID0gc2VydmVyVGltZSAtIChzdGFydCArIHJvdW5kdHJpcCAvIDIpO1xuXG4gICAgaWYgKHRoaXMuVkVSSUZZX0VOQUJMRUQpIHtcbiAgICAgIGF3YWl0IHRoaXMudmVyaWZ5Q29nbml0bygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlcnZlck5vdygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCBuZWVkc1JlZnJlc2ggPSBmYWxzZTtcblxuICAgIC8vIEZpcnN0IGNhbGxcbiAgICBpZiAodGhpcy5vZmZzZXRNcyA9PT0gbnVsbCkge1xuICAgICAgbmVlZHNSZWZyZXNoID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5WRVJJRllfRU5BQkxFRCkge1xuICAgICAgLy8gbG9nZ2VkIGluIGJ1dCBub3QgeWV0IHZlcmlmaWVkIHRpbWUgbWF0Y2hlcy5cbiAgICAgIGlmICghdGhpcy52ZXJpZmllZCAmJiAoYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKSkge1xuICAgICAgICBuZWVkc1JlZnJlc2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1JlZnJlc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBEYXRlLm5vdygpICsgdGhpcy5vZmZzZXRNcztcbiAgfVxufVxuIl19
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
|
|
4
|
+
import { Apollo } from 'apollo-angular';
|
|
5
|
+
import gql from 'graphql-tag';
|
|
6
|
+
import * as moment_ from 'moment';
|
|
7
|
+
import { LrErrorCode, LrException, handleApolloError, } from '../_common/exceptions';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@aws-amplify/auth/lib-esm/Auth";
|
|
10
|
+
import * as i2 from "apollo-angular";
|
|
11
|
+
// "why?" you ask: https://stackoverflow.com/questions/59735280/angular-8-moment-error-cannot-call-a-namespace-moment
|
|
12
|
+
const moment = moment_;
|
|
13
|
+
export const ServerTimeQuery = gql `
|
|
14
|
+
query {
|
|
15
|
+
serverTime {
|
|
16
|
+
timestamp
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
`;
|
|
20
|
+
export class TimeService {
|
|
21
|
+
constructor(auth, apollo) {
|
|
22
|
+
this.auth = auth;
|
|
23
|
+
this.apollo = apollo;
|
|
24
|
+
this.VERIFY_ENABLED = true;
|
|
25
|
+
this.MAX_DIFF_MSEC = moment
|
|
26
|
+
.duration({ seconds: 30 })
|
|
27
|
+
.asMilliseconds();
|
|
28
|
+
this.offsetMs = null; // Millisecond offset of local clock.
|
|
29
|
+
this.verified = false; // Verified with independent time source
|
|
30
|
+
}
|
|
31
|
+
getAccessToken() {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
try {
|
|
34
|
+
return (yield this.auth.currentAuthenticatedUser())
|
|
35
|
+
.getSignInUserSession()
|
|
36
|
+
.getAccessToken()
|
|
37
|
+
.getJwtToken();
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
return ''; // Not authenticated
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Get time from independent source to confirm.
|
|
45
|
+
verifyCognito() {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
const accessToken = yield this.getAccessToken();
|
|
48
|
+
if (!accessToken) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Request headers from AWS Amplify Auth lib
|
|
52
|
+
// accept: */*
|
|
53
|
+
// accept-encoding: gzip, deflate, br
|
|
54
|
+
// accept-language: en-GB,en-US;q=0.9,en;q=0.8
|
|
55
|
+
// cache-control: no-cache
|
|
56
|
+
// content-length: 1089
|
|
57
|
+
// content-type: application/x-amz-json-1.1
|
|
58
|
+
// origin: http://localhost:4200
|
|
59
|
+
// pragma: no-cache
|
|
60
|
+
// referer: http://localhost:4200/
|
|
61
|
+
// sec-fetch-dest: empty
|
|
62
|
+
// sec-fetch-mode: cors
|
|
63
|
+
// sec-fetch-site: cross-site
|
|
64
|
+
// user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
|
|
65
|
+
// x-amz-target: AWSCognitoIdentityProviderService.GetUser
|
|
66
|
+
// x-amz-user-agent: aws-amplify/0.1.x js
|
|
67
|
+
// We are only interested in the Date field.
|
|
68
|
+
// AZ: I suppose we could use any end-point that provides a reliable Date field in the header. And we don't
|
|
69
|
+
// need to be authenticated. Even a 400 response would have a Date header. But the worry is that AWS might
|
|
70
|
+
// think it's some sort of attack, and block the IP or domain. At least in an authenticated call it can't be
|
|
71
|
+
// seen as illegitimate.
|
|
72
|
+
const response = yield fetch('https://cognito-idp.ap-southeast-2.amazonaws.com/', {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
mode: 'cors',
|
|
75
|
+
cache: 'no-cache',
|
|
76
|
+
headers: {
|
|
77
|
+
'x-amz-target': 'AWSCognitoIdentityProviderService.GetUser',
|
|
78
|
+
'x-amz-user-agent': 'aws-amplify/0.1.x js',
|
|
79
|
+
'Content-Type': 'application/x-amz-json-1.1',
|
|
80
|
+
},
|
|
81
|
+
// redirect: 'follow', // manual, *follow, error
|
|
82
|
+
// referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
|
|
83
|
+
body: JSON.stringify({
|
|
84
|
+
AccessToken: accessToken,
|
|
85
|
+
}),
|
|
86
|
+
});
|
|
87
|
+
const now = Date.now();
|
|
88
|
+
const verifyTime = moment(response.headers.get('Date')).valueOf();
|
|
89
|
+
const serverTime = now + this.offsetMs;
|
|
90
|
+
const diff = Math.abs(serverTime - verifyTime);
|
|
91
|
+
if (diff > this.MAX_DIFF_MSEC) {
|
|
92
|
+
throw new LrException({
|
|
93
|
+
code: LrErrorCode.BadTimeSync,
|
|
94
|
+
message: `Server time does not match independent source. ServerTime: ${serverTime}, Cognito time: ${verifyTime}`,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
this.verified = true;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
refresh() {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
const start = Date.now();
|
|
103
|
+
const res = yield this.apollo
|
|
104
|
+
.query({ query: ServerTimeQuery })
|
|
105
|
+
.toPromise();
|
|
106
|
+
const end = Date.now();
|
|
107
|
+
handleApolloError(res.errors);
|
|
108
|
+
const serverTime = parseInt(res.data.serverTime.timestamp, 10);
|
|
109
|
+
const roundtrip = end - start;
|
|
110
|
+
this.offsetMs = serverTime - (start + roundtrip / 2);
|
|
111
|
+
if (this.VERIFY_ENABLED) {
|
|
112
|
+
yield this.verifyCognito();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
serverNow() {
|
|
117
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
118
|
+
let needsRefresh = false;
|
|
119
|
+
// First call
|
|
120
|
+
if (this.offsetMs === null) {
|
|
121
|
+
needsRefresh = true;
|
|
122
|
+
}
|
|
123
|
+
if (this.VERIFY_ENABLED) {
|
|
124
|
+
// logged in but not yet verified time matches.
|
|
125
|
+
if (!this.verified && (yield this.getAccessToken())) {
|
|
126
|
+
needsRefresh = true;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (needsRefresh) {
|
|
130
|
+
yield this.refresh();
|
|
131
|
+
}
|
|
132
|
+
return Date.now() + this.offsetMs;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
TimeService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TimeService_Factory() { return new TimeService(i0.ɵɵinject(i1.AuthClass), i0.ɵɵinject(i2.Apollo)); }, token: TimeService, providedIn: "root" });
|
|
137
|
+
TimeService.decorators = [
|
|
138
|
+
{ type: Injectable, args: [{
|
|
139
|
+
providedIn: 'root',
|
|
140
|
+
},] }
|
|
141
|
+
];
|
|
142
|
+
TimeService.ctorParameters = () => [
|
|
143
|
+
{ type: AuthClass },
|
|
144
|
+
{ type: Apollo }
|
|
145
|
+
];
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hcGkvdGltZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDO0FBQzlCLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGlCQUFpQixHQUNsQixNQUFNLHVCQUF1QixDQUFDOzs7O0FBQy9CLHFIQUFxSDtBQUNySCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFFdkIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQTs7Ozs7O0NBTWpDLENBQUM7QUFTRixNQUFNLE9BQU8sV0FBVztJQVN0QixZQUFvQixJQUFlLEVBQVUsTUFBYztRQUF2QyxTQUFJLEdBQUosSUFBSSxDQUFXO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVJwRCxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUNaLGtCQUFhLEdBQUcsTUFBTTthQUNwQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDekIsY0FBYyxFQUFFLENBQUM7UUFFcEIsYUFBUSxHQUFXLElBQUksQ0FBQyxDQUFDLHFDQUFxQztRQUM5RCxhQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsd0NBQXdDO0lBRUksQ0FBQztJQUVqRCxjQUFjOztZQUMxQixJQUFJO2dCQUNGLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztx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QUFDLGNBQWMsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDNUI7UUFDSCxDQUFDO0tBQUE7SUFFSyxTQUFTOztZQUNiLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztZQUV6QixhQUFhO1lBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtnQkFDMUIsWUFBWSxHQUFHLElBQUksQ0FBQzthQUNyQjtZQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdkIsK0NBQStDO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUU7b0JBQ25ELFlBQVksR0FBRyxJQUFJLENBQUM7aUJBQ3JCO2FBQ0Y7WUFFRCxJQUFJLFlBQVksRUFBRTtnQkFDaEIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDdEI7WUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3BDLENBQUM7S0FBQTs7OztZQWhJRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTFCUSxTQUFTO1lBQ1QsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXV0aENsYXNzIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2F1dGgvbGliLWVzbS9BdXRoJztcclxuaW1wb3J0IHsgQXBvbGxvIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xyXG5pbXBvcnQgZ3FsIGZyb20gJ2dyYXBocWwtdGFnJztcclxuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQge1xyXG4gIExyRXJyb3JDb2RlLFxyXG4gIExyRXhjZXB0aW9uLFxyXG4gIGhhbmRsZUFwb2xsb0Vycm9yLFxyXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XHJcbi8vIFwid2h5P1wiIHlvdSBhc2s6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU5NzM1MjgwL2FuZ3VsYXItOC1tb21lbnQtZXJyb3ItY2Fubm90LWNhbGwtYS1uYW1lc3BhY2UtbW9tZW50XHJcbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XHJcblxyXG5leHBvcnQgY29uc3QgU2VydmVyVGltZVF1ZXJ5ID0gZ3FsYFxyXG4gIHF1ZXJ5IHtcclxuICAgIHNlcnZlclRpbWUge1xyXG4gICAgICB0aW1lc3RhbXBcclxuICAgIH1cclxuICB9XHJcbmA7XHJcblxyXG5pbnRlcmZhY2UgU2VydmVyVGltZSB7XHJcbiAgdGltZXN0YW1wOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaW1lU2VydmljZSB7XHJcbiAgcHVibGljIFZFUklGWV9FTkFCTEVEID0gdHJ1ZTtcclxuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9ESUZGX01TRUMgPSBtb21lbnRcclxuICAgIC5kdXJhdGlvbih7IHNlY29uZHM6IDMwIH0pXHJcbiAgICAuYXNNaWxsaXNlY29uZHMoKTtcclxuXHJcbiAgb2Zmc2V0TXM6IG51bWJlciA9IG51bGw7IC8vIE1pbGxpc2Vjb25kIG9mZnNldCBvZiBsb2NhbCBjbG9jay5cclxuICB2ZXJpZmllZCA9IGZhbHNlOyAvLyBWZXJpZmllZCB3aXRoIGluZGVwZW5kZW50IHRpbWUgc291cmNlXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aDogQXV0aENsYXNzLCBwcml2YXRlIGFwb2xsbzogQXBvbGxvKSB7fVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXV0aC5jdXJyZW50QXV0aGVudGljYXRlZFVzZXIoKSlcclxuICAgICAgICAuZ2V0U2lnbkluVXNlclNlc3Npb24oKVxyXG4gICAgICAgIC5nZXRBY2Nlc3NUb2tlbigpXHJcbiAgICAgICAgLmdldEp3dFRva2VuKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gJyc7IC8vIE5vdCBhdXRoZW50aWNhdGVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgdGltZSBmcm9tIGluZGVwZW5kZW50IHNvdXJjZSB0byBjb25maXJtLlxyXG4gIHByaXZhdGUgYXN5bmMgdmVyaWZ5Q29nbml0bygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpO1xyXG4gICAgaWYgKCFhY2Nlc3NUb2tlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVxdWVzdCBoZWFkZXJzIGZyb20gQVdTIEFtcGxpZnkgQXV0aCBsaWJcclxuICAgIC8vIGFjY2VwdDogKi8qXHJcbiAgICAvLyBhY2NlcHQtZW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGUsIGJyXHJcbiAgICAvLyBhY2NlcHQtbGFuZ3VhZ2U6IGVuLUdCLGVuLVVTO3E9MC45LGVuO3E9MC44XHJcbiAgICAvLyBjYWNoZS1jb250cm9sOiBuby1jYWNoZVxyXG4gICAgLy8gY29udGVudC1sZW5ndGg6IDEwODlcclxuICAgIC8vIGNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC1hbXotanNvbi0xLjFcclxuICAgIC8vIG9yaWdpbjogaHR0cDovL2xvY2FsaG9zdDo0MjAwXHJcbiAgICAvLyBwcmFnbWE6IG5vLWNhY2hlXHJcbiAgICAvLyByZWZlcmVyOiBodHRwOi8vbG9jYWxob3N0OjQyMDAvXHJcbiAgICAvLyBzZWMtZmV0Y2gtZGVzdDogZW1wdHlcclxuICAgIC8vIHNlYy1mZXRjaC1tb2RlOiBjb3JzXHJcbiAgICAvLyBzZWMtZmV0Y2gtc2l0ZTogY3Jvc3Mtc2l0ZVxyXG4gICAgLy8gdXNlci1hZ2VudDogTW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODAuMC4zOTg3LjEzMiBTYWZhcmkvNTM3LjM2XHJcbiAgICAvLyB4LWFtei10YXJnZXQ6IEFXU0NvZ25pdG9JZGVudGl0eVByb3ZpZGVyU2VydmljZS5HZXRVc2VyXHJcbiAgICAvLyB4LWFtei11c2VyLWFnZW50OiBhd3MtYW1wbGlmeS8wLjEueCBqc1xyXG5cclxuICAgIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIERhdGUgZmllbGQuXHJcbiAgICAvLyBBWjogSSBzdXBwb3NlIHdlIGNvdWxkIHVzZSBhbnkgZW5kLXBvaW50IHRoYXQgcHJvdmlkZXMgYSByZWxpYWJsZSBEYXRlIGZpZWxkIGluIHRoZSBoZWFkZXIuIEFuZCB3ZSBkb24ndFxyXG4gICAgLy8gbmVlZCB0byBiZSBhdXRoZW50aWNhdGVkLiBFdmVuIGEgNDAwIHJlc3BvbnNlIHdvdWxkIGhhdmUgYSBEYXRlIGhlYWRlci4gQnV0IHRoZSB3b3JyeSBpcyB0aGF0IEFXUyBtaWdodFxyXG4gICAgLy8gdGhpbmsgaXQncyBzb21lIHNvcnQgb2YgYXR0YWNrLCBhbmQgYmxvY2sgdGhlIElQIG9yIGRvbWFpbi4gQXQgbGVhc3QgaW4gYW4gYXV0aGVudGljYXRlZCBjYWxsIGl0IGNhbid0IGJlXHJcbiAgICAvLyBzZWVuIGFzIGlsbGVnaXRpbWF0ZS5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXHJcbiAgICAgICdodHRwczovL2NvZ25pdG8taWRwLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20vJyxcclxuICAgICAge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLCAvLyAqR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxyXG4gICAgICAgIG1vZGU6ICdjb3JzJywgLy8gbm8tY29ycywgKmNvcnMsIHNhbWUtb3JpZ2luXHJcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZScsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAneC1hbXotdGFyZ2V0JzogJ0FXU0NvZ25pdG9JZGVudGl0eVByb3ZpZGVyU2VydmljZS5HZXRVc2VyJyxcclxuICAgICAgICAgICd4LWFtei11c2VyLWFnZW50JzogJ2F3cy1hbXBsaWZ5LzAuMS54IGpzJyxcclxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC1hbXotanNvbi0xLjEnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gcmVkaXJlY3Q6ICdmb2xsb3cnLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXHJcbiAgICAgICAgLy8gcmVmZXJyZXJQb2xpY3k6ICduby1yZWZlcnJlcicsIC8vIG5vLXJlZmVycmVyLCAqbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUsIG9yaWdpbiwgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCBzYW1lLW9yaWdpbiwgc3RyaWN0LW9yaWdpbiwgc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiwgdW5zYWZlLXVybFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgIEFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbixcclxuICAgICAgICB9KSwgLy8gYm9keSBkYXRhIHR5cGUgbXVzdCBtYXRjaCBcIkNvbnRlbnQtVHlwZVwiIGhlYWRlclxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcblxyXG4gICAgY29uc3QgdmVyaWZ5VGltZSA9IG1vbWVudChyZXNwb25zZS5oZWFkZXJzLmdldCgnRGF0ZScpKS52YWx1ZU9mKCk7XHJcbiAgICBjb25zdCBzZXJ2ZXJUaW1lID0gbm93ICsgdGhpcy5vZmZzZXRNcztcclxuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhzZXJ2ZXJUaW1lIC0gdmVyaWZ5VGltZSk7XHJcblxyXG4gICAgaWYgKGRpZmYgPiB0aGlzLk1BWF9ESUZGX01TRUMpIHtcclxuICAgICAgdGhyb3cgbmV3IExyRXhjZXB0aW9uKHtcclxuICAgICAgICBjb2RlOiBMckVycm9yQ29kZS5CYWRUaW1lU3luYyxcclxuICAgICAgICBtZXNzYWdlOiBgU2VydmVyIHRpbWUgZG9lcyBub3QgbWF0Y2ggaW5kZXBlbmRlbnQgc291cmNlLiBTZXJ2ZXJUaW1lOiAke3NlcnZlclRpbWV9LCBDb2duaXRvIHRpbWU6ICR7dmVyaWZ5VGltZX1gLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZlcmlmaWVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBvbGxvXHJcbiAgICAgIC5xdWVyeTx7IHNlcnZlclRpbWU6IFNlcnZlclRpbWUgfT4oeyBxdWVyeTogU2VydmVyVGltZVF1ZXJ5IH0pXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIGNvbnN0IGVuZCA9IERhdGUubm93KCk7XHJcblxyXG4gICAgaGFuZGxlQXBvbGxvRXJyb3IocmVzLmVycm9ycyk7XHJcblxyXG4gICAgY29uc3Qgc2VydmVyVGltZSA9IHBhcnNlSW50KHJlcy5kYXRhLnNlcnZlclRpbWUudGltZXN0YW1wLCAxMCk7XHJcblxyXG4gICAgY29uc3Qgcm91bmR0cmlwID0gZW5kIC0gc3RhcnQ7XHJcbiAgICB0aGlzLm9mZnNldE1zID0gc2VydmVyVGltZSAtIChzdGFydCArIHJvdW5kdHJpcCAvIDIpO1xyXG5cclxuICAgIGlmICh0aGlzLlZFUklGWV9FTkFCTEVEKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMudmVyaWZ5Q29nbml0bygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VydmVyTm93KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBsZXQgbmVlZHNSZWZyZXNoID0gZmFsc2U7XHJcblxyXG4gICAgLy8gRmlyc3QgY2FsbFxyXG4gICAgaWYgKHRoaXMub2Zmc2V0TXMgPT09IG51bGwpIHtcclxuICAgICAgbmVlZHNSZWZyZXNoID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5WRVJJRllfRU5BQkxFRCkge1xyXG4gICAgICAvLyBsb2dnZWQgaW4gYnV0IG5vdCB5ZXQgdmVyaWZpZWQgdGltZSBtYXRjaGVzLlxyXG4gICAgICBpZiAoIXRoaXMudmVyaWZpZWQgJiYgKGF3YWl0IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKSkpIHtcclxuICAgICAgICBuZWVkc1JlZnJlc2ggPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5lZWRzUmVmcmVzaCkge1xyXG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKSArIHRoaXMub2Zmc2V0TXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|