@atproto/bsky 0.0.198 → 0.0.199
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/CHANGELOG.md +14 -0
- package/dist/api/age-assurance/const.d.ts +11 -0
- package/dist/api/age-assurance/const.d.ts.map +1 -0
- package/dist/api/age-assurance/const.js +142 -0
- package/dist/api/age-assurance/const.js.map +1 -0
- package/dist/api/age-assurance/index.d.ts +4 -0
- package/dist/api/age-assurance/index.d.ts.map +1 -0
- package/dist/api/age-assurance/index.js +24 -0
- package/dist/api/age-assurance/index.js.map +1 -0
- package/dist/api/age-assurance/kws/age-verified.d.ts +109 -0
- package/dist/api/age-assurance/kws/age-verified.d.ts.map +1 -0
- package/dist/api/age-assurance/kws/age-verified.js +63 -0
- package/dist/api/age-assurance/kws/age-verified.js.map +1 -0
- package/dist/api/age-assurance/kws/const.d.ts +13 -0
- package/dist/api/age-assurance/kws/const.d.ts.map +1 -0
- package/dist/api/age-assurance/kws/const.js +36 -0
- package/dist/api/age-assurance/kws/const.js.map +1 -0
- package/dist/api/age-assurance/kws/external-payload.d.ts +75 -0
- package/dist/api/age-assurance/kws/external-payload.d.ts.map +1 -0
- package/dist/api/age-assurance/kws/external-payload.js +124 -0
- package/dist/api/age-assurance/kws/external-payload.js.map +1 -0
- package/dist/api/age-assurance/kws/external-payload.test.d.ts +2 -0
- package/dist/api/age-assurance/kws/external-payload.test.d.ts.map +1 -0
- package/dist/api/age-assurance/kws/external-payload.test.js +65 -0
- package/dist/api/age-assurance/kws/external-payload.test.js.map +1 -0
- package/dist/api/age-assurance/redirects/kws-age-verified.d.ts +4 -0
- package/dist/api/age-assurance/redirects/kws-age-verified.d.ts.map +1 -0
- package/dist/api/age-assurance/redirects/kws-age-verified.js +76 -0
- package/dist/api/age-assurance/redirects/kws-age-verified.js.map +1 -0
- package/dist/api/age-assurance/stash.d.ts +4 -0
- package/dist/api/age-assurance/stash.d.ts.map +1 -0
- package/dist/api/age-assurance/stash.js +19 -0
- package/dist/api/age-assurance/stash.js.map +1 -0
- package/dist/api/age-assurance/types.d.ts +10 -0
- package/dist/api/age-assurance/types.d.ts.map +1 -0
- package/dist/api/age-assurance/types.js +3 -0
- package/dist/api/age-assurance/types.js.map +1 -0
- package/dist/api/age-assurance/util.d.ts +15 -0
- package/dist/api/age-assurance/util.d.ts.map +1 -0
- package/dist/api/age-assurance/util.js +54 -0
- package/dist/api/age-assurance/util.js.map +1 -0
- package/dist/api/age-assurance/webhooks/kws-age-verified.d.ts +4 -0
- package/dist/api/age-assurance/webhooks/kws-age-verified.d.ts.map +1 -0
- package/dist/api/age-assurance/webhooks/kws-age-verified.js +63 -0
- package/dist/api/age-assurance/webhooks/kws-age-verified.js.map +1 -0
- package/dist/api/app/bsky/ageassurance/begin.d.ts +4 -0
- package/dist/api/app/bsky/ageassurance/begin.d.ts.map +1 -0
- package/dist/api/app/bsky/ageassurance/begin.js +131 -0
- package/dist/api/app/bsky/ageassurance/begin.js.map +1 -0
- package/dist/api/app/bsky/ageassurance/getConfig.d.ts +4 -0
- package/dist/api/app/bsky/ageassurance/getConfig.d.ts.map +1 -0
- package/dist/api/app/bsky/ageassurance/getConfig.js +16 -0
- package/dist/api/app/bsky/ageassurance/getConfig.js.map +1 -0
- package/dist/api/app/bsky/ageassurance/getState.d.ts +4 -0
- package/dist/api/app/bsky/ageassurance/getState.d.ts.map +1 -0
- package/dist/api/app/bsky/ageassurance/getState.js +42 -0
- package/dist/api/app/bsky/ageassurance/getState.js.map +1 -0
- package/dist/api/external.d.ts.map +1 -1
- package/dist/api/external.js +2 -0
- package/dist/api/external.js.map +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +8 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/kws/api.d.ts.map +1 -1
- package/dist/api/kws/api.js +44 -26
- package/dist/api/kws/api.js.map +1 -1
- package/dist/api/kws/index.d.ts.map +1 -1
- package/dist/api/kws/index.js +3 -1
- package/dist/api/kws/index.js.map +1 -1
- package/dist/api/kws/webhook.d.ts +3 -1
- package/dist/api/kws/webhook.d.ts.map +1 -1
- package/dist/api/kws/webhook.js +48 -20
- package/dist/api/kws/webhook.js.map +1 -1
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -2
- package/dist/config.js.map +1 -1
- package/dist/data-plane/bsync/index.d.ts.map +1 -1
- package/dist/data-plane/bsync/index.js +22 -0
- package/dist/data-plane/bsync/index.js.map +1 -1
- package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.d.ts +4 -0
- package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.d.ts.map +1 -0
- package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.js +30 -0
- package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.js.map +1 -0
- package/dist/data-plane/server/db/migrations/index.d.ts +1 -0
- package/dist/data-plane/server/db/migrations/index.d.ts.map +1 -1
- package/dist/data-plane/server/db/migrations/index.js +2 -1
- package/dist/data-plane/server/db/migrations/index.js.map +1 -1
- package/dist/data-plane/server/db/pagination.d.ts +3 -3
- package/dist/data-plane/server/db/tables/actor.d.ts +3 -0
- package/dist/data-plane/server/db/tables/actor.d.ts.map +1 -1
- package/dist/data-plane/server/db/tables/actor.js.map +1 -1
- package/dist/data-plane/server/routes/profile.d.ts.map +1 -1
- package/dist/data-plane/server/routes/profile.js +13 -1
- package/dist/data-plane/server/routes/profile.js.map +1 -1
- package/dist/hydration/hydrator.js +1 -1
- package/dist/hydration/hydrator.js.map +1 -1
- package/dist/kws.d.ts +35 -0
- package/dist/kws.d.ts.map +1 -1
- package/dist/kws.js +54 -0
- package/dist/kws.js.map +1 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +2 -1
- package/dist/logger.js.map +1 -1
- package/dist/proto/bsky_pb.d.ts +8 -0
- package/dist/proto/bsky_pb.d.ts.map +1 -1
- package/dist/proto/bsky_pb.js +20 -0
- package/dist/proto/bsky_pb.js.map +1 -1
- package/dist/stash.d.ts +1 -0
- package/dist/stash.d.ts.map +1 -1
- package/dist/stash.js +1 -0
- package/dist/stash.js.map +1 -1
- package/dist/util/uris.d.ts +2 -2
- package/dist/util/uris.d.ts.map +1 -1
- package/package.json +10 -9
- package/proto/bsky.proto +1 -0
- package/src/api/age-assurance/const.ts +142 -0
- package/src/api/age-assurance/index.ts +34 -0
- package/src/api/age-assurance/kws/age-verified.ts +75 -0
- package/src/api/age-assurance/kws/const.ts +33 -0
- package/src/api/age-assurance/kws/external-payload.test.ts +72 -0
- package/src/api/age-assurance/kws/external-payload.ts +149 -0
- package/src/api/age-assurance/redirects/kws-age-verified.ts +107 -0
- package/src/api/age-assurance/stash.ts +22 -0
- package/src/api/age-assurance/types.ts +10 -0
- package/src/api/age-assurance/util.ts +66 -0
- package/src/api/age-assurance/webhooks/kws-age-verified.ts +75 -0
- package/src/api/app/bsky/ageassurance/begin.ts +167 -0
- package/src/api/app/bsky/ageassurance/getConfig.ts +15 -0
- package/src/api/app/bsky/ageassurance/getState.ts +53 -0
- package/src/api/external.ts +2 -0
- package/src/api/index.ts +6 -0
- package/src/api/kws/api.ts +55 -34
- package/src/api/kws/index.ts +7 -1
- package/src/api/kws/webhook.ts +57 -34
- package/src/config.ts +26 -2
- package/src/data-plane/bsync/index.ts +31 -0
- package/src/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.ts +28 -0
- package/src/data-plane/server/db/migrations/index.ts +1 -0
- package/src/data-plane/server/db/tables/actor.ts +3 -0
- package/src/data-plane/server/routes/profile.ts +12 -1
- package/src/hydration/hydrator.ts +1 -1
- package/src/kws.ts +81 -0
- package/src/logger.ts +2 -0
- package/src/proto/bsky_pb.ts +12 -0
- package/src/stash.ts +3 -0
- package/tests/views/age-assurance-v2.test.ts +745 -0
- package/tests/views/age-assurance.test.ts +2 -0
- package/tsconfig.build.tsbuildinfo +1 -1
- package/tsconfig.tests.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @atproto/bsky
|
|
2
2
|
|
|
3
|
+
## 0.0.199
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#4407](https://github.com/bluesky-social/atproto/pull/4407) [`90f1569`](https://github.com/bluesky-social/atproto/commit/90f15698ee63d9a7374f1206754eda5d530873d7) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Adds ageassurance namespace, methods, and utils for Age Assurance V2
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`8012627`](https://github.com/bluesky-social/atproto/commit/8012627a1226cb2f1c753385ad2497b6b43ffd2e), [`bcae2b7`](https://github.com/bluesky-social/atproto/commit/bcae2b77b68da6dc2ec202651c8bf41fd5769f69), [`d396de0`](https://github.com/bluesky-social/atproto/commit/d396de016d1d55d08cfad1dabd3ffd9eaeea76ea), [`90f1569`](https://github.com/bluesky-social/atproto/commit/90f15698ee63d9a7374f1206754eda5d530873d7), [`d396de0`](https://github.com/bluesky-social/atproto/commit/d396de016d1d55d08cfad1dabd3ffd9eaeea76ea)]:
|
|
10
|
+
- @atproto/did@0.2.3
|
|
11
|
+
- @atproto/syntax@0.4.2
|
|
12
|
+
- @atproto/crypto@0.4.5
|
|
13
|
+
- @atproto/api@0.18.4
|
|
14
|
+
- @atproto/common@0.5.2
|
|
15
|
+
- @atproto/xrpc-server@0.10.2
|
|
16
|
+
|
|
3
17
|
## 0.0.198
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AppBskyAgeassuranceDefs } from '@atproto/api';
|
|
2
|
+
/**
|
|
3
|
+
* Age assurance configuration defining rules for various regions.
|
|
4
|
+
*
|
|
5
|
+
* NOTE: These rules are matched in order, and the first matching rule
|
|
6
|
+
* determines the access level granted.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: all regions MUST have a default rule as the last rule.
|
|
9
|
+
*/
|
|
10
|
+
export declare const AGE_ASSURANCE_CONFIG: AppBskyAgeassuranceDefs.Config;
|
|
11
|
+
//# sourceMappingURL=const.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../src/api/age-assurance/const.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EAExB,MAAM,cAAc,CAAA;AAErB;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,uBAAuB,CAAC,MAgI1D,CAAA"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AGE_ASSURANCE_CONFIG = void 0;
|
|
4
|
+
const api_1 = require("@atproto/api");
|
|
5
|
+
/**
|
|
6
|
+
* Age assurance configuration defining rules for various regions.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: These rules are matched in order, and the first matching rule
|
|
9
|
+
* determines the access level granted.
|
|
10
|
+
*
|
|
11
|
+
* NOTE: all regions MUST have a default rule as the last rule.
|
|
12
|
+
*/
|
|
13
|
+
exports.AGE_ASSURANCE_CONFIG = {
|
|
14
|
+
regions: [
|
|
15
|
+
{
|
|
16
|
+
countryCode: 'GB',
|
|
17
|
+
regionCode: undefined,
|
|
18
|
+
rules: [
|
|
19
|
+
{
|
|
20
|
+
$type: api_1.ageAssuranceRuleIDs.IfAssuredOverAge,
|
|
21
|
+
age: 18,
|
|
22
|
+
access: 'full',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
$type: api_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
|
|
26
|
+
age: 13,
|
|
27
|
+
access: 'safe',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
$type: api_1.ageAssuranceRuleIDs.Default,
|
|
31
|
+
access: 'none',
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
countryCode: 'AU',
|
|
37
|
+
regionCode: undefined,
|
|
38
|
+
rules: [
|
|
39
|
+
{
|
|
40
|
+
$type: api_1.ageAssuranceRuleIDs.IfAccountNewerThan,
|
|
41
|
+
date: '2025-12-10T00:00:00Z',
|
|
42
|
+
access: 'none',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
$type: api_1.ageAssuranceRuleIDs.IfAssuredOverAge,
|
|
46
|
+
age: 18,
|
|
47
|
+
access: 'full',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
$type: api_1.ageAssuranceRuleIDs.IfAssuredOverAge,
|
|
51
|
+
age: 16,
|
|
52
|
+
access: 'safe',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
$type: api_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
|
|
56
|
+
age: 16,
|
|
57
|
+
access: 'safe',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
$type: api_1.ageAssuranceRuleIDs.Default,
|
|
61
|
+
access: 'none',
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
countryCode: 'US',
|
|
67
|
+
regionCode: 'SD',
|
|
68
|
+
rules: [
|
|
69
|
+
{
|
|
70
|
+
$type: api_1.ageAssuranceRuleIDs.IfAssuredOverAge,
|
|
71
|
+
age: 18,
|
|
72
|
+
access: 'full',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
$type: api_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
|
|
76
|
+
age: 13,
|
|
77
|
+
access: 'safe',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
$type: api_1.ageAssuranceRuleIDs.Default,
|
|
81
|
+
access: 'none',
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
countryCode: 'US',
|
|
87
|
+
regionCode: 'WY',
|
|
88
|
+
rules: [
|
|
89
|
+
{
|
|
90
|
+
$type: api_1.ageAssuranceRuleIDs.IfAssuredOverAge,
|
|
91
|
+
age: 18,
|
|
92
|
+
access: 'full',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
$type: api_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
|
|
96
|
+
age: 13,
|
|
97
|
+
access: 'safe',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
$type: api_1.ageAssuranceRuleIDs.Default,
|
|
101
|
+
access: 'none',
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
countryCode: 'US',
|
|
107
|
+
regionCode: 'OH',
|
|
108
|
+
rules: [
|
|
109
|
+
{
|
|
110
|
+
$type: api_1.ageAssuranceRuleIDs.IfAssuredOverAge,
|
|
111
|
+
age: 18,
|
|
112
|
+
access: 'full',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
$type: api_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
|
|
116
|
+
age: 13,
|
|
117
|
+
access: 'safe',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
$type: api_1.ageAssuranceRuleIDs.Default,
|
|
121
|
+
access: 'none',
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
countryCode: 'US',
|
|
127
|
+
regionCode: 'MS',
|
|
128
|
+
rules: [
|
|
129
|
+
{
|
|
130
|
+
$type: api_1.ageAssuranceRuleIDs.IfAssuredOverAge,
|
|
131
|
+
age: 18,
|
|
132
|
+
access: 'full',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
$type: api_1.ageAssuranceRuleIDs.Default,
|
|
136
|
+
access: 'none',
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=const.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../src/api/age-assurance/const.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppBskyAgeassuranceDefs,\n ageAssuranceRuleIDs as ids,\n} from '@atproto/api'\n\n/**\n * Age assurance configuration defining rules for various regions.\n *\n * NOTE: These rules are matched in order, and the first matching rule\n * determines the access level granted.\n *\n * NOTE: all regions MUST have a default rule as the last rule.\n */\nexport const AGE_ASSURANCE_CONFIG: AppBskyAgeassuranceDefs.Config = {\n regions: [\n {\n countryCode: 'GB',\n regionCode: undefined,\n rules: [\n {\n $type: ids.IfAssuredOverAge,\n age: 18,\n access: 'full',\n },\n {\n $type: ids.IfDeclaredOverAge,\n age: 13,\n access: 'safe',\n },\n {\n $type: ids.Default,\n access: 'none',\n },\n ],\n },\n {\n countryCode: 'AU',\n regionCode: undefined,\n rules: [\n {\n $type: ids.IfAccountNewerThan,\n date: '2025-12-10T00:00:00Z',\n access: 'none',\n },\n {\n $type: ids.IfAssuredOverAge,\n age: 18,\n access: 'full',\n },\n {\n $type: ids.IfAssuredOverAge,\n age: 16,\n access: 'safe',\n },\n {\n $type: ids.IfDeclaredOverAge,\n age: 16,\n access: 'safe',\n },\n {\n $type: ids.Default,\n access: 'none',\n },\n ],\n },\n {\n countryCode: 'US',\n regionCode: 'SD',\n rules: [\n {\n $type: ids.IfAssuredOverAge,\n age: 18,\n access: 'full',\n },\n {\n $type: ids.IfDeclaredOverAge,\n age: 13,\n access: 'safe',\n },\n {\n $type: ids.Default,\n access: 'none',\n },\n ],\n },\n {\n countryCode: 'US',\n regionCode: 'WY',\n rules: [\n {\n $type: ids.IfAssuredOverAge,\n age: 18,\n access: 'full',\n },\n {\n $type: ids.IfDeclaredOverAge,\n age: 13,\n access: 'safe',\n },\n {\n $type: ids.Default,\n access: 'none',\n },\n ],\n },\n {\n countryCode: 'US',\n regionCode: 'OH',\n rules: [\n {\n $type: ids.IfAssuredOverAge,\n age: 18,\n access: 'full',\n },\n {\n $type: ids.IfDeclaredOverAge,\n age: 13,\n access: 'safe',\n },\n {\n $type: ids.Default,\n access: 'none',\n },\n ],\n },\n {\n countryCode: 'US',\n regionCode: 'MS',\n rules: [\n {\n $type: ids.IfAssuredOverAge,\n age: 18,\n access: 'full',\n },\n {\n $type: ids.Default,\n access: 'none',\n },\n ],\n },\n ],\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/age-assurance/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAO,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAM1C,eAAO,MAAM,YAAY,GAAI,KAAK,UAAU,KAAG,MAkB9C,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRouter = void 0;
|
|
4
|
+
const express_1 = require("express");
|
|
5
|
+
const webhook_1 = require("../kws/webhook");
|
|
6
|
+
const kws_age_verified_1 = require("./redirects/kws-age-verified");
|
|
7
|
+
const kws_age_verified_2 = require("./webhooks/kws-age-verified");
|
|
8
|
+
const createRouter = (ctx) => {
|
|
9
|
+
assertAppContextWithAgeAssuranceClient(ctx);
|
|
10
|
+
const router = (0, express_1.Router)();
|
|
11
|
+
router.use((0, express_1.raw)({ type: 'application/json' }));
|
|
12
|
+
router.post('/age-assurance/webhooks/kws-age-verified', (0, webhook_1.webhookAuth)({
|
|
13
|
+
secret: ctx.cfg.kws.ageVerifiedWebhookSecret,
|
|
14
|
+
}), (0, kws_age_verified_2.handler)(ctx));
|
|
15
|
+
router.get('/age-assurance/redirects/kws-age-verified', (0, kws_age_verified_1.handler)(ctx));
|
|
16
|
+
return router;
|
|
17
|
+
};
|
|
18
|
+
exports.createRouter = createRouter;
|
|
19
|
+
const assertAppContextWithAgeAssuranceClient = (ctx) => {
|
|
20
|
+
if (!ctx.kwsClient) {
|
|
21
|
+
throw new Error('Tried to set up KWS router without kwsClient configured.');
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/age-assurance/index.ts"],"names":[],"mappings":";;;AAAA,qCAAqC;AAErC,4CAA4C;AAC5C,mEAA6E;AAE7E,kEAA2E;AAEpE,MAAM,YAAY,GAAG,CAAC,GAAe,EAAU,EAAE;IACtD,sCAAsC,CAAC,GAAG,CAAC,CAAA;IAE3C,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAA;IACvB,MAAM,CAAC,GAAG,CAAC,IAAA,aAAG,EAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAA;IAC7C,MAAM,CAAC,IAAI,CACT,0CAA0C,EAC1C,IAAA,qBAAW,EAAC;QACV,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,wBAAwB;KAC7C,CAAC,EACF,IAAA,0BAAkB,EAAC,GAAG,CAAC,CACxB,CAAA;IACD,MAAM,CAAC,GAAG,CACR,2CAA2C,EAC3C,IAAA,0BAAmB,EAAC,GAAG,CAAC,CACzB,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAlBY,QAAA,YAAY,gBAkBxB;AAED,MAAM,sCAAsC,GAEL,CAAC,GAAe,EAAE,EAAE;IACzD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;AACH,CAAC,CAAA","sourcesContent":["import { Router, raw } from 'express'\nimport { AppContext } from '../../context'\nimport { webhookAuth } from '../kws/webhook'\nimport { handler as ageVerifiedRedirect } from './redirects/kws-age-verified'\nimport { AppContextWithAA } from './types'\nimport { handler as ageVerifiedWebhook } from './webhooks/kws-age-verified'\n\nexport const createRouter = (ctx: AppContext): Router => {\n assertAppContextWithAgeAssuranceClient(ctx)\n\n const router = Router()\n router.use(raw({ type: 'application/json' }))\n router.post(\n '/age-assurance/webhooks/kws-age-verified',\n webhookAuth({\n secret: ctx.cfg.kws.ageVerifiedWebhookSecret,\n }),\n ageVerifiedWebhook(ctx),\n )\n router.get(\n '/age-assurance/redirects/kws-age-verified',\n ageVerifiedRedirect(ctx),\n )\n\n return router\n}\n\nconst assertAppContextWithAgeAssuranceClient: (\n ctx: AppContext,\n) => asserts ctx is AppContextWithAA = (ctx: AppContext) => {\n if (!ctx.kwsClient) {\n throw new Error('Tried to set up KWS router without kwsClient configured.')\n }\n}\n"]}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Schema for KWS the `status` object on `age-verified` payloads.
|
|
4
|
+
*/
|
|
5
|
+
export declare const KWSAgeVerifiedStatusSchema: z.ZodObject<{
|
|
6
|
+
verified: z.ZodBoolean;
|
|
7
|
+
verifiedMinimumAge: z.ZodNumber;
|
|
8
|
+
transactionId: z.ZodOptional<z.ZodString>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
verified: boolean;
|
|
11
|
+
verifiedMinimumAge: number;
|
|
12
|
+
transactionId?: string | undefined;
|
|
13
|
+
}, {
|
|
14
|
+
verified: boolean;
|
|
15
|
+
verifiedMinimumAge: number;
|
|
16
|
+
transactionId?: string | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* The KWS `status` object on `age-verified` payloads.
|
|
20
|
+
*/
|
|
21
|
+
export type KWSAgeVerifiedStatus = z.infer<typeof KWSAgeVerifiedStatusSchema>;
|
|
22
|
+
export declare function serializeKWSAgeVerifiedStatus(status: KWSAgeVerifiedStatus): string;
|
|
23
|
+
/**
|
|
24
|
+
* Parse KWS `age-verified` status object.
|
|
25
|
+
*/
|
|
26
|
+
export declare const parseKWSAgeVerifiedStatus: (raw: string) => KWSAgeVerifiedStatus;
|
|
27
|
+
/**
|
|
28
|
+
* Schema for KWS `age-verified` webhooks.
|
|
29
|
+
*
|
|
30
|
+
* Note: we don't use `.strict()` here so that we avoid breaking if KWS adds
|
|
31
|
+
* fields, and some fields below are not strictly typed since we're not using
|
|
32
|
+
* them.
|
|
33
|
+
*/
|
|
34
|
+
export declare const KWSAgeVerifiedWebhookSchema: z.ZodObject<{
|
|
35
|
+
name: z.ZodString;
|
|
36
|
+
time: z.ZodString;
|
|
37
|
+
orgId: z.ZodOptional<z.ZodString>;
|
|
38
|
+
productId: z.ZodOptional<z.ZodString>;
|
|
39
|
+
payload: z.ZodObject<{
|
|
40
|
+
email: z.ZodString;
|
|
41
|
+
externalPayload: z.ZodString;
|
|
42
|
+
status: z.ZodObject<{
|
|
43
|
+
verified: z.ZodBoolean;
|
|
44
|
+
verifiedMinimumAge: z.ZodNumber;
|
|
45
|
+
transactionId: z.ZodOptional<z.ZodString>;
|
|
46
|
+
}, "strip", z.ZodTypeAny, {
|
|
47
|
+
verified: boolean;
|
|
48
|
+
verifiedMinimumAge: number;
|
|
49
|
+
transactionId?: string | undefined;
|
|
50
|
+
}, {
|
|
51
|
+
verified: boolean;
|
|
52
|
+
verifiedMinimumAge: number;
|
|
53
|
+
transactionId?: string | undefined;
|
|
54
|
+
}>;
|
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
|
56
|
+
status: {
|
|
57
|
+
verified: boolean;
|
|
58
|
+
verifiedMinimumAge: number;
|
|
59
|
+
transactionId?: string | undefined;
|
|
60
|
+
};
|
|
61
|
+
email: string;
|
|
62
|
+
externalPayload: string;
|
|
63
|
+
}, {
|
|
64
|
+
status: {
|
|
65
|
+
verified: boolean;
|
|
66
|
+
verifiedMinimumAge: number;
|
|
67
|
+
transactionId?: string | undefined;
|
|
68
|
+
};
|
|
69
|
+
email: string;
|
|
70
|
+
externalPayload: string;
|
|
71
|
+
}>;
|
|
72
|
+
}, "strip", z.ZodTypeAny, {
|
|
73
|
+
time: string;
|
|
74
|
+
name: string;
|
|
75
|
+
payload: {
|
|
76
|
+
status: {
|
|
77
|
+
verified: boolean;
|
|
78
|
+
verifiedMinimumAge: number;
|
|
79
|
+
transactionId?: string | undefined;
|
|
80
|
+
};
|
|
81
|
+
email: string;
|
|
82
|
+
externalPayload: string;
|
|
83
|
+
};
|
|
84
|
+
orgId?: string | undefined;
|
|
85
|
+
productId?: string | undefined;
|
|
86
|
+
}, {
|
|
87
|
+
time: string;
|
|
88
|
+
name: string;
|
|
89
|
+
payload: {
|
|
90
|
+
status: {
|
|
91
|
+
verified: boolean;
|
|
92
|
+
verifiedMinimumAge: number;
|
|
93
|
+
transactionId?: string | undefined;
|
|
94
|
+
};
|
|
95
|
+
email: string;
|
|
96
|
+
externalPayload: string;
|
|
97
|
+
};
|
|
98
|
+
orgId?: string | undefined;
|
|
99
|
+
productId?: string | undefined;
|
|
100
|
+
}>;
|
|
101
|
+
/**
|
|
102
|
+
* The raw KWS `age-verified` webhook body
|
|
103
|
+
*/
|
|
104
|
+
export type KWSWebhookAgeVerified = z.infer<typeof KWSAgeVerifiedWebhookSchema>;
|
|
105
|
+
/**
|
|
106
|
+
* Parse KWS `age-verified` webhook body and its external payload.
|
|
107
|
+
*/
|
|
108
|
+
export declare const parseKWSAgeVerifiedWebhook: (raw: string) => KWSWebhookAgeVerified;
|
|
109
|
+
//# sourceMappingURL=age-verified.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"age-verified.d.ts","sourceRoot":"","sources":["../../../../src/api/age-assurance/kws/age-verified.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;EAIrC,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,oBAAoB,GAC3B,MAAM,CAER;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,GACpC,KAAK,MAAM,KACV,oBASF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUtC,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAE/E;;GAEG;AACH,eAAO,MAAM,0BAA0B,GACrC,KAAK,MAAM,KACV,qBAOF,CAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseKWSAgeVerifiedWebhook = exports.KWSAgeVerifiedWebhookSchema = exports.parseKWSAgeVerifiedStatus = exports.KWSAgeVerifiedStatusSchema = void 0;
|
|
4
|
+
exports.serializeKWSAgeVerifiedStatus = serializeKWSAgeVerifiedStatus;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
/**
|
|
7
|
+
* Schema for KWS the `status` object on `age-verified` payloads.
|
|
8
|
+
*/
|
|
9
|
+
exports.KWSAgeVerifiedStatusSchema = zod_1.z.object({
|
|
10
|
+
verified: zod_1.z.boolean(),
|
|
11
|
+
verifiedMinimumAge: zod_1.z.number(),
|
|
12
|
+
transactionId: zod_1.z.string().optional(),
|
|
13
|
+
});
|
|
14
|
+
function serializeKWSAgeVerifiedStatus(status) {
|
|
15
|
+
return JSON.stringify(exports.KWSAgeVerifiedStatusSchema.parse(status));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parse KWS `age-verified` status object.
|
|
19
|
+
*/
|
|
20
|
+
const parseKWSAgeVerifiedStatus = (raw) => {
|
|
21
|
+
try {
|
|
22
|
+
const value = JSON.parse(raw);
|
|
23
|
+
return exports.KWSAgeVerifiedStatusSchema.parse(value);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
throw new Error(`Invalid KWS age-verified status: ${raw}`, {
|
|
27
|
+
cause: err,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports.parseKWSAgeVerifiedStatus = parseKWSAgeVerifiedStatus;
|
|
32
|
+
/**
|
|
33
|
+
* Schema for KWS `age-verified` webhooks.
|
|
34
|
+
*
|
|
35
|
+
* Note: we don't use `.strict()` here so that we avoid breaking if KWS adds
|
|
36
|
+
* fields, and some fields below are not strictly typed since we're not using
|
|
37
|
+
* them.
|
|
38
|
+
*/
|
|
39
|
+
exports.KWSAgeVerifiedWebhookSchema = zod_1.z.object({
|
|
40
|
+
name: zod_1.z.string(),
|
|
41
|
+
time: zod_1.z.string(), // ISO8601 timestamp, but don't validate here
|
|
42
|
+
orgId: zod_1.z.string().uuid().optional(),
|
|
43
|
+
productId: zod_1.z.string().uuid().optional(),
|
|
44
|
+
payload: zod_1.z.object({
|
|
45
|
+
email: zod_1.z.string(), // no need to validate here
|
|
46
|
+
externalPayload: zod_1.z.string(),
|
|
47
|
+
status: exports.KWSAgeVerifiedStatusSchema,
|
|
48
|
+
}),
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Parse KWS `age-verified` webhook body and its external payload.
|
|
52
|
+
*/
|
|
53
|
+
const parseKWSAgeVerifiedWebhook = (raw) => {
|
|
54
|
+
try {
|
|
55
|
+
const value = JSON.parse(raw);
|
|
56
|
+
return exports.KWSAgeVerifiedWebhookSchema.parse(value);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
throw new Error(`Invalid webhook body: ${raw}`, { cause: err });
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
exports.parseKWSAgeVerifiedWebhook = parseKWSAgeVerifiedWebhook;
|
|
63
|
+
//# sourceMappingURL=age-verified.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"age-verified.js","sourceRoot":"","sources":["../../../../src/api/age-assurance/kws/age-verified.ts"],"names":[],"mappings":";;;AAgBA,sEAIC;AApBD,6BAAuB;AAEvB;;GAEG;AACU,QAAA,0BAA0B,GAAG,OAAC,CAAC,MAAM,CAAC;IACjD,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE;IACrB,kBAAkB,EAAE,OAAC,CAAC,MAAM,EAAE;IAC9B,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAA;AAOF,SAAgB,6BAA6B,CAC3C,MAA4B;IAE5B,OAAO,IAAI,CAAC,SAAS,CAAC,kCAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AACjE,CAAC;AAED;;GAEG;AACI,MAAM,yBAAyB,GAAG,CACvC,GAAW,EACW,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC7B,OAAO,kCAA0B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,EAAE;YACzD,KAAK,EAAE,GAAG;SACX,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAA;AAXY,QAAA,yBAAyB,6BAWrC;AAED;;;;;;GAMG;AACU,QAAA,2BAA2B,GAAG,OAAC,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,6CAA6C;IAC/D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACvC,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;QAChB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,2BAA2B;QAC9C,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE;QAC3B,MAAM,EAAE,kCAA0B;KACnC,CAAC;CACH,CAAC,CAAA;AAOF;;GAEG;AACI,MAAM,0BAA0B,GAAG,CACxC,GAAW,EACY,EAAE;IACzB,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACtC,OAAO,mCAA2B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;IACjE,CAAC;AACH,CAAC,CAAA;AATY,QAAA,0BAA0B,8BAStC","sourcesContent":["import { z } from 'zod'\n\n/**\n * Schema for KWS the `status` object on `age-verified` payloads.\n */\nexport const KWSAgeVerifiedStatusSchema = z.object({\n verified: z.boolean(),\n verifiedMinimumAge: z.number(),\n transactionId: z.string().optional(),\n})\n\n/**\n * The KWS `status` object on `age-verified` payloads.\n */\nexport type KWSAgeVerifiedStatus = z.infer<typeof KWSAgeVerifiedStatusSchema>\n\nexport function serializeKWSAgeVerifiedStatus(\n status: KWSAgeVerifiedStatus,\n): string {\n return JSON.stringify(KWSAgeVerifiedStatusSchema.parse(status))\n}\n\n/**\n * Parse KWS `age-verified` status object.\n */\nexport const parseKWSAgeVerifiedStatus = (\n raw: string,\n): KWSAgeVerifiedStatus => {\n try {\n const value = JSON.parse(raw)\n return KWSAgeVerifiedStatusSchema.parse(value)\n } catch (err) {\n throw new Error(`Invalid KWS age-verified status: ${raw}`, {\n cause: err,\n })\n }\n}\n\n/**\n * Schema for KWS `age-verified` webhooks.\n *\n * Note: we don't use `.strict()` here so that we avoid breaking if KWS adds\n * fields, and some fields below are not strictly typed since we're not using\n * them.\n */\nexport const KWSAgeVerifiedWebhookSchema = z.object({\n name: z.string(),\n time: z.string(), // ISO8601 timestamp, but don't validate here\n orgId: z.string().uuid().optional(),\n productId: z.string().uuid().optional(),\n payload: z.object({\n email: z.string(), // no need to validate here\n externalPayload: z.string(),\n status: KWSAgeVerifiedStatusSchema,\n }),\n})\n\n/**\n * The raw KWS `age-verified` webhook body\n */\nexport type KWSWebhookAgeVerified = z.infer<typeof KWSAgeVerifiedWebhookSchema>\n\n/**\n * Parse KWS `age-verified` webhook body and its external payload.\n */\nexport const parseKWSAgeVerifiedWebhook = (\n raw: string,\n): KWSWebhookAgeVerified => {\n try {\n const value: unknown = JSON.parse(raw)\n return KWSAgeVerifiedWebhookSchema.parse(value)\n } catch (err) {\n throw new Error(`Invalid webhook body: ${raw}`, { cause: err })\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported languages for KWS Adult Verification. This list comes from KWS's
|
|
3
|
+
* Age Verification Developer Guide PDF doc.
|
|
4
|
+
*/
|
|
5
|
+
export declare const KWS_SUPPORTED_LANGUAGES: Set<string>;
|
|
6
|
+
/**
|
|
7
|
+
* Regions where our "version 2" using the `age-verified` KWS flow is
|
|
8
|
+
* available. In these regions, we'll use a different KWS flow from the
|
|
9
|
+
* existing `adult-verified` flow, pass along a different external payload, and
|
|
10
|
+
* handle webhooks/redirects differently in the appview.
|
|
11
|
+
*/
|
|
12
|
+
export declare const KWS_V2_COUNTRIES: Set<string>;
|
|
13
|
+
//# sourceMappingURL=const.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../../src/api/age-assurance/kws/const.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,aAoBlC,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,aAAkB,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KWS_V2_COUNTRIES = exports.KWS_SUPPORTED_LANGUAGES = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Supported languages for KWS Adult Verification. This list comes from KWS's
|
|
6
|
+
* Age Verification Developer Guide PDF doc.
|
|
7
|
+
*/
|
|
8
|
+
exports.KWS_SUPPORTED_LANGUAGES = new Set([
|
|
9
|
+
'en',
|
|
10
|
+
'ar',
|
|
11
|
+
'zh-Hans',
|
|
12
|
+
'nl',
|
|
13
|
+
'tl',
|
|
14
|
+
'fr',
|
|
15
|
+
'de',
|
|
16
|
+
'id',
|
|
17
|
+
'it',
|
|
18
|
+
'ja',
|
|
19
|
+
'ko',
|
|
20
|
+
'pl',
|
|
21
|
+
'pt-BR',
|
|
22
|
+
'pt',
|
|
23
|
+
'ru',
|
|
24
|
+
'es',
|
|
25
|
+
'th',
|
|
26
|
+
'tr',
|
|
27
|
+
'vi',
|
|
28
|
+
]);
|
|
29
|
+
/**
|
|
30
|
+
* Regions where our "version 2" using the `age-verified` KWS flow is
|
|
31
|
+
* available. In these regions, we'll use a different KWS flow from the
|
|
32
|
+
* existing `adult-verified` flow, pass along a different external payload, and
|
|
33
|
+
* handle webhooks/redirects differently in the appview.
|
|
34
|
+
*/
|
|
35
|
+
exports.KWS_V2_COUNTRIES = new Set(['AU']);
|
|
36
|
+
//# sourceMappingURL=const.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../src/api/age-assurance/kws/const.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,uBAAuB,GAAG,IAAI,GAAG,CAAC;IAC7C,IAAI;IACJ,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC,CAAA;AAEF;;;;;GAKG;AACU,QAAA,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Supported languages for KWS Adult Verification. This list comes from KWS's\n * Age Verification Developer Guide PDF doc.\n */\nexport const KWS_SUPPORTED_LANGUAGES = new Set([\n 'en',\n 'ar',\n 'zh-Hans',\n 'nl',\n 'tl',\n 'fr',\n 'de',\n 'id',\n 'it',\n 'ja',\n 'ko',\n 'pl',\n 'pt-BR',\n 'pt',\n 'ru',\n 'es',\n 'th',\n 'tr',\n 'vi',\n])\n\n/**\n * Regions where our \"version 2\" using the `age-verified` KWS flow is\n * available. In these regions, we'll use a different KWS flow from the\n * existing `adult-verified` flow, pass along a different external payload, and\n * handle webhooks/redirects differently in the appview.\n */\nexport const KWS_V2_COUNTRIES = new Set(['AU'])\n"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const KWS_EXTERNAL_PAYLOAD_CHAR_LIMIT = 250;
|
|
3
|
+
/**
|
|
4
|
+
* Thrown when the provided external payload exceeds KWS's character limit.
|
|
5
|
+
*
|
|
6
|
+
* This is most commonly caused by DIDs that are too long, such as for
|
|
7
|
+
* `did:web` DIDs. But it's very rare, and the client has special handling for
|
|
8
|
+
* this case.
|
|
9
|
+
*/
|
|
10
|
+
export declare class KWSExternalPayloadTooLargeError extends Error {
|
|
11
|
+
}
|
|
12
|
+
export declare enum KWSExternalPayloadVersion {
|
|
13
|
+
V1 = "1",
|
|
14
|
+
V2 = "2"
|
|
15
|
+
}
|
|
16
|
+
export declare function parseKWSExternalPayloadVersion(raw: string): KWSExternalPayloadVersion;
|
|
17
|
+
export type KWSExternalPayloadV1 = {
|
|
18
|
+
actorDid: string;
|
|
19
|
+
attemptId: string;
|
|
20
|
+
};
|
|
21
|
+
export declare const KWSExternalPayloadV1Schema: z.ZodObject<{
|
|
22
|
+
actorDid: z.ZodString;
|
|
23
|
+
attemptId: z.ZodString;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
actorDid: string;
|
|
26
|
+
attemptId: string;
|
|
27
|
+
}, {
|
|
28
|
+
actorDid: string;
|
|
29
|
+
attemptId: string;
|
|
30
|
+
}>;
|
|
31
|
+
export declare function parseKWSExternalPayloadV1(raw: string): KWSExternalPayloadV1;
|
|
32
|
+
export declare function serializeKWSExternalPayloadV1(payload: KWSExternalPayloadV1): string;
|
|
33
|
+
/**
|
|
34
|
+
* During our migration from v1 to v2 of the KWS external payload, we'll be
|
|
35
|
+
* sending v2 payloads on the v1 flow (the `adult-verified` email flow). We use
|
|
36
|
+
* this utility to parse either v1 or v2 payloads in that flow.
|
|
37
|
+
*
|
|
38
|
+
* Check for the `version` field on the output of this method to discriminate
|
|
39
|
+
* between the two types and handle them differently.
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseKWSExternalPayloadV1WithV2Compat(raw: string): (KWSExternalPayloadV1 & {
|
|
42
|
+
version: KWSExternalPayloadVersion.V1;
|
|
43
|
+
}) | KWSExternalPayloadV2;
|
|
44
|
+
/***************************
|
|
45
|
+
* KWS External Payload V2 *
|
|
46
|
+
***************************/
|
|
47
|
+
export type KWSExternalPayloadV2 = {
|
|
48
|
+
version: KWSExternalPayloadVersion.V2;
|
|
49
|
+
attemptId: string;
|
|
50
|
+
actorDid: string;
|
|
51
|
+
countryCode: string;
|
|
52
|
+
regionCode?: string;
|
|
53
|
+
};
|
|
54
|
+
export declare const KWSExternalPayloadV2Schema: z.ZodObject<{
|
|
55
|
+
v: z.ZodString;
|
|
56
|
+
id: z.ZodString;
|
|
57
|
+
did: z.ZodString;
|
|
58
|
+
gc: z.ZodString;
|
|
59
|
+
gr: z.ZodOptional<z.ZodString>;
|
|
60
|
+
}, "strip", z.ZodTypeAny, {
|
|
61
|
+
did: string;
|
|
62
|
+
id: string;
|
|
63
|
+
v: string;
|
|
64
|
+
gc: string;
|
|
65
|
+
gr?: string | undefined;
|
|
66
|
+
}, {
|
|
67
|
+
did: string;
|
|
68
|
+
id: string;
|
|
69
|
+
v: string;
|
|
70
|
+
gc: string;
|
|
71
|
+
gr?: string | undefined;
|
|
72
|
+
}>;
|
|
73
|
+
export declare function serializeKWSExternalPayloadV2(payload: KWSExternalPayloadV2): string;
|
|
74
|
+
export declare function parseKWSExternalPayloadV2(raw: string): KWSExternalPayloadV2;
|
|
75
|
+
//# sourceMappingURL=external-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-payload.d.ts","sourceRoot":"","sources":["../../../../src/api/age-assurance/kws/external-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,+BAA+B,MAAM,CAAA;AAElD;;;;;;GAMG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;CAAG;AAE7D,oBAAY,yBAAyB;IACnC,EAAE,MAAM;IACR,EAAE,MAAM;CACT;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,6BAOzD;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,0BAA0B;;;;;;;;;EAGrC,CAAA;AAEF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAS3E;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAMR;AAED;;;;;;;GAOG;AACH,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,MAAM,GAET,CAAC,oBAAoB,GAAG;IAAE,OAAO,EAAE,yBAAyB,CAAC,EAAE,CAAA;CAAE,CAAC,GAClE,oBAAoB,CAYvB;AAED;;6BAE6B;AAE7B,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,yBAAyB,CAAC,EAAE,CAAA;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;EAMrC,CAAA;AAEF,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAuBR;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAiB3E"}
|