An open API service indexing awesome lists of open source software.

https://github.com/socialweb-php/atproto-lexicon

A PHP-based Lexicon parser for applications using the AT Protocol
https://github.com/socialweb-php/atproto-lexicon

atp atprotocol bluesky lexicon

Last synced: about 1 year ago
JSON representation

A PHP-based Lexicon parser for applications using the AT Protocol

Awesome Lists containing this project

README

          

socialweb/atproto-lexicon


A PHP-based Lexicon parser for applications using the AT Protocol


Source Code
Download Package
PHP Programming Language
Read License
Build Status
Codecov Code Coverage
Psalm Type Coverage

## About

socialweb/atproto-lexicon parses [Lexicon schemas][] for the [AT Protocol][].

The current version is compliant with [@atproto/lexicon][] at commit-ish
[a900e95][].

This project adheres to a [code of conduct](CODE_OF_CONDUCT.md).
By participating in this project and its community, you are expected to
uphold this code.

## Installation

Install this package as a dependency using [Composer](https://getcomposer.org).

``` bash
composer require socialweb/atproto-lexicon
```

## Usage

```php
use SocialWeb\Atproto\Lexicon\Nsid\Nsid;
use SocialWeb\Atproto\Lexicon\Parser\DefaultParserFactory;
use SocialWeb\Atproto\Lexicon\Parser\DefaultSchemaRepository;
use SocialWeb\Atproto\Lexicon\Parser\LexiconParser;

$schemas = '/path/to/bluesky-social/lexicons';

$schemaRepository = new DefaultSchemaRepository($schemas);
$parser = new LexiconParser(new DefaultParserFactory($schemaRepository));

$nsid = new Nsid('app.bsky.feed.post');
$schemaFile = $schemaRepository->findSchemaPathByNsid($nsid);
$schemaContents = file_get_contents((string) $schemaFile);

$document = $parser->parse((string) $schemaContents);
```

### Resolving References

Using this library, you may resolve references in Lexicon schemas.

For example:

```php
use SocialWeb\Atproto\Lexicon\Types\LexResolvable;

foreach ($document->defs as $defId => $def) {
if ($def instanceof LexResolvable) {
$resolved = $def->resolve();
}
}
```

## Contributing

Contributions are welcome! To contribute, please familiarize yourself with
[CONTRIBUTING.md](CONTRIBUTING.md).

## Coordinated Disclosure

Keeping user information safe and secure is a top priority, and we welcome the
contribution of external security researchers. If you believe you've found a
security issue in software that is maintained in this repository, please read
[SECURITY.md](SECURITY.md) for instructions on submitting a vulnerability report.

## Copyright and License

Copyright © the socialweb/atproto-lexicon Contributors and licensed for use
under the terms of the GNU Lesser General Public License (LGPL-3.0-or-later)
as published by the Free Software Foundation. Please see
[COPYING.LESSER](COPYING.LESSER), [COPYING](COPYING), and [NOTICE](NOTICE)
for more information.

[lexicon schemas]: https://atproto.com/guides/lexicon
[at protocol]: https://atproto.com
[@atproto/lexicon]: https://www.npmjs.com/package/@atproto/lexicon
[a900e95]: https://github.com/bluesky-social/atproto/blob/a900e955a6bfabada696dbd2c2aa21a0edc48fe7/packages/lexicon/src/types.ts