Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into html-email-content
Browse files Browse the repository at this point in the history
  • Loading branch information
devinivy committed Oct 3, 2023
2 parents a924f62 + 7d1e3b2 commit 228f24f
Show file tree
Hide file tree
Showing 805 changed files with 22,051 additions and 49,341 deletions.
5 changes: 3 additions & 2 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,12 @@
"no-misleading-character-class": "warn",
"@typescript-eslint/no-unused-vars": [
"warn",
{ "argsIgnorePattern": "^_" }
{ "argsIgnorePattern": "^_", "varsIgnorePattern": "^_" }
],
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-empty-interface": "off",
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-empty-function": "off"
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-explicit-any": "off"
}
}
2 changes: 1 addition & 1 deletion .github/workflows/repo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Test
on:
pull_request:
branches:
- main
- '*'

concurrency:
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
Expand Down
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
node_modules
interop-test-files
dist
build
.nyc_output
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2022-2023 Bluesky PBLLC
Copyright (c) 2022-2023 Bluesky PBC

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
14 changes: 5 additions & 9 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,17 @@ test: ## Run all tests
run-dev-env: ## Run a "development environment" shell
cd packages/dev-env; pnpm run start

.PHONY: run-dev-pds
run-dev-pds: ## Run PDS locally
if [ ! -f "packages/pds/.dev.env" ]; then cp packages/pds/example.dev.env packages/pds/.dev.env; fi
cd packages/pds; ENV=dev pnpm run start | pnpm exec pino-pretty

.PHONY: run-dev-bsky
run-dev-bsky: ## Run appview ('bsky') locally
if [ ! -f "packages/bsky/.dev.env" ]; then cp packages/bsky/example.dev.env packages/bsky/.dev.env; fi
cd packages/bsky; ENV=dev pnpm run start | pnpm exec pino-pretty
.PHONY: run-dev-env-logged
run-dev-env: ## Run a "development environment" shell
LOG_ENABLED=true cd packages/dev-env; pnpm run start | pnpm exec pino-pretty

.PHONY: codegen
codegen: ## Re-generate packages from lexicon/ files
cd packages/api; pnpm run codegen
cd packages/pds; pnpm run codegen
cd packages/bsky; pnpm run codegen
# clean up codegen output
pnpm format

.PHONY: lint
lint: ## Run style checks and verify syntax
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,4 @@ If you discover any security issues, please send an email to [email protected].

MIT License

Copyright (c) 2023 Bluesky PBLLC
Copyright (c) 2023 Bluesky PBC
9 changes: 9 additions & 0 deletions interop-test-files/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

atproto Interop Test Files
==========================

This directory contains reusable files for testing interoperability and specification compliance for atproto (AT Protocol).

The protocol itself is documented at <https://atproto.com/specs/atp>. If there are conflicts or ambiguity between these test files and the specs, the specs are the authority, and these test files should usually be corrected.

These files are intended to be simple (JSON, text files, etc) and mostly self-documenting.
42 changes: 42 additions & 0 deletions interop-test-files/crypto/signature-fixtures.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
[
{
"comment": "valid P-256 key and signature, with low-S signature",
"messageBase64": "oWVoZWxsb2V3b3JsZA",
"algorithm": "ES256",
"didDocSuite": "EcdsaSecp256r1VerificationKey2019",
"publicKeyDid": "did:key:zDnaembgSGUhZULN2Caob4HLJPaxBh92N7rtH21TErzqf8HQo",
"publicKeyMultibase": "zxdM8dSstjrpZaRUwBmDvjGXweKuEMVN95A9oJBFjkWMh",
"signatureBase64": "2vZNsG3UKvvO/CDlrdvyZRISOFylinBh0Jupc6KcWoJWExHptCfduPleDbG3rko3YZnn9Lw0IjpixVmexJDegg",
"validSignature": true
},
{
"comment": "valid K-256 key and signature, with low-S signature",
"messageBase64": "oWVoZWxsb2V3b3JsZA",
"algorithm": "ES256K",
"didDocSuite": "EcdsaSecp256k1VerificationKey2019",
"publicKeyDid": "did:key:zQ3shqwJEJyMBsBXCWyCBpUBMqxcon9oHB7mCvx4sSpMdLJwc",
"publicKeyMultibase": "z25z9DTpsiYYJKGsWmSPJK2NFN8PcJtZig12K59UgW7q5t",
"signatureBase64": "5WpdIuEUUfVUYaozsi8G0B3cWO09cgZbIIwg1t2YKdUn/FEznOndsz/qgiYb89zwxYCbB71f7yQK5Lr7NasfoA",
"validSignature": true
},
{
"comment": "P-256 key and signature, with non-low-S signature which is invalid in atproto",
"messageBase64": "oWVoZWxsb2V3b3JsZA",
"algorithm": "ES256",
"didDocSuite": "EcdsaSecp256r1VerificationKey2019",
"publicKeyDid": "did:key:zDnaembgSGUhZULN2Caob4HLJPaxBh92N7rtH21TErzqf8HQo",
"publicKeyMultibase": "zxdM8dSstjrpZaRUwBmDvjGXweKuEMVN95A9oJBFjkWMh",
"signatureBase64": "2vZNsG3UKvvO/CDlrdvyZRISOFylinBh0Jupc6KcWoKp7O4VS9giSAah8k5IUbXIW00SuOrjfEqQ9HEkN9JGzw",
"validSignature": false
},
{
"comment": "K-256 key and signature, with non-low-S signature which is invalid in atproto",
"messageBase64": "oWVoZWxsb2V3b3JsZA",
"algorithm": "ES256K",
"didDocSuite": "EcdsaSecp256k1VerificationKey2019",
"publicKeyDid": "did:key:zQ3shqwJEJyMBsBXCWyCBpUBMqxcon9oHB7mCvx4sSpMdLJwc",
"publicKeyMultibase": "z25z9DTpsiYYJKGsWmSPJK2NFN8PcJtZig12K59UgW7q5t",
"signatureBase64": "5WpdIuEUUfVUYaozsi8G0B3cWO09cgZbIIwg1t2YKdXYA67MYxYiTMAVfdnkDCMN9S5B3vHosRe07aORmoshoQ",
"validSignature": false
}
]
22 changes: 22 additions & 0 deletions interop-test-files/crypto/w3c_didkey_K256.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[
{
"privateKeyBytesHex": "9085d2bef69286a6cbb51623c8fa258629945cd55ca705cc4e66700396894e0c",
"publicDidKey": "did:key:zQ3shokFTS3brHcDQrn82RUDfCZESWL1ZdCEJwekUDPQiYBme"
},
{
"privateKeyBytesHex": "f0f4df55a2b3ff13051ea814a8f24ad00f2e469af73c363ac7e9fb999a9072ed",
"publicDidKey": "did:key:zQ3shtxV1FrJfhqE1dvxYRcCknWNjHc3c5X1y3ZSoPDi2aur2"
},
{
"privateKeyBytesHex": "6b0b91287ae3348f8c2f2552d766f30e3604867e34adc37ccbb74a8e6b893e02",
"publicDidKey": "did:key:zQ3shZc2QzApp2oymGvQbzP8eKheVshBHbU4ZYjeXqwSKEn6N"
},
{
"privateKeyBytesHex": "c0a6a7c560d37d7ba81ecee9543721ff48fea3e0fb827d42c1868226540fac15",
"publicDidKey": "did:key:zQ3shadCps5JLAHcZiuX5YUtWHHL8ysBJqFLWvjZDKAWUBGzy"
},
{
"privateKeyBytesHex": "175a232d440be1e0788f25488a73d9416c04b6f924bea6354bf05dd2f1a75133",
"publicDidKey": "did:key:zQ3shptjE6JwdkeKN4fcpnYQY3m9Cet3NiHdAfpvSUZBFoKBj"
}
]
6 changes: 6 additions & 0 deletions interop-test-files/crypto/w3c_didkey_P256.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"privateKeyBytesBase58": "9p4VRzdmhsnq869vQjVCTrRry7u4TtfRxhvBFJTGU2Cp",
"publicDidKey": "did:key:zDnaeTiq1PdzvZXUaMdezchcMJQpBdH2VN4pgrrEhMCCbmwSb"
}
]
28 changes: 28 additions & 0 deletions interop-test-files/syntax/atidentifier_syntax_invalid.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@

# invalid handles
did:thing.test
did:thing
john-.test
john.0
john.-
xn--bcher-.tld
john..test
jo_hn.test

# invalid DIDs
did
didmethodval
method:did:val
did:method:
didmethod:val
did:methodval)
:did:method:val
did:method:val:
did:method:val%
DID:method:val

# other invalid stuff
[email protected]
@[email protected]
@handle
blah
15 changes: 15 additions & 0 deletions interop-test-files/syntax/atidentifier_syntax_valid.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@

# allows valid handles
XX.LCS.MIT.EDU
john.test
jan.test
a234567890123456789.test
john2.test
john-john.test

# allows valid DIDs
did:method:val
did:method:VAL
did:method:val123
did:method:123
did:method:val-two
89 changes: 89 additions & 0 deletions interop-test-files/syntax/aturi_syntax_invalid.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@

# enforces spec basics
a://did:plc:asdf123
at//did:plc:asdf123
at:/a/did:plc:asdf123
at:/did:plc:asdf123
AT://did:plc:asdf123
http://did:plc:asdf123
://did:plc:asdf123
at:did:plc:asdf123
at:/did:plc:asdf123
at:///did:plc:asdf123
at://:/did:plc:asdf123
at:/ /did:plc:asdf123
at://did:plc:asdf123
at://did:plc:asdf123/
at://did:plc:asdf123
at://did:plc:asdf123/com.atproto.feed.post
at://did:plc:asdf123/com.atproto.feed.post#
at://did:plc:asdf123/com.atproto.feed.post#/
at://did:plc:asdf123/com.atproto.feed.post#/frag
at://did:plc:asdf123/com.atproto.feed.post#fr ag
//did:plc:asdf123
at://name
at://name.0
at://diD:plc:asdf123
at://did:plc:asdf123/com.atproto.feed.p@st
at://did:plc:asdf123/com.atproto.feed.p$st
at://did:plc:asdf123/com.atproto.feed.p%st
at://did:plc:asdf123/com.atproto.feed.p&st
at://did:plc:asdf123/com.atproto.feed.p()t
at://did:plc:asdf123/com.atproto.feed_post
at://did:plc:asdf123/-com.atproto.feed.post
at://did:plc:asdf@123/com.atproto.feed.post
at://DID:plc:asdf123
at://user.bsky.123
at://bsky
at://did:plc:
at://did:plc:
at://frag

# too long: 'at://did:plc:asdf123/com.atproto.feed.post/' + 'o'.repeat(8200)
at://did:plc:asdf123/com.atproto.feed.post/oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

# has specified behavior on edge cases
at://user.bsky.social//
at://user.bsky.social//com.atproto.feed.post
at://user.bsky.social/com.atproto.feed.post//
at://did:plc:asdf123/com.atproto.feed.post/asdf123/more/more',
at://did:plc:asdf123/short/stuff
at://did:plc:asdf123/12345

# enforces no trailing slashes
at://did:plc:asdf123/
at://user.bsky.social/
at://did:plc:asdf123/com.atproto.feed.post/
at://did:plc:asdf123/com.atproto.feed.post/record/
at://did:plc:asdf123/com.atproto.feed.post/record/#/frag

# enforces strict paths
at://did:plc:asdf123/com.atproto.feed.post/asdf123/asdf

# is very permissive about fragments
at://did:plc:asdf123#
at://did:plc:asdf123##
#at://did:plc:asdf123
at://did:plc:asdf123#/asdf#/asdf

# new less permissive about record keys for Lexicon use (with recordkey more specified)
at://did:plc:asdf123/com.atproto.feed.post/%23
at://did:plc:asdf123/com.atproto.feed.post/$@!*)(:,;~.sdf123
at://did:plc:asdf123/com.atproto.feed.post/~'sdf123")
at://did:plc:asdf123/com.atproto.feed.post/$
at://did:plc:asdf123/com.atproto.feed.post/@
at://did:plc:asdf123/com.atproto.feed.post/!
at://did:plc:asdf123/com.atproto.feed.post/*
at://did:plc:asdf123/com.atproto.feed.post/(
at://did:plc:asdf123/com.atproto.feed.post/,
at://did:plc:asdf123/com.atproto.feed.post/;
at://did:plc:asdf123/com.atproto.feed.post/abc%30123
at://did:plc:asdf123/com.atproto.feed.post/%30
at://did:plc:asdf123/com.atproto.feed.post/%3
at://did:plc:asdf123/com.atproto.feed.post/%
at://did:plc:asdf123/com.atproto.feed.post/%zz
at://did:plc:asdf123/com.atproto.feed.post/%%%

# disallow dot / double-dot
at://did:plc:asdf123/com.atproto.feed.post/.
at://did:plc:asdf123/com.atproto.feed.post/..
26 changes: 26 additions & 0 deletions interop-test-files/syntax/aturi_syntax_valid.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

# enforces spec basics
at://did:plc:asdf123
at://user.bsky.social
at://did:plc:asdf123/com.atproto.feed.post
at://did:plc:asdf123/com.atproto.feed.post/record

# very long: 'at://did:plc:asdf123/com.atproto.feed.post/' + 'o'.repeat(512)
at://did:plc:asdf123/com.atproto.feed.post/oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

# enforces no trailing slashes
at://did:plc:asdf123
at://user.bsky.social
at://did:plc:asdf123/com.atproto.feed.post
at://did:plc:asdf123/com.atproto.feed.post/record

# enforces strict paths
at://did:plc:asdf123/com.atproto.feed.post/asdf123

# is very permissive about record keys
at://did:plc:asdf123/com.atproto.feed.post/asdf123
at://did:plc:asdf123/com.atproto.feed.post/a

at://did:plc:asdf123/com.atproto.feed.post/asdf-123
at://did:abc:123
at://did:abc:123/io.nsid.someFunc/record-key
Loading

0 comments on commit 228f24f

Please sign in to comment.