@lifeready/core 1.0.1 → 1.0.2
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 +15939 -0
- package/bundles/lifeready-core.umd.js.map +1 -0
- package/bundles/lifeready-core.umd.min.js +16 -0
- package/bundles/lifeready-core.umd.min.js.map +1 -0
- package/esm2015/lib/_common/ast.js +40 -0
- package/esm2015/lib/_common/deferred-promise.js +24 -0
- package/esm2015/lib/_common/exceptions.js +157 -0
- package/esm2015/lib/_common/queries.gql.js +190 -0
- package/esm2015/lib/_common/run-outside-angular.js +79 -0
- package/esm2015/lib/_common/types.js +1 -0
- package/esm2015/lib/_common/utils.js +44 -0
- package/esm2015/lib/api/contact-card.gql.js +79 -0
- package/esm2015/lib/api/contact-card.service.js +154 -0
- package/esm2015/lib/api/contact-card2.gql.js +60 -0
- package/esm2015/lib/api/contact-card2.service.js +103 -0
- package/esm2015/lib/api/file.service.js +74 -0
- package/esm2015/lib/api/item2.gql.js +110 -0
- package/esm2015/lib/api/item2.service.js +311 -0
- package/esm2015/lib/api/key-exchange.gql.js +188 -0
- package/esm2015/lib/api/key-exchange.service.js +442 -0
- package/esm2015/lib/api/key-exchange.types.js +18 -0
- package/esm2015/lib/api/key-exchange2.gql.js +171 -0
- package/esm2015/lib/api/key-exchange2.service.js +479 -0
- package/esm2015/lib/api/lock.gql.js +40 -0
- package/esm2015/lib/api/lock.service.js +64 -0
- package/esm2015/lib/api/lr-apollo.service.js +46 -0
- package/esm2015/lib/api/lr-graphql/index.js +6 -0
- package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -0
- package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -0
- package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -0
- package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -0
- package/esm2015/lib/api/lr-graphql/lr.service.js +18 -0
- package/esm2015/lib/api/message.service.js +138 -0
- package/esm2015/lib/api/persist.service.js +181 -0
- package/esm2015/lib/api/query-processor/common-processors.service.js +93 -0
- package/esm2015/lib/api/query-processor/index.js +3 -0
- package/esm2015/lib/api/query-processor/query-processor.service.js +192 -0
- package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -0
- package/esm2015/lib/api/shared-contact-card.service.js +119 -0
- package/esm2015/lib/api/shared-contact-card2.gql.js +41 -0
- package/esm2015/lib/api/shared-contact-card2.service.js +117 -0
- package/esm2015/lib/api/time.service.js +146 -0
- package/esm2015/lib/api/types/graphql.types.js +7 -0
- package/esm2015/lib/api/types/index.js +3 -0
- package/esm2015/lib/api/types/lr-graphql.types.js +71 -0
- package/esm2015/lib/auth/auth.config.js +57 -0
- package/esm2015/lib/auth/auth.gql.js +48 -0
- package/esm2015/lib/auth/auth.types.js +27 -0
- package/esm2015/lib/auth/idle.service.js +168 -0
- package/esm2015/lib/auth/idle.types.js +7 -0
- package/esm2015/lib/auth/lbop.service.js +355 -0
- package/esm2015/lib/auth/life-ready-auth.service.js +500 -0
- package/esm2015/lib/auth/password.service.js +320 -0
- package/esm2015/lib/auth/register.service.js +172 -0
- package/esm2015/lib/auth/two-factor.service.js +74 -0
- package/esm2015/lib/category/category-meta.service.js +99 -0
- package/esm2015/lib/category/category.gql.js +406 -0
- package/esm2015/lib/category/category.service.js +390 -0
- package/esm2015/lib/category/category.types.js +29 -0
- package/esm2015/lib/cryptography/cryptography.types.js +11 -0
- package/esm2015/lib/cryptography/encryption.service.js +189 -0
- package/esm2015/lib/cryptography/key-factory.service.js +237 -0
- package/esm2015/lib/cryptography/key-graph.service.js +280 -0
- package/esm2015/lib/cryptography/key-meta.service.js +200 -0
- package/esm2015/lib/cryptography/key.service.js +124 -0
- package/esm2015/lib/cryptography/slip39.service.js +169 -0
- package/esm2015/lib/cryptography/web-crypto.service.js +29 -0
- package/esm2015/lib/life-ready.config.js +84 -0
- package/esm2015/lib/life-ready.module.js +74 -0
- package/esm2015/lib/plan/plan.gql.js +123 -0
- package/esm2015/lib/plan/plan.service.js +149 -0
- package/esm2015/lib/plan/plan.types.js +11 -0
- package/esm2015/lib/record/record-attachment.service.js +101 -0
- package/esm2015/lib/record/record.gql.js +179 -0
- package/esm2015/lib/record/record.service.js +206 -0
- package/esm2015/lib/record/record.types.js +15 -0
- package/esm2015/lib/record-type/record-type.service.js +75 -0
- package/esm2015/lib/record-type/record-type.types.js +28 -0
- package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +105 -0
- package/esm2015/lib/scenario/approvals/scenario-approval.types.js +1 -0
- package/esm2015/lib/scenario/approvals/scenario-approver.service.js +300 -0
- package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +52 -0
- package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +97 -0
- package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +1 -0
- package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +150 -0
- package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +229 -0
- package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +1 -0
- package/esm2015/lib/scenario/scenario-setup.service.js +269 -0
- package/esm2015/lib/scenario/scenario.gql.js +368 -0
- package/esm2015/lib/scenario/scenario.service.js +611 -0
- package/esm2015/lib/scenario/scenario.types.js +64 -0
- package/esm2015/lib/search/search.gql.js +62 -0
- package/esm2015/lib/search/search.service.js +156 -0
- package/esm2015/lib/search/search.types.js +6 -0
- package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +112 -0
- package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -0
- package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -0
- package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +232 -0
- package/esm2015/lib/trusted-parties/tp-password-reset.service.js +299 -0
- package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -0
- package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -0
- package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -0
- package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -0
- package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -0
- package/esm2015/lib/users/profile-details.service.js +214 -0
- package/esm2015/lib/users/profile.gql.js +97 -0
- package/esm2015/lib/users/profile.service.js +169 -0
- package/esm2015/lib/users/profile.types.js +34 -0
- package/esm2015/lib/users/user.gql.js +60 -0
- package/esm2015/lib/users/user.service.js +79 -0
- package/esm2015/lib/users/user.types.js +5 -0
- package/esm2015/lifeready-core.js +10 -0
- package/esm2015/public-api.js +81 -0
- package/fesm2015/lifeready-core.js +13314 -0
- package/fesm2015/lifeready-core.js.map +1 -0
- package/lib/_common/ast.d.ts +11 -0
- package/lib/_common/deferred-promise.d.ts +12 -0
- package/lib/_common/exceptions.d.ts +109 -0
- package/lib/_common/queries.gql.d.ts +10 -0
- package/lib/_common/run-outside-angular.d.ts +14 -0
- package/{src/lib/_common/types.ts → lib/_common/types.d.ts} +10 -13
- package/lib/_common/utils.d.ts +3 -0
- package/lib/api/contact-card.gql.d.ts +7 -0
- package/lib/api/contact-card.service.d.ts +52 -0
- package/lib/api/contact-card2.gql.d.ts +34 -0
- package/lib/api/contact-card2.service.d.ts +49 -0
- package/lib/api/file.service.d.ts +18 -0
- package/lib/api/item2.gql.d.ts +96 -0
- package/lib/api/item2.service.d.ts +177 -0
- package/lib/api/key-exchange.gql.d.ts +9 -0
- package/lib/api/key-exchange.service.d.ts +39 -0
- package/lib/api/key-exchange.types.d.ts +196 -0
- package/lib/api/key-exchange2.gql.d.ts +125 -0
- package/lib/api/key-exchange2.service.d.ts +187 -0
- package/lib/api/lock.gql.d.ts +27 -0
- package/lib/api/lock.service.d.ts +25 -0
- package/lib/api/lr-apollo.service.d.ts +15 -0
- package/{src/lib/api/lr-graphql/index.ts → lib/api/lr-graphql/index.d.ts} +5 -5
- package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -0
- package/lib/api/lr-graphql/lr-merged-mutation.d.ts +27 -0
- package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -0
- package/lib/api/lr-graphql/lr-mutation.d.ts +8 -0
- package/lib/api/lr-graphql/lr.service.d.ts +9 -0
- package/lib/api/message.service.d.ts +58 -0
- package/lib/api/persist.service.d.ts +31 -0
- package/lib/api/query-processor/common-processors.service.d.ts +36 -0
- package/{src/lib/api/query-processor/index.ts → lib/api/query-processor/index.d.ts} +2 -2
- package/lib/api/query-processor/query-processor.service.d.ts +18 -0
- package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -0
- package/lib/api/shared-contact-card.service.d.ts +33 -0
- package/lib/api/shared-contact-card2.gql.d.ts +36 -0
- package/lib/api/shared-contact-card2.service.d.ts +45 -0
- package/lib/api/time.service.d.ts +16 -0
- package/lib/api/types/graphql.types.d.ts +29 -0
- package/{src/lib/api/types/index.ts → lib/api/types/index.d.ts} +2 -2
- package/lib/api/types/lr-graphql.types.d.ts +385 -0
- package/lib/auth/auth.config.d.ts +5 -0
- package/lib/auth/auth.gql.d.ts +15 -0
- package/lib/auth/auth.types.d.ts +66 -0
- package/lib/auth/idle.service.d.ts +40 -0
- package/lib/auth/idle.types.d.ts +10 -0
- package/lib/auth/lbop.service.d.ts +91 -0
- package/lib/auth/life-ready-auth.service.d.ts +59 -0
- package/lib/auth/password.service.d.ts +78 -0
- package/lib/auth/register.service.d.ts +25 -0
- package/lib/auth/two-factor.service.d.ts +15 -0
- package/lib/category/category-meta.service.d.ts +23 -0
- package/lib/category/category.gql.d.ts +45 -0
- package/lib/category/category.service.d.ts +67 -0
- package/lib/category/category.types.d.ts +79 -0
- package/lib/cryptography/cryptography.types.d.ts +83 -0
- package/lib/cryptography/encryption.service.d.ts +41 -0
- package/lib/cryptography/key-factory.service.d.ts +38 -0
- package/lib/cryptography/key-graph.service.d.ts +33 -0
- package/lib/cryptography/key-meta.service.d.ts +44 -0
- package/lib/cryptography/key.service.d.ts +36 -0
- package/lib/cryptography/slip39.service.d.ts +43 -0
- package/lib/cryptography/web-crypto.service.d.ts +5 -0
- package/lib/life-ready.config.d.ts +14 -0
- package/lib/life-ready.module.d.ts +5 -0
- package/lib/plan/plan.gql.d.ts +11 -0
- package/lib/plan/plan.service.d.ts +33 -0
- package/lib/plan/plan.types.d.ts +31 -0
- package/lib/record/record-attachment.service.d.ts +16 -0
- package/lib/record/record.gql.d.ts +14 -0
- package/lib/record/record.service.d.ts +25 -0
- package/lib/record/record.types.d.ts +57 -0
- package/lib/record-type/record-type.service.d.ts +11 -0
- package/lib/record-type/record-type.types.d.ts +50 -0
- package/lib/scenario/approvals/scenario-approval.gql.d.ts +7 -0
- package/lib/scenario/approvals/scenario-approval.types.d.ts +63 -0
- package/lib/scenario/approvals/scenario-approver.service.d.ts +32 -0
- package/lib/scenario/claimants/scenario-claimant.gql.d.ts +5 -0
- package/lib/scenario/claimants/scenario-claimant.service.d.ts +17 -0
- package/lib/scenario/claimants/scenario-claimant.types.d.ts +18 -0
- package/lib/scenario/receivers/scenario-receiver.gql.d.ts +8 -0
- package/lib/scenario/receivers/scenario-receiver.service.d.ts +30 -0
- package/lib/scenario/receivers/scenario-receiver.types.d.ts +54 -0
- package/lib/scenario/scenario-setup.service.d.ts +22 -0
- package/lib/scenario/scenario.gql.d.ts +34 -0
- package/lib/scenario/scenario.service.d.ts +58 -0
- package/lib/scenario/scenario.types.d.ts +217 -0
- package/lib/search/search.gql.d.ts +1 -0
- package/lib/search/search.service.d.ts +25 -0
- package/lib/search/search.types.d.ts +20 -0
- package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -0
- package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -0
- package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -0
- package/lib/trusted-parties/tp-password-reset.gql.d.ts +218 -0
- package/lib/trusted-parties/tp-password-reset.service.d.ts +130 -0
- package/lib/trusted-parties/trusted-party.gql.d.ts +9 -0
- package/lib/trusted-parties/trusted-party.service.d.ts +44 -0
- package/lib/trusted-parties/trusted-party.types.d.ts +102 -0
- package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -0
- package/lib/trusted-parties/trusted-party2.service.d.ts +114 -0
- package/lib/users/profile-details.service.d.ts +21 -0
- package/lib/users/profile.gql.d.ts +11 -0
- package/lib/users/profile.service.d.ts +35 -0
- package/lib/users/profile.types.d.ts +96 -0
- package/lib/users/user.gql.d.ts +9 -0
- package/lib/users/user.service.d.ts +12 -0
- package/lib/users/user.types.d.ts +23 -0
- package/lifeready-core.d.ts +9 -0
- package/lifeready-core.metadata.json +1 -0
- package/package.json +29 -21
- package/{src/public-api.ts → public-api.d.ts} +77 -96
- package/karma.conf.js +0 -32
- package/ng-package.json +0 -26
- package/src/lib/_common/ast.ts +0 -75
- package/src/lib/_common/deferred-promise.ts +0 -35
- package/src/lib/_common/exceptions.ts +0 -189
- package/src/lib/_common/queries.gql.ts +0 -200
- package/src/lib/_common/run-outside-angular.ts +0 -125
- package/src/lib/_common/tests.ts +0 -82
- package/src/lib/_common/utils.ts +0 -57
- package/src/lib/api/api-mutation.spec.ts +0 -547
- package/src/lib/api/api-query.spec.ts +0 -40
- package/src/lib/api/contact-card.gql.ts +0 -85
- package/src/lib/api/contact-card.service.spec.ts +0 -249
- package/src/lib/api/contact-card.service.ts +0 -228
- package/src/lib/api/contact-card2.gql.ts +0 -93
- package/src/lib/api/contact-card2.service.spec.ts +0 -297
- package/src/lib/api/contact-card2.service.ts +0 -139
- package/src/lib/api/file.service.spec.ts +0 -14
- package/src/lib/api/file.service.ts +0 -81
- package/src/lib/api/item2.gql.ts +0 -211
- package/src/lib/api/item2.service.spec.ts +0 -1043
- package/src/lib/api/item2.service.ts +0 -481
- package/src/lib/api/key-exchange.gql.ts +0 -196
- package/src/lib/api/key-exchange.service.spec.ts +0 -470
- package/src/lib/api/key-exchange.service.ts +0 -731
- package/src/lib/api/key-exchange.types.ts +0 -235
- package/src/lib/api/key-exchange2.gql.ts +0 -310
- package/src/lib/api/key-exchange2.service.spec.ts +0 -892
- package/src/lib/api/key-exchange2.service.ts +0 -875
- package/src/lib/api/lock.gql.ts +0 -67
- package/src/lib/api/lock.service.spec.ts +0 -549
- package/src/lib/api/lock.service.ts +0 -57
- package/src/lib/api/lr-apollo.service.spec.ts +0 -27
- package/src/lib/api/lr-apollo.service.ts +0 -43
- package/src/lib/api/lr-graphql/lr-graphql.service.ts +0 -313
- package/src/lib/api/lr-graphql/lr-merged-mutation.ts +0 -377
- package/src/lib/api/lr-graphql/lr-mutation-base.ts +0 -67
- package/src/lib/api/lr-graphql/lr-mutation.ts +0 -74
- package/src/lib/api/lr-graphql/lr.service.ts +0 -28
- package/src/lib/api/message.service.spec.ts +0 -20
- package/src/lib/api/message.service.ts +0 -210
- package/src/lib/api/persist.service.spec.ts +0 -209
- package/src/lib/api/persist.service.ts +0 -220
- package/src/lib/api/query-processor/common-processors.service.ts +0 -148
- package/src/lib/api/query-processor/query-processor.service.ts +0 -240
- package/src/lib/api/query-processor/tp-password-reset-processor.service.ts +0 -177
- package/src/lib/api/shared-contact-card.service.ts +0 -156
- package/src/lib/api/shared-contact-card2.gql.ts +0 -76
- package/src/lib/api/shared-contact-card2.service.ts +0 -154
- package/src/lib/api/time.service.spec.ts +0 -48
- package/src/lib/api/time.service.ts +0 -155
- package/src/lib/api/types/graphql.types.ts +0 -48
- package/src/lib/api/types/lr-graphql.types.ts +0 -467
- package/src/lib/auth/auth.config.ts +0 -83
- package/src/lib/auth/auth.gql.ts +0 -62
- package/src/lib/auth/auth.types.ts +0 -79
- package/src/lib/auth/idle.service.spec.ts +0 -119
- package/src/lib/auth/idle.service.ts +0 -208
- package/src/lib/auth/idle.types.ts +0 -11
- package/src/lib/auth/lbop.service.spec.ts +0 -56
- package/src/lib/auth/lbop.service.ts +0 -539
- package/src/lib/auth/life-ready-auth.service.spec.ts +0 -70
- package/src/lib/auth/life-ready-auth.service.ts +0 -454
- package/src/lib/auth/password.service.spec.ts +0 -51
- package/src/lib/auth/password.service.ts +0 -438
- package/src/lib/auth/register.service.spec.ts +0 -31
- package/src/lib/auth/register.service.ts +0 -181
- package/src/lib/auth/two-factor.service.spec.ts +0 -21
- package/src/lib/auth/two-factor.service.ts +0 -69
- package/src/lib/category/category-meta.service.spec.ts +0 -28
- package/src/lib/category/category-meta.service.ts +0 -125
- package/src/lib/category/category.gql.ts +0 -449
- package/src/lib/category/category.service.spec.ts +0 -26
- package/src/lib/category/category.service.ts +0 -498
- package/src/lib/category/category.types.ts +0 -89
- package/src/lib/cryptography/cryptography.types.ts +0 -108
- package/src/lib/cryptography/encryption.service.spec.ts +0 -125
- package/src/lib/cryptography/encryption.service.ts +0 -243
- package/src/lib/cryptography/key-factory.service.spec.ts +0 -15
- package/src/lib/cryptography/key-factory.service.ts +0 -303
- package/src/lib/cryptography/key-graph.service.spec.ts +0 -16
- package/src/lib/cryptography/key-graph.service.ts +0 -354
- package/src/lib/cryptography/key-meta.service.spec.ts +0 -40
- package/src/lib/cryptography/key-meta.service.ts +0 -254
- package/src/lib/cryptography/key.service.spec.ts +0 -16
- package/src/lib/cryptography/key.service.ts +0 -154
- package/src/lib/cryptography/slip39.service.spec.ts +0 -44
- package/src/lib/cryptography/slip39.service.ts +0 -204
- package/src/lib/cryptography/web-crypto.service.ts +0 -22
- package/src/lib/life-ready.config.ts +0 -127
- package/src/lib/life-ready.module.ts +0 -81
- package/src/lib/plan/plan.gql.ts +0 -133
- package/src/lib/plan/plan.service.spec.ts +0 -294
- package/src/lib/plan/plan.service.ts +0 -198
- package/src/lib/plan/plan.types.ts +0 -37
- package/src/lib/record/record-attachment.service.spec.ts +0 -31
- package/src/lib/record/record-attachment.service.ts +0 -101
- package/src/lib/record/record.gql.ts +0 -192
- package/src/lib/record/record.service.spec.ts +0 -598
- package/src/lib/record/record.service.ts +0 -236
- package/src/lib/record/record.types.ts +0 -86
- package/src/lib/record-type/record-type.service.spec.ts +0 -16
- package/src/lib/record-type/record-type.service.ts +0 -71
- package/src/lib/record-type/record-type.types.ts +0 -58
- package/src/lib/scenario/approvals/scenario-approval.gql.ts +0 -112
- package/src/lib/scenario/approvals/scenario-approval.types.ts +0 -85
- package/src/lib/scenario/approvals/scenario-approver.service.spec.ts +0 -16
- package/src/lib/scenario/approvals/scenario-approver.service.ts +0 -422
- package/src/lib/scenario/claimants/scenario-claimant.gql.ts +0 -56
- package/src/lib/scenario/claimants/scenario-claimant.service.spec.ts +0 -16
- package/src/lib/scenario/claimants/scenario-claimant.service.ts +0 -100
- package/src/lib/scenario/claimants/scenario-claimant.types.ts +0 -21
- package/src/lib/scenario/receivers/scenario-receiver.gql.ts +0 -157
- package/src/lib/scenario/receivers/scenario-receiver.service.spec.ts +0 -16
- package/src/lib/scenario/receivers/scenario-receiver.service.ts +0 -278
- package/src/lib/scenario/receivers/scenario-receiver.types.ts +0 -66
- package/src/lib/scenario/scenario-setup.service.spec.ts +0 -22
- package/src/lib/scenario/scenario-setup.service.ts +0 -369
- package/src/lib/scenario/scenario.gql.ts +0 -404
- package/src/lib/scenario/scenario.service.spec.ts +0 -1586
- package/src/lib/scenario/scenario.service.ts +0 -811
- package/src/lib/scenario/scenario.types.ts +0 -258
- package/src/lib/search/search.gql.ts +0 -62
- package/src/lib/search/search.service.spec.ts +0 -57
- package/src/lib/search/search.service.ts +0 -174
- package/src/lib/search/search.types.ts +0 -24
- package/src/lib/trusted-parties/tp-password-reset-request.service.ts +0 -140
- package/src/lib/trusted-parties/tp-password-reset-user.service.ts +0 -359
- package/src/lib/trusted-parties/tp-password-reset.gql.ts +0 -453
- package/src/lib/trusted-parties/tp-password-reset.service.spec.ts +0 -602
- package/src/lib/trusted-parties/tp-password-reset.service.ts +0 -482
- package/src/lib/trusted-parties/trusted-party.gql.ts +0 -159
- package/src/lib/trusted-parties/trusted-party.service.spec.ts +0 -1008
- package/src/lib/trusted-parties/trusted-party.service.ts +0 -394
- package/src/lib/trusted-parties/trusted-party.types.ts +0 -119
- package/src/lib/trusted-parties/trusted-party2.gql.ts +0 -165
- package/src/lib/trusted-parties/trusted-party2.service.spec.ts +0 -1782
- package/src/lib/trusted-parties/trusted-party2.service.ts +0 -272
- package/src/lib/users/profile-details.service.spec.ts +0 -45
- package/src/lib/users/profile-details.service.ts +0 -278
- package/src/lib/users/profile.gql.ts +0 -108
- package/src/lib/users/profile.service.spec.ts +0 -97
- package/src/lib/users/profile.service.ts +0 -224
- package/src/lib/users/profile.types.ts +0 -101
- package/src/lib/users/user.gql.ts +0 -69
- package/src/lib/users/user.service.spec.ts +0 -161
- package/src/lib/users/user.service.ts +0 -72
- package/src/lib/users/user.types.ts +0 -27
- package/src/test.ts +0 -21
- package/tsconfig.lib.json +0 -21
- package/tsconfig.lib.prod.json +0 -6
- package/tsconfig.spec.json +0 -10
- package/tslint.json +0 -17
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { gqlTyped } from '../_common/ast';
|
|
2
|
-
import { ID } from './types';
|
|
3
|
-
|
|
4
|
-
export interface UpdateOwnedContactCardMutation {
|
|
5
|
-
updateOwnedContactCard: {
|
|
6
|
-
ownedContactCard: {
|
|
7
|
-
id: ID;
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
export const UpdateOwnedContactCardMutation = gqlTyped<UpdateOwnedContactCardMutation>`
|
|
12
|
-
mutation UpdateOwnedContactCardMutation(
|
|
13
|
-
$input: UpdateOwnedContactCardInput!
|
|
14
|
-
) {
|
|
15
|
-
updateOwnedContactCard(input: $input) {
|
|
16
|
-
ownedContactCard {
|
|
17
|
-
id
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}`;
|
|
21
|
-
|
|
22
|
-
export interface UpdateReceivedContactCardMutation {
|
|
23
|
-
updateReceivedContactCard: {
|
|
24
|
-
receivedContactCard: {
|
|
25
|
-
id: ID;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
export const UpdateReceivedContactCardMutation = gqlTyped<UpdateReceivedContactCardMutation>`
|
|
30
|
-
mutation UpdateReceivedContactCardMutation(
|
|
31
|
-
$input: UpdateReceivedContactCardInput!
|
|
32
|
-
) {
|
|
33
|
-
updateReceivedContactCard(input: $input) {
|
|
34
|
-
receivedContactCard {
|
|
35
|
-
id
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}`;
|
|
39
|
-
|
|
40
|
-
export interface GetOwnedContactCardKeyIdsQuery {
|
|
41
|
-
ownedContactCard: {
|
|
42
|
-
sharedKey: {
|
|
43
|
-
id: ID;
|
|
44
|
-
};
|
|
45
|
-
ownerKey: {
|
|
46
|
-
id: ID;
|
|
47
|
-
};
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
export const GetOwnedContactCardKeyIdsQuery = gqlTyped<GetOwnedContactCardKeyIdsQuery>`
|
|
51
|
-
query GetOwnedContactCardKeyIdsQuery($id: LrRelayIdInput!) {
|
|
52
|
-
ownedContactCard(id: $id) {
|
|
53
|
-
sharedKey {
|
|
54
|
-
id
|
|
55
|
-
}
|
|
56
|
-
ownerKey {
|
|
57
|
-
id
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}`;
|
|
61
|
-
|
|
62
|
-
export interface GetReceivedContactCardKeyIdQuery {
|
|
63
|
-
receivedContactCard: {
|
|
64
|
-
receiverKey: {
|
|
65
|
-
id: ID;
|
|
66
|
-
};
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
export const GetReceivedContactCardKeyIdQuery = gqlTyped<GetReceivedContactCardKeyIdQuery>`
|
|
70
|
-
query GetReceivedContactCardKeyIdQuery($id: LrRelayIdInput!) {
|
|
71
|
-
receivedContactCard(id: $id) {
|
|
72
|
-
receiverKey {
|
|
73
|
-
id
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}`;
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { Injectable, NgZone } from '@angular/core';
|
|
2
|
-
import { Key } from '../cryptography/cryptography.types';
|
|
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 {
|
|
8
|
-
ContactCardReceiverCipherData,
|
|
9
|
-
SendContactCardInput,
|
|
10
|
-
} from './key-exchange2.service';
|
|
11
|
-
import { LrGraphQLService, LrMutation } from './lr-graphql';
|
|
12
|
-
import {
|
|
13
|
-
GetOwnedContactCardKeyIdsQuery,
|
|
14
|
-
GetReceivedContactCardKeyIdQuery,
|
|
15
|
-
UpdateOwnedContactCardMutation,
|
|
16
|
-
UpdateReceivedContactCardMutation,
|
|
17
|
-
} from './shared-contact-card2.gql';
|
|
18
|
-
import { LrRelayIdInput } from './types';
|
|
19
|
-
|
|
20
|
-
export interface UpdateOwnedContactCardInput extends SendContactCardInput {
|
|
21
|
-
id: LrRelayIdInput;
|
|
22
|
-
ownerKeyId?: LrRelayIdInput;
|
|
23
|
-
sharedKeyId?: LrRelayIdInput;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface UpdateReceivedContactCardInput
|
|
27
|
-
extends ContactCardReceiverCipherData {
|
|
28
|
-
id: LrRelayIdInput;
|
|
29
|
-
receiverKeyId?: LrRelayIdInput;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@RunOutsideAngular({
|
|
33
|
-
ngZoneName: 'ngZone',
|
|
34
|
-
})
|
|
35
|
-
@Injectable({
|
|
36
|
-
providedIn: 'root',
|
|
37
|
-
})
|
|
38
|
-
export class SharedContactCard2Service {
|
|
39
|
-
constructor(
|
|
40
|
-
private ngZone: NgZone,
|
|
41
|
-
private keyService: KeyService,
|
|
42
|
-
private keyGraph: KeyGraphService,
|
|
43
|
-
private encryptionService: EncryptionService,
|
|
44
|
-
private lrGraphQL: LrGraphQLService
|
|
45
|
-
) {}
|
|
46
|
-
|
|
47
|
-
private async getOwnedContactCardKeyIds(id: LrRelayIdInput) {
|
|
48
|
-
const { ownedContactCard: cc } = await this.lrGraphQL.query({
|
|
49
|
-
query: GetOwnedContactCardKeyIdsQuery,
|
|
50
|
-
variables: {
|
|
51
|
-
id,
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
return {
|
|
56
|
-
sharedKeyId: cc.sharedKey.id,
|
|
57
|
-
ownerKeyId: cc.ownerKey.id,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
private async getReceivedContactCardKeyId(id: LrRelayIdInput) {
|
|
62
|
-
return (
|
|
63
|
-
await this.lrGraphQL.query({
|
|
64
|
-
query: GetReceivedContactCardKeyIdQuery,
|
|
65
|
-
variables: {
|
|
66
|
-
id,
|
|
67
|
-
},
|
|
68
|
-
})
|
|
69
|
-
).receivedContactCard.receiverKey.id;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
async updateOwnedContactCard({
|
|
73
|
-
id,
|
|
74
|
-
ownerKeyId,
|
|
75
|
-
sharedKeyId,
|
|
76
|
-
ownerPlainDataJson,
|
|
77
|
-
ownerCipherDataClearJson,
|
|
78
|
-
sharedCipherDataClearJson,
|
|
79
|
-
}: UpdateOwnedContactCardInput) {
|
|
80
|
-
let ownerKey: Key;
|
|
81
|
-
let sharedKey: Key;
|
|
82
|
-
|
|
83
|
-
try {
|
|
84
|
-
ownerKey = await this.keyGraph.getKey(ownerKeyId);
|
|
85
|
-
sharedKey = await this.keyGraph.getKey(sharedKeyId);
|
|
86
|
-
} catch (error) {
|
|
87
|
-
const keys = await this.getOwnedContactCardKeyIds(id);
|
|
88
|
-
|
|
89
|
-
// try again
|
|
90
|
-
ownerKey = await this.keyGraph.getKey(keys.ownerKeyId);
|
|
91
|
-
sharedKey = await this.keyGraph.getKey(keys.sharedKeyId);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const sigPxk = await this.keyService.getCurrentSigPxk();
|
|
95
|
-
|
|
96
|
-
const sharedCipherData = await this.encryptionService.encrypt(
|
|
97
|
-
sharedKey.jwk,
|
|
98
|
-
sharedCipherDataClearJson
|
|
99
|
-
);
|
|
100
|
-
const sharedCipherDataSig = JSON.stringify(
|
|
101
|
-
await this.encryptionService.sign(sigPxk.jwk, sharedCipherData)
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
const ownerPlainDataSig = JSON.stringify(
|
|
105
|
-
await this.encryptionService.sign(sigPxk.jwk, ownerPlainDataJson)
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
const ownerCipherData = await this.encryptionService.encryptToString(
|
|
109
|
-
ownerKey.jwk,
|
|
110
|
-
ownerCipherDataClearJson
|
|
111
|
-
);
|
|
112
|
-
|
|
113
|
-
return new LrMutation({
|
|
114
|
-
mutation: UpdateOwnedContactCardMutation,
|
|
115
|
-
variables: {
|
|
116
|
-
input: {
|
|
117
|
-
id,
|
|
118
|
-
ownerCipherData,
|
|
119
|
-
ownerKeyId: ownerKey.id,
|
|
120
|
-
sharedCipherDataSig,
|
|
121
|
-
sharedKeyId: sharedKey.id,
|
|
122
|
-
sigPxkId: sigPxk.id,
|
|
123
|
-
ownerPlainDataSig,
|
|
124
|
-
},
|
|
125
|
-
},
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
async updateReceivedContactCard({
|
|
130
|
-
id,
|
|
131
|
-
receiverKeyId,
|
|
132
|
-
receiverCipherDataClearJson,
|
|
133
|
-
}: UpdateReceivedContactCardInput) {
|
|
134
|
-
const receiverKey = await this.keyGraph.getKey(receiverKeyId, () =>
|
|
135
|
-
this.getReceivedContactCardKeyId(id)
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
const receiverCipherData = await this.encryptionService.encryptToString(
|
|
139
|
-
receiverKey.jwk,
|
|
140
|
-
receiverCipherDataClearJson
|
|
141
|
-
);
|
|
142
|
-
|
|
143
|
-
return new LrMutation({
|
|
144
|
-
mutation: UpdateReceivedContactCardMutation,
|
|
145
|
-
variables: {
|
|
146
|
-
input: {
|
|
147
|
-
id,
|
|
148
|
-
receiverCipherData,
|
|
149
|
-
receiverKeyId: receiverKey.id,
|
|
150
|
-
},
|
|
151
|
-
},
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { TimeService } from './time.service';
|
|
2
|
-
import { TestBed } from '@angular/core/testing';
|
|
3
|
-
import { environment } from 'projects/lr-auth-app/src/environments/environment';
|
|
4
|
-
import {
|
|
5
|
-
loginTestUser,
|
|
6
|
-
logoutUser,
|
|
7
|
-
} from '../auth/life-ready-auth.service.spec';
|
|
8
|
-
import { lrConfigureTestingModule, lrit } from '../_common/tests';
|
|
9
|
-
|
|
10
|
-
const TIMEOUT = 1000 * 60 * 10;
|
|
11
|
-
|
|
12
|
-
describe('TimeService', () => {
|
|
13
|
-
let timeService: TimeService;
|
|
14
|
-
|
|
15
|
-
beforeEach(async () => {
|
|
16
|
-
lrConfigureTestingModule();
|
|
17
|
-
timeService = TestBed.inject(TimeService);
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
lrit('should get server time', async () => {
|
|
21
|
-
const serverNow = await timeService.serverNow();
|
|
22
|
-
console.log('server now', serverNow);
|
|
23
|
-
console.log('local now', Date.now());
|
|
24
|
-
expect(serverNow).toBeTruthy();
|
|
25
|
-
expect(timeService.offsetMs).not.toBeNull();
|
|
26
|
-
console.log('timeService.offsetMs', timeService.offsetMs);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
lrit(
|
|
30
|
-
'should confirm time from independent source',
|
|
31
|
-
async () => {
|
|
32
|
-
if (!timeService.VERIFY_ENABLED) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Using AWS Cognito, so need to login first, it might block the client/host as malicious.
|
|
37
|
-
const {
|
|
38
|
-
username: username1,
|
|
39
|
-
password: password1,
|
|
40
|
-
} = environment.test.users[0];
|
|
41
|
-
await loginTestUser(username1, password1);
|
|
42
|
-
|
|
43
|
-
const serverNow = await timeService.serverNow();
|
|
44
|
-
expect(timeService.verified).toBeTrue();
|
|
45
|
-
},
|
|
46
|
-
TIMEOUT
|
|
47
|
-
);
|
|
48
|
-
});
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
|
|
3
|
-
import { Apollo } from 'apollo-angular';
|
|
4
|
-
import gql from 'graphql-tag';
|
|
5
|
-
import * as moment_ from 'moment';
|
|
6
|
-
import {
|
|
7
|
-
LrErrorCode,
|
|
8
|
-
LrException,
|
|
9
|
-
handleApolloError,
|
|
10
|
-
} from '../_common/exceptions';
|
|
11
|
-
// "why?" you ask: https://stackoverflow.com/questions/59735280/angular-8-moment-error-cannot-call-a-namespace-moment
|
|
12
|
-
const moment = moment_;
|
|
13
|
-
|
|
14
|
-
export const ServerTimeQuery = gql`
|
|
15
|
-
query {
|
|
16
|
-
serverTime {
|
|
17
|
-
timestamp
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
`;
|
|
21
|
-
|
|
22
|
-
interface ServerTime {
|
|
23
|
-
timestamp: string;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
@Injectable({
|
|
27
|
-
providedIn: 'root',
|
|
28
|
-
})
|
|
29
|
-
export class TimeService {
|
|
30
|
-
public VERIFY_ENABLED = true;
|
|
31
|
-
private readonly MAX_DIFF_MSEC = moment
|
|
32
|
-
.duration({ seconds: 30 })
|
|
33
|
-
.asMilliseconds();
|
|
34
|
-
|
|
35
|
-
offsetMs: number = null; // Millisecond offset of local clock.
|
|
36
|
-
verified = false; // Verified with independent time source
|
|
37
|
-
|
|
38
|
-
constructor(private auth: AuthClass, private apollo: Apollo) {}
|
|
39
|
-
|
|
40
|
-
private async getAccessToken(): Promise<string> {
|
|
41
|
-
try {
|
|
42
|
-
return (await this.auth.currentAuthenticatedUser())
|
|
43
|
-
.getSignInUserSession()
|
|
44
|
-
.getAccessToken()
|
|
45
|
-
.getJwtToken();
|
|
46
|
-
} catch (error) {
|
|
47
|
-
return ''; // Not authenticated
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Get time from independent source to confirm.
|
|
52
|
-
private async verifyCognito(): Promise<void> {
|
|
53
|
-
const accessToken = await this.getAccessToken();
|
|
54
|
-
if (!accessToken) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Request headers from AWS Amplify Auth lib
|
|
59
|
-
// accept: */*
|
|
60
|
-
// accept-encoding: gzip, deflate, br
|
|
61
|
-
// accept-language: en-GB,en-US;q=0.9,en;q=0.8
|
|
62
|
-
// cache-control: no-cache
|
|
63
|
-
// content-length: 1089
|
|
64
|
-
// content-type: application/x-amz-json-1.1
|
|
65
|
-
// origin: http://localhost:4200
|
|
66
|
-
// pragma: no-cache
|
|
67
|
-
// referer: http://localhost:4200/
|
|
68
|
-
// sec-fetch-dest: empty
|
|
69
|
-
// sec-fetch-mode: cors
|
|
70
|
-
// sec-fetch-site: cross-site
|
|
71
|
-
// user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
|
|
72
|
-
// x-amz-target: AWSCognitoIdentityProviderService.GetUser
|
|
73
|
-
// x-amz-user-agent: aws-amplify/0.1.x js
|
|
74
|
-
|
|
75
|
-
// We are only interested in the Date field.
|
|
76
|
-
// AZ: I suppose we could use any end-point that provides a reliable Date field in the header. And we don't
|
|
77
|
-
// need to be authenticated. Even a 400 response would have a Date header. But the worry is that AWS might
|
|
78
|
-
// think it's some sort of attack, and block the IP or domain. At least in an authenticated call it can't be
|
|
79
|
-
// seen as illegitimate.
|
|
80
|
-
const response = await fetch(
|
|
81
|
-
'https://cognito-idp.ap-southeast-2.amazonaws.com/',
|
|
82
|
-
{
|
|
83
|
-
method: 'POST', // *GET, POST, PUT, DELETE, etc.
|
|
84
|
-
mode: 'cors', // no-cors, *cors, same-origin
|
|
85
|
-
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
|
|
86
|
-
headers: {
|
|
87
|
-
'x-amz-target': 'AWSCognitoIdentityProviderService.GetUser',
|
|
88
|
-
'x-amz-user-agent': 'aws-amplify/0.1.x js',
|
|
89
|
-
'Content-Type': 'application/x-amz-json-1.1',
|
|
90
|
-
},
|
|
91
|
-
// redirect: 'follow', // manual, *follow, error
|
|
92
|
-
// 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
|
|
93
|
-
body: JSON.stringify({
|
|
94
|
-
AccessToken: accessToken,
|
|
95
|
-
}), // body data type must match "Content-Type" header
|
|
96
|
-
}
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
const now = Date.now();
|
|
100
|
-
|
|
101
|
-
const verifyTime = moment(response.headers.get('Date')).valueOf();
|
|
102
|
-
const serverTime = now + this.offsetMs;
|
|
103
|
-
const diff = Math.abs(serverTime - verifyTime);
|
|
104
|
-
|
|
105
|
-
if (diff > this.MAX_DIFF_MSEC) {
|
|
106
|
-
throw new LrException({
|
|
107
|
-
code: LrErrorCode.BadTimeSync,
|
|
108
|
-
message: `Server time does not match independent source. ServerTime: ${serverTime}, Cognito time: ${verifyTime}`,
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
this.verified = true;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
private async refresh(): Promise<void> {
|
|
116
|
-
const start = Date.now();
|
|
117
|
-
const res = await this.apollo
|
|
118
|
-
.query<{ serverTime: ServerTime }>({ query: ServerTimeQuery })
|
|
119
|
-
.toPromise();
|
|
120
|
-
const end = Date.now();
|
|
121
|
-
|
|
122
|
-
handleApolloError(res.errors);
|
|
123
|
-
|
|
124
|
-
const serverTime = parseInt(res.data.serverTime.timestamp, 10);
|
|
125
|
-
|
|
126
|
-
const roundtrip = end - start;
|
|
127
|
-
this.offsetMs = serverTime - (start + roundtrip / 2);
|
|
128
|
-
|
|
129
|
-
if (this.VERIFY_ENABLED) {
|
|
130
|
-
await this.verifyCognito();
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
async serverNow(): Promise<number> {
|
|
135
|
-
let needsRefresh = false;
|
|
136
|
-
|
|
137
|
-
// First call
|
|
138
|
-
if (this.offsetMs === null) {
|
|
139
|
-
needsRefresh = true;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
if (this.VERIFY_ENABLED) {
|
|
143
|
-
// logged in but not yet verified time matches.
|
|
144
|
-
if (!this.verified && (await this.getAccessToken())) {
|
|
145
|
-
needsRefresh = true;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
if (needsRefresh) {
|
|
150
|
-
await this.refresh();
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return Date.now() + this.offsetMs;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
// ------------------------------------------------------
|
|
2
|
-
// Basic types
|
|
3
|
-
// ------------------------------------------------------
|
|
4
|
-
// These types map directory to types of the same name in graphql.
|
|
5
|
-
// We use these aliases in case in the future we wish to reify the types and do
|
|
6
|
-
// additional automated conversion.
|
|
7
|
-
|
|
8
|
-
export type ID = string;
|
|
9
|
-
// Server requires this to have certain format. But client
|
|
10
|
-
// just treats this as an opaque string.
|
|
11
|
-
export type LrRelayIdInput = string;
|
|
12
|
-
export type DateTime = string;
|
|
13
|
-
// This is basically the results of: JSON.stringify(obj)
|
|
14
|
-
// Server validated to make sure it can JSON.parse() this.
|
|
15
|
-
export type LrJSONString = string;
|
|
16
|
-
// JSONString is a type from graphene. DB JSON fields maps to this type
|
|
17
|
-
// automatically.
|
|
18
|
-
// Where as LrJSONString is out custom implementation for input variables.
|
|
19
|
-
export type JSONString = string;
|
|
20
|
-
export type LrEmail = string;
|
|
21
|
-
export type GenericScalar = any;
|
|
22
|
-
export type UUID = string;
|
|
23
|
-
|
|
24
|
-
export interface Node {
|
|
25
|
-
id?: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface TimeStamped {
|
|
29
|
-
created?: DateTime;
|
|
30
|
-
modified?: DateTime;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface Edge<NodeType extends Node> {
|
|
34
|
-
node?: NodeType;
|
|
35
|
-
cursor?: string;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface Connection<NodeType> {
|
|
39
|
-
pageInfo?: PageInfo;
|
|
40
|
-
edges?: Edge<NodeType>[];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface PageInfo {
|
|
44
|
-
hasNextPage?: boolean;
|
|
45
|
-
hasPreviousPage?: boolean;
|
|
46
|
-
startCursor?: string;
|
|
47
|
-
endCursor?: string;
|
|
48
|
-
}
|