tangled
alpha
login
or
join now
danabra.mov
/
statusphere-react
forked from
samuel.fm/statusphere-react
0
fork
atom
the statusphere demo reworked into a vite/react app in a monorepo
0
fork
atom
overview
issues
pulls
pipelines
compat w/ oauth dev preview. update deps.
Devin Ivy
2 years ago
7c50fba4
74dc0f96
+107
-138
5 changed files
expand all
collapse all
unified
split
package-lock.json
package.json
src
auth
client.ts
session.ts
routes.ts
+85
-123
package-lock.json
···
9
9
"version": "0.0.1",
10
10
"license": "MIT",
11
11
"dependencies": {
12
12
+
"@atproto/api": "^0.13.4",
12
13
"@atproto/identity": "^0.4.0",
13
13
-
"@atproto/lexicon": "0.4.1-rc.0",
14
14
-
"@atproto/oauth-client-node": "0.0.2-rc.2",
15
15
-
"@atproto/repo": "0.4.2-rc.0",
14
14
+
"@atproto/lexicon": "^0.4.1",
15
15
+
"@atproto/oauth-client-node": "^0.1.0",
16
16
+
"@atproto/repo": "^0.4.3",
16
17
"@atproto/syntax": "^0.3.0",
17
17
-
"@atproto/xrpc-server": "0.5.4-rc.0",
18
18
+
"@atproto/xrpc-server": "^0.6.3",
18
19
"better-sqlite3": "^11.1.2",
19
20
"dotenv": "^16.4.5",
20
21
"envalid": "^8.0.0",
···
23
24
"kysely": "^0.27.4",
24
25
"multiformats": "^9.9.0",
25
26
"pino": "^9.3.2",
26
26
-
"pino-http": "^10.0.0",
27
27
"uhtml": "^4.5.9"
28
28
},
29
29
"devDependencies": {
···
39
39
}
40
40
},
41
41
"node_modules/@atproto-labs/did-resolver": {
42
42
-
"version": "0.1.2-rc.0",
43
43
-
"resolved": "https://registry.npmjs.org/@atproto-labs/did-resolver/-/did-resolver-0.1.2-rc.0.tgz",
44
44
-
"integrity": "sha512-5lVxhLG9P1G1XjGXQr7fhk6mBM5vpbCalrfuVXqU5xQADvObLjEtpxpJuLheAacaV2pUMFDml+53ZLYWXCgFIg==",
42
42
+
"version": "0.1.2",
43
43
+
"resolved": "https://registry.npmjs.org/@atproto-labs/did-resolver/-/did-resolver-0.1.2.tgz",
44
44
+
"integrity": "sha512-d/nQHoieDo0tf0OX45LJcLQlSuyzVOV5lND7krlSxeAyD3pO5Fx1G8FtmkoPlMt4LT1OCIIQNmjh42pOcGH3WA==",
45
45
"dependencies": {
46
46
"@atproto-labs/fetch": "0.1.0",
47
47
"@atproto-labs/pipe": "0.1.0",
48
48
"@atproto-labs/simple-store": "0.1.1",
49
49
"@atproto-labs/simple-store-memory": "0.1.1",
50
50
-
"@atproto/did": "0.1.1-rc.0",
50
50
+
"@atproto/did": "0.1.1",
51
51
"zod": "^3.23.8"
52
52
}
53
53
},
···
75
75
}
76
76
},
77
77
"node_modules/@atproto-labs/handle-resolver": {
78
78
-
"version": "0.1.2-rc.0",
79
79
-
"resolved": "https://registry.npmjs.org/@atproto-labs/handle-resolver/-/handle-resolver-0.1.2-rc.0.tgz",
80
80
-
"integrity": "sha512-sxk/Zr1hWyBBcg1HhZ8N/Tw1Iue/6+V6bzu2c8zYhO9VfKgCBp3FFU1/i3MpgR2AlsEqZpcjv6zj4KAnMHiLUg==",
78
78
+
"version": "0.1.2",
79
79
+
"resolved": "https://registry.npmjs.org/@atproto-labs/handle-resolver/-/handle-resolver-0.1.2.tgz",
80
80
+
"integrity": "sha512-0D8d1QpGqyp0DLYnKpAFJ5YaIgiRUHMqKnbd1d0reOuJoa7ebwxMolNhP3RnKlOQ/9gaL3Y3ORZFeEjXK+eRqg==",
81
81
"dependencies": {
82
82
"@atproto-labs/simple-store": "0.1.1",
83
83
"@atproto-labs/simple-store-memory": "0.1.1",
84
84
-
"@atproto/did": "0.1.1-rc.0",
84
84
+
"@atproto/did": "0.1.1",
85
85
"zod": "^3.23.8"
86
86
}
87
87
},
88
88
"node_modules/@atproto-labs/handle-resolver-node": {
89
89
-
"version": "0.1.2-rc.0",
90
90
-
"resolved": "https://registry.npmjs.org/@atproto-labs/handle-resolver-node/-/handle-resolver-node-0.1.2-rc.0.tgz",
91
91
-
"integrity": "sha512-wP1c0fqxdhnIQVxFgD3Z6fiToq1ri9ECTCSPoy/1zbNJ+KWrr0V6BSONF/I5MytEbQaICBh8bvZuurvX0OjbNw==",
89
89
+
"version": "0.1.2",
90
90
+
"resolved": "https://registry.npmjs.org/@atproto-labs/handle-resolver-node/-/handle-resolver-node-0.1.2.tgz",
91
91
+
"integrity": "sha512-T+QApSezlb71+VLUua3bEmaDN4umvfzEzw/iS1BAZC7BwmGxOg/MBRdE9n6fPU4ul0ekG+6vRhpW4owCS20x3Q==",
92
92
"dependencies": {
93
93
"@atproto-labs/fetch-node": "0.1.0",
94
94
-
"@atproto-labs/handle-resolver": "0.1.2-rc.0",
95
95
-
"@atproto/did": "0.1.1-rc.0"
94
94
+
"@atproto-labs/handle-resolver": "0.1.2",
95
95
+
"@atproto/did": "0.1.1"
96
96
}
97
97
},
98
98
"node_modules/@atproto-labs/identity-resolver": {
99
99
-
"version": "0.1.2-rc.0",
100
100
-
"resolved": "https://registry.npmjs.org/@atproto-labs/identity-resolver/-/identity-resolver-0.1.2-rc.0.tgz",
101
101
-
"integrity": "sha512-4TLjNRbufeGduac3c/No4teJ411qNgyBQck7eY5e2K8XrzS2a/xX/bq3JP91DrvERHiP3yE22PB6ATQkuALgXA==",
99
99
+
"version": "0.1.2",
100
100
+
"resolved": "https://registry.npmjs.org/@atproto-labs/identity-resolver/-/identity-resolver-0.1.2.tgz",
101
101
+
"integrity": "sha512-166XTfq/gvdzmJT6tMvMvsT4h9yVyse8yJVn534j5GPGTqPtyky57/SNyO+R8QbOr4ffG0NQRO+OAazsVR0mVw==",
102
102
"dependencies": {
103
103
-
"@atproto-labs/did-resolver": "0.1.2-rc.0",
104
104
-
"@atproto-labs/handle-resolver": "0.1.2-rc.0",
103
103
+
"@atproto-labs/did-resolver": "0.1.2",
104
104
+
"@atproto-labs/handle-resolver": "0.1.2",
105
105
"@atproto/syntax": "0.3.0"
106
106
}
107
107
},
···
125
125
}
126
126
},
127
127
"node_modules/@atproto/api": {
128
128
-
"version": "0.13.0-rc.1",
129
129
-
"resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.13.0-rc.1.tgz",
130
130
-
"integrity": "sha512-h2+M6OoMLnNzqf2KDxsbRkg3/1k2IMWH33PQI31GkiQHIdt3B+MIXvJwXePu0KnMUL/Lvv2Zk01BKiDnjd4LEw==",
128
128
+
"version": "0.13.4",
129
129
+
"resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.13.4.tgz",
130
130
+
"integrity": "sha512-Fwn37hP+Xr9YjA/hadvn7ZKbUPQhJiUus1+govgNKF3/jNdyk2ICoEe0z+hxaO3xX8LCU5yARbgt3SRoXbIwrg==",
131
131
"dependencies": {
132
132
"@atproto/common-web": "^0.3.0",
133
133
-
"@atproto/lexicon": "^0.4.1-rc.0",
133
133
+
"@atproto/lexicon": "^0.4.1",
134
134
"@atproto/syntax": "^0.3.0",
135
135
-
"@atproto/xrpc": "^0.6.0-rc.0",
135
135
+
"@atproto/xrpc": "^0.6.1",
136
136
"await-lock": "^2.2.2",
137
137
"multiformats": "^9.9.0",
138
138
"tlds": "^1.234.0"
···
210
210
}
211
211
},
212
212
"node_modules/@atproto/crypto": {
213
213
-
"version": "0.4.0",
214
214
-
"resolved": "https://registry.npmjs.org/@atproto/crypto/-/crypto-0.4.0.tgz",
215
215
-
"integrity": "sha512-Kj/4VgJ7hzzXvE42L0rjzP6lM0tai+OfPnP1rxJ+UZg/YUDtuewL4uapnVoWXvlNceKgaLZH98g5n9gXBVTe5Q==",
213
213
+
"version": "0.4.1",
214
214
+
"resolved": "https://registry.npmjs.org/@atproto/crypto/-/crypto-0.4.1.tgz",
215
215
+
"integrity": "sha512-7pQNHWYyx8jGhYdPbmcuPD9W73nd/5v3mfBlncO0sBzxnPbmA6aXAWOz+fNVZwHwBJPeb/Gzf/FT/uDx7/eYFg==",
216
216
"dependencies": {
217
217
"@noble/curves": "^1.1.0",
218
218
"@noble/hashes": "^1.3.1",
···
220
220
}
221
221
},
222
222
"node_modules/@atproto/did": {
223
223
-
"version": "0.1.1-rc.0",
224
224
-
"resolved": "https://registry.npmjs.org/@atproto/did/-/did-0.1.1-rc.0.tgz",
225
225
-
"integrity": "sha512-rbO6kQv/bKsMGqAqr1M4o7cmJf893gYzabr1CmJ0rr/FNdXHfr0b9s2lRphA6zCS0wPdT4/mw6/LWiCrnBmi9w==",
223
223
+
"version": "0.1.1",
224
224
+
"resolved": "https://registry.npmjs.org/@atproto/did/-/did-0.1.1.tgz",
225
225
+
"integrity": "sha512-FA+U8C8ACQLjG/TSgtaQyjvXxzOYzwK0+T6FJ1oj2BtKUixq4t8zpvo4zdIrnVimXeGQWo1/U1ghke58SmRpmQ==",
226
226
"dependencies": {
227
227
"zod": "^3.23.8"
228
228
}
···
247
247
}
248
248
},
249
249
"node_modules/@atproto/jwk-jose": {
250
250
-
"version": "0.1.2-rc.0",
251
251
-
"resolved": "https://registry.npmjs.org/@atproto/jwk-jose/-/jwk-jose-0.1.2-rc.0.tgz",
252
252
-
"integrity": "sha512-guqGhgQjOx6OxxDWBENRa30G3CJ91Rqw+5NEwiv4GfhmmM/szS983kZIydmXpySpyyZhGAPZfkOfHai+HrLsXg==",
250
250
+
"version": "0.1.2",
251
251
+
"resolved": "https://registry.npmjs.org/@atproto/jwk-jose/-/jwk-jose-0.1.2.tgz",
252
252
+
"integrity": "sha512-lDwc/6lLn2aZ/JpyyggyjLFsJPMntrVzryyGUx5aNpuTS8SIuc4Ky0REhxqfLopQXJJZCuRRjagHG3uP05/moQ==",
253
253
"dependencies": {
254
254
"@atproto/jwk": "0.1.1",
255
255
"jose": "^5.2.0"
256
256
}
257
257
},
258
258
"node_modules/@atproto/jwk-webcrypto": {
259
259
-
"version": "0.1.2-rc.0",
260
260
-
"resolved": "https://registry.npmjs.org/@atproto/jwk-webcrypto/-/jwk-webcrypto-0.1.2-rc.0.tgz",
261
261
-
"integrity": "sha512-TlLaJulKDWDhXQ8Wujte4l2RPe/Ym+jAnFR/+lwZbcGQHAUsatBMCKzvYVv3TtqXL3B5gIC9ry12+C7oQ5yE/Q==",
259
259
+
"version": "0.1.2",
260
260
+
"resolved": "https://registry.npmjs.org/@atproto/jwk-webcrypto/-/jwk-webcrypto-0.1.2.tgz",
261
261
+
"integrity": "sha512-vTBUbUZXh0GI+6KJiPGukmI4BQEHFAij8fJJ4WnReF/hefAs3ISZtrWZHGBebz+q2EcExYlnhhlmxvDzV7veGw==",
262
262
"dependencies": {
263
263
"@atproto/jwk": "0.1.1",
264
264
-
"@atproto/jwk-jose": "0.1.2-rc.0"
264
264
+
"@atproto/jwk-jose": "0.1.2"
265
265
}
266
266
},
267
267
"node_modules/@atproto/lex-cli": {
···
283
283
"lex": "dist/index.js"
284
284
}
285
285
},
286
286
-
"node_modules/@atproto/lex-cli/node_modules/@atproto/lexicon": {
286
286
+
"node_modules/@atproto/lexicon": {
287
287
"version": "0.4.1",
288
288
"resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.1.tgz",
289
289
"integrity": "sha512-bzyr+/VHXLQWbumViX5L7h1NKQObfs8Z+XZJl43OUK8nYFUI4e/sW1IZKRNfw7Wvi5YVNK+J+yP3DWIBZhkCYA==",
290
290
-
"dev": true,
291
291
-
"dependencies": {
292
292
-
"@atproto/common-web": "^0.3.0",
293
293
-
"@atproto/syntax": "^0.3.0",
294
294
-
"iso-datestring-validator": "^2.2.2",
295
295
-
"multiformats": "^9.9.0",
296
296
-
"zod": "^3.23.8"
297
297
-
}
298
298
-
},
299
299
-
"node_modules/@atproto/lexicon": {
300
300
-
"version": "0.4.1-rc.0",
301
301
-
"resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.1-rc.0.tgz",
302
302
-
"integrity": "sha512-CSYO8MWbxTXTLQMEJ1mTXD2pDxIXO2oCK/FVw9T/BeXLMcvwmeVgKAaytd1AGFkapX8IMAAtjBB3cnaltuHwbg==",
303
290
"dependencies": {
304
291
"@atproto/common-web": "^0.3.0",
305
292
"@atproto/syntax": "^0.3.0",
···
309
296
}
310
297
},
311
298
"node_modules/@atproto/oauth-client": {
312
312
-
"version": "0.1.2-rc.2",
313
313
-
"resolved": "https://registry.npmjs.org/@atproto/oauth-client/-/oauth-client-0.1.2-rc.2.tgz",
314
314
-
"integrity": "sha512-FBYyEKEU1BFoW1ASFzsmw1oOpVPj/nkoR753OZItgNwl9i+Tr4kAA9TqeXGa6Ol3dh7K67oaxHw7DChdEqbtSg==",
299
299
+
"version": "0.2.0",
300
300
+
"resolved": "https://registry.npmjs.org/@atproto/oauth-client/-/oauth-client-0.2.0.tgz",
301
301
+
"integrity": "sha512-J8NaQ45jIa7e/VXKUwtGnW91p8mM8yWvqhlBxNvVXQ2t5yo6rxYdIVam+2Ffy3SANxqe+sl5QFmCdaJQGX0yNQ==",
315
302
"dependencies": {
316
316
-
"@atproto-labs/did-resolver": "0.1.2-rc.0",
303
303
+
"@atproto-labs/did-resolver": "0.1.2",
317
304
"@atproto-labs/fetch": "0.1.0",
318
318
-
"@atproto-labs/handle-resolver": "0.1.2-rc.0",
319
319
-
"@atproto-labs/identity-resolver": "0.1.2-rc.0",
305
305
+
"@atproto-labs/handle-resolver": "0.1.2",
306
306
+
"@atproto-labs/identity-resolver": "0.1.2",
320
307
"@atproto-labs/simple-store": "0.1.1",
321
308
"@atproto-labs/simple-store-memory": "0.1.1",
322
322
-
"@atproto/api": "0.13.0-rc.1",
323
323
-
"@atproto/did": "0.1.1-rc.0",
309
309
+
"@atproto/did": "0.1.1",
324
310
"@atproto/jwk": "0.1.1",
325
325
-
"@atproto/oauth-types": "0.1.2-rc.0",
326
326
-
"@atproto/xrpc": "0.6.0-rc.0",
311
311
+
"@atproto/oauth-types": "0.1.4",
312
312
+
"@atproto/xrpc": "0.6.1",
327
313
"multiformats": "^9.9.0",
328
314
"zod": "^3.23.8"
329
315
}
330
316
},
331
317
"node_modules/@atproto/oauth-client-node": {
332
332
-
"version": "0.0.2-rc.2",
333
333
-
"resolved": "https://registry.npmjs.org/@atproto/oauth-client-node/-/oauth-client-node-0.0.2-rc.2.tgz",
334
334
-
"integrity": "sha512-MxR2C84h6XjTB28RpXfctKLvB6Ot68tiOlsOSigeSTKnNJ5SRD2wISz2647P8dxOec81ugMu8wa5BKcZ5Ry7nw==",
318
318
+
"version": "0.1.0",
319
319
+
"resolved": "https://registry.npmjs.org/@atproto/oauth-client-node/-/oauth-client-node-0.1.0.tgz",
320
320
+
"integrity": "sha512-F+bhXBaTAQuOViVjr9I+9iVVPTgnXh4EbquMazhoyAcH1T+v8oPkzV7tqVBvsbolgRDILJTAgRCtF140fC2wAg==",
335
321
"dependencies": {
336
336
-
"@atproto-labs/did-resolver": "0.1.2-rc.0",
337
337
-
"@atproto-labs/handle-resolver-node": "0.1.2-rc.0",
322
322
+
"@atproto-labs/did-resolver": "0.1.2",
323
323
+
"@atproto-labs/handle-resolver-node": "0.1.2",
338
324
"@atproto-labs/simple-store": "0.1.1",
339
339
-
"@atproto/did": "0.1.1-rc.0",
325
325
+
"@atproto/did": "0.1.1",
340
326
"@atproto/jwk": "0.1.1",
341
341
-
"@atproto/jwk-jose": "0.1.2-rc.0",
342
342
-
"@atproto/jwk-webcrypto": "0.1.2-rc.0",
343
343
-
"@atproto/oauth-client": "0.1.2-rc.2",
344
344
-
"@atproto/oauth-types": "0.1.2-rc.0"
327
327
+
"@atproto/jwk-jose": "0.1.2",
328
328
+
"@atproto/jwk-webcrypto": "0.1.2",
329
329
+
"@atproto/oauth-client": "0.2.0",
330
330
+
"@atproto/oauth-types": "0.1.4"
345
331
}
346
332
},
347
333
"node_modules/@atproto/oauth-types": {
348
348
-
"version": "0.1.2-rc.0",
349
349
-
"resolved": "https://registry.npmjs.org/@atproto/oauth-types/-/oauth-types-0.1.2-rc.0.tgz",
350
350
-
"integrity": "sha512-q/AxPSdLf2xTgC4K1cU35HVl6T4T0LJ/QJmvqXwjpbiNWEqooIQIP9sTp2CqqSLsWpe26z3fIoA3R+oTR1EJsA==",
334
334
+
"version": "0.1.4",
335
335
+
"resolved": "https://registry.npmjs.org/@atproto/oauth-types/-/oauth-types-0.1.4.tgz",
336
336
+
"integrity": "sha512-B5lFXMvsx9PtO0wwCqwaoRVG8vKxvB742vO4Ze5OMJJsps6ebGskaYmkFHP9DnvDSLRzIHpJJ7jN6ri71V+xng==",
351
337
"dependencies": {
352
338
"@atproto/jwk": "0.1.1",
353
339
"zod": "^3.23.8"
354
340
}
355
341
},
356
342
"node_modules/@atproto/repo": {
357
357
-
"version": "0.4.2-rc.0",
358
358
-
"resolved": "https://registry.npmjs.org/@atproto/repo/-/repo-0.4.2-rc.0.tgz",
359
359
-
"integrity": "sha512-y8zXAR23r6qlsTmbzXaBEHYjvlgeNlAKj9eJ6V17JtT+4FVdW246alhsgSsglJ2Uv/e24RC1r90yNJNRxqDzXw==",
343
343
+
"version": "0.4.3",
344
344
+
"resolved": "https://registry.npmjs.org/@atproto/repo/-/repo-0.4.3.tgz",
345
345
+
"integrity": "sha512-9w4TlyxExLfFL9BysvXq4vhIsYsnmGi0uelmxJjlRXBICgLpqjqQVqhS8OBqE25ZTYvgXUi7nNqpo2llCHhOvQ==",
360
346
"dependencies": {
361
347
"@atproto/common": "^0.4.1",
362
348
"@atproto/common-web": "^0.3.0",
363
363
-
"@atproto/crypto": "^0.4.0",
364
364
-
"@atproto/lexicon": "^0.4.1-rc.0",
349
349
+
"@atproto/crypto": "^0.4.1",
350
350
+
"@atproto/lexicon": "^0.4.1",
365
351
"@ipld/car": "^3.2.3",
366
352
"@ipld/dag-cbor": "^7.0.0",
367
353
"multiformats": "^9.9.0",
···
375
361
"integrity": "sha512-Weq0ZBxffGHDXHl9U7BQc2BFJi/e23AL+k+i5+D9hUq/bzT4yjGsrCejkjq0xt82xXDjmhhvQSZ0LqxyZ5woxA=="
376
362
},
377
363
"node_modules/@atproto/xrpc": {
378
378
-
"version": "0.6.0-rc.0",
379
379
-
"resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.6.0-rc.0.tgz",
380
380
-
"integrity": "sha512-TOmynXvbA57Y6KR050UeiDfdzQoAnmgB0zu0qrvhYiu7oeg64fYzvOa7stWxSIP1nhrGqgexxICR1CnOnCEHjg==",
364
364
+
"version": "0.6.1",
365
365
+
"resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.6.1.tgz",
366
366
+
"integrity": "sha512-Zy5ydXEdk6sY7FDUZcEVfCL1jvbL4tXu5CcdPqbEaW6LQtk9GLds/DK1bCX9kswTGaBC88EMuqQMfkxOhp2t4A==",
381
367
"dependencies": {
382
382
-
"@atproto/lexicon": "^0.4.1-rc.0",
368
368
+
"@atproto/lexicon": "^0.4.1",
383
369
"zod": "^3.23.8"
384
370
}
385
371
},
386
372
"node_modules/@atproto/xrpc-server": {
387
387
-
"version": "0.5.4-rc.0",
388
388
-
"resolved": "https://registry.npmjs.org/@atproto/xrpc-server/-/xrpc-server-0.5.4-rc.0.tgz",
389
389
-
"integrity": "sha512-Vrx1gEoZfJtYoZhSxkbWQsU2r0DuJO/BuvMQGw9Nd66owmF5nPDVvYVd0pJhIDoaSxImTTIEeDWlNNl3WCSBPA==",
373
373
+
"version": "0.6.3",
374
374
+
"resolved": "https://registry.npmjs.org/@atproto/xrpc-server/-/xrpc-server-0.6.3.tgz",
375
375
+
"integrity": "sha512-0YXeBM9NjiIlR5eXWo8qzArRcBOKhwVimpH+ajKgZzlncPO53brVZ9+3BUnD5J1PG8mEQFRERi+Jt77QyF89qA==",
390
376
"dependencies": {
391
377
"@atproto/common": "^0.4.1",
392
392
-
"@atproto/crypto": "^0.4.0",
393
393
-
"@atproto/lexicon": "^0.4.1-rc.0",
394
394
-
"@atproto/xrpc": "^0.6.0-rc.0",
378
378
+
"@atproto/crypto": "^0.4.1",
379
379
+
"@atproto/lexicon": "^0.4.1",
380
380
+
"@atproto/xrpc": "^0.6.1",
395
381
"cbor-x": "^1.5.1",
396
382
"express": "^4.17.2",
397
383
"http-errors": "^2.0.0",
···
1944
1930
"resolved": "https://registry.npmjs.org/gc-hook/-/gc-hook-0.3.1.tgz",
1945
1931
"integrity": "sha512-E5M+O/h2o7eZzGhzRZGex6hbB3k4NWqO0eA+OzLRLXxhdbYPajZnynPwAtphnh+cRHPwsj5Z80dqZlfI4eK55A=="
1946
1932
},
1947
1947
-
"node_modules/get-caller-file": {
1948
1948
-
"version": "2.0.5",
1949
1949
-
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1950
1950
-
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1951
1951
-
"engines": {
1952
1952
-
"node": "6.* || 8.* || >= 10.*"
1953
1953
-
}
1954
1954
-
},
1955
1933
"node_modules/get-intrinsic": {
1956
1934
"version": "1.2.4",
1957
1935
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
···
2300
2278
}
2301
2279
},
2302
2280
"node_modules/jose": {
2303
2303
-
"version": "5.6.3",
2304
2304
-
"resolved": "https://registry.npmjs.org/jose/-/jose-5.6.3.tgz",
2305
2305
-
"integrity": "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==",
2281
2281
+
"version": "5.8.0",
2282
2282
+
"resolved": "https://registry.npmjs.org/jose/-/jose-5.8.0.tgz",
2283
2283
+
"integrity": "sha512-E7CqYpL/t7MMnfGnK/eg416OsFCVUrU/Y3Vwe7QjKhu/BkS1Ms455+2xsqZQVN57/U2MHMBvEb5SrmAZWAIntA==",
2306
2284
"funding": {
2307
2285
"url": "https://github.com/sponsors/panva"
2308
2286
}
···
2748
2726
"readable-stream": "^4.0.0",
2749
2727
"split2": "^4.0.0"
2750
2728
}
2751
2751
-
},
2752
2752
-
"node_modules/pino-http": {
2753
2753
-
"version": "10.2.0",
2754
2754
-
"resolved": "https://registry.npmjs.org/pino-http/-/pino-http-10.2.0.tgz",
2755
2755
-
"integrity": "sha512-am03BxnV3Ckx68OkbH0iZs3indsrH78wncQ6w1w51KroIbvJZNImBKX2X1wjdY8lSyaJ0UrX/dnO2DY3cTeCRw==",
2756
2756
-
"dependencies": {
2757
2757
-
"get-caller-file": "^2.0.5",
2758
2758
-
"pino": "^9.0.0",
2759
2759
-
"pino-std-serializers": "^7.0.0",
2760
2760
-
"process-warning": "^3.0.0"
2761
2761
-
}
2762
2762
-
},
2763
2763
-
"node_modules/pino-http/node_modules/process-warning": {
2764
2764
-
"version": "3.0.0",
2765
2765
-
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
2766
2766
-
"integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="
2767
2729
},
2768
2730
"node_modules/pino-pretty": {
2769
2731
"version": "11.2.2",
···
4059
4021
"integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="
4060
4022
},
4061
4023
"node_modules/undici": {
4062
4062
-
"version": "6.19.7",
4063
4063
-
"resolved": "https://registry.npmjs.org/undici/-/undici-6.19.7.tgz",
4064
4064
-
"integrity": "sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==",
4024
4024
+
"version": "6.19.8",
4025
4025
+
"resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz",
4026
4026
+
"integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==",
4065
4027
"engines": {
4066
4028
"node": ">=18.17"
4067
4029
}
+5
-4
package.json
···
14
14
"clean": "rimraf dist coverage"
15
15
},
16
16
"dependencies": {
17
17
+
"@atproto/api": "^0.13.4",
17
18
"@atproto/identity": "^0.4.0",
18
18
-
"@atproto/lexicon": "0.4.1-rc.0",
19
19
-
"@atproto/oauth-client-node": "0.0.2-rc.2",
20
20
-
"@atproto/repo": "0.4.2-rc.0",
19
19
+
"@atproto/lexicon": "^0.4.1",
20
20
+
"@atproto/oauth-client-node": "^0.1.0",
21
21
+
"@atproto/repo": "^0.4.3",
21
22
"@atproto/syntax": "^0.3.0",
22
22
-
"@atproto/xrpc-server": "0.5.4-rc.0",
23
23
+
"@atproto/xrpc-server": "^0.6.3",
23
24
"better-sqlite3": "^11.1.2",
24
25
"dotenv": "^16.4.5",
25
26
"envalid": "^8.0.0",
+1
-1
src/auth/client.ts
···
14
14
: `http://localhost?redirect_uri=${encodeURIComponent(`${url}/oauth/callback`)}`,
15
15
client_uri: url,
16
16
redirect_uris: [`${url}/oauth/callback`],
17
17
-
scope: 'profile offline_access',
17
17
+
scope: 'atproto transition:generic',
18
18
grant_types: ['authorization_code', 'refresh_token'],
19
19
response_types: ['code'],
20
20
application_type: 'web',
+6
-2
src/auth/session.ts
···
1
1
import assert from 'node:assert'
2
2
import type { IncomingMessage, ServerResponse } from 'node:http'
3
3
import { getIronSession } from 'iron-session'
4
4
+
import { Agent } from '@atproto/api'
4
5
import { env } from '#/lib/env'
5
6
import { AppContext } from '#/index'
6
7
···
43
44
) {
44
45
const session = await getSessionRaw(req, res)
45
46
if (!session.did) return null
46
46
-
return await ctx.oauthClient.restore(session.did).catch(async (err) => {
47
47
+
try {
48
48
+
const oauthSession = await ctx.oauthClient.restore(session.did)
49
49
+
return oauthSession ? new Agent(oauthSession) : null
50
50
+
} catch (err) {
47
51
ctx.logger.warn({ err }, 'oauth restore failed')
48
52
await destroySession(req, res)
49
53
return null
50
50
-
})
54
54
+
}
51
55
}
52
56
53
57
async function getSessionRaw(
+10
-8
src/routes.ts
···
44
44
handler(async (req, res) => {
45
45
const params = new URLSearchParams(req.originalUrl.split('?')[1])
46
46
try {
47
47
-
const { agent } = await ctx.oauthClient.callback(params)
48
48
-
await createSession(req, res, agent.accountDid)
47
47
+
const { session } = await ctx.oauthClient.callback(params)
48
48
+
await createSession(req, res, session.did)
49
49
} catch (err) {
50
50
ctx.logger.error({ err }, 'oauth callback failed')
51
51
return res.redirect('/?error')
···
74
74
75
75
// Initiate the OAuth flow
76
76
try {
77
77
-
const url = await ctx.oauthClient.authorize(handle)
77
77
+
const url = await ctx.oauthClient.authorize(handle, {
78
78
+
scope: 'atproto transition:generic'
79
79
+
})
78
80
return res.redirect(url.toString())
79
81
} catch (err) {
80
82
ctx.logger.error({ err }, 'oauth authorize failed')
···
119
121
? await ctx.db
120
122
.selectFrom('status')
121
123
.selectAll()
122
122
-
.where('authorDid', '=', agent.accountDid)
124
124
+
.where('authorDid', '=', agent.assertDid)
123
125
.executeTakeFirst()
124
126
: undefined
125
127
···
135
137
136
138
// Fetch additional information about the logged-in user
137
139
const { data: profile } = await agent.getProfile({
138
138
-
actor: agent.accountDid,
140
140
+
actor: agent.assertDid,
139
141
})
140
140
-
didHandleMap[profile.handle] = agent.accountDid
142
142
+
didHandleMap[profile.handle] = agent.assertDid
141
143
142
144
// Serve the logged-in view
143
145
return res
···
169
171
try {
170
172
// Write the status record to the user's repository
171
173
await agent.com.atproto.repo.putRecord({
172
172
-
repo: agent.accountDid,
174
174
+
repo: agent.assertDid,
173
175
collection: 'com.example.status',
174
176
rkey: 'self',
175
177
record,
···
188
190
await ctx.db
189
191
.insertInto('status')
190
192
.values({
191
191
-
authorDid: agent.accountDid,
193
193
+
authorDid: agent.assertDid,
192
194
status: record.status,
193
195
updatedAt: record.updatedAt,
194
196
indexedAt: new Date().toISOString(),