@atproto/api 0.18.3 → 0.18.4

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 CHANGED
@@ -1,5 +1,15 @@
1
1
  # @atproto/api
2
2
 
3
+ ## 0.18.4
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 [[`bcae2b7`](https://github.com/bluesky-social/atproto/commit/bcae2b77b68da6dc2ec202651c8bf41fd5769f69)]:
10
+ - @atproto/syntax@0.4.2
11
+ - @atproto/common-web@0.4.6
12
+
3
13
  ## 0.18.3
4
14
 
5
15
  ### Patch Changes
@@ -0,0 +1,29 @@
1
+ import { AppBskyAgeassuranceDefs } from './client';
2
+ export type AgeAssuranceRuleID = Exclude<AppBskyAgeassuranceDefs.ConfigRegionRuleDefault['$type'] | AppBskyAgeassuranceDefs.ConfigRegionRuleIfDeclaredOverAge['$type'] | AppBskyAgeassuranceDefs.ConfigRegionRuleIfDeclaredUnderAge['$type'] | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAssuredOverAge['$type'] | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAssuredUnderAge['$type'] | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAccountNewerThan['$type'] | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAccountOlderThan['$type'], undefined>;
3
+ export declare const ageAssuranceRuleIDs: Record<string, AgeAssuranceRuleID>;
4
+ /**
5
+ * Returns the first matched region configuration based on the provided geolocation.
6
+ */
7
+ export declare function getAgeAssuranceRegionConfig(config: AppBskyAgeassuranceDefs.Config, geolocation: {
8
+ countryCode: string;
9
+ regionCode?: string;
10
+ }): AppBskyAgeassuranceDefs.ConfigRegion | undefined;
11
+ export declare function computeAgeAssuranceRegionAccess(region: AppBskyAgeassuranceDefs.ConfigRegion, data: {
12
+ /**
13
+ * The account creation date in ISO 8601 format. Only checked if we
14
+ * don't have an assured age, such as on the client.
15
+ */
16
+ accountCreatedAt?: string;
17
+ /**
18
+ * The user's declared age
19
+ */
20
+ declaredAge?: number;
21
+ /**
22
+ * The user's minimum age as assured by a trusted third party.
23
+ */
24
+ assuredAge?: number;
25
+ } | undefined): {
26
+ access: AppBskyAgeassuranceDefs.Access;
27
+ reason: AgeAssuranceRuleID;
28
+ } | undefined;
29
+ //# sourceMappingURL=age-assurance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"age-assurance.d.ts","sourceRoot":"","sources":["../src/age-assurance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAGlD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CACpC,uBAAuB,CAAC,uBAAuB,CAAC,OAAO,CAAC,GACxD,uBAAuB,CAAC,iCAAiC,CAAC,OAAO,CAAC,GAClE,uBAAuB,CAAC,kCAAkC,CAAC,OAAO,CAAC,GACnE,uBAAuB,CAAC,gCAAgC,CAAC,OAAO,CAAC,GACjE,uBAAuB,CAAC,iCAAiC,CAAC,OAAO,CAAC,GAClE,uBAAuB,CAAC,kCAAkC,CAAC,OAAO,CAAC,GACnE,uBAAuB,CAAC,kCAAkC,CAAC,OAAO,CAAC,EACrE,SAAS,CACV,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAQlE,CAAA;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,uBAAuB,CAAC,MAAM,EACtC,WAAW,EAAE;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,GACA,uBAAuB,CAAC,YAAY,GAAG,SAAS,CAOlD;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,uBAAuB,CAAC,YAAY,EAC5C,IAAI,EACA;IACE;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,GACD,SAAS,GAEX;IACE,MAAM,EAAE,uBAAuB,CAAC,MAAM,CAAA;IACtC,MAAM,EAAE,kBAAkB,CAAA;CAC3B,GACD,SAAS,CAsEZ"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ageAssuranceRuleIDs = void 0;
4
+ exports.getAgeAssuranceRegionConfig = getAgeAssuranceRegionConfig;
5
+ exports.computeAgeAssuranceRegionAccess = computeAgeAssuranceRegionAccess;
6
+ const client_1 = require("./client");
7
+ const lexicons_1 = require("./client/lexicons");
8
+ exports.ageAssuranceRuleIDs = {
9
+ Default: `${lexicons_1.ids.AppBskyAgeassuranceDefs}#configRegionRuleDefault`,
10
+ IfDeclaredOverAge: `${lexicons_1.ids.AppBskyAgeassuranceDefs}#configRegionRuleIfDeclaredOverAge`,
11
+ IfDeclaredUnderAge: `${lexicons_1.ids.AppBskyAgeassuranceDefs}#configRegionRuleIfDeclaredUnderAge`,
12
+ IfAssuredOverAge: `${lexicons_1.ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAssuredOverAge`,
13
+ IfAssuredUnderAge: `${lexicons_1.ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAssuredUnderAge`,
14
+ IfAccountNewerThan: `${lexicons_1.ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAccountNewerThan`,
15
+ IfAccountOlderThan: `${lexicons_1.ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAccountOlderThan`,
16
+ };
17
+ /**
18
+ * Returns the first matched region configuration based on the provided geolocation.
19
+ */
20
+ function getAgeAssuranceRegionConfig(config, geolocation) {
21
+ const { regions } = config;
22
+ return regions.find(({ countryCode, regionCode }) => {
23
+ if (countryCode === geolocation.countryCode) {
24
+ return !regionCode || regionCode === geolocation.regionCode;
25
+ }
26
+ });
27
+ }
28
+ function computeAgeAssuranceRegionAccess(region, data) {
29
+ // first match wins
30
+ for (const rule of region.rules) {
31
+ if (client_1.AppBskyAgeassuranceDefs.isConfigRegionRuleIfAccountNewerThan(rule)) {
32
+ if (data?.accountCreatedAt && !data?.assuredAge) {
33
+ const accountCreatedAt = new Date(data.accountCreatedAt);
34
+ const threshold = new Date(rule.date);
35
+ if (accountCreatedAt >= threshold) {
36
+ return {
37
+ access: rule.access,
38
+ reason: rule.$type,
39
+ };
40
+ }
41
+ }
42
+ }
43
+ else if (client_1.AppBskyAgeassuranceDefs.isConfigRegionRuleIfAccountOlderThan(rule)) {
44
+ if (data?.accountCreatedAt && !data?.assuredAge) {
45
+ const accountCreatedAt = new Date(data.accountCreatedAt);
46
+ const threshold = new Date(rule.date);
47
+ if (accountCreatedAt < threshold) {
48
+ return {
49
+ access: rule.access,
50
+ reason: rule.$type,
51
+ };
52
+ }
53
+ }
54
+ }
55
+ else if (client_1.AppBskyAgeassuranceDefs.isConfigRegionRuleIfDeclaredOverAge(rule)) {
56
+ if (data?.declaredAge !== undefined && data.declaredAge >= rule.age) {
57
+ return {
58
+ access: rule.access,
59
+ reason: rule.$type,
60
+ };
61
+ }
62
+ }
63
+ else if (client_1.AppBskyAgeassuranceDefs.isConfigRegionRuleIfDeclaredUnderAge(rule)) {
64
+ if (data?.declaredAge !== undefined && data.declaredAge < rule.age) {
65
+ return {
66
+ access: rule.access,
67
+ reason: rule.$type,
68
+ };
69
+ }
70
+ }
71
+ else if (client_1.AppBskyAgeassuranceDefs.isConfigRegionRuleIfAssuredOverAge(rule)) {
72
+ if (data?.assuredAge && data.assuredAge >= rule.age) {
73
+ return {
74
+ access: rule.access,
75
+ reason: rule.$type,
76
+ };
77
+ }
78
+ }
79
+ else if (client_1.AppBskyAgeassuranceDefs.isConfigRegionRuleIfAssuredUnderAge(rule)) {
80
+ if (data?.assuredAge && data.assuredAge < rule.age) {
81
+ return {
82
+ access: rule.access,
83
+ reason: rule.$type,
84
+ };
85
+ }
86
+ }
87
+ else if (client_1.AppBskyAgeassuranceDefs.isConfigRegionRuleDefault(rule)) {
88
+ return {
89
+ access: rule.access,
90
+ reason: rule.$type,
91
+ };
92
+ }
93
+ }
94
+ }
95
+ //# sourceMappingURL=age-assurance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"age-assurance.js","sourceRoot":"","sources":["../src/age-assurance.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppBskyAgeassuranceDefs } from './client'\nimport { ids } from './client/lexicons'\n\nexport type AgeAssuranceRuleID = Exclude<\n | AppBskyAgeassuranceDefs.ConfigRegionRuleDefault['$type']\n | AppBskyAgeassuranceDefs.ConfigRegionRuleIfDeclaredOverAge['$type']\n | AppBskyAgeassuranceDefs.ConfigRegionRuleIfDeclaredUnderAge['$type']\n | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAssuredOverAge['$type']\n | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAssuredUnderAge['$type']\n | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAccountNewerThan['$type']\n | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAccountOlderThan['$type'],\n undefined\n>\n\nexport const ageAssuranceRuleIDs: Record<string, AgeAssuranceRuleID> = {\n Default: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleDefault`,\n IfDeclaredOverAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfDeclaredOverAge`,\n IfDeclaredUnderAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfDeclaredUnderAge`,\n IfAssuredOverAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAssuredOverAge`,\n IfAssuredUnderAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAssuredUnderAge`,\n IfAccountNewerThan: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAccountNewerThan`,\n IfAccountOlderThan: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAccountOlderThan`,\n}\n\n/**\n * Returns the first matched region configuration based on the provided geolocation.\n */\nexport function getAgeAssuranceRegionConfig(\n config: AppBskyAgeassuranceDefs.Config,\n geolocation: {\n countryCode: string\n regionCode?: string\n },\n): AppBskyAgeassuranceDefs.ConfigRegion | undefined {\n const { regions } = config\n return regions.find(({ countryCode, regionCode }) => {\n if (countryCode === geolocation.countryCode) {\n return !regionCode || regionCode === geolocation.regionCode\n }\n })\n}\n\nexport function computeAgeAssuranceRegionAccess(\n region: AppBskyAgeassuranceDefs.ConfigRegion,\n data:\n | {\n /**\n * The account creation date in ISO 8601 format. Only checked if we\n * don't have an assured age, such as on the client.\n */\n accountCreatedAt?: string\n /**\n * The user's declared age\n */\n declaredAge?: number\n /**\n * The user's minimum age as assured by a trusted third party.\n */\n assuredAge?: number\n }\n | undefined,\n):\n | {\n access: AppBskyAgeassuranceDefs.Access\n reason: AgeAssuranceRuleID\n }\n | undefined {\n // first match wins\n for (const rule of region.rules) {\n if (AppBskyAgeassuranceDefs.isConfigRegionRuleIfAccountNewerThan(rule)) {\n if (data?.accountCreatedAt && !data?.assuredAge) {\n const accountCreatedAt = new Date(data.accountCreatedAt)\n const threshold = new Date(rule.date)\n if (accountCreatedAt >= threshold) {\n return {\n access: rule.access,\n reason: rule.$type,\n }\n }\n }\n } else if (\n AppBskyAgeassuranceDefs.isConfigRegionRuleIfAccountOlderThan(rule)\n ) {\n if (data?.accountCreatedAt && !data?.assuredAge) {\n const accountCreatedAt = new Date(data.accountCreatedAt)\n const threshold = new Date(rule.date)\n if (accountCreatedAt < threshold) {\n return {\n access: rule.access,\n reason: rule.$type,\n }\n }\n }\n } else if (\n AppBskyAgeassuranceDefs.isConfigRegionRuleIfDeclaredOverAge(rule)\n ) {\n if (data?.declaredAge !== undefined && data.declaredAge >= rule.age) {\n return {\n access: rule.access,\n reason: rule.$type,\n }\n }\n } else if (\n AppBskyAgeassuranceDefs.isConfigRegionRuleIfDeclaredUnderAge(rule)\n ) {\n if (data?.declaredAge !== undefined && data.declaredAge < rule.age) {\n return {\n access: rule.access,\n reason: rule.$type,\n }\n }\n } else if (\n AppBskyAgeassuranceDefs.isConfigRegionRuleIfAssuredOverAge(rule)\n ) {\n if (data?.assuredAge && data.assuredAge >= rule.age) {\n return {\n access: rule.access,\n reason: rule.$type,\n }\n }\n } else if (\n AppBskyAgeassuranceDefs.isConfigRegionRuleIfAssuredUnderAge(rule)\n ) {\n if (data?.assuredAge && data.assuredAge < rule.age) {\n return {\n access: rule.access,\n reason: rule.$type,\n }\n }\n } else if (AppBskyAgeassuranceDefs.isConfigRegionRuleDefault(rule)) {\n return {\n access: rule.access,\n reason: rule.$type,\n }\n }\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=age-assurance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"age-assurance.test.d.ts","sourceRoot":"","sources":["../src/age-assurance.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const age_assurance_1 = require("./age-assurance");
5
+ (0, globals_1.describe)('age-assurance', () => {
6
+ (0, globals_1.describe)('getAgeAssuranceRegionConfig', () => {
7
+ const config = {
8
+ regions: [
9
+ {
10
+ countryCode: 'US',
11
+ regionCode: 'CA',
12
+ rules: [],
13
+ },
14
+ {
15
+ countryCode: 'US',
16
+ rules: [],
17
+ },
18
+ ],
19
+ };
20
+ (0, globals_1.it)('should find region by country code only', () => {
21
+ const result = (0, age_assurance_1.getAgeAssuranceRegionConfig)(config, {
22
+ countryCode: 'US',
23
+ });
24
+ (0, globals_1.expect)(result).toEqual({
25
+ countryCode: 'US',
26
+ rules: [],
27
+ });
28
+ });
29
+ (0, globals_1.it)('should find region by country code and region code', () => {
30
+ const result = (0, age_assurance_1.getAgeAssuranceRegionConfig)(config, {
31
+ countryCode: 'US',
32
+ regionCode: 'CA',
33
+ });
34
+ (0, globals_1.expect)(result).toEqual({
35
+ countryCode: 'US',
36
+ regionCode: 'CA',
37
+ rules: [],
38
+ });
39
+ });
40
+ (0, globals_1.it)('should return undefined when no matching region found', () => {
41
+ const result = (0, age_assurance_1.getAgeAssuranceRegionConfig)(config, {
42
+ countryCode: 'GB',
43
+ });
44
+ (0, globals_1.expect)(result).toBeUndefined();
45
+ });
46
+ });
47
+ (0, globals_1.describe)('computeAgeAssuranceRegionAccess', () => {
48
+ const region = {
49
+ countryCode: 'US',
50
+ rules: [
51
+ {
52
+ $type: age_assurance_1.ageAssuranceRuleIDs.IfAccountNewerThan,
53
+ date: '2025-12-10T00:00:00Z',
54
+ access: 'none',
55
+ },
56
+ {
57
+ $type: age_assurance_1.ageAssuranceRuleIDs.IfAssuredOverAge,
58
+ age: 18,
59
+ access: 'full',
60
+ },
61
+ {
62
+ $type: age_assurance_1.ageAssuranceRuleIDs.IfAssuredOverAge,
63
+ age: 16,
64
+ access: 'safe',
65
+ },
66
+ {
67
+ $type: age_assurance_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
68
+ age: 16,
69
+ access: 'safe',
70
+ },
71
+ {
72
+ $type: age_assurance_1.ageAssuranceRuleIDs.Default,
73
+ access: 'none',
74
+ },
75
+ ],
76
+ };
77
+ (0, globals_1.it)('should apply default if no data provided', () => {
78
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {});
79
+ (0, globals_1.expect)(result).toEqual({
80
+ access: 'none',
81
+ reason: age_assurance_1.ageAssuranceRuleIDs.Default,
82
+ });
83
+ });
84
+ (0, globals_1.describe)('IfAccountNewerThan', () => {
85
+ (0, globals_1.it)('should block accounts created after threshold', () => {
86
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {
87
+ accountCreatedAt: new Date(2025, 11, 15).toISOString(),
88
+ declaredAge: 18,
89
+ });
90
+ (0, globals_1.expect)(result).toEqual({
91
+ access: 'none',
92
+ reason: age_assurance_1.ageAssuranceRuleIDs.IfAccountNewerThan,
93
+ });
94
+ });
95
+ (0, globals_1.it)('should allow accounts created before threshold', () => {
96
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {
97
+ accountCreatedAt: new Date(2025, 10, 1).toISOString(),
98
+ declaredAge: 18,
99
+ });
100
+ (0, globals_1.expect)(result).toEqual({
101
+ access: 'safe',
102
+ reason: age_assurance_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
103
+ });
104
+ });
105
+ (0, globals_1.it)('should allow accounts created exactly at threshold', () => {
106
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {
107
+ accountCreatedAt: new Date(2025, 11, 1).toISOString(),
108
+ declaredAge: 18,
109
+ });
110
+ (0, globals_1.expect)(result).toEqual({
111
+ access: 'safe',
112
+ reason: age_assurance_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
113
+ });
114
+ });
115
+ (0, globals_1.it)('should not apply rule when accountCreatedAt is not provided', () => {
116
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {
117
+ declaredAge: 15,
118
+ });
119
+ (0, globals_1.expect)(result).toEqual({
120
+ access: 'none',
121
+ reason: age_assurance_1.ageAssuranceRuleIDs.Default,
122
+ });
123
+ });
124
+ (0, globals_1.it)('should not apply rule when assuredAge is present', () => {
125
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {
126
+ accountCreatedAt: new Date(2025, 11, 15).toISOString(),
127
+ assuredAge: 20,
128
+ });
129
+ (0, globals_1.expect)(result).toEqual({
130
+ access: 'full',
131
+ reason: age_assurance_1.ageAssuranceRuleIDs.IfAssuredOverAge,
132
+ });
133
+ });
134
+ });
135
+ (0, globals_1.describe)('IfDeclaredOverAge rule', () => {
136
+ (0, globals_1.it)('should allow users at or above age threshold', () => {
137
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {
138
+ declaredAge: 18,
139
+ });
140
+ (0, globals_1.expect)(result).toEqual({
141
+ access: 'safe',
142
+ reason: age_assurance_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
143
+ });
144
+ });
145
+ (0, globals_1.it)('should allow users above age threshold', () => {
146
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {
147
+ declaredAge: 25,
148
+ });
149
+ (0, globals_1.expect)(result).toEqual({
150
+ access: 'safe',
151
+ reason: age_assurance_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
152
+ });
153
+ });
154
+ (0, globals_1.it)('should not allow users below age threshold', () => {
155
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {
156
+ declaredAge: 17,
157
+ });
158
+ (0, globals_1.expect)(result).toEqual({
159
+ access: 'safe',
160
+ reason: age_assurance_1.ageAssuranceRuleIDs.IfDeclaredOverAge,
161
+ });
162
+ });
163
+ });
164
+ (0, globals_1.describe)('IfAssuredOverAge rule', () => {
165
+ (0, globals_1.it)('should allow users at or above assured age threshold', () => {
166
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {
167
+ assuredAge: 18,
168
+ });
169
+ (0, globals_1.expect)(result).toEqual({
170
+ access: 'full',
171
+ reason: age_assurance_1.ageAssuranceRuleIDs.IfAssuredOverAge,
172
+ });
173
+ });
174
+ (0, globals_1.it)('should not allow users below assured age threshold', () => {
175
+ const result = (0, age_assurance_1.computeAgeAssuranceRegionAccess)(region, {
176
+ assuredAge: 17,
177
+ });
178
+ (0, globals_1.expect)(result).toEqual({
179
+ access: 'safe',
180
+ reason: age_assurance_1.ageAssuranceRuleIDs.IfAssuredOverAge,
181
+ });
182
+ });
183
+ });
184
+ });
185
+ });
186
+ //# sourceMappingURL=age-assurance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"age-assurance.test.js","sourceRoot":"","sources":["../src/age-assurance.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from '@jest/globals'\nimport {\n ageAssuranceRuleIDs,\n computeAgeAssuranceRegionAccess,\n getAgeAssuranceRegionConfig,\n} from './age-assurance'\nimport { AppBskyAgeassuranceDefs } from './client'\n\ndescribe('age-assurance', () => {\n describe('getAgeAssuranceRegionConfig', () => {\n const config: AppBskyAgeassuranceDefs.Config = {\n regions: [\n {\n countryCode: 'US',\n regionCode: 'CA',\n rules: [],\n },\n {\n countryCode: 'US',\n rules: [],\n },\n ],\n }\n\n it('should find region by country code only', () => {\n const result = getAgeAssuranceRegionConfig(config, {\n countryCode: 'US',\n })\n\n expect(result).toEqual({\n countryCode: 'US',\n rules: [],\n })\n })\n\n it('should find region by country code and region code', () => {\n const result = getAgeAssuranceRegionConfig(config, {\n countryCode: 'US',\n regionCode: 'CA',\n })\n\n expect(result).toEqual({\n countryCode: 'US',\n regionCode: 'CA',\n rules: [],\n })\n })\n\n it('should return undefined when no matching region found', () => {\n const result = getAgeAssuranceRegionConfig(config, {\n countryCode: 'GB',\n })\n\n expect(result).toBeUndefined()\n })\n })\n\n describe('computeAgeAssuranceRegionAccess', () => {\n const region: AppBskyAgeassuranceDefs.ConfigRegion = {\n countryCode: 'US',\n rules: [\n {\n $type: ageAssuranceRuleIDs.IfAccountNewerThan,\n date: '2025-12-10T00:00:00Z',\n access: 'none',\n },\n {\n $type: ageAssuranceRuleIDs.IfAssuredOverAge,\n age: 18,\n access: 'full',\n },\n {\n $type: ageAssuranceRuleIDs.IfAssuredOverAge,\n age: 16,\n access: 'safe',\n },\n {\n $type: ageAssuranceRuleIDs.IfDeclaredOverAge,\n age: 16,\n access: 'safe',\n },\n {\n $type: ageAssuranceRuleIDs.Default,\n access: 'none',\n },\n ],\n }\n\n it('should apply default if no data provided', () => {\n const result = computeAgeAssuranceRegionAccess(region, {})\n\n expect(result).toEqual({\n access: 'none',\n reason: ageAssuranceRuleIDs.Default,\n })\n })\n\n describe('IfAccountNewerThan', () => {\n it('should block accounts created after threshold', () => {\n const result = computeAgeAssuranceRegionAccess(region, {\n accountCreatedAt: new Date(2025, 11, 15).toISOString(),\n declaredAge: 18,\n })\n expect(result).toEqual({\n access: 'none',\n reason: ageAssuranceRuleIDs.IfAccountNewerThan,\n })\n })\n\n it('should allow accounts created before threshold', () => {\n const result = computeAgeAssuranceRegionAccess(region, {\n accountCreatedAt: new Date(2025, 10, 1).toISOString(),\n declaredAge: 18,\n })\n expect(result).toEqual({\n access: 'safe',\n reason: ageAssuranceRuleIDs.IfDeclaredOverAge,\n })\n })\n\n it('should allow accounts created exactly at threshold', () => {\n const result = computeAgeAssuranceRegionAccess(region, {\n accountCreatedAt: new Date(2025, 11, 1).toISOString(),\n declaredAge: 18,\n })\n expect(result).toEqual({\n access: 'safe',\n reason: ageAssuranceRuleIDs.IfDeclaredOverAge,\n })\n })\n\n it('should not apply rule when accountCreatedAt is not provided', () => {\n const result = computeAgeAssuranceRegionAccess(region, {\n declaredAge: 15,\n })\n expect(result).toEqual({\n access: 'none',\n reason: ageAssuranceRuleIDs.Default,\n })\n })\n\n it('should not apply rule when assuredAge is present', () => {\n const result = computeAgeAssuranceRegionAccess(region, {\n accountCreatedAt: new Date(2025, 11, 15).toISOString(),\n assuredAge: 20,\n })\n expect(result).toEqual({\n access: 'full',\n reason: ageAssuranceRuleIDs.IfAssuredOverAge,\n })\n })\n })\n\n describe('IfDeclaredOverAge rule', () => {\n it('should allow users at or above age threshold', () => {\n const result = computeAgeAssuranceRegionAccess(region, {\n declaredAge: 18,\n })\n\n expect(result).toEqual({\n access: 'safe',\n reason: ageAssuranceRuleIDs.IfDeclaredOverAge,\n })\n })\n\n it('should allow users above age threshold', () => {\n const result = computeAgeAssuranceRegionAccess(region, {\n declaredAge: 25,\n })\n\n expect(result).toEqual({\n access: 'safe',\n reason: ageAssuranceRuleIDs.IfDeclaredOverAge,\n })\n })\n\n it('should not allow users below age threshold', () => {\n const result = computeAgeAssuranceRegionAccess(region, {\n declaredAge: 17,\n })\n\n expect(result).toEqual({\n access: 'safe',\n reason: ageAssuranceRuleIDs.IfDeclaredOverAge,\n })\n })\n })\n\n describe('IfAssuredOverAge rule', () => {\n it('should allow users at or above assured age threshold', () => {\n const result = computeAgeAssuranceRegionAccess(region, {\n assuredAge: 18,\n })\n\n expect(result).toEqual({\n access: 'full',\n reason: ageAssuranceRuleIDs.IfAssuredOverAge,\n })\n })\n\n it('should not allow users below assured age threshold', () => {\n const result = computeAgeAssuranceRegionAccess(region, {\n assuredAge: 17,\n })\n\n expect(result).toEqual({\n access: 'safe',\n reason: ageAssuranceRuleIDs.IfAssuredOverAge,\n })\n })\n })\n })\n})\n"]}
package/dist/agent.d.ts CHANGED
@@ -144,7 +144,7 @@ export declare class Agent extends XrpcClient {
144
144
  cid: string;
145
145
  }>;
146
146
  unblockModList(uri: string): Promise<void>;
147
- updateSeenNotifications(seenAt?: string): Promise<import("./client/types/app/bsky/notification/updateSeen").Response>;
147
+ updateSeenNotifications(seenAt?: `${string}-${string}-${string}T${string}:${string}:${string}Z`): Promise<import("./client/types/app/bsky/notification/updateSeen").Response>;
148
148
  getPreferences(): Promise<BskyPreferences>;
149
149
  overwriteSavedFeeds(savedFeeds: AppBskyActorDefs.SavedFeed[]): Promise<AppBskyActorDefs.SavedFeed[]>;
150
150
  updateSavedFeeds(savedFeedsToUpdate: AppBskyActorDefs.SavedFeed[]): Promise<AppBskyActorDefs.SavedFeed[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -16,6 +16,7 @@ export * from './rich-text/util';
16
16
  export * from './moderation';
17
17
  export * from './moderation/types';
18
18
  export * from './mocker';
19
+ export * from './age-assurance';
19
20
  export { DEFAULT_LABEL_SETTINGS, LABELS } from './moderation/const/labels';
20
21
  export { Agent } from './agent';
21
22
  export { AtpAgent, type AtpAgentOptions } from './atp-agent';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAG3C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EACL,OAAO,EACP,eAAe,EACf,SAAS,EACT,SAAS,EACT,YAAY,GACb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,OAAO;AACL,kBAAkB;AAClB,QAAQ,IAAI,OAAO,GACpB,MAAM,aAAa,CAAA;AAIpB,eAAO,MAAM,QAAQ,UAAiC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAG3C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EACL,OAAO,EACP,eAAe,EACf,SAAS,EACT,SAAS,EACT,YAAY,GACb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,OAAO;AACL,kBAAkB;AAClB,QAAQ,IAAI,OAAO,GACpB,MAAM,aAAa,CAAA;AAIpB,eAAO,MAAM,QAAQ,UAAiC,CAAA"}
package/dist/index.js CHANGED
@@ -42,6 +42,7 @@ __exportStar(require("./rich-text/util"), exports);
42
42
  __exportStar(require("./moderation"), exports);
43
43
  __exportStar(require("./moderation/types"), exports);
44
44
  __exportStar(require("./mocker"), exports);
45
+ __exportStar(require("./age-assurance"), exports);
45
46
  var labels_1 = require("./moderation/const/labels");
46
47
  Object.defineProperty(exports, "DEFAULT_LABEL_SETTINGS", { enumerable: true, get: function () { return labels_1.DEFAULT_LABEL_SETTINGS; } });
47
48
  Object.defineProperty(exports, "LABELS", { enumerable: true, get: function () { return labels_1.LABELS; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8CAA2C;AAC3C,gDAAgE;AAEhE,0CAAuC;AAA9B,+FAAA,KAAK,OAAA;AACd,4CAMyB;AALvB,kGAAA,OAAO,OAAA;AACP,0GAAA,eAAe,OAAA;AACf,oGAAA,SAAS,OAAA;AACT,oGAAA,SAAS,OAAA;AACT,uGAAA,YAAY,OAAA;AAEd,kDAAmD;AAA1C,2GAAA,aAAa,OAAA;AACtB,0CAAuB;AACvB,0CAAuB;AACvB,yCAAsB;AACtB,2CAAwB;AACxB,8CAA2C;AAAlC,mGAAA,OAAO,OAAA;AAEhB,sCAA2C;AAAlC,mGAAA,WAAW,OAAA;AACpB,wDAAqC;AACrC,2DAAwC;AACxC,sDAAmC;AACnC,mDAAgC;AAChC,+CAA4B;AAC5B,qDAAkC;AAClC,2CAAwB;AACxB,oDAA0E;AAAjE,gHAAA,sBAAsB,OAAA;AAAE,gGAAA,MAAM,OAAA;AACvC,iCAA+B;AAAtB,8FAAA,KAAK,OAAA;AAEd,yCAA4D;AAAnD,qGAAA,QAAQ,OAAA;AACjB,yCAA+C;AAAtC,8GAAA,iBAAiB,OAAA;AAC1B,2CAAwC;AAA/B,uGAAA,SAAS,OAAA;AAElB,yCAGoB;AAFlB,kBAAkB;AAClB,oGAAA,QAAQ,OAAW;AAGrB,+EAA+E;AAC/E,2BAA2B;AACd,QAAA,QAAQ,GAAG,IAAI,kBAAQ,CAAC,mBAAgB,CAAC,CAAA","sourcesContent":["import { Lexicons } from '@atproto/lexicon'\nimport { lexicons as internalLexicons } from './client/lexicons'\n\nexport { AtUri } from '@atproto/syntax'\nexport {\n BlobRef,\n jsonStringToLex,\n jsonToLex,\n lexToJson,\n stringifyLex,\n} from '@atproto/lexicon'\nexport { parseLanguage } from '@atproto/common-web'\nexport * from './types'\nexport * from './const'\nexport * from './util'\nexport * from './client'\nexport { schemas } from './client/lexicons'\nexport type { $Typed, Un$Typed } from './client/util'\nexport { asPredicate } from './client/util'\nexport * from './rich-text/rich-text'\nexport * from './rich-text/sanitization'\nexport * from './rich-text/unicode'\nexport * from './rich-text/util'\nexport * from './moderation'\nexport * from './moderation/types'\nexport * from './mocker'\nexport { DEFAULT_LABEL_SETTINGS, LABELS } from './moderation/const/labels'\nexport { Agent } from './agent'\n\nexport { AtpAgent, type AtpAgentOptions } from './atp-agent'\nexport { CredentialSession } from './atp-agent'\nexport { BskyAgent } from './bsky-agent'\n\nexport {\n /** @deprecated */\n AtpAgent as default,\n} from './atp-agent'\n\n// Expose a copy to prevent alteration of the internal Lexicon instance used by\n// the AtpBaseClient class.\nexport const lexicons = new Lexicons(internalLexicons)\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8CAA2C;AAC3C,gDAAgE;AAEhE,0CAAuC;AAA9B,+FAAA,KAAK,OAAA;AACd,4CAMyB;AALvB,kGAAA,OAAO,OAAA;AACP,0GAAA,eAAe,OAAA;AACf,oGAAA,SAAS,OAAA;AACT,oGAAA,SAAS,OAAA;AACT,uGAAA,YAAY,OAAA;AAEd,kDAAmD;AAA1C,2GAAA,aAAa,OAAA;AACtB,0CAAuB;AACvB,0CAAuB;AACvB,yCAAsB;AACtB,2CAAwB;AACxB,8CAA2C;AAAlC,mGAAA,OAAO,OAAA;AAEhB,sCAA2C;AAAlC,mGAAA,WAAW,OAAA;AACpB,wDAAqC;AACrC,2DAAwC;AACxC,sDAAmC;AACnC,mDAAgC;AAChC,+CAA4B;AAC5B,qDAAkC;AAClC,2CAAwB;AACxB,kDAA+B;AAC/B,oDAA0E;AAAjE,gHAAA,sBAAsB,OAAA;AAAE,gGAAA,MAAM,OAAA;AACvC,iCAA+B;AAAtB,8FAAA,KAAK,OAAA;AAEd,yCAA4D;AAAnD,qGAAA,QAAQ,OAAA;AACjB,yCAA+C;AAAtC,8GAAA,iBAAiB,OAAA;AAC1B,2CAAwC;AAA/B,uGAAA,SAAS,OAAA;AAElB,yCAGoB;AAFlB,kBAAkB;AAClB,oGAAA,QAAQ,OAAW;AAGrB,+EAA+E;AAC/E,2BAA2B;AACd,QAAA,QAAQ,GAAG,IAAI,kBAAQ,CAAC,mBAAgB,CAAC,CAAA","sourcesContent":["import { Lexicons } from '@atproto/lexicon'\nimport { lexicons as internalLexicons } from './client/lexicons'\n\nexport { AtUri } from '@atproto/syntax'\nexport {\n BlobRef,\n jsonStringToLex,\n jsonToLex,\n lexToJson,\n stringifyLex,\n} from '@atproto/lexicon'\nexport { parseLanguage } from '@atproto/common-web'\nexport * from './types'\nexport * from './const'\nexport * from './util'\nexport * from './client'\nexport { schemas } from './client/lexicons'\nexport type { $Typed, Un$Typed } from './client/util'\nexport { asPredicate } from './client/util'\nexport * from './rich-text/rich-text'\nexport * from './rich-text/sanitization'\nexport * from './rich-text/unicode'\nexport * from './rich-text/util'\nexport * from './moderation'\nexport * from './moderation/types'\nexport * from './mocker'\nexport * from './age-assurance'\nexport { DEFAULT_LABEL_SETTINGS, LABELS } from './moderation/const/labels'\nexport { Agent } from './agent'\n\nexport { AtpAgent, type AtpAgentOptions } from './atp-agent'\nexport { CredentialSession } from './atp-agent'\nexport { BskyAgent } from './bsky-agent'\n\nexport {\n /** @deprecated */\n AtpAgent as default,\n} from './atp-agent'\n\n// Expose a copy to prevent alteration of the internal Lexicon instance used by\n// the AtpBaseClient class.\nexport const lexicons = new Lexicons(internalLexicons)\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/api",
3
- "version": "0.18.3",
3
+ "version": "0.18.4",
4
4
  "license": "MIT",
5
5
  "description": "Client library for atproto and Bluesky",
6
6
  "keywords": [
@@ -21,12 +21,13 @@
21
21
  "multiformats": "^9.9.0",
22
22
  "tlds": "^1.234.0",
23
23
  "zod": "^3.23.8",
24
- "@atproto/common-web": "^0.4.5",
24
+ "@atproto/common-web": "^0.4.6",
25
25
  "@atproto/lexicon": "^0.5.2",
26
- "@atproto/syntax": "^0.4.1",
26
+ "@atproto/syntax": "^0.4.2",
27
27
  "@atproto/xrpc": "^0.7.6"
28
28
  },
29
29
  "devDependencies": {
30
+ "@jest/globals": "^28.1.3",
30
31
  "jest": "^28.1.2",
31
32
  "prettier": "^3.2.5",
32
33
  "typescript": "^5.6.3",
@@ -0,0 +1,213 @@
1
+ import { describe, expect, it } from '@jest/globals'
2
+ import {
3
+ ageAssuranceRuleIDs,
4
+ computeAgeAssuranceRegionAccess,
5
+ getAgeAssuranceRegionConfig,
6
+ } from './age-assurance'
7
+ import { AppBskyAgeassuranceDefs } from './client'
8
+
9
+ describe('age-assurance', () => {
10
+ describe('getAgeAssuranceRegionConfig', () => {
11
+ const config: AppBskyAgeassuranceDefs.Config = {
12
+ regions: [
13
+ {
14
+ countryCode: 'US',
15
+ regionCode: 'CA',
16
+ rules: [],
17
+ },
18
+ {
19
+ countryCode: 'US',
20
+ rules: [],
21
+ },
22
+ ],
23
+ }
24
+
25
+ it('should find region by country code only', () => {
26
+ const result = getAgeAssuranceRegionConfig(config, {
27
+ countryCode: 'US',
28
+ })
29
+
30
+ expect(result).toEqual({
31
+ countryCode: 'US',
32
+ rules: [],
33
+ })
34
+ })
35
+
36
+ it('should find region by country code and region code', () => {
37
+ const result = getAgeAssuranceRegionConfig(config, {
38
+ countryCode: 'US',
39
+ regionCode: 'CA',
40
+ })
41
+
42
+ expect(result).toEqual({
43
+ countryCode: 'US',
44
+ regionCode: 'CA',
45
+ rules: [],
46
+ })
47
+ })
48
+
49
+ it('should return undefined when no matching region found', () => {
50
+ const result = getAgeAssuranceRegionConfig(config, {
51
+ countryCode: 'GB',
52
+ })
53
+
54
+ expect(result).toBeUndefined()
55
+ })
56
+ })
57
+
58
+ describe('computeAgeAssuranceRegionAccess', () => {
59
+ const region: AppBskyAgeassuranceDefs.ConfigRegion = {
60
+ countryCode: 'US',
61
+ rules: [
62
+ {
63
+ $type: ageAssuranceRuleIDs.IfAccountNewerThan,
64
+ date: '2025-12-10T00:00:00Z',
65
+ access: 'none',
66
+ },
67
+ {
68
+ $type: ageAssuranceRuleIDs.IfAssuredOverAge,
69
+ age: 18,
70
+ access: 'full',
71
+ },
72
+ {
73
+ $type: ageAssuranceRuleIDs.IfAssuredOverAge,
74
+ age: 16,
75
+ access: 'safe',
76
+ },
77
+ {
78
+ $type: ageAssuranceRuleIDs.IfDeclaredOverAge,
79
+ age: 16,
80
+ access: 'safe',
81
+ },
82
+ {
83
+ $type: ageAssuranceRuleIDs.Default,
84
+ access: 'none',
85
+ },
86
+ ],
87
+ }
88
+
89
+ it('should apply default if no data provided', () => {
90
+ const result = computeAgeAssuranceRegionAccess(region, {})
91
+
92
+ expect(result).toEqual({
93
+ access: 'none',
94
+ reason: ageAssuranceRuleIDs.Default,
95
+ })
96
+ })
97
+
98
+ describe('IfAccountNewerThan', () => {
99
+ it('should block accounts created after threshold', () => {
100
+ const result = computeAgeAssuranceRegionAccess(region, {
101
+ accountCreatedAt: new Date(2025, 11, 15).toISOString(),
102
+ declaredAge: 18,
103
+ })
104
+ expect(result).toEqual({
105
+ access: 'none',
106
+ reason: ageAssuranceRuleIDs.IfAccountNewerThan,
107
+ })
108
+ })
109
+
110
+ it('should allow accounts created before threshold', () => {
111
+ const result = computeAgeAssuranceRegionAccess(region, {
112
+ accountCreatedAt: new Date(2025, 10, 1).toISOString(),
113
+ declaredAge: 18,
114
+ })
115
+ expect(result).toEqual({
116
+ access: 'safe',
117
+ reason: ageAssuranceRuleIDs.IfDeclaredOverAge,
118
+ })
119
+ })
120
+
121
+ it('should allow accounts created exactly at threshold', () => {
122
+ const result = computeAgeAssuranceRegionAccess(region, {
123
+ accountCreatedAt: new Date(2025, 11, 1).toISOString(),
124
+ declaredAge: 18,
125
+ })
126
+ expect(result).toEqual({
127
+ access: 'safe',
128
+ reason: ageAssuranceRuleIDs.IfDeclaredOverAge,
129
+ })
130
+ })
131
+
132
+ it('should not apply rule when accountCreatedAt is not provided', () => {
133
+ const result = computeAgeAssuranceRegionAccess(region, {
134
+ declaredAge: 15,
135
+ })
136
+ expect(result).toEqual({
137
+ access: 'none',
138
+ reason: ageAssuranceRuleIDs.Default,
139
+ })
140
+ })
141
+
142
+ it('should not apply rule when assuredAge is present', () => {
143
+ const result = computeAgeAssuranceRegionAccess(region, {
144
+ accountCreatedAt: new Date(2025, 11, 15).toISOString(),
145
+ assuredAge: 20,
146
+ })
147
+ expect(result).toEqual({
148
+ access: 'full',
149
+ reason: ageAssuranceRuleIDs.IfAssuredOverAge,
150
+ })
151
+ })
152
+ })
153
+
154
+ describe('IfDeclaredOverAge rule', () => {
155
+ it('should allow users at or above age threshold', () => {
156
+ const result = computeAgeAssuranceRegionAccess(region, {
157
+ declaredAge: 18,
158
+ })
159
+
160
+ expect(result).toEqual({
161
+ access: 'safe',
162
+ reason: ageAssuranceRuleIDs.IfDeclaredOverAge,
163
+ })
164
+ })
165
+
166
+ it('should allow users above age threshold', () => {
167
+ const result = computeAgeAssuranceRegionAccess(region, {
168
+ declaredAge: 25,
169
+ })
170
+
171
+ expect(result).toEqual({
172
+ access: 'safe',
173
+ reason: ageAssuranceRuleIDs.IfDeclaredOverAge,
174
+ })
175
+ })
176
+
177
+ it('should not allow users below age threshold', () => {
178
+ const result = computeAgeAssuranceRegionAccess(region, {
179
+ declaredAge: 17,
180
+ })
181
+
182
+ expect(result).toEqual({
183
+ access: 'safe',
184
+ reason: ageAssuranceRuleIDs.IfDeclaredOverAge,
185
+ })
186
+ })
187
+ })
188
+
189
+ describe('IfAssuredOverAge rule', () => {
190
+ it('should allow users at or above assured age threshold', () => {
191
+ const result = computeAgeAssuranceRegionAccess(region, {
192
+ assuredAge: 18,
193
+ })
194
+
195
+ expect(result).toEqual({
196
+ access: 'full',
197
+ reason: ageAssuranceRuleIDs.IfAssuredOverAge,
198
+ })
199
+ })
200
+
201
+ it('should not allow users below assured age threshold', () => {
202
+ const result = computeAgeAssuranceRegionAccess(region, {
203
+ assuredAge: 17,
204
+ })
205
+
206
+ expect(result).toEqual({
207
+ access: 'safe',
208
+ reason: ageAssuranceRuleIDs.IfAssuredOverAge,
209
+ })
210
+ })
211
+ })
212
+ })
213
+ })
@@ -0,0 +1,137 @@
1
+ import { AppBskyAgeassuranceDefs } from './client'
2
+ import { ids } from './client/lexicons'
3
+
4
+ export type AgeAssuranceRuleID = Exclude<
5
+ | AppBskyAgeassuranceDefs.ConfigRegionRuleDefault['$type']
6
+ | AppBskyAgeassuranceDefs.ConfigRegionRuleIfDeclaredOverAge['$type']
7
+ | AppBskyAgeassuranceDefs.ConfigRegionRuleIfDeclaredUnderAge['$type']
8
+ | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAssuredOverAge['$type']
9
+ | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAssuredUnderAge['$type']
10
+ | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAccountNewerThan['$type']
11
+ | AppBskyAgeassuranceDefs.ConfigRegionRuleIfAccountOlderThan['$type'],
12
+ undefined
13
+ >
14
+
15
+ export const ageAssuranceRuleIDs: Record<string, AgeAssuranceRuleID> = {
16
+ Default: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleDefault`,
17
+ IfDeclaredOverAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfDeclaredOverAge`,
18
+ IfDeclaredUnderAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfDeclaredUnderAge`,
19
+ IfAssuredOverAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAssuredOverAge`,
20
+ IfAssuredUnderAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAssuredUnderAge`,
21
+ IfAccountNewerThan: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAccountNewerThan`,
22
+ IfAccountOlderThan: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAccountOlderThan`,
23
+ }
24
+
25
+ /**
26
+ * Returns the first matched region configuration based on the provided geolocation.
27
+ */
28
+ export function getAgeAssuranceRegionConfig(
29
+ config: AppBskyAgeassuranceDefs.Config,
30
+ geolocation: {
31
+ countryCode: string
32
+ regionCode?: string
33
+ },
34
+ ): AppBskyAgeassuranceDefs.ConfigRegion | undefined {
35
+ const { regions } = config
36
+ return regions.find(({ countryCode, regionCode }) => {
37
+ if (countryCode === geolocation.countryCode) {
38
+ return !regionCode || regionCode === geolocation.regionCode
39
+ }
40
+ })
41
+ }
42
+
43
+ export function computeAgeAssuranceRegionAccess(
44
+ region: AppBskyAgeassuranceDefs.ConfigRegion,
45
+ data:
46
+ | {
47
+ /**
48
+ * The account creation date in ISO 8601 format. Only checked if we
49
+ * don't have an assured age, such as on the client.
50
+ */
51
+ accountCreatedAt?: string
52
+ /**
53
+ * The user's declared age
54
+ */
55
+ declaredAge?: number
56
+ /**
57
+ * The user's minimum age as assured by a trusted third party.
58
+ */
59
+ assuredAge?: number
60
+ }
61
+ | undefined,
62
+ ):
63
+ | {
64
+ access: AppBskyAgeassuranceDefs.Access
65
+ reason: AgeAssuranceRuleID
66
+ }
67
+ | undefined {
68
+ // first match wins
69
+ for (const rule of region.rules) {
70
+ if (AppBskyAgeassuranceDefs.isConfigRegionRuleIfAccountNewerThan(rule)) {
71
+ if (data?.accountCreatedAt && !data?.assuredAge) {
72
+ const accountCreatedAt = new Date(data.accountCreatedAt)
73
+ const threshold = new Date(rule.date)
74
+ if (accountCreatedAt >= threshold) {
75
+ return {
76
+ access: rule.access,
77
+ reason: rule.$type,
78
+ }
79
+ }
80
+ }
81
+ } else if (
82
+ AppBskyAgeassuranceDefs.isConfigRegionRuleIfAccountOlderThan(rule)
83
+ ) {
84
+ if (data?.accountCreatedAt && !data?.assuredAge) {
85
+ const accountCreatedAt = new Date(data.accountCreatedAt)
86
+ const threshold = new Date(rule.date)
87
+ if (accountCreatedAt < threshold) {
88
+ return {
89
+ access: rule.access,
90
+ reason: rule.$type,
91
+ }
92
+ }
93
+ }
94
+ } else if (
95
+ AppBskyAgeassuranceDefs.isConfigRegionRuleIfDeclaredOverAge(rule)
96
+ ) {
97
+ if (data?.declaredAge !== undefined && data.declaredAge >= rule.age) {
98
+ return {
99
+ access: rule.access,
100
+ reason: rule.$type,
101
+ }
102
+ }
103
+ } else if (
104
+ AppBskyAgeassuranceDefs.isConfigRegionRuleIfDeclaredUnderAge(rule)
105
+ ) {
106
+ if (data?.declaredAge !== undefined && data.declaredAge < rule.age) {
107
+ return {
108
+ access: rule.access,
109
+ reason: rule.$type,
110
+ }
111
+ }
112
+ } else if (
113
+ AppBskyAgeassuranceDefs.isConfigRegionRuleIfAssuredOverAge(rule)
114
+ ) {
115
+ if (data?.assuredAge && data.assuredAge >= rule.age) {
116
+ return {
117
+ access: rule.access,
118
+ reason: rule.$type,
119
+ }
120
+ }
121
+ } else if (
122
+ AppBskyAgeassuranceDefs.isConfigRegionRuleIfAssuredUnderAge(rule)
123
+ ) {
124
+ if (data?.assuredAge && data.assuredAge < rule.age) {
125
+ return {
126
+ access: rule.access,
127
+ reason: rule.$type,
128
+ }
129
+ }
130
+ } else if (AppBskyAgeassuranceDefs.isConfigRegionRuleDefault(rule)) {
131
+ return {
132
+ access: rule.access,
133
+ reason: rule.$type,
134
+ }
135
+ }
136
+ }
137
+ }
package/src/index.ts CHANGED
@@ -24,6 +24,7 @@ export * from './rich-text/util'
24
24
  export * from './moderation'
25
25
  export * from './moderation/types'
26
26
  export * from './mocker'
27
+ export * from './age-assurance'
27
28
  export { DEFAULT_LABEL_SETTINGS, LABELS } from './moderation/const/labels'
28
29
  export { Agent } from './agent'
29
30
 
@@ -2958,7 +2958,7 @@ describe('agent', () => {
2958
2958
 
2959
2959
  describe(`getSavedFeedType`, () => {
2960
2960
  it(`works`, () => {
2961
- expect(getSavedFeedType('foo')).toBe('unknown')
2961
+ expect(getSavedFeedType('at://foo.com')).toBe('unknown')
2962
2962
  expect(getSavedFeedType(feedUri())).toBe('feed')
2963
2963
  expect(getSavedFeedType(listUri())).toBe('list')
2964
2964
  expect(
@@ -1 +1 @@
1
- {"root":["./src/agent.ts","./src/atp-agent.ts","./src/bsky-agent.ts","./src/const.ts","./src/index.ts","./src/mocker.ts","./src/predicate.ts","./src/session-manager.ts","./src/types.ts","./src/util.ts","./src/client/index.ts","./src/client/lexicons.ts","./src/client/util.ts","./src/client/types/app/bsky/actor/defs.ts","./src/client/types/app/bsky/actor/getPreferences.ts","./src/client/types/app/bsky/actor/getProfile.ts","./src/client/types/app/bsky/actor/getProfiles.ts","./src/client/types/app/bsky/actor/getSuggestions.ts","./src/client/types/app/bsky/actor/profile.ts","./src/client/types/app/bsky/actor/putPreferences.ts","./src/client/types/app/bsky/actor/searchActors.ts","./src/client/types/app/bsky/actor/searchActorsTypeahead.ts","./src/client/types/app/bsky/actor/status.ts","./src/client/types/app/bsky/ageassurance/begin.ts","./src/client/types/app/bsky/ageassurance/defs.ts","./src/client/types/app/bsky/ageassurance/getConfig.ts","./src/client/types/app/bsky/ageassurance/getState.ts","./src/client/types/app/bsky/bookmark/createBookmark.ts","./src/client/types/app/bsky/bookmark/defs.ts","./src/client/types/app/bsky/bookmark/deleteBookmark.ts","./src/client/types/app/bsky/bookmark/getBookmarks.ts","./src/client/types/app/bsky/embed/defs.ts","./src/client/types/app/bsky/embed/external.ts","./src/client/types/app/bsky/embed/images.ts","./src/client/types/app/bsky/embed/record.ts","./src/client/types/app/bsky/embed/recordWithMedia.ts","./src/client/types/app/bsky/embed/video.ts","./src/client/types/app/bsky/feed/defs.ts","./src/client/types/app/bsky/feed/describeFeedGenerator.ts","./src/client/types/app/bsky/feed/generator.ts","./src/client/types/app/bsky/feed/getActorFeeds.ts","./src/client/types/app/bsky/feed/getActorLikes.ts","./src/client/types/app/bsky/feed/getAuthorFeed.ts","./src/client/types/app/bsky/feed/getFeed.ts","./src/client/types/app/bsky/feed/getFeedGenerator.ts","./src/client/types/app/bsky/feed/getFeedGenerators.ts","./src/client/types/app/bsky/feed/getFeedSkeleton.ts","./src/client/types/app/bsky/feed/getLikes.ts","./src/client/types/app/bsky/feed/getListFeed.ts","./src/client/types/app/bsky/feed/getPostThread.ts","./src/client/types/app/bsky/feed/getPosts.ts","./src/client/types/app/bsky/feed/getQuotes.ts","./src/client/types/app/bsky/feed/getRepostedBy.ts","./src/client/types/app/bsky/feed/getSuggestedFeeds.ts","./src/client/types/app/bsky/feed/getTimeline.ts","./src/client/types/app/bsky/feed/like.ts","./src/client/types/app/bsky/feed/post.ts","./src/client/types/app/bsky/feed/postgate.ts","./src/client/types/app/bsky/feed/repost.ts","./src/client/types/app/bsky/feed/searchPosts.ts","./src/client/types/app/bsky/feed/sendInteractions.ts","./src/client/types/app/bsky/feed/threadgate.ts","./src/client/types/app/bsky/graph/block.ts","./src/client/types/app/bsky/graph/defs.ts","./src/client/types/app/bsky/graph/follow.ts","./src/client/types/app/bsky/graph/getActorStarterPacks.ts","./src/client/types/app/bsky/graph/getBlocks.ts","./src/client/types/app/bsky/graph/getFollowers.ts","./src/client/types/app/bsky/graph/getFollows.ts","./src/client/types/app/bsky/graph/getKnownFollowers.ts","./src/client/types/app/bsky/graph/getList.ts","./src/client/types/app/bsky/graph/getListBlocks.ts","./src/client/types/app/bsky/graph/getListMutes.ts","./src/client/types/app/bsky/graph/getLists.ts","./src/client/types/app/bsky/graph/getListsWithMembership.ts","./src/client/types/app/bsky/graph/getMutes.ts","./src/client/types/app/bsky/graph/getRelationships.ts","./src/client/types/app/bsky/graph/getStarterPack.ts","./src/client/types/app/bsky/graph/getStarterPacks.ts","./src/client/types/app/bsky/graph/getStarterPacksWithMembership.ts","./src/client/types/app/bsky/graph/getSuggestedFollowsByActor.ts","./src/client/types/app/bsky/graph/list.ts","./src/client/types/app/bsky/graph/listblock.ts","./src/client/types/app/bsky/graph/listitem.ts","./src/client/types/app/bsky/graph/muteActor.ts","./src/client/types/app/bsky/graph/muteActorList.ts","./src/client/types/app/bsky/graph/muteThread.ts","./src/client/types/app/bsky/graph/searchStarterPacks.ts","./src/client/types/app/bsky/graph/starterpack.ts","./src/client/types/app/bsky/graph/unmuteActor.ts","./src/client/types/app/bsky/graph/unmuteActorList.ts","./src/client/types/app/bsky/graph/unmuteThread.ts","./src/client/types/app/bsky/graph/verification.ts","./src/client/types/app/bsky/labeler/defs.ts","./src/client/types/app/bsky/labeler/getServices.ts","./src/client/types/app/bsky/labeler/service.ts","./src/client/types/app/bsky/notification/declaration.ts","./src/client/types/app/bsky/notification/defs.ts","./src/client/types/app/bsky/notification/getPreferences.ts","./src/client/types/app/bsky/notification/getUnreadCount.ts","./src/client/types/app/bsky/notification/listActivitySubscriptions.ts","./src/client/types/app/bsky/notification/listNotifications.ts","./src/client/types/app/bsky/notification/putActivitySubscription.ts","./src/client/types/app/bsky/notification/putPreferences.ts","./src/client/types/app/bsky/notification/putPreferencesV2.ts","./src/client/types/app/bsky/notification/registerPush.ts","./src/client/types/app/bsky/notification/unregisterPush.ts","./src/client/types/app/bsky/notification/updateSeen.ts","./src/client/types/app/bsky/richtext/facet.ts","./src/client/types/app/bsky/unspecced/defs.ts","./src/client/types/app/bsky/unspecced/getAgeAssuranceState.ts","./src/client/types/app/bsky/unspecced/getConfig.ts","./src/client/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.ts","./src/client/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.ts","./src/client/types/app/bsky/unspecced/getPopularFeedGenerators.ts","./src/client/types/app/bsky/unspecced/getPostThreadOtherV2.ts","./src/client/types/app/bsky/unspecced/getPostThreadV2.ts","./src/client/types/app/bsky/unspecced/getSuggestedFeeds.ts","./src/client/types/app/bsky/unspecced/getSuggestedFeedsSkeleton.ts","./src/client/types/app/bsky/unspecced/getSuggestedStarterPacks.ts","./src/client/types/app/bsky/unspecced/getSuggestedStarterPacksSkeleton.ts","./src/client/types/app/bsky/unspecced/getSuggestedUsers.ts","./src/client/types/app/bsky/unspecced/getSuggestedUsersSkeleton.ts","./src/client/types/app/bsky/unspecced/getSuggestionsSkeleton.ts","./src/client/types/app/bsky/unspecced/getTaggedSuggestions.ts","./src/client/types/app/bsky/unspecced/getTrendingTopics.ts","./src/client/types/app/bsky/unspecced/getTrends.ts","./src/client/types/app/bsky/unspecced/getTrendsSkeleton.ts","./src/client/types/app/bsky/unspecced/initAgeAssurance.ts","./src/client/types/app/bsky/unspecced/searchActorsSkeleton.ts","./src/client/types/app/bsky/unspecced/searchPostsSkeleton.ts","./src/client/types/app/bsky/unspecced/searchStarterPacksSkeleton.ts","./src/client/types/app/bsky/video/defs.ts","./src/client/types/app/bsky/video/getJobStatus.ts","./src/client/types/app/bsky/video/getUploadLimits.ts","./src/client/types/app/bsky/video/uploadVideo.ts","./src/client/types/chat/bsky/actor/declaration.ts","./src/client/types/chat/bsky/actor/defs.ts","./src/client/types/chat/bsky/actor/deleteAccount.ts","./src/client/types/chat/bsky/actor/exportAccountData.ts","./src/client/types/chat/bsky/convo/acceptConvo.ts","./src/client/types/chat/bsky/convo/addReaction.ts","./src/client/types/chat/bsky/convo/defs.ts","./src/client/types/chat/bsky/convo/deleteMessageForSelf.ts","./src/client/types/chat/bsky/convo/getConvo.ts","./src/client/types/chat/bsky/convo/getConvoAvailability.ts","./src/client/types/chat/bsky/convo/getConvoForMembers.ts","./src/client/types/chat/bsky/convo/getLog.ts","./src/client/types/chat/bsky/convo/getMessages.ts","./src/client/types/chat/bsky/convo/leaveConvo.ts","./src/client/types/chat/bsky/convo/listConvos.ts","./src/client/types/chat/bsky/convo/muteConvo.ts","./src/client/types/chat/bsky/convo/removeReaction.ts","./src/client/types/chat/bsky/convo/sendMessage.ts","./src/client/types/chat/bsky/convo/sendMessageBatch.ts","./src/client/types/chat/bsky/convo/unmuteConvo.ts","./src/client/types/chat/bsky/convo/updateAllRead.ts","./src/client/types/chat/bsky/convo/updateRead.ts","./src/client/types/chat/bsky/moderation/getActorMetadata.ts","./src/client/types/chat/bsky/moderation/getMessageContext.ts","./src/client/types/chat/bsky/moderation/updateActorAccess.ts","./src/client/types/com/atproto/admin/defs.ts","./src/client/types/com/atproto/admin/deleteAccount.ts","./src/client/types/com/atproto/admin/disableAccountInvites.ts","./src/client/types/com/atproto/admin/disableInviteCodes.ts","./src/client/types/com/atproto/admin/enableAccountInvites.ts","./src/client/types/com/atproto/admin/getAccountInfo.ts","./src/client/types/com/atproto/admin/getAccountInfos.ts","./src/client/types/com/atproto/admin/getInviteCodes.ts","./src/client/types/com/atproto/admin/getSubjectStatus.ts","./src/client/types/com/atproto/admin/searchAccounts.ts","./src/client/types/com/atproto/admin/sendEmail.ts","./src/client/types/com/atproto/admin/updateAccountEmail.ts","./src/client/types/com/atproto/admin/updateAccountHandle.ts","./src/client/types/com/atproto/admin/updateAccountPassword.ts","./src/client/types/com/atproto/admin/updateAccountSigningKey.ts","./src/client/types/com/atproto/admin/updateSubjectStatus.ts","./src/client/types/com/atproto/identity/defs.ts","./src/client/types/com/atproto/identity/getRecommendedDidCredentials.ts","./src/client/types/com/atproto/identity/refreshIdentity.ts","./src/client/types/com/atproto/identity/requestPlcOperationSignature.ts","./src/client/types/com/atproto/identity/resolveDid.ts","./src/client/types/com/atproto/identity/resolveHandle.ts","./src/client/types/com/atproto/identity/resolveIdentity.ts","./src/client/types/com/atproto/identity/signPlcOperation.ts","./src/client/types/com/atproto/identity/submitPlcOperation.ts","./src/client/types/com/atproto/identity/updateHandle.ts","./src/client/types/com/atproto/label/defs.ts","./src/client/types/com/atproto/label/queryLabels.ts","./src/client/types/com/atproto/label/subscribeLabels.ts","./src/client/types/com/atproto/lexicon/resolveLexicon.ts","./src/client/types/com/atproto/lexicon/schema.ts","./src/client/types/com/atproto/moderation/createReport.ts","./src/client/types/com/atproto/moderation/defs.ts","./src/client/types/com/atproto/repo/applyWrites.ts","./src/client/types/com/atproto/repo/createRecord.ts","./src/client/types/com/atproto/repo/defs.ts","./src/client/types/com/atproto/repo/deleteRecord.ts","./src/client/types/com/atproto/repo/describeRepo.ts","./src/client/types/com/atproto/repo/getRecord.ts","./src/client/types/com/atproto/repo/importRepo.ts","./src/client/types/com/atproto/repo/listMissingBlobs.ts","./src/client/types/com/atproto/repo/listRecords.ts","./src/client/types/com/atproto/repo/putRecord.ts","./src/client/types/com/atproto/repo/strongRef.ts","./src/client/types/com/atproto/repo/uploadBlob.ts","./src/client/types/com/atproto/server/activateAccount.ts","./src/client/types/com/atproto/server/checkAccountStatus.ts","./src/client/types/com/atproto/server/confirmEmail.ts","./src/client/types/com/atproto/server/createAccount.ts","./src/client/types/com/atproto/server/createAppPassword.ts","./src/client/types/com/atproto/server/createInviteCode.ts","./src/client/types/com/atproto/server/createInviteCodes.ts","./src/client/types/com/atproto/server/createSession.ts","./src/client/types/com/atproto/server/deactivateAccount.ts","./src/client/types/com/atproto/server/defs.ts","./src/client/types/com/atproto/server/deleteAccount.ts","./src/client/types/com/atproto/server/deleteSession.ts","./src/client/types/com/atproto/server/describeServer.ts","./src/client/types/com/atproto/server/getAccountInviteCodes.ts","./src/client/types/com/atproto/server/getServiceAuth.ts","./src/client/types/com/atproto/server/getSession.ts","./src/client/types/com/atproto/server/listAppPasswords.ts","./src/client/types/com/atproto/server/refreshSession.ts","./src/client/types/com/atproto/server/requestAccountDelete.ts","./src/client/types/com/atproto/server/requestEmailConfirmation.ts","./src/client/types/com/atproto/server/requestEmailUpdate.ts","./src/client/types/com/atproto/server/requestPasswordReset.ts","./src/client/types/com/atproto/server/reserveSigningKey.ts","./src/client/types/com/atproto/server/resetPassword.ts","./src/client/types/com/atproto/server/revokeAppPassword.ts","./src/client/types/com/atproto/server/updateEmail.ts","./src/client/types/com/atproto/sync/defs.ts","./src/client/types/com/atproto/sync/getBlob.ts","./src/client/types/com/atproto/sync/getBlocks.ts","./src/client/types/com/atproto/sync/getCheckout.ts","./src/client/types/com/atproto/sync/getHead.ts","./src/client/types/com/atproto/sync/getHostStatus.ts","./src/client/types/com/atproto/sync/getLatestCommit.ts","./src/client/types/com/atproto/sync/getRecord.ts","./src/client/types/com/atproto/sync/getRepo.ts","./src/client/types/com/atproto/sync/getRepoStatus.ts","./src/client/types/com/atproto/sync/listBlobs.ts","./src/client/types/com/atproto/sync/listHosts.ts","./src/client/types/com/atproto/sync/listRepos.ts","./src/client/types/com/atproto/sync/listReposByCollection.ts","./src/client/types/com/atproto/sync/notifyOfUpdate.ts","./src/client/types/com/atproto/sync/requestCrawl.ts","./src/client/types/com/atproto/sync/subscribeRepos.ts","./src/client/types/com/atproto/temp/addReservedHandle.ts","./src/client/types/com/atproto/temp/checkHandleAvailability.ts","./src/client/types/com/atproto/temp/checkSignupQueue.ts","./src/client/types/com/atproto/temp/dereferenceScope.ts","./src/client/types/com/atproto/temp/fetchLabels.ts","./src/client/types/com/atproto/temp/requestPhoneVerification.ts","./src/client/types/com/atproto/temp/revokeAccountCredentials.ts","./src/client/types/tools/ozone/communication/createTemplate.ts","./src/client/types/tools/ozone/communication/defs.ts","./src/client/types/tools/ozone/communication/deleteTemplate.ts","./src/client/types/tools/ozone/communication/listTemplates.ts","./src/client/types/tools/ozone/communication/updateTemplate.ts","./src/client/types/tools/ozone/hosting/getAccountHistory.ts","./src/client/types/tools/ozone/moderation/cancelScheduledActions.ts","./src/client/types/tools/ozone/moderation/defs.ts","./src/client/types/tools/ozone/moderation/emitEvent.ts","./src/client/types/tools/ozone/moderation/getAccountTimeline.ts","./src/client/types/tools/ozone/moderation/getEvent.ts","./src/client/types/tools/ozone/moderation/getRecord.ts","./src/client/types/tools/ozone/moderation/getRecords.ts","./src/client/types/tools/ozone/moderation/getRepo.ts","./src/client/types/tools/ozone/moderation/getReporterStats.ts","./src/client/types/tools/ozone/moderation/getRepos.ts","./src/client/types/tools/ozone/moderation/getSubjects.ts","./src/client/types/tools/ozone/moderation/listScheduledActions.ts","./src/client/types/tools/ozone/moderation/queryEvents.ts","./src/client/types/tools/ozone/moderation/queryStatuses.ts","./src/client/types/tools/ozone/moderation/scheduleAction.ts","./src/client/types/tools/ozone/moderation/searchRepos.ts","./src/client/types/tools/ozone/report/defs.ts","./src/client/types/tools/ozone/safelink/addRule.ts","./src/client/types/tools/ozone/safelink/defs.ts","./src/client/types/tools/ozone/safelink/queryEvents.ts","./src/client/types/tools/ozone/safelink/queryRules.ts","./src/client/types/tools/ozone/safelink/removeRule.ts","./src/client/types/tools/ozone/safelink/updateRule.ts","./src/client/types/tools/ozone/server/getConfig.ts","./src/client/types/tools/ozone/set/addValues.ts","./src/client/types/tools/ozone/set/defs.ts","./src/client/types/tools/ozone/set/deleteSet.ts","./src/client/types/tools/ozone/set/deleteValues.ts","./src/client/types/tools/ozone/set/getValues.ts","./src/client/types/tools/ozone/set/querySets.ts","./src/client/types/tools/ozone/set/upsertSet.ts","./src/client/types/tools/ozone/setting/defs.ts","./src/client/types/tools/ozone/setting/listOptions.ts","./src/client/types/tools/ozone/setting/removeOptions.ts","./src/client/types/tools/ozone/setting/upsertOption.ts","./src/client/types/tools/ozone/signature/defs.ts","./src/client/types/tools/ozone/signature/findCorrelation.ts","./src/client/types/tools/ozone/signature/findRelatedAccounts.ts","./src/client/types/tools/ozone/signature/searchAccounts.ts","./src/client/types/tools/ozone/team/addMember.ts","./src/client/types/tools/ozone/team/defs.ts","./src/client/types/tools/ozone/team/deleteMember.ts","./src/client/types/tools/ozone/team/listMembers.ts","./src/client/types/tools/ozone/team/updateMember.ts","./src/client/types/tools/ozone/verification/defs.ts","./src/client/types/tools/ozone/verification/grantVerifications.ts","./src/client/types/tools/ozone/verification/listVerifications.ts","./src/client/types/tools/ozone/verification/revokeVerifications.ts","./src/moderation/decision.ts","./src/moderation/index.ts","./src/moderation/mutewords.ts","./src/moderation/types.ts","./src/moderation/ui.ts","./src/moderation/util.ts","./src/moderation/const/labels.ts","./src/moderation/subjects/account.ts","./src/moderation/subjects/feed-generator.ts","./src/moderation/subjects/notification.ts","./src/moderation/subjects/post.ts","./src/moderation/subjects/profile.ts","./src/moderation/subjects/user-list.ts","./src/rich-text/detection.ts","./src/rich-text/rich-text.ts","./src/rich-text/sanitization.ts","./src/rich-text/unicode.ts","./src/rich-text/util.ts"],"version":"5.8.2"}
1
+ {"root":["./src/age-assurance.test.ts","./src/age-assurance.ts","./src/agent.ts","./src/atp-agent.ts","./src/bsky-agent.ts","./src/const.ts","./src/index.ts","./src/mocker.ts","./src/predicate.ts","./src/session-manager.ts","./src/types.ts","./src/util.ts","./src/client/index.ts","./src/client/lexicons.ts","./src/client/util.ts","./src/client/types/app/bsky/actor/defs.ts","./src/client/types/app/bsky/actor/getPreferences.ts","./src/client/types/app/bsky/actor/getProfile.ts","./src/client/types/app/bsky/actor/getProfiles.ts","./src/client/types/app/bsky/actor/getSuggestions.ts","./src/client/types/app/bsky/actor/profile.ts","./src/client/types/app/bsky/actor/putPreferences.ts","./src/client/types/app/bsky/actor/searchActors.ts","./src/client/types/app/bsky/actor/searchActorsTypeahead.ts","./src/client/types/app/bsky/actor/status.ts","./src/client/types/app/bsky/ageassurance/begin.ts","./src/client/types/app/bsky/ageassurance/defs.ts","./src/client/types/app/bsky/ageassurance/getConfig.ts","./src/client/types/app/bsky/ageassurance/getState.ts","./src/client/types/app/bsky/bookmark/createBookmark.ts","./src/client/types/app/bsky/bookmark/defs.ts","./src/client/types/app/bsky/bookmark/deleteBookmark.ts","./src/client/types/app/bsky/bookmark/getBookmarks.ts","./src/client/types/app/bsky/embed/defs.ts","./src/client/types/app/bsky/embed/external.ts","./src/client/types/app/bsky/embed/images.ts","./src/client/types/app/bsky/embed/record.ts","./src/client/types/app/bsky/embed/recordWithMedia.ts","./src/client/types/app/bsky/embed/video.ts","./src/client/types/app/bsky/feed/defs.ts","./src/client/types/app/bsky/feed/describeFeedGenerator.ts","./src/client/types/app/bsky/feed/generator.ts","./src/client/types/app/bsky/feed/getActorFeeds.ts","./src/client/types/app/bsky/feed/getActorLikes.ts","./src/client/types/app/bsky/feed/getAuthorFeed.ts","./src/client/types/app/bsky/feed/getFeed.ts","./src/client/types/app/bsky/feed/getFeedGenerator.ts","./src/client/types/app/bsky/feed/getFeedGenerators.ts","./src/client/types/app/bsky/feed/getFeedSkeleton.ts","./src/client/types/app/bsky/feed/getLikes.ts","./src/client/types/app/bsky/feed/getListFeed.ts","./src/client/types/app/bsky/feed/getPostThread.ts","./src/client/types/app/bsky/feed/getPosts.ts","./src/client/types/app/bsky/feed/getQuotes.ts","./src/client/types/app/bsky/feed/getRepostedBy.ts","./src/client/types/app/bsky/feed/getSuggestedFeeds.ts","./src/client/types/app/bsky/feed/getTimeline.ts","./src/client/types/app/bsky/feed/like.ts","./src/client/types/app/bsky/feed/post.ts","./src/client/types/app/bsky/feed/postgate.ts","./src/client/types/app/bsky/feed/repost.ts","./src/client/types/app/bsky/feed/searchPosts.ts","./src/client/types/app/bsky/feed/sendInteractions.ts","./src/client/types/app/bsky/feed/threadgate.ts","./src/client/types/app/bsky/graph/block.ts","./src/client/types/app/bsky/graph/defs.ts","./src/client/types/app/bsky/graph/follow.ts","./src/client/types/app/bsky/graph/getActorStarterPacks.ts","./src/client/types/app/bsky/graph/getBlocks.ts","./src/client/types/app/bsky/graph/getFollowers.ts","./src/client/types/app/bsky/graph/getFollows.ts","./src/client/types/app/bsky/graph/getKnownFollowers.ts","./src/client/types/app/bsky/graph/getList.ts","./src/client/types/app/bsky/graph/getListBlocks.ts","./src/client/types/app/bsky/graph/getListMutes.ts","./src/client/types/app/bsky/graph/getLists.ts","./src/client/types/app/bsky/graph/getListsWithMembership.ts","./src/client/types/app/bsky/graph/getMutes.ts","./src/client/types/app/bsky/graph/getRelationships.ts","./src/client/types/app/bsky/graph/getStarterPack.ts","./src/client/types/app/bsky/graph/getStarterPacks.ts","./src/client/types/app/bsky/graph/getStarterPacksWithMembership.ts","./src/client/types/app/bsky/graph/getSuggestedFollowsByActor.ts","./src/client/types/app/bsky/graph/list.ts","./src/client/types/app/bsky/graph/listblock.ts","./src/client/types/app/bsky/graph/listitem.ts","./src/client/types/app/bsky/graph/muteActor.ts","./src/client/types/app/bsky/graph/muteActorList.ts","./src/client/types/app/bsky/graph/muteThread.ts","./src/client/types/app/bsky/graph/searchStarterPacks.ts","./src/client/types/app/bsky/graph/starterpack.ts","./src/client/types/app/bsky/graph/unmuteActor.ts","./src/client/types/app/bsky/graph/unmuteActorList.ts","./src/client/types/app/bsky/graph/unmuteThread.ts","./src/client/types/app/bsky/graph/verification.ts","./src/client/types/app/bsky/labeler/defs.ts","./src/client/types/app/bsky/labeler/getServices.ts","./src/client/types/app/bsky/labeler/service.ts","./src/client/types/app/bsky/notification/declaration.ts","./src/client/types/app/bsky/notification/defs.ts","./src/client/types/app/bsky/notification/getPreferences.ts","./src/client/types/app/bsky/notification/getUnreadCount.ts","./src/client/types/app/bsky/notification/listActivitySubscriptions.ts","./src/client/types/app/bsky/notification/listNotifications.ts","./src/client/types/app/bsky/notification/putActivitySubscription.ts","./src/client/types/app/bsky/notification/putPreferences.ts","./src/client/types/app/bsky/notification/putPreferencesV2.ts","./src/client/types/app/bsky/notification/registerPush.ts","./src/client/types/app/bsky/notification/unregisterPush.ts","./src/client/types/app/bsky/notification/updateSeen.ts","./src/client/types/app/bsky/richtext/facet.ts","./src/client/types/app/bsky/unspecced/defs.ts","./src/client/types/app/bsky/unspecced/getAgeAssuranceState.ts","./src/client/types/app/bsky/unspecced/getConfig.ts","./src/client/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.ts","./src/client/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.ts","./src/client/types/app/bsky/unspecced/getPopularFeedGenerators.ts","./src/client/types/app/bsky/unspecced/getPostThreadOtherV2.ts","./src/client/types/app/bsky/unspecced/getPostThreadV2.ts","./src/client/types/app/bsky/unspecced/getSuggestedFeeds.ts","./src/client/types/app/bsky/unspecced/getSuggestedFeedsSkeleton.ts","./src/client/types/app/bsky/unspecced/getSuggestedStarterPacks.ts","./src/client/types/app/bsky/unspecced/getSuggestedStarterPacksSkeleton.ts","./src/client/types/app/bsky/unspecced/getSuggestedUsers.ts","./src/client/types/app/bsky/unspecced/getSuggestedUsersSkeleton.ts","./src/client/types/app/bsky/unspecced/getSuggestionsSkeleton.ts","./src/client/types/app/bsky/unspecced/getTaggedSuggestions.ts","./src/client/types/app/bsky/unspecced/getTrendingTopics.ts","./src/client/types/app/bsky/unspecced/getTrends.ts","./src/client/types/app/bsky/unspecced/getTrendsSkeleton.ts","./src/client/types/app/bsky/unspecced/initAgeAssurance.ts","./src/client/types/app/bsky/unspecced/searchActorsSkeleton.ts","./src/client/types/app/bsky/unspecced/searchPostsSkeleton.ts","./src/client/types/app/bsky/unspecced/searchStarterPacksSkeleton.ts","./src/client/types/app/bsky/video/defs.ts","./src/client/types/app/bsky/video/getJobStatus.ts","./src/client/types/app/bsky/video/getUploadLimits.ts","./src/client/types/app/bsky/video/uploadVideo.ts","./src/client/types/chat/bsky/actor/declaration.ts","./src/client/types/chat/bsky/actor/defs.ts","./src/client/types/chat/bsky/actor/deleteAccount.ts","./src/client/types/chat/bsky/actor/exportAccountData.ts","./src/client/types/chat/bsky/convo/acceptConvo.ts","./src/client/types/chat/bsky/convo/addReaction.ts","./src/client/types/chat/bsky/convo/defs.ts","./src/client/types/chat/bsky/convo/deleteMessageForSelf.ts","./src/client/types/chat/bsky/convo/getConvo.ts","./src/client/types/chat/bsky/convo/getConvoAvailability.ts","./src/client/types/chat/bsky/convo/getConvoForMembers.ts","./src/client/types/chat/bsky/convo/getLog.ts","./src/client/types/chat/bsky/convo/getMessages.ts","./src/client/types/chat/bsky/convo/leaveConvo.ts","./src/client/types/chat/bsky/convo/listConvos.ts","./src/client/types/chat/bsky/convo/muteConvo.ts","./src/client/types/chat/bsky/convo/removeReaction.ts","./src/client/types/chat/bsky/convo/sendMessage.ts","./src/client/types/chat/bsky/convo/sendMessageBatch.ts","./src/client/types/chat/bsky/convo/unmuteConvo.ts","./src/client/types/chat/bsky/convo/updateAllRead.ts","./src/client/types/chat/bsky/convo/updateRead.ts","./src/client/types/chat/bsky/moderation/getActorMetadata.ts","./src/client/types/chat/bsky/moderation/getMessageContext.ts","./src/client/types/chat/bsky/moderation/updateActorAccess.ts","./src/client/types/com/atproto/admin/defs.ts","./src/client/types/com/atproto/admin/deleteAccount.ts","./src/client/types/com/atproto/admin/disableAccountInvites.ts","./src/client/types/com/atproto/admin/disableInviteCodes.ts","./src/client/types/com/atproto/admin/enableAccountInvites.ts","./src/client/types/com/atproto/admin/getAccountInfo.ts","./src/client/types/com/atproto/admin/getAccountInfos.ts","./src/client/types/com/atproto/admin/getInviteCodes.ts","./src/client/types/com/atproto/admin/getSubjectStatus.ts","./src/client/types/com/atproto/admin/searchAccounts.ts","./src/client/types/com/atproto/admin/sendEmail.ts","./src/client/types/com/atproto/admin/updateAccountEmail.ts","./src/client/types/com/atproto/admin/updateAccountHandle.ts","./src/client/types/com/atproto/admin/updateAccountPassword.ts","./src/client/types/com/atproto/admin/updateAccountSigningKey.ts","./src/client/types/com/atproto/admin/updateSubjectStatus.ts","./src/client/types/com/atproto/identity/defs.ts","./src/client/types/com/atproto/identity/getRecommendedDidCredentials.ts","./src/client/types/com/atproto/identity/refreshIdentity.ts","./src/client/types/com/atproto/identity/requestPlcOperationSignature.ts","./src/client/types/com/atproto/identity/resolveDid.ts","./src/client/types/com/atproto/identity/resolveHandle.ts","./src/client/types/com/atproto/identity/resolveIdentity.ts","./src/client/types/com/atproto/identity/signPlcOperation.ts","./src/client/types/com/atproto/identity/submitPlcOperation.ts","./src/client/types/com/atproto/identity/updateHandle.ts","./src/client/types/com/atproto/label/defs.ts","./src/client/types/com/atproto/label/queryLabels.ts","./src/client/types/com/atproto/label/subscribeLabels.ts","./src/client/types/com/atproto/lexicon/resolveLexicon.ts","./src/client/types/com/atproto/lexicon/schema.ts","./src/client/types/com/atproto/moderation/createReport.ts","./src/client/types/com/atproto/moderation/defs.ts","./src/client/types/com/atproto/repo/applyWrites.ts","./src/client/types/com/atproto/repo/createRecord.ts","./src/client/types/com/atproto/repo/defs.ts","./src/client/types/com/atproto/repo/deleteRecord.ts","./src/client/types/com/atproto/repo/describeRepo.ts","./src/client/types/com/atproto/repo/getRecord.ts","./src/client/types/com/atproto/repo/importRepo.ts","./src/client/types/com/atproto/repo/listMissingBlobs.ts","./src/client/types/com/atproto/repo/listRecords.ts","./src/client/types/com/atproto/repo/putRecord.ts","./src/client/types/com/atproto/repo/strongRef.ts","./src/client/types/com/atproto/repo/uploadBlob.ts","./src/client/types/com/atproto/server/activateAccount.ts","./src/client/types/com/atproto/server/checkAccountStatus.ts","./src/client/types/com/atproto/server/confirmEmail.ts","./src/client/types/com/atproto/server/createAccount.ts","./src/client/types/com/atproto/server/createAppPassword.ts","./src/client/types/com/atproto/server/createInviteCode.ts","./src/client/types/com/atproto/server/createInviteCodes.ts","./src/client/types/com/atproto/server/createSession.ts","./src/client/types/com/atproto/server/deactivateAccount.ts","./src/client/types/com/atproto/server/defs.ts","./src/client/types/com/atproto/server/deleteAccount.ts","./src/client/types/com/atproto/server/deleteSession.ts","./src/client/types/com/atproto/server/describeServer.ts","./src/client/types/com/atproto/server/getAccountInviteCodes.ts","./src/client/types/com/atproto/server/getServiceAuth.ts","./src/client/types/com/atproto/server/getSession.ts","./src/client/types/com/atproto/server/listAppPasswords.ts","./src/client/types/com/atproto/server/refreshSession.ts","./src/client/types/com/atproto/server/requestAccountDelete.ts","./src/client/types/com/atproto/server/requestEmailConfirmation.ts","./src/client/types/com/atproto/server/requestEmailUpdate.ts","./src/client/types/com/atproto/server/requestPasswordReset.ts","./src/client/types/com/atproto/server/reserveSigningKey.ts","./src/client/types/com/atproto/server/resetPassword.ts","./src/client/types/com/atproto/server/revokeAppPassword.ts","./src/client/types/com/atproto/server/updateEmail.ts","./src/client/types/com/atproto/sync/defs.ts","./src/client/types/com/atproto/sync/getBlob.ts","./src/client/types/com/atproto/sync/getBlocks.ts","./src/client/types/com/atproto/sync/getCheckout.ts","./src/client/types/com/atproto/sync/getHead.ts","./src/client/types/com/atproto/sync/getHostStatus.ts","./src/client/types/com/atproto/sync/getLatestCommit.ts","./src/client/types/com/atproto/sync/getRecord.ts","./src/client/types/com/atproto/sync/getRepo.ts","./src/client/types/com/atproto/sync/getRepoStatus.ts","./src/client/types/com/atproto/sync/listBlobs.ts","./src/client/types/com/atproto/sync/listHosts.ts","./src/client/types/com/atproto/sync/listRepos.ts","./src/client/types/com/atproto/sync/listReposByCollection.ts","./src/client/types/com/atproto/sync/notifyOfUpdate.ts","./src/client/types/com/atproto/sync/requestCrawl.ts","./src/client/types/com/atproto/sync/subscribeRepos.ts","./src/client/types/com/atproto/temp/addReservedHandle.ts","./src/client/types/com/atproto/temp/checkHandleAvailability.ts","./src/client/types/com/atproto/temp/checkSignupQueue.ts","./src/client/types/com/atproto/temp/dereferenceScope.ts","./src/client/types/com/atproto/temp/fetchLabels.ts","./src/client/types/com/atproto/temp/requestPhoneVerification.ts","./src/client/types/com/atproto/temp/revokeAccountCredentials.ts","./src/client/types/tools/ozone/communication/createTemplate.ts","./src/client/types/tools/ozone/communication/defs.ts","./src/client/types/tools/ozone/communication/deleteTemplate.ts","./src/client/types/tools/ozone/communication/listTemplates.ts","./src/client/types/tools/ozone/communication/updateTemplate.ts","./src/client/types/tools/ozone/hosting/getAccountHistory.ts","./src/client/types/tools/ozone/moderation/cancelScheduledActions.ts","./src/client/types/tools/ozone/moderation/defs.ts","./src/client/types/tools/ozone/moderation/emitEvent.ts","./src/client/types/tools/ozone/moderation/getAccountTimeline.ts","./src/client/types/tools/ozone/moderation/getEvent.ts","./src/client/types/tools/ozone/moderation/getRecord.ts","./src/client/types/tools/ozone/moderation/getRecords.ts","./src/client/types/tools/ozone/moderation/getRepo.ts","./src/client/types/tools/ozone/moderation/getReporterStats.ts","./src/client/types/tools/ozone/moderation/getRepos.ts","./src/client/types/tools/ozone/moderation/getSubjects.ts","./src/client/types/tools/ozone/moderation/listScheduledActions.ts","./src/client/types/tools/ozone/moderation/queryEvents.ts","./src/client/types/tools/ozone/moderation/queryStatuses.ts","./src/client/types/tools/ozone/moderation/scheduleAction.ts","./src/client/types/tools/ozone/moderation/searchRepos.ts","./src/client/types/tools/ozone/report/defs.ts","./src/client/types/tools/ozone/safelink/addRule.ts","./src/client/types/tools/ozone/safelink/defs.ts","./src/client/types/tools/ozone/safelink/queryEvents.ts","./src/client/types/tools/ozone/safelink/queryRules.ts","./src/client/types/tools/ozone/safelink/removeRule.ts","./src/client/types/tools/ozone/safelink/updateRule.ts","./src/client/types/tools/ozone/server/getConfig.ts","./src/client/types/tools/ozone/set/addValues.ts","./src/client/types/tools/ozone/set/defs.ts","./src/client/types/tools/ozone/set/deleteSet.ts","./src/client/types/tools/ozone/set/deleteValues.ts","./src/client/types/tools/ozone/set/getValues.ts","./src/client/types/tools/ozone/set/querySets.ts","./src/client/types/tools/ozone/set/upsertSet.ts","./src/client/types/tools/ozone/setting/defs.ts","./src/client/types/tools/ozone/setting/listOptions.ts","./src/client/types/tools/ozone/setting/removeOptions.ts","./src/client/types/tools/ozone/setting/upsertOption.ts","./src/client/types/tools/ozone/signature/defs.ts","./src/client/types/tools/ozone/signature/findCorrelation.ts","./src/client/types/tools/ozone/signature/findRelatedAccounts.ts","./src/client/types/tools/ozone/signature/searchAccounts.ts","./src/client/types/tools/ozone/team/addMember.ts","./src/client/types/tools/ozone/team/defs.ts","./src/client/types/tools/ozone/team/deleteMember.ts","./src/client/types/tools/ozone/team/listMembers.ts","./src/client/types/tools/ozone/team/updateMember.ts","./src/client/types/tools/ozone/verification/defs.ts","./src/client/types/tools/ozone/verification/grantVerifications.ts","./src/client/types/tools/ozone/verification/listVerifications.ts","./src/client/types/tools/ozone/verification/revokeVerifications.ts","./src/moderation/decision.ts","./src/moderation/index.ts","./src/moderation/mutewords.ts","./src/moderation/types.ts","./src/moderation/ui.ts","./src/moderation/util.ts","./src/moderation/const/labels.ts","./src/moderation/subjects/account.ts","./src/moderation/subjects/feed-generator.ts","./src/moderation/subjects/notification.ts","./src/moderation/subjects/post.ts","./src/moderation/subjects/profile.ts","./src/moderation/subjects/user-list.ts","./src/rich-text/detection.ts","./src/rich-text/rich-text.ts","./src/rich-text/sanitization.ts","./src/rich-text/unicode.ts","./src/rich-text/util.ts"],"version":"5.8.2"}