diff --git a/.agents/skills/writing-changesets/SKILL.md b/.agents/skills/writing-changesets/SKILL.md index 04eeab7..6f836b7 100644 --- a/.agents/skills/writing-changesets/SKILL.md +++ b/.agents/skills/writing-changesets/SKILL.md @@ -17,11 +17,11 @@ Do not add one for documentation-only or test-only changes, changes to the separ ## Package and version bump -The bundle is versioned as one unit. The Changeset frontmatter must target only `@hypercerts-org/hypercerts-api`: +The bundle is versioned as one unit. The Changeset frontmatter must target only `@hypercerts-org/happyview-modules`: ```md --- -'@hypercerts-org/hypercerts-api': patch +'@hypercerts-org/happyview-modules': patch --- A short, clear summary of the change. @@ -58,18 +58,18 @@ Use bullets only when there are several distinct actions or changes to scan. Omi ## Procedure -1. Check the actual diff and read `.changeset/README.md` plus `api/README.md` for the current scope and release behavior. -2. Run `pnpm changeset` and select `@hypercerts-org/hypercerts-api`, or create a descriptive Markdown file under `.changeset/` with the required frontmatter. +1. Check the actual diff and read `.changeset/README.md` plus `happyview-modules/README.md` for the current scope and release behavior. +2. Run `pnpm changeset` and select `@hypercerts-org/happyview-modules`, or create a descriptive Markdown file under `.changeset/` with the required frontmatter. 3. Write and review the summary using the plain-language guidance above. Make any adaptation steps concrete and accurate. 4. Run `pnpm changeset status` to check that the Changeset is valid and targets the intended package. ## Release context -`@hypercerts-org/hypercerts-api` is marked `"private": true` in `api/package.json`, which prevents it from being published to npm. This flag applies to the package, not the public GitHub repository. Changesets creates a release pull request that updates `api/package.json` and `api/CHANGELOG.md`. After that pull request is merged, CI validates the merged commit and creates a version tag and public GitHub Release. Operators install from the tagged source; this process does not deploy the bundle to a HappyView instance. +`@hypercerts-org/happyview-modules` is marked `"private": true` in `happyview-modules/package.json`, which prevents it from being published to npm. This flag applies to the package, not the public GitHub repository. Changesets creates a release pull request that updates `happyview-modules/package.json` and `happyview-modules/CHANGELOG.md`. After that pull request is merged, CI validates the merged commit and creates a version tag and public GitHub Release. Operators install from the tagged source; this process does not deploy the bundle to a HappyView instance. ## Repository references - `.changeset/README.md` — package scope, bump rules, and release process. - `.changeset/config.json` — Changesets configuration and ignored packages. -- `api/package.json` — package name and version. -- `api/README.md` — bundle installation and distribution details. +- `happyview-modules/package.json` — package name and version. +- `happyview-modules/README.md` — bundle installation and distribution details. diff --git a/.changeset/README.md b/.changeset/README.md index b8dcfdf..f35b8a3 100644 --- a/.changeset/README.md +++ b/.changeset/README.md @@ -6,8 +6,8 @@ Add a Changeset when a pull request changes the installable API bundle or its op pnpm changeset ``` -Target `@hypercerts-org/hypercerts-api` and write release notes for endpoint or schema additions, compatible behavior changes, fixes, breaking changes, and installer or configuration changes that operators need to know about. Use `patch` for compatible fixes, `minor` for additive API capabilities, and `major` for incompatible API changes. +Target `@hypercerts-org/happyview-modules` and write release notes for endpoint or schema additions, compatible behavior changes, fixes, breaking changes, and installer or configuration changes that operators need to know about. Use `patch` for compatible fixes, `minor` for additive API capabilities, and `major` for incompatible API changes. The API bundle is versioned as one unit. Do not add Changesets for the separate endpoint-explorer package, documentation-only changes, tests, or release/CI maintenance that does not change the installable bundle. If the release impact is unclear, decide with the reviewer rather than guessing a version bump. -A Changesets release PR updates `api/package.json` and `api/CHANGELOG.md`. After it is merged to `main`, release CI validates that exact commit and creates an `@hypercerts-org/hypercerts-api@X.Y.Z` Git tag and public GitHub Release. The bundle is not published to npm; operators retrieve the tagged source from this public repository and install it into their own HappyView instance. +A Changesets release PR updates `happyview-modules/package.json` and `happyview-modules/CHANGELOG.md`. After it is merged to `main`, release CI validates that exact commit and creates an `@hypercerts-org/happyview-modules@X.Y.Z` Git tag and public GitHub Release. The bundle is not published to npm; operators retrieve the tagged source from this public repository and install it into their own HappyView instance. diff --git a/.changeset/actor-reactions-batch-lookup.md b/.changeset/actor-reactions-batch-lookup.md index 1a36241..34c4c39 100644 --- a/.changeset/actor-reactions-batch-lookup.md +++ b/.changeset/actor-reactions-batch-lookup.md @@ -1,5 +1,5 @@ --- -'@hypercerts-org/hypercerts-api': minor +'@hypercerts-org/happyview-modules': minor --- Add `app.certified.feed.getActorReactions` to return an actor's indexed likes and reposts for up to 100 subject records in one request, preserving request order and duplicates. diff --git a/.changeset/batch-follow-queries.md b/.changeset/batch-follow-queries.md index 61a4411..231ecef 100644 --- a/.changeset/batch-follow-queries.md +++ b/.changeset/batch-follow-queries.md @@ -1,5 +1,5 @@ --- -'@hypercerts-org/hypercerts-api': minor +'@hypercerts-org/happyview-modules': minor --- Clients can check multiple actor or entity follow relationships in one request. The new batch queries return one explicitly keyed result for each supplied target, preserving request order and duplicates; null means no indexed relationship, while lookup failures remain errors. diff --git a/.changeset/batch-reaction-counts.md b/.changeset/batch-reaction-counts.md index 92efefc..6c6993e 100644 --- a/.changeset/batch-reaction-counts.md +++ b/.changeset/batch-reaction-counts.md @@ -1,5 +1,5 @@ --- -'@hypercerts-org/hypercerts-api': minor +'@hypercerts-org/happyview-modules': minor --- Add a public query that returns like and repost counts for up to 100 subject records at a time. diff --git a/.changeset/config.json b/.changeset/config.json index 12fd09c..15b06fb 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -12,7 +12,7 @@ "access": "restricted", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": ["hypercerts-api-endpoints"], + "ignore": ["hypercerts-api-endpoints", "@hypercerts-org/api"], "privatePackages": { "version": true, "tag": true diff --git a/.changeset/entity-follower-total-count.md b/.changeset/entity-follower-total-count.md index 0673865..7e049a3 100644 --- a/.changeset/entity-follower-total-count.md +++ b/.changeset/entity-follower-total-count.md @@ -1,5 +1,5 @@ --- -'@hypercerts-org/hypercerts-api': minor +'@hypercerts-org/happyview-modules': minor --- Entity follower results now include `totalCount`, the number of distinct actor–entity relationships before pagination. The count is also returned when a page has no followers. diff --git a/.changeset/rename-happyview-modules.md b/.changeset/rename-happyview-modules.md new file mode 100644 index 0000000..b48b332 --- /dev/null +++ b/.changeset/rename-happyview-modules.md @@ -0,0 +1,5 @@ +--- +'@hypercerts-org/happyview-modules': patch +--- + +Rename the package from `@hypercerts-org/hypercerts-api` to `@hypercerts-org/happyview-modules`, and its directory from `api/` to `happyview-modules/`, so the name says what it is and `@hypercerts-org/api` is free for the TypeScript package. Release tags from this release on are `@hypercerts-org/happyview-modules@X.Y.Z`; earlier releases keep their `@hypercerts-org/hypercerts-api@X.Y.Z` tags. The installer is run from `happyview-modules/` instead of `api/`; the modules themselves are unchanged. diff --git a/.github/workflows/hypercerts-api.yml b/.github/workflows/hypercerts-api.yml index e98fba1..8a8080e 100644 --- a/.github/workflows/hypercerts-api.yml +++ b/.github/workflows/hypercerts-api.yml @@ -14,6 +14,10 @@ on: permissions: contents: read +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + jobs: checks: name: API validation and build @@ -38,13 +42,12 @@ jobs: - name: Install Luacheck run: luarocks install luacheck 1.2.0 + # Reads the pnpm version from the packageManager field in package.json. - uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 - with: - version: 10.15.1 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: - node-version: 24 + node-version-file: .nvmrc cache: pnpm cache-dependency-path: pnpm-lock.yaml @@ -69,6 +72,9 @@ jobs: - name: Build API Lua bundles and explorer run: pnpm build + - name: Check the packed @hypercerts-org/api in a clean consumer + run: pnpm --filter @hypercerts-org/api run check:package + runtime-contracts: name: HTTP tests (HappyView + PostgreSQL) runs-on: ubuntu-latest @@ -90,13 +96,12 @@ jobs: ln -s "$lua_bin" "${lua_bin%/*}/lua5.4" lua5.4 -e 'assert(_VERSION == "Lua 5.4", "expected Lua 5.4")' + # Reads the pnpm version from the packageManager field in package.json. - uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 - with: - version: 10.15.1 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: - node-version: 24 + node-version-file: .nvmrc cache: pnpm cache-dependency-path: pnpm-lock.yaml @@ -154,8 +159,8 @@ jobs: "$runner_temp"/hypercerts-http-*/compose.env) ;; *) echo "Refusing cleanup for credentials outside RUNNER_TEMP: $env_file" >&2; exit 1 ;; esac - compose_file="$(realpath "$GITHUB_WORKSPACE/api/docker-compose.contracts.yml")" - compose=(docker compose --project-name "$project" --env-file "$env_file" --project-directory "$GITHUB_WORKSPACE/api" -f "$compose_file") + compose_file="$(realpath "$GITHUB_WORKSPACE/happyview-modules/docker-compose.contracts.yml")" + compose=(docker compose --project-name "$project" --env-file "$env_file" --project-directory "$GITHUB_WORKSPACE/happyview-modules" -f "$compose_file") container_ids="$("${compose[@]}" ps --all --quiet)" while IFS= read -r id; do [[ -n "$id" ]] || continue diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ab19733..c339ffe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,7 +38,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: - node-version: 24 + node-version-file: .nvmrc cache: pnpm cache-dependency-path: pnpm-lock.yaml @@ -73,7 +73,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: - node-version: 24 + node-version-file: .nvmrc cache: pnpm cache-dependency-path: pnpm-lock.yaml @@ -146,7 +146,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: - node-version: 24 + node-version-file: .nvmrc cache: pnpm cache-dependency-path: pnpm-lock.yaml @@ -167,10 +167,10 @@ jobs: GITHUB_REPOSITORY: ${{ github.repository }} run: | set -euo pipefail - package_name="$(node --print "require('./api/package.json').name")" - version="$(node --print "require('./api/package.json').version")" + package_name="$(node --print "require('./happyview-modules/package.json').name")" + version="$(node --print "require('./happyview-modules/package.json').version")" if [ -z "$package_name" ] || [ -z "$version" ]; then - echo "::error::Could not derive the API bundle name and version from api/package.json" + echo "::error::Could not derive the API bundle name and version from happyview-modules/package.json" exit 1 fi tag="${package_name}@${version}" diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..a45fd52 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24 diff --git a/AGENTS.md b/AGENTS.md index b3844d1..dabb89f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,8 +1,9 @@ # Agent instructions - Use the repository-pinned pnpm version and preserve the lockfile. -- Treat `api/manifest.json` as authoritative for the API modules included in this checkout. -- For API endpoint, contract, or externally visible query-behavior changes, review the user-facing docs and update `.agents/skills/hypercerts-api/` in the same change. This includes the endpoint explorer in `docs/`; keep its committed Lexicon/OpenAPI snapshots and coverage metadata aligned with `api/manifest.json`, module manifests, and handler behavior, and update explorer tests when relevant. Keep the skill's bundled OpenAPI snapshot, endpoint map, and relevant consumer guidance aligned too; because the skill is distributed without this repository, keep its references self-contained and free of repo-relative contract links. +- Treat `happyview-modules/manifest.json` as authoritative for the API modules included in this checkout. +- For API endpoint, contract, or externally visible query-behavior changes, review the user-facing docs and update `.agents/skills/hypercerts-api/` in the same change. This includes the endpoint explorer in `docs/`; keep its committed Lexicon/OpenAPI snapshots and coverage metadata aligned with `happyview-modules/manifest.json`, module manifests, and handler behavior, and update explorer tests when relevant. Keep the skill's bundled OpenAPI snapshot, endpoint map, and relevant consumer guidance aligned too; because the skill is distributed without this repository, keep its references self-contained and free of repo-relative contract links. +- When a query Lexicon, `happyview-modules/manifest.json`, the `@hypercerts-org/lexicon` version in `packages/api/package.json` or the `@atproto/lex` version changes, run `pnpm client:generate` and commit the regenerated `packages/api/src/`. Do not edit generated files there by hand. - Read [CONTRIBUTING.md](CONTRIBUTING.md) for local validation and HTTP runtime test requirements before changing test or installer behavior. - `pnpm install:api` sends admin requests to a HappyView instance and uploads assets. Do not run it unless the user explicitly approves the target and token in the current conversation. - HTTP runtime tests use a task-owned local Compose project and disposable database. Do not target or tear down unrelated services; note that the Compose bridge network permits egress and the configured proxy is not network-level isolation. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b3125de..df03bb5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ ## Set up and validate -Use the repository-pinned pnpm version. From the repository root: +Use Node 24 (pinned in `.nvmrc`, which CI also reads) and the repository-pinned pnpm version. From the repository root: ```sh pnpm install --frozen-lockfile @@ -11,7 +11,7 @@ pnpm check pnpm build ``` -`pnpm test:unit` runs the discovered tests under `api/tests/unit`; unit tests use local fixtures and fake process/network adapters, and do not seed a database or contact HappyView. `pnpm check` also checks generated-source freshness, JavaScript and Lua lint, types, and endpoint tests. `pnpm build` emits Lua handlers declared by the root and module manifests. Shared Lua files are bundled into capability handlers rather than installed independently. +`pnpm test:unit` runs the discovered tests under `happyview-modules/tests/unit`; unit tests use local fixtures and fake process/network adapters, and do not seed a database or contact HappyView. `pnpm check` also checks generated-source freshness, JavaScript and Lua lint, types, endpoint tests, and the `@hypercerts-org/api` package in `packages/api/`. `pnpm build` emits Lua handlers declared by the root and module manifests, builds the endpoint explorer, and builds `@hypercerts-org/api`. Shared Lua files are bundled into capability handlers rather than installed independently. ## API reference snapshots @@ -23,9 +23,17 @@ pnpm docs:sync This updates `docs/sources/index.json`, the committed Lexicon snapshots, `docs/openapi.json`, and `docs/coverage.json`. It uses the repository-pinned `@hypercerts-org/lexicon` dependency and makes no HappyView requests. Coverage reports manifest inclusion only; it does not validate runtime behavior or deployment. See [docs/README.md](docs/README.md) for the source and snapshot policy. +The same changes, and changes to the `@hypercerts-org/lexicon` or `@atproto/lex` version in `packages/api/package.json`, require regenerating the `@hypercerts-org/api` TypeScript package: + +```sh +pnpm client:generate +``` + +`pnpm check` fails while the committed output in `packages/api/src/` is stale. See [packages/api/README.md](packages/api/README.md). + ## HTTP runtime tests -`pnpm test:http` runs the suites in `api/tests/http` against the activity, badge-definition, badge-query, EVM-link, acknowledgement, collection, context-measurement, context attachment and evaluation, contributor-information, funding, location, profile, organization, feature, work-scope-tag, rights, vocabulary-tag, graph, contribution, and feed-reaction query XRPC endpoints installed from this checkout. These tests exercise real HTTP behavior against PostgreSQL, not only Lua handlers with a fake database. +`pnpm test:http` runs the suites in `happyview-modules/tests/http` against the activity, badge-definition, badge-query, EVM-link, acknowledgement, collection, context-measurement, context attachment and evaluation, contributor-information, funding, location, profile, organization, feature, work-scope-tag, rights, vocabulary-tag, graph, contribution, and feed-reaction query XRPC endpoints installed from this checkout. These tests exercise real HTTP behavior against PostgreSQL, not only Lua handlers with a fake database. The local runner requires a local Docker Compose daemon, `psql`, and the pinned PostgreSQL and HappyView images already cached locally. Set `PSQL_PATH` to the absolute path of a trusted `psql` executable: @@ -45,7 +53,7 @@ The HTTP gate fails if it discovers no suites, executes no `node:test` cases, or - Badge-definition retrieval with an icon and allowed-issuer list, publisher-sidecar hydration, author and badge-type filters, `createdAt`/URI pagination ties, and named error responses. - Rights record retrieval and author-filtered listing, nullable publisher sidecars, repeated-author OR filtering, and stable `createdAt`/URI cursor pagination. - EVM-link lookup and listing, actor/address filters, `createdAt`/URI pagination ties in both directions, nullable sidecar hydration, and named error responses. -- Feature-query coverage in `api/tests/http/features.http.test.js` exercises exact retrieval and hydrated or absent author sidecars, author/type and organization-presence filters, bidirectional `createdAt`/URI pagination ties, and named request errors. +- Feature-query coverage in `happyview-modules/tests/http/features.http.test.js` exercises exact retrieval and hydrated or absent author sidecars, author/type and organization-presence filters, bidirectional `createdAt`/URI pagination ties, and named request errors. - Contributor-information retrieval by exact AT-URI and listing with repeated-author filters, cursor pagination, hydrated and missing author sidecars, and named runtime errors. - Work-scope-tag exact-URI retrieval, repeated-author filtering with an empty-result case, hydrated and null publisher sidecars, middle-position `indexedAt` fallback, tied pagination in both directions, and named error responses. - Context-measurement exact retrieval and publisher-sidecar hydration, repeated author/subject filters and negative results, timestamp/URI tie pagination in both directions, missing sidecars, and named runtime errors. @@ -69,4 +77,4 @@ For the pinned HappyView release, ordinary Lua `error()` exceptions return HTTP For pull requests that change the installable API bundle or operator-visible behavior, add a release note following the [Changesets guidance](.changeset/README.md). Documentation-only or endpoint-explorer-only changes do not need a Changeset. -`pnpm install:api` sends admin requests to a HappyView instance and uploads declared assets. By default, conflicting declared assets stop the install before asset writes; `pnpm install:api --override` explicitly replaces only those conflicts. Override does not bypass source/dependency validation, authentication, or profile resolver-setting requirements. If a write request errors, the installer checks the installed asset and treats it as complete only if it matches the bundle. Writes are not rolled back if a later asset fails. Run the installer only for an explicitly approved target with an approved token. Review the target and release notes before installing a released bundle; see [api/README.md](api/README.md) for release installation and `HYPERCERTS_HANDLE_RESOLVER_URL` setup, permission requirements, and retained-setting behavior. +`pnpm install:api` sends admin requests to a HappyView instance and uploads declared assets. By default, conflicting declared assets stop the install before asset writes; `pnpm install:api --override` explicitly replaces only those conflicts. Override does not bypass source/dependency validation, authentication, or profile resolver-setting requirements. If a write request errors, the installer checks the installed asset and treats it as complete only if it matches the bundle. Writes are not rolled back if a later asset fails. Run the installer only for an explicitly approved target with an approved token. Review the target and release notes before installing a released bundle; see [happyview-modules/README.md](happyview-modules/README.md) for release installation and `HYPERCERTS_HANDLE_RESOLVER_URL` setup, permission requirements, and retained-setting behavior. diff --git a/README.md b/README.md index 377aac4..bbf3301 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # Hypercerts API workspace -This repository builds and installs Hypercerts API modules for HappyView. `api/manifest.json` is authoritative for included modules. The endpoint explorer in `docs/` is generated from committed Lexicon snapshots; `pnpm docs:sync` refreshes its index, snapshots, OpenAPI reference, and coverage report from local API sources and pinned dependencies. It does not contact remote Lexicons or HappyView. +This repository builds and installs Hypercerts API modules for HappyView. `happyview-modules/manifest.json` is authoritative for included modules. The endpoint explorer in `docs/` is generated from committed Lexicon snapshots; `pnpm docs:sync` refreshes its index, snapshots, OpenAPI reference, and coverage report from local API sources and pinned dependencies. It does not contact remote Lexicons or HappyView. ## Repository map -- `api/` — installer, manifests, Lua handlers, shared tooling, and unit/HTTP tests. +- `happyview-modules/` — installer, manifests, Lua handlers, shared tooling, and unit/HTTP tests. +- `packages/api/` — `@hypercerts-org/api`, TypeScript query definitions and types generated from the API's query Lexicons. See [packages/api/README.md](packages/api/README.md). - `docs/` — endpoint explorer, generated OpenAPI reference, Lexicon snapshots, coverage report, and explorer tests. - `.changeset/` — release notes and versioning metadata. - `.github/` — GitHub workflows. @@ -12,7 +13,7 @@ This repository builds and installs Hypercerts API modules for HappyView. `api/m ## Checks -Run from the repository root: +Use Node 24, as pinned in `.nvmrc` (CI reads the same file). Run from the repository root: ```sh pnpm install --frozen-lockfile @@ -20,7 +21,7 @@ pnpm check pnpm build ``` -`pnpm check` validates generated handlers, lint, types, API unit tests, and endpoint explorer tests, including read-only docs freshness checks. `pnpm build` refreshes declared Lua bundles and builds the endpoint explorer. These commands do not contact or install to HappyView. +`pnpm check` validates generated handlers, lint, types, API unit tests, endpoint explorer tests, including read-only docs freshness checks, and the `@hypercerts-org/api` package. `pnpm build` refreshes declared Lua bundles, builds the endpoint explorer and builds `@hypercerts-org/api`. These commands do not contact or install to HappyView. For installed-endpoint HTTP tests, run: @@ -32,14 +33,14 @@ This requires Docker Compose, `psql`, and the pinned PostgreSQL and HappyView im ## Install to HappyView -Install workspace dependencies first, then run the installer from `api/` with an approved HappyView URL and scoped admin token. For bundles that include `app.certified.actor.getProfile`, also set `HYPERCERTS_HANDLE_RESOLVER_URL` to an HTTPS origin without credentials, path, query, or fragment: +Install workspace dependencies first, then run the installer from `happyview-modules/` with an approved HappyView URL and scoped admin token. For bundles that include `app.certified.actor.getProfile`, also set `HYPERCERTS_HANDLE_RESOLVER_URL` to an HTTPS origin without credentials, path, query, or fragment: ```sh -cd api +cd happyview-modules HYPERCERTS_HANDLE_RESOLVER_URL='https://resolver.example' \ HAPPYVIEW_BASE_URL='https://your-happyview.example' \ HAPPYVIEW_ADMIN_TOKEN='' \ pnpm install:api ``` -The admin token needs `script-variables:read`; if the resolver setting is absent and the installer must create it, it also needs `script-variables:create`. Conflicting assets stop installation by default; `--override` opts into replacing declared conflicts. The installer sends admin requests and uploads assets, and writes are not rolled back if a later asset fails. Run it only against an explicitly approved target with approved credentials. For tagged-release installation and resolver-setting behavior, see [api/README.md](api/README.md#install-a-released-api-bundle). +The admin token needs `script-variables:read`; if the resolver setting is absent and the installer must create it, it also needs `script-variables:create`. Conflicting assets stop installation by default; `--override` opts into replacing declared conflicts. The installer sends admin requests and uploads assets, and writes are not rolled back if a later asset fails. Run it only against an explicitly approved target with approved credentials. For tagged-release installation and resolver-setting behavior, see [happyview-modules/README.md](happyview-modules/README.md#install-a-released-api-bundle). diff --git a/docs/README.md b/docs/README.md index 201c18f..2dfcc9e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -31,7 +31,7 @@ From the workspace root, run: pnpm docs:sync ``` -The command reads `api/manifest.json`, the registered module manifests, local API Lexicons, and the pinned `@hypercerts-org/lexicon` package. It refreshes the endpoint index, committed Lexicon snapshots, `openapi.json`, and `coverage.json`. Schema references are resolved locally; the command does not fetch remote Lexicons or contact HappyView. Install the repository-pinned dependencies first with `pnpm install --frozen-lockfile`. +The command reads `happyview-modules/manifest.json`, the registered module manifests, local API Lexicons, and the pinned `@hypercerts-org/lexicon` package. It refreshes the endpoint index, committed Lexicon snapshots, `openapi.json`, and `coverage.json`. Schema references are resolved locally; the command does not fetch remote Lexicons or contact HappyView. Install the repository-pinned dependencies first with `pnpm install --frozen-lockfile`. The exact explorer operations and their module inclusion come from the manifest. `coverage.json` describes manifest inclusion only; it does not claim runtime or deployment validation. The endpoint test suite, also run by the workspace-root `pnpm check`, performs a read-only freshness check of the full index metadata, every referenced snapshot (including pinned package schemas), OpenAPI, and coverage against the current API sources. That check requires the pinned Lexicon dependency, but the explorer build and runtime still use committed snapshots without needing an API checkout. diff --git a/docs/coverage.json b/docs/coverage.json index 76e6fe4..9074e5c 100644 --- a/docs/coverage.json +++ b/docs/coverage.json @@ -1,6 +1,6 @@ { "source": { - "apiManifest": "api/manifest.json", + "apiManifest": "happyview-modules/manifest.json", "pinnedLexiconPackage": "1.5.0" }, "runtimeValidation": "not-assessed", diff --git a/docs/openapi.json b/docs/openapi.json index 7b7e440..eba213c 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -8498,6 +8498,6 @@ } } }, - "x-hypercerts-source": "api/manifest.json; @hypercerts-org/lexicon@1.5.0", + "x-hypercerts-source": "happyview-modules/manifest.json; @hypercerts-org/lexicon@1.5.0", "x-hypercerts-unresolved-references": [] } diff --git a/docs/scripts/refresh-sources.mjs b/docs/scripts/refresh-sources.mjs index 1fe257a..c42d4ec 100644 --- a/docs/scripts/refresh-sources.mjs +++ b/docs/scripts/refresh-sources.mjs @@ -6,7 +6,7 @@ import path from 'node:path'; const docsRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); const repositoryRoot = path.resolve(docsRoot, '..'); -const apiRoot = path.join(repositoryRoot, 'api'); +const apiRoot = path.join(repositoryRoot, 'happyview-modules'); const usage = 'Usage: pnpm docs:sync'; function isInside(parent, candidate) { @@ -45,7 +45,7 @@ function pinnedLexiconPackageRoot(apiRoot, packageName) { return path.dirname(requireFromApi.resolve(`${packageName}/package.json`)); } catch (error) { throw new Error( - `Cannot resolve ${packageName} from api/package.json. Install the repository-pinned dependencies with ` + + `Cannot resolve ${packageName} from happyview-modules/package.json. Install the repository-pinned dependencies with ` + '`pnpm install --frozen-lockfile`, then rerun `pnpm check` or `pnpm docs:sync`.', { cause: error }, ); @@ -75,10 +75,10 @@ function indexValidationSources(sources) { const validationSources = new Map(); for (const source of sources ?? []) { if (!source.id || validationSources.has(source.id)) { - throw new Error(`api/manifest.json has a missing or duplicate validation Lexicon ID: ${source.id ?? '(missing)'}`); + throw new Error(`happyview-modules/manifest.json has a missing or duplicate validation Lexicon ID: ${source.id ?? '(missing)'}`); } if (!source.path && !source.packagePath) { - throw new Error(`api/manifest.json has no source path for validation Lexicon ${source.id}`); + throw new Error(`happyview-modules/manifest.json has no source path for validation Lexicon ${source.id}`); } validationSources.set(source.id, source); } @@ -154,7 +154,7 @@ export async function collectDocumentationSources(options = {}) { } if (source.packagePath) { if (!packageVersion) { - throw new Error(`api/package.json does not pin ${packageName}, required by ${label}.`); + throw new Error(`happyview-modules/package.json does not pin ${packageName}, required by ${label}.`); } const resolvedPackageRoot = await getPackageRoot(); const file = resolveFromInside(resolvedPackageRoot, resolvedPackageRoot, source.packagePath, `${label} packagePath`); @@ -176,7 +176,7 @@ export async function collectDocumentationSources(options = {}) { if (existing) return existing.lexicon; const source = validationSources.get(id); if (!source) { - throw new Error(`Cannot resolve Lexicon reference ${JSON.stringify(reference)}: ${id} is not declared in api/manifest.json validationLexicons.`); + throw new Error(`Cannot resolve Lexicon reference ${JSON.stringify(reference)}: ${id} is not declared in happyview-modules/manifest.json validationLexicons.`); } const lexicon = await readSource(source, currentApiRoot, `Validation Lexicon ${id}`); if (lexicon.id !== id) { @@ -242,9 +242,9 @@ export async function collectDocumentationSources(options = {}) { source: { path: sourcePath }, })); const index = { - apiManifest: 'api/manifest.json', + apiManifest: 'happyview-modules/manifest.json', pinnedLexiconPackage: packageVersion ?? null, - sourcePolicy: 'Explorer operations are the query/procedure Lexicons declared by modules in api/manifest.json. Referenced schemas are resolved from that manifest and its pinned Lexicon package; no remote refs are fetched.', + sourcePolicy: 'Explorer operations are the query/procedure Lexicons declared by modules in happyview-modules/manifest.json. Referenced schemas are resolved from that manifest and its pinned Lexicon package; no remote refs are fetched.', runtimeValidation: 'not-assessed', deploymentValidation: 'not-assessed', endpoints, @@ -260,7 +260,7 @@ export async function collectDocumentationSources(options = {}) { async function main() { if (process.argv.includes('--help') || process.argv.includes('-h')) { - console.log(`${usage}\nRefreshes docs/sources/index.json, committed Lexicon snapshots, OpenAPI, and coverage from api/manifest.json.`); + console.log(`${usage}\nRefreshes docs/sources/index.json, committed Lexicon snapshots, OpenAPI, and coverage from happyview-modules/manifest.json.`); return; } if (process.argv.length > 2) { diff --git a/docs/sources/index.json b/docs/sources/index.json index 8adcb7d..8fed6be 100644 --- a/docs/sources/index.json +++ b/docs/sources/index.json @@ -1,7 +1,7 @@ { - "apiManifest": "api/manifest.json", + "apiManifest": "happyview-modules/manifest.json", "pinnedLexiconPackage": "1.5.0", - "sourcePolicy": "Explorer operations are the query/procedure Lexicons declared by modules in api/manifest.json. Referenced schemas are resolved from that manifest and its pinned Lexicon package; no remote refs are fetched.", + "sourcePolicy": "Explorer operations are the query/procedure Lexicons declared by modules in happyview-modules/manifest.json. Referenced schemas are resolved from that manifest and its pinned Lexicon package; no remote refs are fetched.", "runtimeValidation": "not-assessed", "deploymentValidation": "not-assessed", "endpoints": [ diff --git a/docs/test/manifest-sync.test.mjs b/docs/test/manifest-sync.test.mjs index b69583b..cb3c4ce 100644 --- a/docs/test/manifest-sync.test.mjs +++ b/docs/test/manifest-sync.test.mjs @@ -7,7 +7,7 @@ import test from 'node:test'; import { collectDocumentationSources } from '../scripts/refresh-sources.mjs'; const docsRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); -const apiRoot = path.resolve(docsRoot, '..', 'api'); +const apiRoot = path.resolve(docsRoot, '..', 'happyview-modules'); async function readJson(file) { return JSON.parse(await readFile(file, 'utf8')); diff --git a/docs/test/refresh-sources.test.mjs b/docs/test/refresh-sources.test.mjs index 439b6d5..27564bb 100644 --- a/docs/test/refresh-sources.test.mjs +++ b/docs/test/refresh-sources.test.mjs @@ -13,6 +13,6 @@ test('source refresh help describes the manifest-driven workspace command', () = }); assert.equal(result.status, 0); assert.match(result.stdout, /Usage: pnpm docs:sync/); - assert.match(result.stdout, /api\/manifest\.json/); + assert.match(result.stdout, /happyview-modules\/manifest\.json/); assert.equal(result.stderr, ''); }); diff --git a/api/.luacheckrc b/happyview-modules/.luacheckrc similarity index 100% rename from api/.luacheckrc rename to happyview-modules/.luacheckrc diff --git a/api/CHANGELOG.md b/happyview-modules/CHANGELOG.md similarity index 100% rename from api/CHANGELOG.md rename to happyview-modules/CHANGELOG.md diff --git a/api/README.md b/happyview-modules/README.md similarity index 91% rename from api/README.md rename to happyview-modules/README.md index d9d5bd0..93ecae8 100644 --- a/api/README.md +++ b/happyview-modules/README.md @@ -33,13 +33,13 @@ PSQL_PATH="$(command -v psql)" pnpm test:http ## Install a released API bundle -Releases version the installable API bundle in this package; they do not publish to npm or deploy to a HappyView instance. GitHub Releases and tagged source archives are the distribution channel. Choose an `@hypercerts-org/hypercerts-api@X.Y.Z` release tag, clone that snapshot, install its pinned dependencies from the repository root, then run the installer from `api/`: +Releases version the installable API bundle in this package; they do not publish to npm or deploy to a HappyView instance. GitHub Releases and tagged source archives are the distribution channel. Choose an `@hypercerts-org/happyview-modules@X.Y.Z` release tag (releases up to 0.2.0, before the package was renamed, are tagged `@hypercerts-org/hypercerts-api@X.Y.Z`), clone that snapshot, install its pinned dependencies from the repository root, then run the installer from `happyview-modules/`: ```sh -git clone --depth 1 --branch '@hypercerts-org/hypercerts-api@X.Y.Z' https://github.com/hypercerts-org/api.git hypercerts-api +git clone --depth 1 --branch '@hypercerts-org/happyview-modules@X.Y.Z' https://github.com/hypercerts-org/api.git hypercerts-api cd hypercerts-api pnpm install --frozen-lockfile -cd api +cd happyview-modules HYPERCERTS_HANDLE_RESOLVER_URL='https://resolver.example' \ HAPPYVIEW_BASE_URL='https://your-happyview.example' \ HAPPYVIEW_ADMIN_TOKEN='' \ diff --git a/api/docker-compose.contracts.yml b/happyview-modules/docker-compose.contracts.yml similarity index 100% rename from api/docker-compose.contracts.yml rename to happyview-modules/docker-compose.contracts.yml diff --git a/api/eslint.config.js b/happyview-modules/eslint.config.js similarity index 100% rename from api/eslint.config.js rename to happyview-modules/eslint.config.js diff --git a/api/lexicons/app.certified.actor.getOrganization.json b/happyview-modules/lexicons/app.certified.actor.getOrganization.json similarity index 100% rename from api/lexicons/app.certified.actor.getOrganization.json rename to happyview-modules/lexicons/app.certified.actor.getOrganization.json diff --git a/api/lexicons/app.certified.actor.getOrganizations.json b/happyview-modules/lexicons/app.certified.actor.getOrganizations.json similarity index 100% rename from api/lexicons/app.certified.actor.getOrganizations.json rename to happyview-modules/lexicons/app.certified.actor.getOrganizations.json diff --git a/api/lexicons/app.certified.actor.getProfile.json b/happyview-modules/lexicons/app.certified.actor.getProfile.json similarity index 100% rename from api/lexicons/app.certified.actor.getProfile.json rename to happyview-modules/lexicons/app.certified.actor.getProfile.json diff --git a/api/lexicons/app.certified.actor.getProfiles.json b/happyview-modules/lexicons/app.certified.actor.getProfiles.json similarity index 100% rename from api/lexicons/app.certified.actor.getProfiles.json rename to happyview-modules/lexicons/app.certified.actor.getProfiles.json diff --git a/api/lexicons/app.certified.actor.listOrganizations.json b/happyview-modules/lexicons/app.certified.actor.listOrganizations.json similarity index 100% rename from api/lexicons/app.certified.actor.listOrganizations.json rename to happyview-modules/lexicons/app.certified.actor.listOrganizations.json diff --git a/api/lexicons/app.certified.actor.listProfiles.json b/happyview-modules/lexicons/app.certified.actor.listProfiles.json similarity index 100% rename from api/lexicons/app.certified.actor.listProfiles.json rename to happyview-modules/lexicons/app.certified.actor.listProfiles.json diff --git a/api/lexicons/app.certified.actor.searchOrganizations.json b/happyview-modules/lexicons/app.certified.actor.searchOrganizations.json similarity index 100% rename from api/lexicons/app.certified.actor.searchOrganizations.json rename to happyview-modules/lexicons/app.certified.actor.searchOrganizations.json diff --git a/api/lexicons/app.certified.actor.searchProfiles.json b/happyview-modules/lexicons/app.certified.actor.searchProfiles.json similarity index 100% rename from api/lexicons/app.certified.actor.searchProfiles.json rename to happyview-modules/lexicons/app.certified.actor.searchProfiles.json diff --git a/api/lexicons/app.certified.badge.getBadgeAward.json b/happyview-modules/lexicons/app.certified.badge.getBadgeAward.json similarity index 100% rename from api/lexicons/app.certified.badge.getBadgeAward.json rename to happyview-modules/lexicons/app.certified.badge.getBadgeAward.json diff --git a/api/lexicons/app.certified.badge.getBadgeDefinition.json b/happyview-modules/lexicons/app.certified.badge.getBadgeDefinition.json similarity index 100% rename from api/lexicons/app.certified.badge.getBadgeDefinition.json rename to happyview-modules/lexicons/app.certified.badge.getBadgeDefinition.json diff --git a/api/lexicons/app.certified.badge.getBadgeResponse.json b/happyview-modules/lexicons/app.certified.badge.getBadgeResponse.json similarity index 100% rename from api/lexicons/app.certified.badge.getBadgeResponse.json rename to happyview-modules/lexicons/app.certified.badge.getBadgeResponse.json diff --git a/api/lexicons/app.certified.badge.listBadgeAwards.json b/happyview-modules/lexicons/app.certified.badge.listBadgeAwards.json similarity index 100% rename from api/lexicons/app.certified.badge.listBadgeAwards.json rename to happyview-modules/lexicons/app.certified.badge.listBadgeAwards.json diff --git a/api/lexicons/app.certified.badge.listBadgeDefinitions.json b/happyview-modules/lexicons/app.certified.badge.listBadgeDefinitions.json similarity index 100% rename from api/lexicons/app.certified.badge.listBadgeDefinitions.json rename to happyview-modules/lexicons/app.certified.badge.listBadgeDefinitions.json diff --git a/api/lexicons/app.certified.badge.listBadgeResponses.json b/happyview-modules/lexicons/app.certified.badge.listBadgeResponses.json similarity index 100% rename from api/lexicons/app.certified.badge.listBadgeResponses.json rename to happyview-modules/lexicons/app.certified.badge.listBadgeResponses.json diff --git a/api/lexicons/app.certified.badge.searchBadgeDefinitions.json b/happyview-modules/lexicons/app.certified.badge.searchBadgeDefinitions.json similarity index 100% rename from api/lexicons/app.certified.badge.searchBadgeDefinitions.json rename to happyview-modules/lexicons/app.certified.badge.searchBadgeDefinitions.json diff --git a/api/lexicons/app.certified.feed.getActorLikes.json b/happyview-modules/lexicons/app.certified.feed.getActorLikes.json similarity index 100% rename from api/lexicons/app.certified.feed.getActorLikes.json rename to happyview-modules/lexicons/app.certified.feed.getActorLikes.json diff --git a/api/lexicons/app.certified.feed.getActorReactions.json b/happyview-modules/lexicons/app.certified.feed.getActorReactions.json similarity index 100% rename from api/lexicons/app.certified.feed.getActorReactions.json rename to happyview-modules/lexicons/app.certified.feed.getActorReactions.json diff --git a/api/lexicons/app.certified.feed.getActorReposts.json b/happyview-modules/lexicons/app.certified.feed.getActorReposts.json similarity index 100% rename from api/lexicons/app.certified.feed.getActorReposts.json rename to happyview-modules/lexicons/app.certified.feed.getActorReposts.json diff --git a/api/lexicons/app.certified.feed.getLikes.json b/happyview-modules/lexicons/app.certified.feed.getLikes.json similarity index 100% rename from api/lexicons/app.certified.feed.getLikes.json rename to happyview-modules/lexicons/app.certified.feed.getLikes.json diff --git a/api/lexicons/app.certified.feed.getReactionCounts.json b/happyview-modules/lexicons/app.certified.feed.getReactionCounts.json similarity index 100% rename from api/lexicons/app.certified.feed.getReactionCounts.json rename to happyview-modules/lexicons/app.certified.feed.getReactionCounts.json diff --git a/api/lexicons/app.certified.feed.getReposts.json b/happyview-modules/lexicons/app.certified.feed.getReposts.json similarity index 100% rename from api/lexicons/app.certified.feed.getReposts.json rename to happyview-modules/lexicons/app.certified.feed.getReposts.json diff --git a/api/lexicons/app.certified.graph.getEntityFollow.json b/happyview-modules/lexicons/app.certified.graph.getEntityFollow.json similarity index 100% rename from api/lexicons/app.certified.graph.getEntityFollow.json rename to happyview-modules/lexicons/app.certified.graph.getEntityFollow.json diff --git a/api/lexicons/app.certified.graph.getEntityFollows.json b/happyview-modules/lexicons/app.certified.graph.getEntityFollows.json similarity index 100% rename from api/lexicons/app.certified.graph.getEntityFollows.json rename to happyview-modules/lexicons/app.certified.graph.getEntityFollows.json diff --git a/api/lexicons/app.certified.graph.getFollow.json b/happyview-modules/lexicons/app.certified.graph.getFollow.json similarity index 100% rename from api/lexicons/app.certified.graph.getFollow.json rename to happyview-modules/lexicons/app.certified.graph.getFollow.json diff --git a/api/lexicons/app.certified.graph.getFollows.json b/happyview-modules/lexicons/app.certified.graph.getFollows.json similarity index 100% rename from api/lexicons/app.certified.graph.getFollows.json rename to happyview-modules/lexicons/app.certified.graph.getFollows.json diff --git a/api/lexicons/app.certified.graph.listActorFollowers.json b/happyview-modules/lexicons/app.certified.graph.listActorFollowers.json similarity index 100% rename from api/lexicons/app.certified.graph.listActorFollowers.json rename to happyview-modules/lexicons/app.certified.graph.listActorFollowers.json diff --git a/api/lexicons/app.certified.graph.listActorFollowing.json b/happyview-modules/lexicons/app.certified.graph.listActorFollowing.json similarity index 100% rename from api/lexicons/app.certified.graph.listActorFollowing.json rename to happyview-modules/lexicons/app.certified.graph.listActorFollowing.json diff --git a/api/lexicons/app.certified.graph.listEntityFollowers.json b/happyview-modules/lexicons/app.certified.graph.listEntityFollowers.json similarity index 100% rename from api/lexicons/app.certified.graph.listEntityFollowers.json rename to happyview-modules/lexicons/app.certified.graph.listEntityFollowers.json diff --git a/api/lexicons/app.certified.graph.listEntityFollowing.json b/happyview-modules/lexicons/app.certified.graph.listEntityFollowing.json similarity index 100% rename from api/lexicons/app.certified.graph.listEntityFollowing.json rename to happyview-modules/lexicons/app.certified.graph.listEntityFollowing.json diff --git a/api/lexicons/app.certified.graph.listRecentFollows.json b/happyview-modules/lexicons/app.certified.graph.listRecentFollows.json similarity index 100% rename from api/lexicons/app.certified.graph.listRecentFollows.json rename to happyview-modules/lexicons/app.certified.graph.listRecentFollows.json diff --git a/api/lexicons/app.certified.link.getEvmLink.json b/happyview-modules/lexicons/app.certified.link.getEvmLink.json similarity index 100% rename from api/lexicons/app.certified.link.getEvmLink.json rename to happyview-modules/lexicons/app.certified.link.getEvmLink.json diff --git a/api/lexicons/app.certified.link.listEvmLinks.json b/happyview-modules/lexicons/app.certified.link.listEvmLinks.json similarity index 100% rename from api/lexicons/app.certified.link.listEvmLinks.json rename to happyview-modules/lexicons/app.certified.link.listEvmLinks.json diff --git a/api/lexicons/app.certified.location.getLocation.json b/happyview-modules/lexicons/app.certified.location.getLocation.json similarity index 100% rename from api/lexicons/app.certified.location.getLocation.json rename to happyview-modules/lexicons/app.certified.location.getLocation.json diff --git a/api/lexicons/app.certified.location.listLocations.json b/happyview-modules/lexicons/app.certified.location.listLocations.json similarity index 100% rename from api/lexicons/app.certified.location.listLocations.json rename to happyview-modules/lexicons/app.certified.location.listLocations.json diff --git a/api/lexicons/org.hypercerts.api.defs.json b/happyview-modules/lexicons/org.hypercerts.api.defs.json similarity index 100% rename from api/lexicons/org.hypercerts.api.defs.json rename to happyview-modules/lexicons/org.hypercerts.api.defs.json diff --git a/api/lexicons/org.hypercerts.claim.getActivity.json b/happyview-modules/lexicons/org.hypercerts.claim.getActivity.json similarity index 100% rename from api/lexicons/org.hypercerts.claim.getActivity.json rename to happyview-modules/lexicons/org.hypercerts.claim.getActivity.json diff --git a/api/lexicons/org.hypercerts.claim.getContribution.json b/happyview-modules/lexicons/org.hypercerts.claim.getContribution.json similarity index 100% rename from api/lexicons/org.hypercerts.claim.getContribution.json rename to happyview-modules/lexicons/org.hypercerts.claim.getContribution.json diff --git a/api/lexicons/org.hypercerts.claim.getContributorInformation.json b/happyview-modules/lexicons/org.hypercerts.claim.getContributorInformation.json similarity index 100% rename from api/lexicons/org.hypercerts.claim.getContributorInformation.json rename to happyview-modules/lexicons/org.hypercerts.claim.getContributorInformation.json diff --git a/api/lexicons/org.hypercerts.claim.getRights.json b/happyview-modules/lexicons/org.hypercerts.claim.getRights.json similarity index 100% rename from api/lexicons/org.hypercerts.claim.getRights.json rename to happyview-modules/lexicons/org.hypercerts.claim.getRights.json diff --git a/api/lexicons/org.hypercerts.claim.listActivities.json b/happyview-modules/lexicons/org.hypercerts.claim.listActivities.json similarity index 100% rename from api/lexicons/org.hypercerts.claim.listActivities.json rename to happyview-modules/lexicons/org.hypercerts.claim.listActivities.json diff --git a/api/lexicons/org.hypercerts.claim.listContributions.json b/happyview-modules/lexicons/org.hypercerts.claim.listContributions.json similarity index 100% rename from api/lexicons/org.hypercerts.claim.listContributions.json rename to happyview-modules/lexicons/org.hypercerts.claim.listContributions.json diff --git a/api/lexicons/org.hypercerts.claim.listContributorInformation.json b/happyview-modules/lexicons/org.hypercerts.claim.listContributorInformation.json similarity index 100% rename from api/lexicons/org.hypercerts.claim.listContributorInformation.json rename to happyview-modules/lexicons/org.hypercerts.claim.listContributorInformation.json diff --git a/api/lexicons/org.hypercerts.claim.listRights.json b/happyview-modules/lexicons/org.hypercerts.claim.listRights.json similarity index 100% rename from api/lexicons/org.hypercerts.claim.listRights.json rename to happyview-modules/lexicons/org.hypercerts.claim.listRights.json diff --git a/api/lexicons/org.hypercerts.claim.searchActivities.json b/happyview-modules/lexicons/org.hypercerts.claim.searchActivities.json similarity index 100% rename from api/lexicons/org.hypercerts.claim.searchActivities.json rename to happyview-modules/lexicons/org.hypercerts.claim.searchActivities.json diff --git a/api/lexicons/org.hypercerts.collection.getCollection.json b/happyview-modules/lexicons/org.hypercerts.collection.getCollection.json similarity index 100% rename from api/lexicons/org.hypercerts.collection.getCollection.json rename to happyview-modules/lexicons/org.hypercerts.collection.getCollection.json diff --git a/api/lexicons/org.hypercerts.collection.listCollectionItems.json b/happyview-modules/lexicons/org.hypercerts.collection.listCollectionItems.json similarity index 100% rename from api/lexicons/org.hypercerts.collection.listCollectionItems.json rename to happyview-modules/lexicons/org.hypercerts.collection.listCollectionItems.json diff --git a/api/lexicons/org.hypercerts.collection.listCollections.json b/happyview-modules/lexicons/org.hypercerts.collection.listCollections.json similarity index 100% rename from api/lexicons/org.hypercerts.collection.listCollections.json rename to happyview-modules/lexicons/org.hypercerts.collection.listCollections.json diff --git a/api/lexicons/org.hypercerts.collection.searchCollections.json b/happyview-modules/lexicons/org.hypercerts.collection.searchCollections.json similarity index 100% rename from api/lexicons/org.hypercerts.collection.searchCollections.json rename to happyview-modules/lexicons/org.hypercerts.collection.searchCollections.json diff --git a/api/lexicons/org.hypercerts.context.getAcknowledgement.json b/happyview-modules/lexicons/org.hypercerts.context.getAcknowledgement.json similarity index 100% rename from api/lexicons/org.hypercerts.context.getAcknowledgement.json rename to happyview-modules/lexicons/org.hypercerts.context.getAcknowledgement.json diff --git a/api/lexicons/org.hypercerts.context.getAttachment.json b/happyview-modules/lexicons/org.hypercerts.context.getAttachment.json similarity index 100% rename from api/lexicons/org.hypercerts.context.getAttachment.json rename to happyview-modules/lexicons/org.hypercerts.context.getAttachment.json diff --git a/api/lexicons/org.hypercerts.context.getEvaluation.json b/happyview-modules/lexicons/org.hypercerts.context.getEvaluation.json similarity index 100% rename from api/lexicons/org.hypercerts.context.getEvaluation.json rename to happyview-modules/lexicons/org.hypercerts.context.getEvaluation.json diff --git a/api/lexicons/org.hypercerts.context.getMeasurement.json b/happyview-modules/lexicons/org.hypercerts.context.getMeasurement.json similarity index 100% rename from api/lexicons/org.hypercerts.context.getMeasurement.json rename to happyview-modules/lexicons/org.hypercerts.context.getMeasurement.json diff --git a/api/lexicons/org.hypercerts.context.listAcknowledgements.json b/happyview-modules/lexicons/org.hypercerts.context.listAcknowledgements.json similarity index 100% rename from api/lexicons/org.hypercerts.context.listAcknowledgements.json rename to happyview-modules/lexicons/org.hypercerts.context.listAcknowledgements.json diff --git a/api/lexicons/org.hypercerts.context.listAttachments.json b/happyview-modules/lexicons/org.hypercerts.context.listAttachments.json similarity index 100% rename from api/lexicons/org.hypercerts.context.listAttachments.json rename to happyview-modules/lexicons/org.hypercerts.context.listAttachments.json diff --git a/api/lexicons/org.hypercerts.context.listEvaluations.json b/happyview-modules/lexicons/org.hypercerts.context.listEvaluations.json similarity index 100% rename from api/lexicons/org.hypercerts.context.listEvaluations.json rename to happyview-modules/lexicons/org.hypercerts.context.listEvaluations.json diff --git a/api/lexicons/org.hypercerts.context.listMeasurements.json b/happyview-modules/lexicons/org.hypercerts.context.listMeasurements.json similarity index 100% rename from api/lexicons/org.hypercerts.context.listMeasurements.json rename to happyview-modules/lexicons/org.hypercerts.context.listMeasurements.json diff --git a/api/lexicons/org.hypercerts.entity.defs.json b/happyview-modules/lexicons/org.hypercerts.entity.defs.json similarity index 100% rename from api/lexicons/org.hypercerts.entity.defs.json rename to happyview-modules/lexicons/org.hypercerts.entity.defs.json diff --git a/api/lexicons/org.hypercerts.entity.getFeature.json b/happyview-modules/lexicons/org.hypercerts.entity.getFeature.json similarity index 100% rename from api/lexicons/org.hypercerts.entity.getFeature.json rename to happyview-modules/lexicons/org.hypercerts.entity.getFeature.json diff --git a/api/lexicons/org.hypercerts.entity.listFeatures.json b/happyview-modules/lexicons/org.hypercerts.entity.listFeatures.json similarity index 100% rename from api/lexicons/org.hypercerts.entity.listFeatures.json rename to happyview-modules/lexicons/org.hypercerts.entity.listFeatures.json diff --git a/api/lexicons/org.hypercerts.funding.getReceipt.json b/happyview-modules/lexicons/org.hypercerts.funding.getReceipt.json similarity index 100% rename from api/lexicons/org.hypercerts.funding.getReceipt.json rename to happyview-modules/lexicons/org.hypercerts.funding.getReceipt.json diff --git a/api/lexicons/org.hypercerts.funding.listReceipts.json b/happyview-modules/lexicons/org.hypercerts.funding.listReceipts.json similarity index 100% rename from api/lexicons/org.hypercerts.funding.listReceipts.json rename to happyview-modules/lexicons/org.hypercerts.funding.listReceipts.json diff --git a/api/lexicons/org.hypercerts.vocab.getVocabTag.json b/happyview-modules/lexicons/org.hypercerts.vocab.getVocabTag.json similarity index 100% rename from api/lexicons/org.hypercerts.vocab.getVocabTag.json rename to happyview-modules/lexicons/org.hypercerts.vocab.getVocabTag.json diff --git a/api/lexicons/org.hypercerts.vocab.listVocabTags.json b/happyview-modules/lexicons/org.hypercerts.vocab.listVocabTags.json similarity index 100% rename from api/lexicons/org.hypercerts.vocab.listVocabTags.json rename to happyview-modules/lexicons/org.hypercerts.vocab.listVocabTags.json diff --git a/api/lexicons/org.hypercerts.workscope.getWorkscopeTag.json b/happyview-modules/lexicons/org.hypercerts.workscope.getWorkscopeTag.json similarity index 100% rename from api/lexicons/org.hypercerts.workscope.getWorkscopeTag.json rename to happyview-modules/lexicons/org.hypercerts.workscope.getWorkscopeTag.json diff --git a/api/lexicons/org.hypercerts.workscope.listWorkscopeTags.json b/happyview-modules/lexicons/org.hypercerts.workscope.listWorkscopeTags.json similarity index 100% rename from api/lexicons/org.hypercerts.workscope.listWorkscopeTags.json rename to happyview-modules/lexicons/org.hypercerts.workscope.listWorkscopeTags.json diff --git a/api/lua/endpoints/getAcknowledgement.lua b/happyview-modules/lua/endpoints/getAcknowledgement.lua similarity index 100% rename from api/lua/endpoints/getAcknowledgement.lua rename to happyview-modules/lua/endpoints/getAcknowledgement.lua diff --git a/api/lua/endpoints/getActivity.lua b/happyview-modules/lua/endpoints/getActivity.lua similarity index 100% rename from api/lua/endpoints/getActivity.lua rename to happyview-modules/lua/endpoints/getActivity.lua diff --git a/api/lua/endpoints/getActorLikes.lua b/happyview-modules/lua/endpoints/getActorLikes.lua similarity index 100% rename from api/lua/endpoints/getActorLikes.lua rename to happyview-modules/lua/endpoints/getActorLikes.lua diff --git a/api/lua/endpoints/getActorReactions.lua b/happyview-modules/lua/endpoints/getActorReactions.lua similarity index 100% rename from api/lua/endpoints/getActorReactions.lua rename to happyview-modules/lua/endpoints/getActorReactions.lua diff --git a/api/lua/endpoints/getActorReposts.lua b/happyview-modules/lua/endpoints/getActorReposts.lua similarity index 100% rename from api/lua/endpoints/getActorReposts.lua rename to happyview-modules/lua/endpoints/getActorReposts.lua diff --git a/api/lua/endpoints/getAttachment.lua b/happyview-modules/lua/endpoints/getAttachment.lua similarity index 100% rename from api/lua/endpoints/getAttachment.lua rename to happyview-modules/lua/endpoints/getAttachment.lua diff --git a/api/lua/endpoints/getBadgeAward.lua b/happyview-modules/lua/endpoints/getBadgeAward.lua similarity index 100% rename from api/lua/endpoints/getBadgeAward.lua rename to happyview-modules/lua/endpoints/getBadgeAward.lua diff --git a/api/lua/endpoints/getBadgeDefinition.lua b/happyview-modules/lua/endpoints/getBadgeDefinition.lua similarity index 100% rename from api/lua/endpoints/getBadgeDefinition.lua rename to happyview-modules/lua/endpoints/getBadgeDefinition.lua diff --git a/api/lua/endpoints/getBadgeResponse.lua b/happyview-modules/lua/endpoints/getBadgeResponse.lua similarity index 100% rename from api/lua/endpoints/getBadgeResponse.lua rename to happyview-modules/lua/endpoints/getBadgeResponse.lua diff --git a/api/lua/endpoints/getCollection.lua b/happyview-modules/lua/endpoints/getCollection.lua similarity index 100% rename from api/lua/endpoints/getCollection.lua rename to happyview-modules/lua/endpoints/getCollection.lua diff --git a/api/lua/endpoints/getContribution.lua b/happyview-modules/lua/endpoints/getContribution.lua similarity index 100% rename from api/lua/endpoints/getContribution.lua rename to happyview-modules/lua/endpoints/getContribution.lua diff --git a/api/lua/endpoints/getContributorInformation.lua b/happyview-modules/lua/endpoints/getContributorInformation.lua similarity index 100% rename from api/lua/endpoints/getContributorInformation.lua rename to happyview-modules/lua/endpoints/getContributorInformation.lua diff --git a/api/lua/endpoints/getEntityFollow.lua b/happyview-modules/lua/endpoints/getEntityFollow.lua similarity index 100% rename from api/lua/endpoints/getEntityFollow.lua rename to happyview-modules/lua/endpoints/getEntityFollow.lua diff --git a/api/lua/endpoints/getEntityFollows.lua b/happyview-modules/lua/endpoints/getEntityFollows.lua similarity index 100% rename from api/lua/endpoints/getEntityFollows.lua rename to happyview-modules/lua/endpoints/getEntityFollows.lua diff --git a/api/lua/endpoints/getEvaluation.lua b/happyview-modules/lua/endpoints/getEvaluation.lua similarity index 100% rename from api/lua/endpoints/getEvaluation.lua rename to happyview-modules/lua/endpoints/getEvaluation.lua diff --git a/api/lua/endpoints/getEvmLink.lua b/happyview-modules/lua/endpoints/getEvmLink.lua similarity index 100% rename from api/lua/endpoints/getEvmLink.lua rename to happyview-modules/lua/endpoints/getEvmLink.lua diff --git a/api/lua/endpoints/getFeature.lua b/happyview-modules/lua/endpoints/getFeature.lua similarity index 100% rename from api/lua/endpoints/getFeature.lua rename to happyview-modules/lua/endpoints/getFeature.lua diff --git a/api/lua/endpoints/getFollow.lua b/happyview-modules/lua/endpoints/getFollow.lua similarity index 100% rename from api/lua/endpoints/getFollow.lua rename to happyview-modules/lua/endpoints/getFollow.lua diff --git a/api/lua/endpoints/getFollows.lua b/happyview-modules/lua/endpoints/getFollows.lua similarity index 100% rename from api/lua/endpoints/getFollows.lua rename to happyview-modules/lua/endpoints/getFollows.lua diff --git a/api/lua/endpoints/getLikes.lua b/happyview-modules/lua/endpoints/getLikes.lua similarity index 100% rename from api/lua/endpoints/getLikes.lua rename to happyview-modules/lua/endpoints/getLikes.lua diff --git a/api/lua/endpoints/getLocation.lua b/happyview-modules/lua/endpoints/getLocation.lua similarity index 100% rename from api/lua/endpoints/getLocation.lua rename to happyview-modules/lua/endpoints/getLocation.lua diff --git a/api/lua/endpoints/getMeasurement.lua b/happyview-modules/lua/endpoints/getMeasurement.lua similarity index 100% rename from api/lua/endpoints/getMeasurement.lua rename to happyview-modules/lua/endpoints/getMeasurement.lua diff --git a/api/lua/endpoints/getOrganization.lua b/happyview-modules/lua/endpoints/getOrganization.lua similarity index 100% rename from api/lua/endpoints/getOrganization.lua rename to happyview-modules/lua/endpoints/getOrganization.lua diff --git a/api/lua/endpoints/getOrganizations.lua b/happyview-modules/lua/endpoints/getOrganizations.lua similarity index 100% rename from api/lua/endpoints/getOrganizations.lua rename to happyview-modules/lua/endpoints/getOrganizations.lua diff --git a/api/lua/endpoints/getProfile.lua b/happyview-modules/lua/endpoints/getProfile.lua similarity index 100% rename from api/lua/endpoints/getProfile.lua rename to happyview-modules/lua/endpoints/getProfile.lua diff --git a/api/lua/endpoints/getProfiles.lua b/happyview-modules/lua/endpoints/getProfiles.lua similarity index 100% rename from api/lua/endpoints/getProfiles.lua rename to happyview-modules/lua/endpoints/getProfiles.lua diff --git a/api/lua/endpoints/getReactionCounts.lua b/happyview-modules/lua/endpoints/getReactionCounts.lua similarity index 100% rename from api/lua/endpoints/getReactionCounts.lua rename to happyview-modules/lua/endpoints/getReactionCounts.lua diff --git a/api/lua/endpoints/getReceipt.lua b/happyview-modules/lua/endpoints/getReceipt.lua similarity index 100% rename from api/lua/endpoints/getReceipt.lua rename to happyview-modules/lua/endpoints/getReceipt.lua diff --git a/api/lua/endpoints/getReposts.lua b/happyview-modules/lua/endpoints/getReposts.lua similarity index 100% rename from api/lua/endpoints/getReposts.lua rename to happyview-modules/lua/endpoints/getReposts.lua diff --git a/api/lua/endpoints/getRights.lua b/happyview-modules/lua/endpoints/getRights.lua similarity index 100% rename from api/lua/endpoints/getRights.lua rename to happyview-modules/lua/endpoints/getRights.lua diff --git a/api/lua/endpoints/getVocabTag.lua b/happyview-modules/lua/endpoints/getVocabTag.lua similarity index 100% rename from api/lua/endpoints/getVocabTag.lua rename to happyview-modules/lua/endpoints/getVocabTag.lua diff --git a/api/lua/endpoints/getWorkscopeTag.lua b/happyview-modules/lua/endpoints/getWorkscopeTag.lua similarity index 100% rename from api/lua/endpoints/getWorkscopeTag.lua rename to happyview-modules/lua/endpoints/getWorkscopeTag.lua diff --git a/api/lua/endpoints/listAcknowledgements.lua b/happyview-modules/lua/endpoints/listAcknowledgements.lua similarity index 100% rename from api/lua/endpoints/listAcknowledgements.lua rename to happyview-modules/lua/endpoints/listAcknowledgements.lua diff --git a/api/lua/endpoints/listActivities.lua b/happyview-modules/lua/endpoints/listActivities.lua similarity index 100% rename from api/lua/endpoints/listActivities.lua rename to happyview-modules/lua/endpoints/listActivities.lua diff --git a/api/lua/endpoints/listActorFollowers.lua b/happyview-modules/lua/endpoints/listActorFollowers.lua similarity index 100% rename from api/lua/endpoints/listActorFollowers.lua rename to happyview-modules/lua/endpoints/listActorFollowers.lua diff --git a/api/lua/endpoints/listActorFollowing.lua b/happyview-modules/lua/endpoints/listActorFollowing.lua similarity index 100% rename from api/lua/endpoints/listActorFollowing.lua rename to happyview-modules/lua/endpoints/listActorFollowing.lua diff --git a/api/lua/endpoints/listAttachments.lua b/happyview-modules/lua/endpoints/listAttachments.lua similarity index 100% rename from api/lua/endpoints/listAttachments.lua rename to happyview-modules/lua/endpoints/listAttachments.lua diff --git a/api/lua/endpoints/listBadgeAwards.lua b/happyview-modules/lua/endpoints/listBadgeAwards.lua similarity index 100% rename from api/lua/endpoints/listBadgeAwards.lua rename to happyview-modules/lua/endpoints/listBadgeAwards.lua diff --git a/api/lua/endpoints/listBadgeDefinitions.lua b/happyview-modules/lua/endpoints/listBadgeDefinitions.lua similarity index 100% rename from api/lua/endpoints/listBadgeDefinitions.lua rename to happyview-modules/lua/endpoints/listBadgeDefinitions.lua diff --git a/api/lua/endpoints/listBadgeResponses.lua b/happyview-modules/lua/endpoints/listBadgeResponses.lua similarity index 100% rename from api/lua/endpoints/listBadgeResponses.lua rename to happyview-modules/lua/endpoints/listBadgeResponses.lua diff --git a/api/lua/endpoints/listCollectionItems.lua b/happyview-modules/lua/endpoints/listCollectionItems.lua similarity index 100% rename from api/lua/endpoints/listCollectionItems.lua rename to happyview-modules/lua/endpoints/listCollectionItems.lua diff --git a/api/lua/endpoints/listCollections.lua b/happyview-modules/lua/endpoints/listCollections.lua similarity index 100% rename from api/lua/endpoints/listCollections.lua rename to happyview-modules/lua/endpoints/listCollections.lua diff --git a/api/lua/endpoints/listContributions.lua b/happyview-modules/lua/endpoints/listContributions.lua similarity index 100% rename from api/lua/endpoints/listContributions.lua rename to happyview-modules/lua/endpoints/listContributions.lua diff --git a/api/lua/endpoints/listContributorInformation.lua b/happyview-modules/lua/endpoints/listContributorInformation.lua similarity index 100% rename from api/lua/endpoints/listContributorInformation.lua rename to happyview-modules/lua/endpoints/listContributorInformation.lua diff --git a/api/lua/endpoints/listEntityFollowers.lua b/happyview-modules/lua/endpoints/listEntityFollowers.lua similarity index 100% rename from api/lua/endpoints/listEntityFollowers.lua rename to happyview-modules/lua/endpoints/listEntityFollowers.lua diff --git a/api/lua/endpoints/listEntityFollowing.lua b/happyview-modules/lua/endpoints/listEntityFollowing.lua similarity index 100% rename from api/lua/endpoints/listEntityFollowing.lua rename to happyview-modules/lua/endpoints/listEntityFollowing.lua diff --git a/api/lua/endpoints/listEvaluations.lua b/happyview-modules/lua/endpoints/listEvaluations.lua similarity index 100% rename from api/lua/endpoints/listEvaluations.lua rename to happyview-modules/lua/endpoints/listEvaluations.lua diff --git a/api/lua/endpoints/listEvmLinks.lua b/happyview-modules/lua/endpoints/listEvmLinks.lua similarity index 100% rename from api/lua/endpoints/listEvmLinks.lua rename to happyview-modules/lua/endpoints/listEvmLinks.lua diff --git a/api/lua/endpoints/listFeatures.lua b/happyview-modules/lua/endpoints/listFeatures.lua similarity index 100% rename from api/lua/endpoints/listFeatures.lua rename to happyview-modules/lua/endpoints/listFeatures.lua diff --git a/api/lua/endpoints/listLocations.lua b/happyview-modules/lua/endpoints/listLocations.lua similarity index 100% rename from api/lua/endpoints/listLocations.lua rename to happyview-modules/lua/endpoints/listLocations.lua diff --git a/api/lua/endpoints/listMeasurements.lua b/happyview-modules/lua/endpoints/listMeasurements.lua similarity index 100% rename from api/lua/endpoints/listMeasurements.lua rename to happyview-modules/lua/endpoints/listMeasurements.lua diff --git a/api/lua/endpoints/listOrganizations.lua b/happyview-modules/lua/endpoints/listOrganizations.lua similarity index 100% rename from api/lua/endpoints/listOrganizations.lua rename to happyview-modules/lua/endpoints/listOrganizations.lua diff --git a/api/lua/endpoints/listProfiles.lua b/happyview-modules/lua/endpoints/listProfiles.lua similarity index 100% rename from api/lua/endpoints/listProfiles.lua rename to happyview-modules/lua/endpoints/listProfiles.lua diff --git a/api/lua/endpoints/listReceipts.lua b/happyview-modules/lua/endpoints/listReceipts.lua similarity index 100% rename from api/lua/endpoints/listReceipts.lua rename to happyview-modules/lua/endpoints/listReceipts.lua diff --git a/api/lua/endpoints/listRecentFollows.lua b/happyview-modules/lua/endpoints/listRecentFollows.lua similarity index 100% rename from api/lua/endpoints/listRecentFollows.lua rename to happyview-modules/lua/endpoints/listRecentFollows.lua diff --git a/api/lua/endpoints/listRights.lua b/happyview-modules/lua/endpoints/listRights.lua similarity index 100% rename from api/lua/endpoints/listRights.lua rename to happyview-modules/lua/endpoints/listRights.lua diff --git a/api/lua/endpoints/listVocabTags.lua b/happyview-modules/lua/endpoints/listVocabTags.lua similarity index 100% rename from api/lua/endpoints/listVocabTags.lua rename to happyview-modules/lua/endpoints/listVocabTags.lua diff --git a/api/lua/endpoints/listWorkscopeTags.lua b/happyview-modules/lua/endpoints/listWorkscopeTags.lua similarity index 100% rename from api/lua/endpoints/listWorkscopeTags.lua rename to happyview-modules/lua/endpoints/listWorkscopeTags.lua diff --git a/api/lua/endpoints/searchActivities.lua b/happyview-modules/lua/endpoints/searchActivities.lua similarity index 100% rename from api/lua/endpoints/searchActivities.lua rename to happyview-modules/lua/endpoints/searchActivities.lua diff --git a/api/lua/endpoints/searchBadgeDefinitions.lua b/happyview-modules/lua/endpoints/searchBadgeDefinitions.lua similarity index 100% rename from api/lua/endpoints/searchBadgeDefinitions.lua rename to happyview-modules/lua/endpoints/searchBadgeDefinitions.lua diff --git a/api/lua/endpoints/searchCollections.lua b/happyview-modules/lua/endpoints/searchCollections.lua similarity index 100% rename from api/lua/endpoints/searchCollections.lua rename to happyview-modules/lua/endpoints/searchCollections.lua diff --git a/api/lua/endpoints/searchOrganizations.lua b/happyview-modules/lua/endpoints/searchOrganizations.lua similarity index 100% rename from api/lua/endpoints/searchOrganizations.lua rename to happyview-modules/lua/endpoints/searchOrganizations.lua diff --git a/api/lua/endpoints/searchProfiles.lua b/happyview-modules/lua/endpoints/searchProfiles.lua similarity index 100% rename from api/lua/endpoints/searchProfiles.lua rename to happyview-modules/lua/endpoints/searchProfiles.lua diff --git a/api/lua/shared/acknowledgement.lua b/happyview-modules/lua/shared/acknowledgement.lua similarity index 100% rename from api/lua/shared/acknowledgement.lua rename to happyview-modules/lua/shared/acknowledgement.lua diff --git a/api/lua/shared/acknowledgementList.lua b/happyview-modules/lua/shared/acknowledgementList.lua similarity index 100% rename from api/lua/shared/acknowledgementList.lua rename to happyview-modules/lua/shared/acknowledgementList.lua diff --git a/api/lua/shared/activity.lua b/happyview-modules/lua/shared/activity.lua similarity index 100% rename from api/lua/shared/activity.lua rename to happyview-modules/lua/shared/activity.lua diff --git a/api/lua/shared/activityList.lua b/happyview-modules/lua/shared/activityList.lua similarity index 100% rename from api/lua/shared/activityList.lua rename to happyview-modules/lua/shared/activityList.lua diff --git a/api/lua/shared/activityProjection.lua b/happyview-modules/lua/shared/activityProjection.lua similarity index 100% rename from api/lua/shared/activityProjection.lua rename to happyview-modules/lua/shared/activityProjection.lua diff --git a/api/lua/shared/actorFollow.lua b/happyview-modules/lua/shared/actorFollow.lua similarity index 100% rename from api/lua/shared/actorFollow.lua rename to happyview-modules/lua/shared/actorFollow.lua diff --git a/api/lua/shared/actorFollowList.lua b/happyview-modules/lua/shared/actorFollowList.lua similarity index 100% rename from api/lua/shared/actorFollowList.lua rename to happyview-modules/lua/shared/actorFollowList.lua diff --git a/api/lua/shared/actorFollowLookup.lua b/happyview-modules/lua/shared/actorFollowLookup.lua similarity index 100% rename from api/lua/shared/actorFollowLookup.lua rename to happyview-modules/lua/shared/actorFollowLookup.lua diff --git a/api/lua/shared/actorView.lua b/happyview-modules/lua/shared/actorView.lua similarity index 100% rename from api/lua/shared/actorView.lua rename to happyview-modules/lua/shared/actorView.lua diff --git a/api/lua/shared/attachment.lua b/happyview-modules/lua/shared/attachment.lua similarity index 100% rename from api/lua/shared/attachment.lua rename to happyview-modules/lua/shared/attachment.lua diff --git a/api/lua/shared/attachmentList.lua b/happyview-modules/lua/shared/attachmentList.lua similarity index 100% rename from api/lua/shared/attachmentList.lua rename to happyview-modules/lua/shared/attachmentList.lua diff --git a/api/lua/shared/badgeDefinitionValidation.lua b/happyview-modules/lua/shared/badgeDefinitionValidation.lua similarity index 100% rename from api/lua/shared/badgeDefinitionValidation.lua rename to happyview-modules/lua/shared/badgeDefinitionValidation.lua diff --git a/api/lua/shared/collection.lua b/happyview-modules/lua/shared/collection.lua similarity index 100% rename from api/lua/shared/collection.lua rename to happyview-modules/lua/shared/collection.lua diff --git a/api/lua/shared/collectionItems.lua b/happyview-modules/lua/shared/collectionItems.lua similarity index 100% rename from api/lua/shared/collectionItems.lua rename to happyview-modules/lua/shared/collectionItems.lua diff --git a/api/lua/shared/collectionList.lua b/happyview-modules/lua/shared/collectionList.lua similarity index 100% rename from api/lua/shared/collectionList.lua rename to happyview-modules/lua/shared/collectionList.lua diff --git a/api/lua/shared/collectionProjection.lua b/happyview-modules/lua/shared/collectionProjection.lua similarity index 100% rename from api/lua/shared/collectionProjection.lua rename to happyview-modules/lua/shared/collectionProjection.lua diff --git a/api/lua/shared/contribution.lua b/happyview-modules/lua/shared/contribution.lua similarity index 100% rename from api/lua/shared/contribution.lua rename to happyview-modules/lua/shared/contribution.lua diff --git a/api/lua/shared/contributorInformationValidation.lua b/happyview-modules/lua/shared/contributorInformationValidation.lua similarity index 100% rename from api/lua/shared/contributorInformationValidation.lua rename to happyview-modules/lua/shared/contributorInformationValidation.lua diff --git a/api/lua/shared/createdAtSort.lua b/happyview-modules/lua/shared/createdAtSort.lua similarity index 100% rename from api/lua/shared/createdAtSort.lua rename to happyview-modules/lua/shared/createdAtSort.lua diff --git a/api/lua/shared/datetimeValidation.lua b/happyview-modules/lua/shared/datetimeValidation.lua similarity index 100% rename from api/lua/shared/datetimeValidation.lua rename to happyview-modules/lua/shared/datetimeValidation.lua diff --git a/api/lua/shared/didValidation.lua b/happyview-modules/lua/shared/didValidation.lua similarity index 100% rename from api/lua/shared/didValidation.lua rename to happyview-modules/lua/shared/didValidation.lua diff --git a/api/lua/shared/entityFollow.lua b/happyview-modules/lua/shared/entityFollow.lua similarity index 100% rename from api/lua/shared/entityFollow.lua rename to happyview-modules/lua/shared/entityFollow.lua diff --git a/api/lua/shared/entityFollowEntities.lua b/happyview-modules/lua/shared/entityFollowEntities.lua similarity index 100% rename from api/lua/shared/entityFollowEntities.lua rename to happyview-modules/lua/shared/entityFollowEntities.lua diff --git a/api/lua/shared/entityFollowFollowers.lua b/happyview-modules/lua/shared/entityFollowFollowers.lua similarity index 100% rename from api/lua/shared/entityFollowFollowers.lua rename to happyview-modules/lua/shared/entityFollowFollowers.lua diff --git a/api/lua/shared/entityFollowLookup.lua b/happyview-modules/lua/shared/entityFollowLookup.lua similarity index 100% rename from api/lua/shared/entityFollowLookup.lua rename to happyview-modules/lua/shared/entityFollowLookup.lua diff --git a/api/lua/shared/entityFollowPagination.lua b/happyview-modules/lua/shared/entityFollowPagination.lua similarity index 100% rename from api/lua/shared/entityFollowPagination.lua rename to happyview-modules/lua/shared/entityFollowPagination.lua diff --git a/api/lua/shared/evaluation.lua b/happyview-modules/lua/shared/evaluation.lua similarity index 100% rename from api/lua/shared/evaluation.lua rename to happyview-modules/lua/shared/evaluation.lua diff --git a/api/lua/shared/evaluationList.lua b/happyview-modules/lua/shared/evaluationList.lua similarity index 100% rename from api/lua/shared/evaluationList.lua rename to happyview-modules/lua/shared/evaluationList.lua diff --git a/api/lua/shared/evmLinkIdentifier.lua b/happyview-modules/lua/shared/evmLinkIdentifier.lua similarity index 100% rename from api/lua/shared/evmLinkIdentifier.lua rename to happyview-modules/lua/shared/evmLinkIdentifier.lua diff --git a/api/lua/shared/featureProjection.lua b/happyview-modules/lua/shared/featureProjection.lua similarity index 100% rename from api/lua/shared/featureProjection.lua rename to happyview-modules/lua/shared/featureProjection.lua diff --git a/api/lua/shared/featureValidation.lua b/happyview-modules/lua/shared/featureValidation.lua similarity index 100% rename from api/lua/shared/featureValidation.lua rename to happyview-modules/lua/shared/featureValidation.lua diff --git a/api/lua/shared/feedActorReactions.lua b/happyview-modules/lua/shared/feedActorReactions.lua similarity index 100% rename from api/lua/shared/feedActorReactions.lua rename to happyview-modules/lua/shared/feedActorReactions.lua diff --git a/api/lua/shared/feedReaction.lua b/happyview-modules/lua/shared/feedReaction.lua similarity index 100% rename from api/lua/shared/feedReaction.lua rename to happyview-modules/lua/shared/feedReaction.lua diff --git a/api/lua/shared/followBatch.lua b/happyview-modules/lua/shared/followBatch.lua similarity index 100% rename from api/lua/shared/followBatch.lua rename to happyview-modules/lua/shared/followBatch.lua diff --git a/api/lua/shared/fundingReceipt.lua b/happyview-modules/lua/shared/fundingReceipt.lua similarity index 100% rename from api/lua/shared/fundingReceipt.lua rename to happyview-modules/lua/shared/fundingReceipt.lua diff --git a/api/lua/shared/fundingReceiptList.lua b/happyview-modules/lua/shared/fundingReceiptList.lua similarity index 100% rename from api/lua/shared/fundingReceiptList.lua rename to happyview-modules/lua/shared/fundingReceiptList.lua diff --git a/api/lua/shared/listQuery.lua b/happyview-modules/lua/shared/listQuery.lua similarity index 100% rename from api/lua/shared/listQuery.lua rename to happyview-modules/lua/shared/listQuery.lua diff --git a/api/lua/shared/listValidation.lua b/happyview-modules/lua/shared/listValidation.lua similarity index 100% rename from api/lua/shared/listValidation.lua rename to happyview-modules/lua/shared/listValidation.lua diff --git a/api/lua/shared/location.lua b/happyview-modules/lua/shared/location.lua similarity index 100% rename from api/lua/shared/location.lua rename to happyview-modules/lua/shared/location.lua diff --git a/api/lua/shared/measurementQuery.lua b/happyview-modules/lua/shared/measurementQuery.lua similarity index 100% rename from api/lua/shared/measurementQuery.lua rename to happyview-modules/lua/shared/measurementQuery.lua diff --git a/api/lua/shared/organization.lua b/happyview-modules/lua/shared/organization.lua similarity index 100% rename from api/lua/shared/organization.lua rename to happyview-modules/lua/shared/organization.lua diff --git a/api/lua/shared/organizationList.lua b/happyview-modules/lua/shared/organizationList.lua similarity index 100% rename from api/lua/shared/organizationList.lua rename to happyview-modules/lua/shared/organizationList.lua diff --git a/api/lua/shared/profile.lua b/happyview-modules/lua/shared/profile.lua similarity index 100% rename from api/lua/shared/profile.lua rename to happyview-modules/lua/shared/profile.lua diff --git a/api/lua/shared/profileList.lua b/happyview-modules/lua/shared/profileList.lua similarity index 100% rename from api/lua/shared/profileList.lua rename to happyview-modules/lua/shared/profileList.lua diff --git a/api/lua/shared/profileLookup.lua b/happyview-modules/lua/shared/profileLookup.lua similarity index 100% rename from api/lua/shared/profileLookup.lua rename to happyview-modules/lua/shared/profileLookup.lua diff --git a/api/lua/shared/query.lua b/happyview-modules/lua/shared/query.lua similarity index 100% rename from api/lua/shared/query.lua rename to happyview-modules/lua/shared/query.lua diff --git a/api/lua/shared/recentFollows.lua b/happyview-modules/lua/shared/recentFollows.lua similarity index 100% rename from api/lua/shared/recentFollows.lua rename to happyview-modules/lua/shared/recentFollows.lua diff --git a/api/lua/shared/recordIdentifier.lua b/happyview-modules/lua/shared/recordIdentifier.lua similarity index 100% rename from api/lua/shared/recordIdentifier.lua rename to happyview-modules/lua/shared/recordIdentifier.lua diff --git a/api/lua/shared/recordView.lua b/happyview-modules/lua/shared/recordView.lua similarity index 100% rename from api/lua/shared/recordView.lua rename to happyview-modules/lua/shared/recordView.lua diff --git a/api/lua/shared/rightsIdentifier.lua b/happyview-modules/lua/shared/rightsIdentifier.lua similarity index 100% rename from api/lua/shared/rightsIdentifier.lua rename to happyview-modules/lua/shared/rightsIdentifier.lua diff --git a/api/lua/shared/rightsView.lua b/happyview-modules/lua/shared/rightsView.lua similarity index 100% rename from api/lua/shared/rightsView.lua rename to happyview-modules/lua/shared/rightsView.lua diff --git a/api/lua/shared/vocabTagValidation.lua b/happyview-modules/lua/shared/vocabTagValidation.lua similarity index 100% rename from api/lua/shared/vocabTagValidation.lua rename to happyview-modules/lua/shared/vocabTagValidation.lua diff --git a/api/lua/shared/workscopeRecordView.lua b/happyview-modules/lua/shared/workscopeRecordView.lua similarity index 100% rename from api/lua/shared/workscopeRecordView.lua rename to happyview-modules/lua/shared/workscopeRecordView.lua diff --git a/api/lua/shared/workscopeTag.lua b/happyview-modules/lua/shared/workscopeTag.lua similarity index 100% rename from api/lua/shared/workscopeTag.lua rename to happyview-modules/lua/shared/workscopeTag.lua diff --git a/api/lua/shared/workscopeTagList.lua b/happyview-modules/lua/shared/workscopeTagList.lua similarity index 100% rename from api/lua/shared/workscopeTagList.lua rename to happyview-modules/lua/shared/workscopeTagList.lua diff --git a/api/lua/src/getAcknowledgement.lua b/happyview-modules/lua/src/getAcknowledgement.lua similarity index 100% rename from api/lua/src/getAcknowledgement.lua rename to happyview-modules/lua/src/getAcknowledgement.lua diff --git a/api/lua/src/getActivity.lua b/happyview-modules/lua/src/getActivity.lua similarity index 100% rename from api/lua/src/getActivity.lua rename to happyview-modules/lua/src/getActivity.lua diff --git a/api/lua/src/getActorLikes.lua b/happyview-modules/lua/src/getActorLikes.lua similarity index 100% rename from api/lua/src/getActorLikes.lua rename to happyview-modules/lua/src/getActorLikes.lua diff --git a/api/lua/src/getActorReactions.lua b/happyview-modules/lua/src/getActorReactions.lua similarity index 100% rename from api/lua/src/getActorReactions.lua rename to happyview-modules/lua/src/getActorReactions.lua diff --git a/api/lua/src/getActorReposts.lua b/happyview-modules/lua/src/getActorReposts.lua similarity index 100% rename from api/lua/src/getActorReposts.lua rename to happyview-modules/lua/src/getActorReposts.lua diff --git a/api/lua/src/getAttachment.lua b/happyview-modules/lua/src/getAttachment.lua similarity index 100% rename from api/lua/src/getAttachment.lua rename to happyview-modules/lua/src/getAttachment.lua diff --git a/api/lua/src/getBadgeAward.lua b/happyview-modules/lua/src/getBadgeAward.lua similarity index 100% rename from api/lua/src/getBadgeAward.lua rename to happyview-modules/lua/src/getBadgeAward.lua diff --git a/api/lua/src/getBadgeDefinition.lua b/happyview-modules/lua/src/getBadgeDefinition.lua similarity index 100% rename from api/lua/src/getBadgeDefinition.lua rename to happyview-modules/lua/src/getBadgeDefinition.lua diff --git a/api/lua/src/getBadgeResponse.lua b/happyview-modules/lua/src/getBadgeResponse.lua similarity index 100% rename from api/lua/src/getBadgeResponse.lua rename to happyview-modules/lua/src/getBadgeResponse.lua diff --git a/api/lua/src/getCollection.lua b/happyview-modules/lua/src/getCollection.lua similarity index 100% rename from api/lua/src/getCollection.lua rename to happyview-modules/lua/src/getCollection.lua diff --git a/api/lua/src/getContribution.lua b/happyview-modules/lua/src/getContribution.lua similarity index 100% rename from api/lua/src/getContribution.lua rename to happyview-modules/lua/src/getContribution.lua diff --git a/api/lua/src/getContributorInformation.lua b/happyview-modules/lua/src/getContributorInformation.lua similarity index 100% rename from api/lua/src/getContributorInformation.lua rename to happyview-modules/lua/src/getContributorInformation.lua diff --git a/api/lua/src/getEntityFollow.lua b/happyview-modules/lua/src/getEntityFollow.lua similarity index 100% rename from api/lua/src/getEntityFollow.lua rename to happyview-modules/lua/src/getEntityFollow.lua diff --git a/api/lua/src/getEntityFollows.lua b/happyview-modules/lua/src/getEntityFollows.lua similarity index 100% rename from api/lua/src/getEntityFollows.lua rename to happyview-modules/lua/src/getEntityFollows.lua diff --git a/api/lua/src/getEvaluation.lua b/happyview-modules/lua/src/getEvaluation.lua similarity index 100% rename from api/lua/src/getEvaluation.lua rename to happyview-modules/lua/src/getEvaluation.lua diff --git a/api/lua/src/getEvmLink.lua b/happyview-modules/lua/src/getEvmLink.lua similarity index 100% rename from api/lua/src/getEvmLink.lua rename to happyview-modules/lua/src/getEvmLink.lua diff --git a/api/lua/src/getFeature.lua b/happyview-modules/lua/src/getFeature.lua similarity index 100% rename from api/lua/src/getFeature.lua rename to happyview-modules/lua/src/getFeature.lua diff --git a/api/lua/src/getFollow.lua b/happyview-modules/lua/src/getFollow.lua similarity index 100% rename from api/lua/src/getFollow.lua rename to happyview-modules/lua/src/getFollow.lua diff --git a/api/lua/src/getFollows.lua b/happyview-modules/lua/src/getFollows.lua similarity index 100% rename from api/lua/src/getFollows.lua rename to happyview-modules/lua/src/getFollows.lua diff --git a/api/lua/src/getLikes.lua b/happyview-modules/lua/src/getLikes.lua similarity index 100% rename from api/lua/src/getLikes.lua rename to happyview-modules/lua/src/getLikes.lua diff --git a/api/lua/src/getLocation.lua b/happyview-modules/lua/src/getLocation.lua similarity index 100% rename from api/lua/src/getLocation.lua rename to happyview-modules/lua/src/getLocation.lua diff --git a/api/lua/src/getMeasurement.lua b/happyview-modules/lua/src/getMeasurement.lua similarity index 100% rename from api/lua/src/getMeasurement.lua rename to happyview-modules/lua/src/getMeasurement.lua diff --git a/api/lua/src/getOrganization.lua b/happyview-modules/lua/src/getOrganization.lua similarity index 100% rename from api/lua/src/getOrganization.lua rename to happyview-modules/lua/src/getOrganization.lua diff --git a/api/lua/src/getOrganizations.lua b/happyview-modules/lua/src/getOrganizations.lua similarity index 100% rename from api/lua/src/getOrganizations.lua rename to happyview-modules/lua/src/getOrganizations.lua diff --git a/api/lua/src/getProfile.lua b/happyview-modules/lua/src/getProfile.lua similarity index 100% rename from api/lua/src/getProfile.lua rename to happyview-modules/lua/src/getProfile.lua diff --git a/api/lua/src/getProfiles.lua b/happyview-modules/lua/src/getProfiles.lua similarity index 100% rename from api/lua/src/getProfiles.lua rename to happyview-modules/lua/src/getProfiles.lua diff --git a/api/lua/src/getReactionCounts.lua b/happyview-modules/lua/src/getReactionCounts.lua similarity index 100% rename from api/lua/src/getReactionCounts.lua rename to happyview-modules/lua/src/getReactionCounts.lua diff --git a/api/lua/src/getReceipt.lua b/happyview-modules/lua/src/getReceipt.lua similarity index 100% rename from api/lua/src/getReceipt.lua rename to happyview-modules/lua/src/getReceipt.lua diff --git a/api/lua/src/getReposts.lua b/happyview-modules/lua/src/getReposts.lua similarity index 100% rename from api/lua/src/getReposts.lua rename to happyview-modules/lua/src/getReposts.lua diff --git a/api/lua/src/getRights.lua b/happyview-modules/lua/src/getRights.lua similarity index 100% rename from api/lua/src/getRights.lua rename to happyview-modules/lua/src/getRights.lua diff --git a/api/lua/src/getVocabTag.lua b/happyview-modules/lua/src/getVocabTag.lua similarity index 100% rename from api/lua/src/getVocabTag.lua rename to happyview-modules/lua/src/getVocabTag.lua diff --git a/api/lua/src/getWorkscopeTag.lua b/happyview-modules/lua/src/getWorkscopeTag.lua similarity index 100% rename from api/lua/src/getWorkscopeTag.lua rename to happyview-modules/lua/src/getWorkscopeTag.lua diff --git a/api/lua/src/listAcknowledgements.lua b/happyview-modules/lua/src/listAcknowledgements.lua similarity index 100% rename from api/lua/src/listAcknowledgements.lua rename to happyview-modules/lua/src/listAcknowledgements.lua diff --git a/api/lua/src/listActivities.lua b/happyview-modules/lua/src/listActivities.lua similarity index 100% rename from api/lua/src/listActivities.lua rename to happyview-modules/lua/src/listActivities.lua diff --git a/api/lua/src/listActorFollowers.lua b/happyview-modules/lua/src/listActorFollowers.lua similarity index 100% rename from api/lua/src/listActorFollowers.lua rename to happyview-modules/lua/src/listActorFollowers.lua diff --git a/api/lua/src/listActorFollowing.lua b/happyview-modules/lua/src/listActorFollowing.lua similarity index 100% rename from api/lua/src/listActorFollowing.lua rename to happyview-modules/lua/src/listActorFollowing.lua diff --git a/api/lua/src/listAttachments.lua b/happyview-modules/lua/src/listAttachments.lua similarity index 100% rename from api/lua/src/listAttachments.lua rename to happyview-modules/lua/src/listAttachments.lua diff --git a/api/lua/src/listBadgeAwards.lua b/happyview-modules/lua/src/listBadgeAwards.lua similarity index 100% rename from api/lua/src/listBadgeAwards.lua rename to happyview-modules/lua/src/listBadgeAwards.lua diff --git a/api/lua/src/listBadgeDefinitions.lua b/happyview-modules/lua/src/listBadgeDefinitions.lua similarity index 100% rename from api/lua/src/listBadgeDefinitions.lua rename to happyview-modules/lua/src/listBadgeDefinitions.lua diff --git a/api/lua/src/listBadgeResponses.lua b/happyview-modules/lua/src/listBadgeResponses.lua similarity index 100% rename from api/lua/src/listBadgeResponses.lua rename to happyview-modules/lua/src/listBadgeResponses.lua diff --git a/api/lua/src/listCollectionItems.lua b/happyview-modules/lua/src/listCollectionItems.lua similarity index 100% rename from api/lua/src/listCollectionItems.lua rename to happyview-modules/lua/src/listCollectionItems.lua diff --git a/api/lua/src/listCollections.lua b/happyview-modules/lua/src/listCollections.lua similarity index 100% rename from api/lua/src/listCollections.lua rename to happyview-modules/lua/src/listCollections.lua diff --git a/api/lua/src/listContributions.lua b/happyview-modules/lua/src/listContributions.lua similarity index 100% rename from api/lua/src/listContributions.lua rename to happyview-modules/lua/src/listContributions.lua diff --git a/api/lua/src/listContributorInformation.lua b/happyview-modules/lua/src/listContributorInformation.lua similarity index 100% rename from api/lua/src/listContributorInformation.lua rename to happyview-modules/lua/src/listContributorInformation.lua diff --git a/api/lua/src/listEntityFollowers.lua b/happyview-modules/lua/src/listEntityFollowers.lua similarity index 100% rename from api/lua/src/listEntityFollowers.lua rename to happyview-modules/lua/src/listEntityFollowers.lua diff --git a/api/lua/src/listEntityFollowing.lua b/happyview-modules/lua/src/listEntityFollowing.lua similarity index 100% rename from api/lua/src/listEntityFollowing.lua rename to happyview-modules/lua/src/listEntityFollowing.lua diff --git a/api/lua/src/listEvaluations.lua b/happyview-modules/lua/src/listEvaluations.lua similarity index 100% rename from api/lua/src/listEvaluations.lua rename to happyview-modules/lua/src/listEvaluations.lua diff --git a/api/lua/src/listEvmLinks.lua b/happyview-modules/lua/src/listEvmLinks.lua similarity index 100% rename from api/lua/src/listEvmLinks.lua rename to happyview-modules/lua/src/listEvmLinks.lua diff --git a/api/lua/src/listFeatures.lua b/happyview-modules/lua/src/listFeatures.lua similarity index 100% rename from api/lua/src/listFeatures.lua rename to happyview-modules/lua/src/listFeatures.lua diff --git a/api/lua/src/listLocations.lua b/happyview-modules/lua/src/listLocations.lua similarity index 100% rename from api/lua/src/listLocations.lua rename to happyview-modules/lua/src/listLocations.lua diff --git a/api/lua/src/listMeasurements.lua b/happyview-modules/lua/src/listMeasurements.lua similarity index 100% rename from api/lua/src/listMeasurements.lua rename to happyview-modules/lua/src/listMeasurements.lua diff --git a/api/lua/src/listOrganizations.lua b/happyview-modules/lua/src/listOrganizations.lua similarity index 100% rename from api/lua/src/listOrganizations.lua rename to happyview-modules/lua/src/listOrganizations.lua diff --git a/api/lua/src/listProfiles.lua b/happyview-modules/lua/src/listProfiles.lua similarity index 100% rename from api/lua/src/listProfiles.lua rename to happyview-modules/lua/src/listProfiles.lua diff --git a/api/lua/src/listReceipts.lua b/happyview-modules/lua/src/listReceipts.lua similarity index 100% rename from api/lua/src/listReceipts.lua rename to happyview-modules/lua/src/listReceipts.lua diff --git a/api/lua/src/listRecentFollows.lua b/happyview-modules/lua/src/listRecentFollows.lua similarity index 100% rename from api/lua/src/listRecentFollows.lua rename to happyview-modules/lua/src/listRecentFollows.lua diff --git a/api/lua/src/listRights.lua b/happyview-modules/lua/src/listRights.lua similarity index 100% rename from api/lua/src/listRights.lua rename to happyview-modules/lua/src/listRights.lua diff --git a/api/lua/src/listVocabTags.lua b/happyview-modules/lua/src/listVocabTags.lua similarity index 100% rename from api/lua/src/listVocabTags.lua rename to happyview-modules/lua/src/listVocabTags.lua diff --git a/api/lua/src/listWorkscopeTags.lua b/happyview-modules/lua/src/listWorkscopeTags.lua similarity index 100% rename from api/lua/src/listWorkscopeTags.lua rename to happyview-modules/lua/src/listWorkscopeTags.lua diff --git a/api/lua/src/searchActivities.lua b/happyview-modules/lua/src/searchActivities.lua similarity index 100% rename from api/lua/src/searchActivities.lua rename to happyview-modules/lua/src/searchActivities.lua diff --git a/api/lua/src/searchBadgeDefinitions.lua b/happyview-modules/lua/src/searchBadgeDefinitions.lua similarity index 100% rename from api/lua/src/searchBadgeDefinitions.lua rename to happyview-modules/lua/src/searchBadgeDefinitions.lua diff --git a/api/lua/src/searchCollections.lua b/happyview-modules/lua/src/searchCollections.lua similarity index 100% rename from api/lua/src/searchCollections.lua rename to happyview-modules/lua/src/searchCollections.lua diff --git a/api/lua/src/searchOrganizations.lua b/happyview-modules/lua/src/searchOrganizations.lua similarity index 100% rename from api/lua/src/searchOrganizations.lua rename to happyview-modules/lua/src/searchOrganizations.lua diff --git a/api/lua/src/searchProfiles.lua b/happyview-modules/lua/src/searchProfiles.lua similarity index 100% rename from api/lua/src/searchProfiles.lua rename to happyview-modules/lua/src/searchProfiles.lua diff --git a/api/manifest.json b/happyview-modules/manifest.json similarity index 100% rename from api/manifest.json rename to happyview-modules/manifest.json diff --git a/api/modules/acknowledgements/manifest.json b/happyview-modules/modules/acknowledgements/manifest.json similarity index 100% rename from api/modules/acknowledgements/manifest.json rename to happyview-modules/modules/acknowledgements/manifest.json diff --git a/api/modules/activity/manifest.json b/happyview-modules/modules/activity/manifest.json similarity index 100% rename from api/modules/activity/manifest.json rename to happyview-modules/modules/activity/manifest.json diff --git a/api/modules/actor-follow/manifest.json b/happyview-modules/modules/actor-follow/manifest.json similarity index 100% rename from api/modules/actor-follow/manifest.json rename to happyview-modules/modules/actor-follow/manifest.json diff --git a/api/modules/badge-definitions/manifest.json b/happyview-modules/modules/badge-definitions/manifest.json similarity index 100% rename from api/modules/badge-definitions/manifest.json rename to happyview-modules/modules/badge-definitions/manifest.json diff --git a/api/modules/badge-queries/manifest.json b/happyview-modules/modules/badge-queries/manifest.json similarity index 100% rename from api/modules/badge-queries/manifest.json rename to happyview-modules/modules/badge-queries/manifest.json diff --git a/api/modules/collection/manifest.json b/happyview-modules/modules/collection/manifest.json similarity index 100% rename from api/modules/collection/manifest.json rename to happyview-modules/modules/collection/manifest.json diff --git a/api/modules/context-attachments/manifest.json b/happyview-modules/modules/context-attachments/manifest.json similarity index 100% rename from api/modules/context-attachments/manifest.json rename to happyview-modules/modules/context-attachments/manifest.json diff --git a/api/modules/context-evaluation/manifest.json b/happyview-modules/modules/context-evaluation/manifest.json similarity index 100% rename from api/modules/context-evaluation/manifest.json rename to happyview-modules/modules/context-evaluation/manifest.json diff --git a/api/modules/context-measurements/manifest.json b/happyview-modules/modules/context-measurements/manifest.json similarity index 100% rename from api/modules/context-measurements/manifest.json rename to happyview-modules/modules/context-measurements/manifest.json diff --git a/api/modules/contribution/manifest.json b/happyview-modules/modules/contribution/manifest.json similarity index 100% rename from api/modules/contribution/manifest.json rename to happyview-modules/modules/contribution/manifest.json diff --git a/api/modules/contributor-information/manifest.json b/happyview-modules/modules/contributor-information/manifest.json similarity index 100% rename from api/modules/contributor-information/manifest.json rename to happyview-modules/modules/contributor-information/manifest.json diff --git a/api/modules/entity-follow/manifest.json b/happyview-modules/modules/entity-follow/manifest.json similarity index 100% rename from api/modules/entity-follow/manifest.json rename to happyview-modules/modules/entity-follow/manifest.json diff --git a/api/modules/evm-links/manifest.json b/happyview-modules/modules/evm-links/manifest.json similarity index 100% rename from api/modules/evm-links/manifest.json rename to happyview-modules/modules/evm-links/manifest.json diff --git a/api/modules/features/manifest.json b/happyview-modules/modules/features/manifest.json similarity index 100% rename from api/modules/features/manifest.json rename to happyview-modules/modules/features/manifest.json diff --git a/api/modules/feed-reactions/manifest.json b/happyview-modules/modules/feed-reactions/manifest.json similarity index 100% rename from api/modules/feed-reactions/manifest.json rename to happyview-modules/modules/feed-reactions/manifest.json diff --git a/api/modules/funding/manifest.json b/happyview-modules/modules/funding/manifest.json similarity index 100% rename from api/modules/funding/manifest.json rename to happyview-modules/modules/funding/manifest.json diff --git a/api/modules/location/manifest.json b/happyview-modules/modules/location/manifest.json similarity index 100% rename from api/modules/location/manifest.json rename to happyview-modules/modules/location/manifest.json diff --git a/api/modules/organization/manifest.json b/happyview-modules/modules/organization/manifest.json similarity index 100% rename from api/modules/organization/manifest.json rename to happyview-modules/modules/organization/manifest.json diff --git a/api/modules/profile/manifest.json b/happyview-modules/modules/profile/manifest.json similarity index 100% rename from api/modules/profile/manifest.json rename to happyview-modules/modules/profile/manifest.json diff --git a/api/modules/recent-follows/manifest.json b/happyview-modules/modules/recent-follows/manifest.json similarity index 100% rename from api/modules/recent-follows/manifest.json rename to happyview-modules/modules/recent-follows/manifest.json diff --git a/api/modules/rights/manifest.json b/happyview-modules/modules/rights/manifest.json similarity index 100% rename from api/modules/rights/manifest.json rename to happyview-modules/modules/rights/manifest.json diff --git a/api/modules/shared/manifest.json b/happyview-modules/modules/shared/manifest.json similarity index 100% rename from api/modules/shared/manifest.json rename to happyview-modules/modules/shared/manifest.json diff --git a/api/modules/vocab/manifest.json b/happyview-modules/modules/vocab/manifest.json similarity index 100% rename from api/modules/vocab/manifest.json rename to happyview-modules/modules/vocab/manifest.json diff --git a/api/modules/workscope-tags/manifest.json b/happyview-modules/modules/workscope-tags/manifest.json similarity index 100% rename from api/modules/workscope-tags/manifest.json rename to happyview-modules/modules/workscope-tags/manifest.json diff --git a/api/package.json b/happyview-modules/package.json similarity index 96% rename from api/package.json rename to happyview-modules/package.json index b943740..70994bd 100644 --- a/api/package.json +++ b/happyview-modules/package.json @@ -1,5 +1,5 @@ { - "name": "@hypercerts-org/hypercerts-api", + "name": "@hypercerts-org/happyview-modules", "version": "0.2.0", "private": true, "type": "module", diff --git a/api/tests/fixtures/activities.js b/happyview-modules/tests/fixtures/activities.js similarity index 100% rename from api/tests/fixtures/activities.js rename to happyview-modules/tests/fixtures/activities.js diff --git a/api/tests/fixtures/actor-follows.js b/happyview-modules/tests/fixtures/actor-follows.js similarity index 100% rename from api/tests/fixtures/actor-follows.js rename to happyview-modules/tests/fixtures/actor-follows.js diff --git a/api/tests/fixtures/bad-dates.js b/happyview-modules/tests/fixtures/bad-dates.js similarity index 100% rename from api/tests/fixtures/bad-dates.js rename to happyview-modules/tests/fixtures/bad-dates.js diff --git a/api/tests/fixtures/bad-location-dates.js b/happyview-modules/tests/fixtures/bad-location-dates.js similarity index 100% rename from api/tests/fixtures/bad-location-dates.js rename to happyview-modules/tests/fixtures/bad-location-dates.js diff --git a/api/tests/fixtures/records.js b/happyview-modules/tests/fixtures/records.js similarity index 100% rename from api/tests/fixtures/records.js rename to happyview-modules/tests/fixtures/records.js diff --git a/api/tests/http/acknowledgements.http.test.js b/happyview-modules/tests/http/acknowledgements.http.test.js similarity index 100% rename from api/tests/http/acknowledgements.http.test.js rename to happyview-modules/tests/http/acknowledgements.http.test.js diff --git a/api/tests/http/activity.http.test.js b/happyview-modules/tests/http/activity.http.test.js similarity index 100% rename from api/tests/http/activity.http.test.js rename to happyview-modules/tests/http/activity.http.test.js diff --git a/api/tests/http/actor-follow.http.test.js b/happyview-modules/tests/http/actor-follow.http.test.js similarity index 100% rename from api/tests/http/actor-follow.http.test.js rename to happyview-modules/tests/http/actor-follow.http.test.js diff --git a/api/tests/http/actor-organizations.http.test.js b/happyview-modules/tests/http/actor-organizations.http.test.js similarity index 100% rename from api/tests/http/actor-organizations.http.test.js rename to happyview-modules/tests/http/actor-organizations.http.test.js diff --git a/api/tests/http/actor-profiles.http.test.js b/happyview-modules/tests/http/actor-profiles.http.test.js similarity index 100% rename from api/tests/http/actor-profiles.http.test.js rename to happyview-modules/tests/http/actor-profiles.http.test.js diff --git a/api/tests/http/badge-definitions.http.test.js b/happyview-modules/tests/http/badge-definitions.http.test.js similarity index 100% rename from api/tests/http/badge-definitions.http.test.js rename to happyview-modules/tests/http/badge-definitions.http.test.js diff --git a/api/tests/http/badge-queries.http.test.js b/happyview-modules/tests/http/badge-queries.http.test.js similarity index 100% rename from api/tests/http/badge-queries.http.test.js rename to happyview-modules/tests/http/badge-queries.http.test.js diff --git a/api/tests/http/context-attachments.http.test.js b/happyview-modules/tests/http/context-attachments.http.test.js similarity index 100% rename from api/tests/http/context-attachments.http.test.js rename to happyview-modules/tests/http/context-attachments.http.test.js diff --git a/api/tests/http/context-evaluations.http.test.js b/happyview-modules/tests/http/context-evaluations.http.test.js similarity index 100% rename from api/tests/http/context-evaluations.http.test.js rename to happyview-modules/tests/http/context-evaluations.http.test.js diff --git a/api/tests/http/context-measurements.http.test.js b/happyview-modules/tests/http/context-measurements.http.test.js similarity index 100% rename from api/tests/http/context-measurements.http.test.js rename to happyview-modules/tests/http/context-measurements.http.test.js diff --git a/api/tests/http/contributions.http.test.js b/happyview-modules/tests/http/contributions.http.test.js similarity index 100% rename from api/tests/http/contributions.http.test.js rename to happyview-modules/tests/http/contributions.http.test.js diff --git a/api/tests/http/entity-follow.http.test.js b/happyview-modules/tests/http/entity-follow.http.test.js similarity index 100% rename from api/tests/http/entity-follow.http.test.js rename to happyview-modules/tests/http/entity-follow.http.test.js diff --git a/api/tests/http/evm-links.http.test.js b/happyview-modules/tests/http/evm-links.http.test.js similarity index 100% rename from api/tests/http/evm-links.http.test.js rename to happyview-modules/tests/http/evm-links.http.test.js diff --git a/api/tests/http/features.http.test.js b/happyview-modules/tests/http/features.http.test.js similarity index 100% rename from api/tests/http/features.http.test.js rename to happyview-modules/tests/http/features.http.test.js diff --git a/api/tests/http/feed-reactions.http.test.js b/happyview-modules/tests/http/feed-reactions.http.test.js similarity index 100% rename from api/tests/http/feed-reactions.http.test.js rename to happyview-modules/tests/http/feed-reactions.http.test.js diff --git a/api/tests/http/fixtures/acknowledgements.fixture.js b/happyview-modules/tests/http/fixtures/acknowledgements.fixture.js similarity index 100% rename from api/tests/http/fixtures/acknowledgements.fixture.js rename to happyview-modules/tests/http/fixtures/acknowledgements.fixture.js diff --git a/api/tests/http/fixtures/activity.fixture.js b/happyview-modules/tests/http/fixtures/activity.fixture.js similarity index 100% rename from api/tests/http/fixtures/activity.fixture.js rename to happyview-modules/tests/http/fixtures/activity.fixture.js diff --git a/api/tests/http/fixtures/actors.fixture.js b/happyview-modules/tests/http/fixtures/actors.fixture.js similarity index 100% rename from api/tests/http/fixtures/actors.fixture.js rename to happyview-modules/tests/http/fixtures/actors.fixture.js diff --git a/api/tests/http/fixtures/badge-definitions.fixture.js b/happyview-modules/tests/http/fixtures/badge-definitions.fixture.js similarity index 100% rename from api/tests/http/fixtures/badge-definitions.fixture.js rename to happyview-modules/tests/http/fixtures/badge-definitions.fixture.js diff --git a/api/tests/http/fixtures/badge-queries.fixture.js b/happyview-modules/tests/http/fixtures/badge-queries.fixture.js similarity index 100% rename from api/tests/http/fixtures/badge-queries.fixture.js rename to happyview-modules/tests/http/fixtures/badge-queries.fixture.js diff --git a/api/tests/http/fixtures/collections.fixture.js b/happyview-modules/tests/http/fixtures/collections.fixture.js similarity index 100% rename from api/tests/http/fixtures/collections.fixture.js rename to happyview-modules/tests/http/fixtures/collections.fixture.js diff --git a/api/tests/http/fixtures/context-attachments.fixture.js b/happyview-modules/tests/http/fixtures/context-attachments.fixture.js similarity index 100% rename from api/tests/http/fixtures/context-attachments.fixture.js rename to happyview-modules/tests/http/fixtures/context-attachments.fixture.js diff --git a/api/tests/http/fixtures/context-evaluations.fixture.js b/happyview-modules/tests/http/fixtures/context-evaluations.fixture.js similarity index 100% rename from api/tests/http/fixtures/context-evaluations.fixture.js rename to happyview-modules/tests/http/fixtures/context-evaluations.fixture.js diff --git a/api/tests/http/fixtures/context-measurements.fixture.js b/happyview-modules/tests/http/fixtures/context-measurements.fixture.js similarity index 100% rename from api/tests/http/fixtures/context-measurements.fixture.js rename to happyview-modules/tests/http/fixtures/context-measurements.fixture.js diff --git a/api/tests/http/fixtures/contributions.fixture.js b/happyview-modules/tests/http/fixtures/contributions.fixture.js similarity index 100% rename from api/tests/http/fixtures/contributions.fixture.js rename to happyview-modules/tests/http/fixtures/contributions.fixture.js diff --git a/api/tests/http/fixtures/contributor-information.fixture.js b/happyview-modules/tests/http/fixtures/contributor-information.fixture.js similarity index 100% rename from api/tests/http/fixtures/contributor-information.fixture.js rename to happyview-modules/tests/http/fixtures/contributor-information.fixture.js diff --git a/api/tests/http/fixtures/evm-links.fixture.js b/happyview-modules/tests/http/fixtures/evm-links.fixture.js similarity index 100% rename from api/tests/http/fixtures/evm-links.fixture.js rename to happyview-modules/tests/http/fixtures/evm-links.fixture.js diff --git a/api/tests/http/fixtures/features.fixture.js b/happyview-modules/tests/http/fixtures/features.fixture.js similarity index 100% rename from api/tests/http/fixtures/features.fixture.js rename to happyview-modules/tests/http/fixtures/features.fixture.js diff --git a/api/tests/http/fixtures/feed-reactions.fixture.js b/happyview-modules/tests/http/fixtures/feed-reactions.fixture.js similarity index 100% rename from api/tests/http/fixtures/feed-reactions.fixture.js rename to happyview-modules/tests/http/fixtures/feed-reactions.fixture.js diff --git a/api/tests/http/fixtures/funding-receipts.fixture.js b/happyview-modules/tests/http/fixtures/funding-receipts.fixture.js similarity index 100% rename from api/tests/http/fixtures/funding-receipts.fixture.js rename to happyview-modules/tests/http/fixtures/funding-receipts.fixture.js diff --git a/api/tests/http/fixtures/graph-follows.fixture.js b/happyview-modules/tests/http/fixtures/graph-follows.fixture.js similarity index 100% rename from api/tests/http/fixtures/graph-follows.fixture.js rename to happyview-modules/tests/http/fixtures/graph-follows.fixture.js diff --git a/api/tests/http/fixtures/location.fixture.js b/happyview-modules/tests/http/fixtures/location.fixture.js similarity index 100% rename from api/tests/http/fixtures/location.fixture.js rename to happyview-modules/tests/http/fixtures/location.fixture.js diff --git a/api/tests/http/fixtures/rights.fixture.js b/happyview-modules/tests/http/fixtures/rights.fixture.js similarity index 100% rename from api/tests/http/fixtures/rights.fixture.js rename to happyview-modules/tests/http/fixtures/rights.fixture.js diff --git a/api/tests/http/fixtures/vocab-tags.fixture.js b/happyview-modules/tests/http/fixtures/vocab-tags.fixture.js similarity index 100% rename from api/tests/http/fixtures/vocab-tags.fixture.js rename to happyview-modules/tests/http/fixtures/vocab-tags.fixture.js diff --git a/api/tests/http/fixtures/workscope-tags.fixture.js b/happyview-modules/tests/http/fixtures/workscope-tags.fixture.js similarity index 100% rename from api/tests/http/fixtures/workscope-tags.fixture.js rename to happyview-modules/tests/http/fixtures/workscope-tags.fixture.js diff --git a/api/tests/http/funding-getReceipt.http.test.js b/happyview-modules/tests/http/funding-getReceipt.http.test.js similarity index 100% rename from api/tests/http/funding-getReceipt.http.test.js rename to happyview-modules/tests/http/funding-getReceipt.http.test.js diff --git a/api/tests/http/funding-listReceipts.http.test.js b/happyview-modules/tests/http/funding-listReceipts.http.test.js similarity index 100% rename from api/tests/http/funding-listReceipts.http.test.js rename to happyview-modules/tests/http/funding-listReceipts.http.test.js diff --git a/api/tests/http/getCollection.http.test.js b/happyview-modules/tests/http/getCollection.http.test.js similarity index 100% rename from api/tests/http/getCollection.http.test.js rename to happyview-modules/tests/http/getCollection.http.test.js diff --git a/api/tests/http/getContributorInformation.http.test.js b/happyview-modules/tests/http/getContributorInformation.http.test.js similarity index 100% rename from api/tests/http/getContributorInformation.http.test.js rename to happyview-modules/tests/http/getContributorInformation.http.test.js diff --git a/api/tests/http/getRights.http.test.js b/happyview-modules/tests/http/getRights.http.test.js similarity index 100% rename from api/tests/http/getRights.http.test.js rename to happyview-modules/tests/http/getRights.http.test.js diff --git a/api/tests/http/graph-getFollow.http.test.js b/happyview-modules/tests/http/graph-getFollow.http.test.js similarity index 100% rename from api/tests/http/graph-getFollow.http.test.js rename to happyview-modules/tests/http/graph-getFollow.http.test.js diff --git a/api/tests/http/helpers.js b/happyview-modules/tests/http/helpers.js similarity index 100% rename from api/tests/http/helpers.js rename to happyview-modules/tests/http/helpers.js diff --git a/api/tests/http/listCollectionItems.http.test.js b/happyview-modules/tests/http/listCollectionItems.http.test.js similarity index 100% rename from api/tests/http/listCollectionItems.http.test.js rename to happyview-modules/tests/http/listCollectionItems.http.test.js diff --git a/api/tests/http/listCollections.http.test.js b/happyview-modules/tests/http/listCollections.http.test.js similarity index 100% rename from api/tests/http/listCollections.http.test.js rename to happyview-modules/tests/http/listCollections.http.test.js diff --git a/api/tests/http/listContributorInformation.http.test.js b/happyview-modules/tests/http/listContributorInformation.http.test.js similarity index 100% rename from api/tests/http/listContributorInformation.http.test.js rename to happyview-modules/tests/http/listContributorInformation.http.test.js diff --git a/api/tests/http/listRights.http.test.js b/happyview-modules/tests/http/listRights.http.test.js similarity index 100% rename from api/tests/http/listRights.http.test.js rename to happyview-modules/tests/http/listRights.http.test.js diff --git a/api/tests/http/location-bad-dates.http.test.js b/happyview-modules/tests/http/location-bad-dates.http.test.js similarity index 100% rename from api/tests/http/location-bad-dates.http.test.js rename to happyview-modules/tests/http/location-bad-dates.http.test.js diff --git a/api/tests/http/location.http.test.js b/happyview-modules/tests/http/location.http.test.js similarity index 100% rename from api/tests/http/location.http.test.js rename to happyview-modules/tests/http/location.http.test.js diff --git a/api/tests/http/recent-follows.http.test.js b/happyview-modules/tests/http/recent-follows.http.test.js similarity index 100% rename from api/tests/http/recent-follows.http.test.js rename to happyview-modules/tests/http/recent-follows.http.test.js diff --git a/api/tests/http/searchCollections.http.test.js b/happyview-modules/tests/http/searchCollections.http.test.js similarity index 100% rename from api/tests/http/searchCollections.http.test.js rename to happyview-modules/tests/http/searchCollections.http.test.js diff --git a/api/tests/http/vocab-tags.http.test.js b/happyview-modules/tests/http/vocab-tags.http.test.js similarity index 100% rename from api/tests/http/vocab-tags.http.test.js rename to happyview-modules/tests/http/vocab-tags.http.test.js diff --git a/api/tests/http/workscope-tags.http.test.js b/happyview-modules/tests/http/workscope-tags.http.test.js similarity index 100% rename from api/tests/http/workscope-tags.http.test.js rename to happyview-modules/tests/http/workscope-tags.http.test.js diff --git a/api/tests/unit/context-measurements/measurements.lua b/happyview-modules/tests/unit/context-measurements/measurements.lua similarity index 100% rename from api/tests/unit/context-measurements/measurements.lua rename to happyview-modules/tests/unit/context-measurements/measurements.lua diff --git a/api/tests/unit/context-measurements/measurements.test.js b/happyview-modules/tests/unit/context-measurements/measurements.test.js similarity index 100% rename from api/tests/unit/context-measurements/measurements.test.js rename to happyview-modules/tests/unit/context-measurements/measurements.test.js diff --git a/api/tests/unit/context/attachment.test.js b/happyview-modules/tests/unit/context/attachment.test.js similarity index 100% rename from api/tests/unit/context/attachment.test.js rename to happyview-modules/tests/unit/context/attachment.test.js diff --git a/api/tests/unit/context/evaluation.test.js b/happyview-modules/tests/unit/context/evaluation.test.js similarity index 100% rename from api/tests/unit/context/evaluation.test.js rename to happyview-modules/tests/unit/context/evaluation.test.js diff --git a/api/tests/unit/endpoints/rights-edge-lua.test.js b/happyview-modules/tests/unit/endpoints/rights-edge-lua.test.js similarity index 100% rename from api/tests/unit/endpoints/rights-edge-lua.test.js rename to happyview-modules/tests/unit/endpoints/rights-edge-lua.test.js diff --git a/api/tests/unit/endpoints/rights-lua.test.js b/happyview-modules/tests/unit/endpoints/rights-lua.test.js similarity index 100% rename from api/tests/unit/endpoints/rights-lua.test.js rename to happyview-modules/tests/unit/endpoints/rights-lua.test.js diff --git a/api/tests/unit/feature.test.js b/happyview-modules/tests/unit/feature.test.js similarity index 100% rename from api/tests/unit/feature.test.js rename to happyview-modules/tests/unit/feature.test.js diff --git a/api/tests/unit/fixtures/bad-dates.test.js b/happyview-modules/tests/unit/fixtures/bad-dates.test.js similarity index 100% rename from api/tests/unit/fixtures/bad-dates.test.js rename to happyview-modules/tests/unit/fixtures/bad-dates.test.js diff --git a/api/tests/unit/fixtures/fixtures.test.js b/happyview-modules/tests/unit/fixtures/fixtures.test.js similarity index 100% rename from api/tests/unit/fixtures/fixtures.test.js rename to happyview-modules/tests/unit/fixtures/fixtures.test.js diff --git a/api/tests/unit/fixtures/http-fixtures.test.js b/happyview-modules/tests/unit/fixtures/http-fixtures.test.js similarity index 100% rename from api/tests/unit/fixtures/http-fixtures.test.js rename to happyview-modules/tests/unit/fixtures/http-fixtures.test.js diff --git a/api/tests/unit/fixtures/http-seed-rows.test.js b/happyview-modules/tests/unit/fixtures/http-seed-rows.test.js similarity index 100% rename from api/tests/unit/fixtures/http-seed-rows.test.js rename to happyview-modules/tests/unit/fixtures/http-seed-rows.test.js diff --git a/api/tests/unit/http/helpers.test.js b/happyview-modules/tests/unit/http/helpers.test.js similarity index 100% rename from api/tests/unit/http/helpers.test.js rename to happyview-modules/tests/unit/http/helpers.test.js diff --git a/api/tests/unit/http/location-filters.test.js b/happyview-modules/tests/unit/http/location-filters.test.js similarity index 100% rename from api/tests/unit/http/location-filters.test.js rename to happyview-modules/tests/unit/http/location-filters.test.js diff --git a/api/tests/unit/lua/recentFollows.test.lua b/happyview-modules/tests/unit/lua/recentFollows.test.lua similarity index 100% rename from api/tests/unit/lua/recentFollows.test.lua rename to happyview-modules/tests/unit/lua/recentFollows.test.lua diff --git a/api/tests/unit/tooling/acknowledgement.test.js b/happyview-modules/tests/unit/tooling/acknowledgement.test.js similarity index 100% rename from api/tests/unit/tooling/acknowledgement.test.js rename to happyview-modules/tests/unit/tooling/acknowledgement.test.js diff --git a/api/tests/unit/tooling/activity.test.js b/happyview-modules/tests/unit/tooling/activity.test.js similarity index 100% rename from api/tests/unit/tooling/activity.test.js rename to happyview-modules/tests/unit/tooling/activity.test.js diff --git a/api/tests/unit/tooling/actor-follow.test.js b/happyview-modules/tests/unit/tooling/actor-follow.test.js similarity index 100% rename from api/tests/unit/tooling/actor-follow.test.js rename to happyview-modules/tests/unit/tooling/actor-follow.test.js diff --git a/api/tests/unit/tooling/badge-definition.contract.test.js b/happyview-modules/tests/unit/tooling/badge-definition.contract.test.js similarity index 100% rename from api/tests/unit/tooling/badge-definition.contract.test.js rename to happyview-modules/tests/unit/tooling/badge-definition.contract.test.js diff --git a/api/tests/unit/tooling/badge-definition.test.js b/happyview-modules/tests/unit/tooling/badge-definition.test.js similarity index 100% rename from api/tests/unit/tooling/badge-definition.test.js rename to happyview-modules/tests/unit/tooling/badge-definition.test.js diff --git a/api/tests/unit/tooling/badge-queries.test.js b/happyview-modules/tests/unit/tooling/badge-queries.test.js similarity index 100% rename from api/tests/unit/tooling/badge-queries.test.js rename to happyview-modules/tests/unit/tooling/badge-queries.test.js diff --git a/api/tests/unit/tooling/build-lua.test.js b/happyview-modules/tests/unit/tooling/build-lua.test.js similarity index 100% rename from api/tests/unit/tooling/build-lua.test.js rename to happyview-modules/tests/unit/tooling/build-lua.test.js diff --git a/api/tests/unit/tooling/collection.test.js b/happyview-modules/tests/unit/tooling/collection.test.js similarity index 100% rename from api/tests/unit/tooling/collection.test.js rename to happyview-modules/tests/unit/tooling/collection.test.js diff --git a/api/tests/unit/tooling/contributions.test.js b/happyview-modules/tests/unit/tooling/contributions.test.js similarity index 100% rename from api/tests/unit/tooling/contributions.test.js rename to happyview-modules/tests/unit/tooling/contributions.test.js diff --git a/api/tests/unit/tooling/entity-follow.test.js b/happyview-modules/tests/unit/tooling/entity-follow.test.js similarity index 100% rename from api/tests/unit/tooling/entity-follow.test.js rename to happyview-modules/tests/unit/tooling/entity-follow.test.js diff --git a/api/tests/unit/tooling/eslint-maintainability.test.js b/happyview-modules/tests/unit/tooling/eslint-maintainability.test.js similarity index 100% rename from api/tests/unit/tooling/eslint-maintainability.test.js rename to happyview-modules/tests/unit/tooling/eslint-maintainability.test.js diff --git a/api/tests/unit/tooling/evm-links.test.js b/happyview-modules/tests/unit/tooling/evm-links.test.js similarity index 100% rename from api/tests/unit/tooling/evm-links.test.js rename to happyview-modules/tests/unit/tooling/evm-links.test.js diff --git a/api/tests/unit/tooling/feed-reactions.test.js b/happyview-modules/tests/unit/tooling/feed-reactions.test.js similarity index 100% rename from api/tests/unit/tooling/feed-reactions.test.js rename to happyview-modules/tests/unit/tooling/feed-reactions.test.js diff --git a/api/tests/unit/tooling/funding-receipts.test.js b/happyview-modules/tests/unit/tooling/funding-receipts.test.js similarity index 100% rename from api/tests/unit/tooling/funding-receipts.test.js rename to happyview-modules/tests/unit/tooling/funding-receipts.test.js diff --git a/api/tests/unit/tooling/getContributorInformation.test.js b/happyview-modules/tests/unit/tooling/getContributorInformation.test.js similarity index 100% rename from api/tests/unit/tooling/getContributorInformation.test.js rename to happyview-modules/tests/unit/tooling/getContributorInformation.test.js diff --git a/api/tests/unit/tooling/installer-bundle.test.js b/happyview-modules/tests/unit/tooling/installer-bundle.test.js similarity index 100% rename from api/tests/unit/tooling/installer-bundle.test.js rename to happyview-modules/tests/unit/tooling/installer-bundle.test.js diff --git a/api/tests/unit/tooling/installer-cli.test.js b/happyview-modules/tests/unit/tooling/installer-cli.test.js similarity index 100% rename from api/tests/unit/tooling/installer-cli.test.js rename to happyview-modules/tests/unit/tooling/installer-cli.test.js diff --git a/api/tests/unit/tooling/installer-core.test.js b/happyview-modules/tests/unit/tooling/installer-core.test.js similarity index 100% rename from api/tests/unit/tooling/installer-core.test.js rename to happyview-modules/tests/unit/tooling/installer-core.test.js diff --git a/api/tests/unit/tooling/installer.test.js b/happyview-modules/tests/unit/tooling/installer.test.js similarity index 100% rename from api/tests/unit/tooling/installer.test.js rename to happyview-modules/tests/unit/tooling/installer.test.js diff --git a/api/tests/unit/tooling/lexicons.test.js b/happyview-modules/tests/unit/tooling/lexicons.test.js similarity index 100% rename from api/tests/unit/tooling/lexicons.test.js rename to happyview-modules/tests/unit/tooling/lexicons.test.js diff --git a/api/tests/unit/tooling/lint-lua.test.js b/happyview-modules/tests/unit/tooling/lint-lua.test.js similarity index 100% rename from api/tests/unit/tooling/lint-lua.test.js rename to happyview-modules/tests/unit/tooling/lint-lua.test.js diff --git a/api/tests/unit/tooling/lint-security-rules.test.js b/happyview-modules/tests/unit/tooling/lint-security-rules.test.js similarity index 100% rename from api/tests/unit/tooling/lint-security-rules.test.js rename to happyview-modules/tests/unit/tooling/lint-security-rules.test.js diff --git a/api/tests/unit/tooling/listContributorInformation.test.js b/happyview-modules/tests/unit/tooling/listContributorInformation.test.js similarity index 100% rename from api/tests/unit/tooling/listContributorInformation.test.js rename to happyview-modules/tests/unit/tooling/listContributorInformation.test.js diff --git a/api/tests/unit/tooling/lua-maintainability.test.js b/happyview-modules/tests/unit/tooling/lua-maintainability.test.js similarity index 100% rename from api/tests/unit/tooling/lua-maintainability.test.js rename to happyview-modules/tests/unit/tooling/lua-maintainability.test.js diff --git a/api/tests/unit/tooling/lua.test.js b/happyview-modules/tests/unit/tooling/lua.test.js similarity index 100% rename from api/tests/unit/tooling/lua.test.js rename to happyview-modules/tests/unit/tooling/lua.test.js diff --git a/api/tests/unit/tooling/organization.test.js b/happyview-modules/tests/unit/tooling/organization.test.js similarity index 100% rename from api/tests/unit/tooling/organization.test.js rename to happyview-modules/tests/unit/tooling/organization.test.js diff --git a/api/tests/unit/tooling/profile-installer.test.js b/happyview-modules/tests/unit/tooling/profile-installer.test.js similarity index 100% rename from api/tests/unit/tooling/profile-installer.test.js rename to happyview-modules/tests/unit/tooling/profile-installer.test.js diff --git a/api/tests/unit/tooling/profile.test.js b/happyview-modules/tests/unit/tooling/profile.test.js similarity index 100% rename from api/tests/unit/tooling/profile.test.js rename to happyview-modules/tests/unit/tooling/profile.test.js diff --git a/api/tests/unit/tooling/recent-follows-lua.test.js b/happyview-modules/tests/unit/tooling/recent-follows-lua.test.js similarity index 100% rename from api/tests/unit/tooling/recent-follows-lua.test.js rename to happyview-modules/tests/unit/tooling/recent-follows-lua.test.js diff --git a/api/tests/unit/tooling/recent-follows.test.js b/happyview-modules/tests/unit/tooling/recent-follows.test.js similarity index 100% rename from api/tests/unit/tooling/recent-follows.test.js rename to happyview-modules/tests/unit/tooling/recent-follows.test.js diff --git a/api/tests/unit/tooling/seed.test.js b/happyview-modules/tests/unit/tooling/seed.test.js similarity index 100% rename from api/tests/unit/tooling/seed.test.js rename to happyview-modules/tests/unit/tooling/seed.test.js diff --git a/api/tests/unit/tooling/vocab-tags.test.js b/happyview-modules/tests/unit/tooling/vocab-tags.test.js similarity index 100% rename from api/tests/unit/tooling/vocab-tags.test.js rename to happyview-modules/tests/unit/tooling/vocab-tags.test.js diff --git a/api/tests/unit/workscopeTags.test.js b/happyview-modules/tests/unit/workscopeTags.test.js similarity index 100% rename from api/tests/unit/workscopeTags.test.js rename to happyview-modules/tests/unit/workscopeTags.test.js diff --git a/api/tests/unit/workscopeTags.test.lua b/happyview-modules/tests/unit/workscopeTags.test.lua similarity index 100% rename from api/tests/unit/workscopeTags.test.lua rename to happyview-modules/tests/unit/workscopeTags.test.lua diff --git a/api/tooling/build-lua.js b/happyview-modules/tooling/build-lua.js similarity index 100% rename from api/tooling/build-lua.js rename to happyview-modules/tooling/build-lua.js diff --git a/api/tooling/installer.js b/happyview-modules/tooling/installer.js similarity index 100% rename from api/tooling/installer.js rename to happyview-modules/tooling/installer.js diff --git a/api/tooling/js-maintainability.md b/happyview-modules/tooling/js-maintainability.md similarity index 96% rename from api/tooling/js-maintainability.md rename to happyview-modules/tooling/js-maintainability.md index 3d42fb4..8a13222 100644 --- a/api/tooling/js-maintainability.md +++ b/happyview-modules/tooling/js-maintainability.md @@ -7,7 +7,7 @@ inputs. ## ESLint restrictions -The package ESLint config applies these rules to JavaScript files under `api/`: +The package ESLint config applies these rules to JavaScript files under `happyview-modules/`: - Named `exec` and `execSync` imports from `node:child_process` and `child_process` are rejected, including locally renamed imports. Namespace @@ -38,7 +38,7 @@ mind during review. ## Type checking -`api/tsconfig.json` enables `checkJs`, `strict`, and `noUncheckedIndexedAccess` +`happyview-modules/tsconfig.json` enables `checkJs`, `strict`, and `noUncheckedIndexedAccess` for `tooling/installer.js`, `tooling/run-http-tests.js`, and `tooling/seed.js`. `lint-lua.js` is outside this iteration's selected typecheck scope. Installer progress iteration uses `states.entries()` so the state is @@ -60,7 +60,7 @@ pnpm --dir api run test:unit Focused checks for these safeguards and their owners are: ```sh -cd api +cd happyview-modules pnpm exec eslint --max-warnings=0 --report-unused-disable-directives \ eslint.config.js tooling/installer.js tooling/run-http-tests.js tooling/seed.js \ tests/unit/tooling/eslint-maintainability.test.js diff --git a/api/tooling/lexicon-source.js b/happyview-modules/tooling/lexicon-source.js similarity index 100% rename from api/tooling/lexicon-source.js rename to happyview-modules/tooling/lexicon-source.js diff --git a/api/tooling/lint-lua.js b/happyview-modules/tooling/lint-lua.js similarity index 100% rename from api/tooling/lint-lua.js rename to happyview-modules/tooling/lint-lua.js diff --git a/api/tooling/lua-bundles.js b/happyview-modules/tooling/lua-bundles.js similarity index 100% rename from api/tooling/lua-bundles.js rename to happyview-modules/tooling/lua-bundles.js diff --git a/api/tooling/lua-maintainability.js b/happyview-modules/tooling/lua-maintainability.js similarity index 100% rename from api/tooling/lua-maintainability.js rename to happyview-modules/tooling/lua-maintainability.js diff --git a/api/tooling/lua-maintainability.md b/happyview-modules/tooling/lua-maintainability.md similarity index 88% rename from api/tooling/lua-maintainability.md rename to happyview-modules/tooling/lua-maintainability.md index 9f24d76..5c4b140 100644 --- a/api/tooling/lua-maintainability.md +++ b/happyview-modules/tooling/lua-maintainability.md @@ -6,7 +6,7 @@ Run the integrated check with: pnpm lint:lua ``` -`pnpm check` includes this command through `pnpm lint`. The checker reads only modules listed in `api/manifest.json` and their manifest-declared assets and Lua sources. It does not scan standalone Lexicon files that are not registered by those modules. Generated endpoint bundles remain the input to Luacheck; diagnostics with a generated-bundle location are mapped back to the ordered `sharedSourcePaths` and handler `sourcePath` that produced that line. Adding `lint-lua.js` to the TypeScript `checkJs` file set is deferred; this change does not extend that configuration. +`pnpm check` includes this command through `pnpm lint`. The checker reads only modules listed in `happyview-modules/manifest.json` and their manifest-declared assets and Lua sources. It does not scan standalone Lexicon files that are not registered by those modules. Generated endpoint bundles remain the input to Luacheck; diagnostics with a generated-bundle location are mapped back to the ordered `sharedSourcePaths` and handler `sourcePath` that produced that line. Adding `lint-lua.js` to the TypeScript `checkJs` file set is deferred; this change does not extend that configuration. ## Findings and severity diff --git a/api/tooling/run-http-tests.js b/happyview-modules/tooling/run-http-tests.js similarity index 99% rename from api/tooling/run-http-tests.js rename to happyview-modules/tooling/run-http-tests.js index 482c1ae..045e5ac 100644 --- a/api/tooling/run-http-tests.js +++ b/happyview-modules/tooling/run-http-tests.js @@ -461,7 +461,7 @@ async function installAndSeedApi(context) { HAPPYVIEW_ADMIN_TOKEN: context.adminToken, HYPERCERTS_HANDLE_RESOLVER_URL: 'https://resolver.invalid', }; - run('pnpm', ['--filter', '@hypercerts-org/hypercerts-api', 'run', 'install:api'], { + run('pnpm', ['--filter', '@hypercerts-org/happyview-modules', 'run', 'install:api'], { env: installerEnv, timeoutMs: 180_000, label: 'Checkout API manifest install into disposable HappyView', diff --git a/api/tooling/run-unit-tests.js b/happyview-modules/tooling/run-unit-tests.js similarity index 100% rename from api/tooling/run-unit-tests.js rename to happyview-modules/tooling/run-unit-tests.js diff --git a/api/tooling/seed.js b/happyview-modules/tooling/seed.js similarity index 100% rename from api/tooling/seed.js rename to happyview-modules/tooling/seed.js diff --git a/api/tooling/validate-lexicons.js b/happyview-modules/tooling/validate-lexicons.js similarity index 100% rename from api/tooling/validate-lexicons.js rename to happyview-modules/tooling/validate-lexicons.js diff --git a/api/tsconfig.json b/happyview-modules/tsconfig.json similarity index 100% rename from api/tsconfig.json rename to happyview-modules/tsconfig.json diff --git a/package.json b/package.json index 1c589fc..ec471d9 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,13 @@ "private": true, "packageManager": "pnpm@10.15.1", "scripts": { - "check": "pnpm --filter @hypercerts-org/hypercerts-api check && pnpm --filter hypercerts-api-endpoints test", - "test:unit": "pnpm --filter @hypercerts-org/hypercerts-api run test:unit", - "test:http": "pnpm --filter @hypercerts-org/hypercerts-api run test:http", - "build": "pnpm --filter @hypercerts-org/hypercerts-api run build:lua && pnpm --filter hypercerts-api-endpoints build", + "check": "pnpm --filter @hypercerts-org/happyview-modules check && pnpm --filter hypercerts-api-endpoints test && pnpm --filter @hypercerts-org/api check", + "test:unit": "pnpm --filter @hypercerts-org/happyview-modules run test:unit", + "test:http": "pnpm --filter @hypercerts-org/happyview-modules run test:http", + "build": "pnpm --filter @hypercerts-org/happyview-modules run build:lua && pnpm --filter hypercerts-api-endpoints build && pnpm --filter @hypercerts-org/api build", "docs:dev": "pnpm --filter hypercerts-api-endpoints dev", "docs:sync": "node docs/scripts/refresh-sources.mjs", + "client:generate": "pnpm --filter @hypercerts-org/api generate", "changeset": "changeset", "changeset:status": "changeset status", "version:packages": "changeset version && pnpm install --lockfile-only" diff --git a/packages/api/.gitignore b/packages/api/.gitignore new file mode 100644 index 0000000..849ddff --- /dev/null +++ b/packages/api/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/packages/api/LICENSE-APACHE b/packages/api/LICENSE-APACHE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/packages/api/LICENSE-APACHE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/api/LICENSE-MIT b/packages/api/LICENSE-MIT new file mode 100644 index 0000000..f22c340 --- /dev/null +++ b/packages/api/LICENSE-MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Hypercerts Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/api/README.md b/packages/api/README.md new file mode 100644 index 0000000..0433d48 --- /dev/null +++ b/packages/api/README.md @@ -0,0 +1,70 @@ +# @hypercerts-org/api + +TypeScript query definitions and types for the Hypercerts API, for use with [`@atproto/lex`](https://www.npmjs.com/package/@atproto/lex). Not published to npm yet; use it from this workspace, or from a tarball made with `pnpm pack` (which builds first). A git dependency does not work: `dist/` is not committed. + +```ts +import { Client } from "@atproto/lex"; +import { app, org } from "@hypercerts-org/api"; + +const api = new Client("https://api.hypercerts.dev"); +const { activity } = await api.call(org.hypercerts.claim.getActivity, { uri }); +const { badgeAwards, cursor } = await api.call(app.certified.badge.listBadgeAwards, { + authors: [did], + limit: 50, +}); + +type ActivityView = org.hypercerts.claim.getActivity.ActivityView; +type Activity = org.hypercerts.claim.activity.Main; // the record, from @hypercerts-org/lexicon +``` + +## What it contains + +The package exports [lex's NSID namespace tree](https://www.npmjs.com/package/@atproto/lex) (`app`, `com`, `org`, `pub`), the same layout as `@hypercerts-org/lexicon/records`, so every name is an NSID: + +- Each query is at its NSID path (`org.hypercerts.claim.getActivity`), for `Client.call`, with its parameter and view types on the same path (`.$Params`, `.ActivityView`). Shared views are in `org.hypercerts.api.defs` and `org.hypercerts.entity.defs`. +- The records and other definitions the queries reference are in the same tree, but they are the modules of [`@hypercerts-org/lexicon/records`](https://github.com/hypercerts-org/hypercerts-lexicon), re-exported, not copied: `org.hypercerts.claim.activity` is the same module in both packages, and `ActivityView["record"]` is `org.hypercerts.claim.activity.Main`. A record no query returns, such as `org.hyperboards.board`, is not in this tree; import it from `@hypercerts-org/lexicon/records`. Where a record has queries under its NSID (`org.hypercerts.collection`), the namespace here adds the query modules to the record's exports. +- `LEXICON_VERSION`: the `@hypercerts-org/lexicon` version the definitions were generated from, also in `package.json` as `hypercerts.lexiconVersion`. + +ESM only. `@atproto/lex` and `@hypercerts-org/lexicon` are peer dependencies; install versions in the declared ranges. + +## Response validation + +`Client` validates responses against the Lexicons by default. The indexer may still serve records that fail their Lexicon, and one such record fails a whole list response. Until it stops doing so (TECH-791), read with `new Client(url, { validateResponse: false })`. With validation off, responses are typed but not checked, and schema defaults are not applied: a record the indexer serves can differ from its type, so treat fields defensively. + +## How it is generated + +`pnpm generate` (or `pnpm client:generate` from the repository root) runs `lex build --index-file` over the Lexicons declared in `happyview-modules/manifest.json` `validationLexicons`: the API's own Lexicons from `happyview-modules/lexicons/`, and the record Lexicons they reference, read from the installed `@hypercerts-org/lexicon`. It keeps the modules of the API's own Lexicons and the namespace modules on the path to them, points every other import or re-export at `@hypercerts-org/lexicon/records/` (and fails if a module is missing there), writes `src/lexicons/` and `src/index.ts`, and records the Lexicon version in `package.json`. + +Generated files start with a banner naming `scripts/generate.js`, which rewrites lex's output. They are committed, unlike in the lexicon repository: `src/` is what reviewers see change when an API Lexicon changes, and `pnpm check:generated` fails when it is stale. Do not edit them. + +Regenerate whenever a query Lexicon, `happyview-modules/manifest.json`, the `@hypercerts-org/lexicon` version or the `@atproto/lex` version (including a lockfile change to its generator dependencies) changes. + +The generator works around [bluesky-social/atproto#5738](https://github.com/bluesky-social/atproto/issues/5738), broken imports for queries under a record NSID. Remove the workaround once it is fixed upstream. + +## Unreleased lexicon package + +`@hypercerts-org/lexicon/records` is not released yet ([hypercerts-lexicon#270](https://github.com/hypercerts-org/hypercerts-lexicon/pull/270)). Until it is, the package builds against `vendor/hypercerts-org-lexicon-1.7.0.tgz`, a packed build of that pull request. Replace it with the published version (`"@hypercerts-org/lexicon": "1.7.0"`) and delete `vendor/` once it is on npm. + +## Commands + +Run from `packages/api/`: + +| Command | What it does | +| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `pnpm generate` | Regenerate `src/` | +| `pnpm check` | Freshness, lint, format check, type check, build and tests | +| `pnpm lint` / `pnpm format` / `pnpm format:check` | Biome; only `format` rewrites files | +| `pnpm typecheck` | Type-check `src/` | +| `pnpm build` | Clean and compile to `dist/` (also runs before `pnpm pack`) | +| `pnpm test` | Build, type-check `test/types.ts` against the built package, and call queries through a `Client` with a stubbed `fetch` | +| `pnpm check:package` | Pack, install the tarball in an empty project, import it in Node, typecheck a consumer and bundle a query with Vite, as in the SDK repository (needs network; CI runs it) | + +Tooling follows the SDK repository (TECH-748): Biome, TypeScript 7, ESM, Node 24 or later. `exactOptionalPropertyTypes` is off because code generated by `@atproto/lex` 0.4.2 does not compile with it. + +## Versioning + +The package is not versioned or released yet: it is listed in the Changesets `ignore` list, because the release workflow only tags the API module bundle (TECH-818). Releases start when the workflow supports more than one package. + +## License + +Licensed under either [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option. diff --git a/packages/api/biome.json b/packages/api/biome.json new file mode 100644 index 0000000..8c4505e --- /dev/null +++ b/packages/api/biome.json @@ -0,0 +1,35 @@ +{ + "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "includes": ["**", "!**/dist", "!src/lexicons", "!src/index.ts"] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100 + }, + "linter": { + "enabled": true, + "rules": { + "preset": "recommended", + "nursery": { + "noFloatingPromises": "error", + "noMisusedPromises": "error", + "useAwaitThenable": "error" + } + } + }, + "assist": { + "actions": { + "source": { + "organizeImports": "on" + } + } + } +} diff --git a/packages/api/package.json b/packages/api/package.json new file mode 100644 index 0000000..3b62900 --- /dev/null +++ b/packages/api/package.json @@ -0,0 +1,61 @@ +{ + "name": "@hypercerts-org/api", + "version": "0.0.0", + "private": true, + "description": "TypeScript query definitions and types for the Hypercerts API, for use with @atproto/lex", + "license": "MIT OR Apache-2.0", + "repository": { + "type": "git", + "url": "git+https://github.com/hypercerts-org/api.git", + "directory": "packages/api" + }, + "type": "module", + "sideEffects": false, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "dist", + "src", + "LICENSE-APACHE", + "LICENSE-MIT" + ], + "engines": { + "node": ">=24" + }, + "publishConfig": { + "access": "public" + }, + "hypercerts": { + "lexiconVersion": "1.7.0" + }, + "scripts": { + "generate": "node scripts/generate.js", + "check:generated": "node scripts/generate.js --check", + "lint": "biome lint .", + "format": "biome format --write .", + "format:check": "biome format .", + "typecheck": "tsc --project tsconfig.json --noEmit", + "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc --project tsconfig.json", + "prepack": "pnpm run build", + "test": "pnpm run build && tsc --project tsconfig.test.json && node --test \"test/**/*.test.js\"", + "check:package": "node scripts/check-package.js", + "check": "pnpm run check:generated && pnpm run lint && pnpm run format:check && pnpm run typecheck && pnpm run test" + }, + "peerDependencies": { + "@atproto/lex": "^0.4.2", + "@hypercerts-org/lexicon": "^1.7.0" + }, + "devDependencies": { + "@atproto/lex": "0.4.2", + "@biomejs/biome": "2.6.3", + "@hypercerts-org/lexicon": "file:vendor/hypercerts-org-lexicon-1.7.0.tgz", + "@types/node": "24.19.2", + "typescript": "7.0.2", + "vite": "8.3.5" + } +} diff --git a/packages/api/scripts/check-package.js b/packages/api/scripts/check-package.js new file mode 100644 index 0000000..31f043a --- /dev/null +++ b/packages/api/scripts/check-package.js @@ -0,0 +1,158 @@ +// Packs @hypercerts-org/api and installs the tarball, with @hypercerts-org/lexicon +// and @atproto/lex, into a consumer project outside the workspace, then checks +// it the way the SDK repository checks its packages: Node imports it, a +// TypeScript consumer typechecks, and Vite bundles it for the browser. This +// catches packaging errors (bad exports, missing files, workspace: specifiers) +// that the workspace hides. Needs network access for `pnpm install`. +import { execFileSync } from "node:child_process"; +import { mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const packageJson = readJson(path.join(packageRoot, "package.json")); +/** @param {string} name */ +const pinned = (name) => { + const version = packageJson.devDependencies?.[name]; + if (!version) throw new Error(`check-package: ${name} must be a devDependency`); + return version.replace(/^file:/, `file:${packageRoot}/`); +}; + +// Child processes must not inherit the parent's npm and pnpm settings. +const childEnv = Object.fromEntries( + Object.entries(process.env).filter(([key]) => !key.toLowerCase().startsWith("npm_config_")), +); + +const work = mkdtempSync(path.join(tmpdir(), "hypercerts-api-consumer-")); +try { + const tarball = packPackage(work); + const consumer = createConsumer(work, tarball); + checkNode(consumer); + checkTypes(consumer); + checkBrowserBuild(consumer); + console.log("check-package: all consumer checks passed"); +} finally { + rmSync(work, { recursive: true, force: true }); +} + +/** @param {string} dest */ +function packPackage(dest) { + run("pnpm", ["pack", "--pack-destination", dest], packageRoot); + const tarball = readdirSync(dest).find((file) => /^hypercerts-org-api-.*\.tgz$/.test(file)); + if (!tarball) throw new Error("check-package: no tarball produced for @hypercerts-org/api"); + + const extracted = path.join(dest, "extracted"); + mkdirSync(extracted); + run("tar", ["-xzf", path.join(dest, tarball), "-C", extracted], dest); + const packedManifest = readFileSync(path.join(extracted, "package", "package.json"), "utf8"); + if (packedManifest.includes("workspace:")) { + throw new Error("check-package: packed package still contains workspace: specifiers"); + } + return path.join(dest, tarball); +} + +/** @param {string} dir @param {string} tarball */ +function createConsumer(dir, tarball) { + const consumer = path.join(dir, "consumer"); + mkdirSync(path.join(consumer, "src"), { recursive: true }); + writeJson(path.join(consumer, "package.json"), { + name: "consumer", + private: true, + type: "module", + dependencies: { + "@hypercerts-org/api": `file:${tarball}`, + "@hypercerts-org/lexicon": pinned("@hypercerts-org/lexicon"), + "@atproto/lex": pinned("@atproto/lex"), + }, + devDependencies: { typescript: pinned("typescript"), vite: pinned("vite") }, + }); + writeJson(path.join(consumer, "tsconfig.json"), { + compilerOptions: { + target: "es2024", + module: "nodenext", + moduleResolution: "nodenext", + strict: true, + noEmit: true, + skipLibCheck: true, + types: [], + lib: ["es2024", "dom"], + }, + include: ["src"], + }); + // --ignore-workspace keeps pnpm from treating the temp dir as part of this + // repo. @atproto/lex depends on core-js, whose only install script prints a + // banner; pnpm 11 and later fail on unapproved scripts unless told not to. + run( + "pnpm", + ["install", "--ignore-workspace", "--no-frozen-lockfile", "--config.strict-dep-builds=false"], + consumer, + ); + return consumer; +} + +/** @param {string} consumer */ +function checkNode(consumer) { + const script = `import { LEXICON_VERSION, org } from "@hypercerts-org/api"; +import { org as records } from "@hypercerts-org/lexicon/records"; +if (org.hypercerts.claim.getActivity.main.nsid !== "org.hypercerts.claim.getActivity") throw new Error("query"); +if (org.hypercerts.claim.activity.main !== records.hypercerts.claim.activity.main) throw new Error("records are not shared"); +if (LEXICON_VERSION !== ${JSON.stringify(packageJson.hypercerts.lexiconVersion)}) throw new Error("LEXICON_VERSION");`; + run("node", ["--input-type=module", "-e", script], consumer); + console.log("check-package: Node imports the package and shares record modules"); +} + +/** @param {string} consumer */ +function checkTypes(consumer) { + writeFileSync( + path.join(consumer, "src", "types.ts"), + `import { Client } from "@atproto/lex"; +import { org } from "@hypercerts-org/api"; +import { org as records } from "@hypercerts-org/lexicon/records"; +const api = new Client("https://api.example"); +const uri = "at://did:plc:abc123/org.hypercerts.claim.activity/3k2abc" as const; +export async function record(): Promise { + const { activity } = await api.call(org.hypercerts.claim.getActivity, { uri }); + return activity.record; +} +// @ts-expect-error uri is required +export const missing = () => api.call(org.hypercerts.claim.getActivity, {}); +`, + ); + run("pnpm", ["exec", "tsc", "-p", "tsconfig.json"], consumer); + console.log("check-package: a TypeScript consumer typechecks against the declarations"); +} + +/** @param {string} consumer */ +function checkBrowserBuild(consumer) { + writeFileSync( + path.join(consumer, "src", "main.ts"), + `import { Client } from "@atproto/lex"; +import { org } from "@hypercerts-org/api"; +const api = new Client("https://api.example"); +api.call(org.hypercerts.claim.getActivity, { uri: "at://did:plc:abc123/org.hypercerts.claim.activity/3k2abc" }) + .then(({ activity }) => console.log(activity.record.title), console.error); +`, + ); + writeFileSync( + path.join(consumer, "index.html"), + '\n', + ); + run("pnpm", ["exec", "vite", "build", "--logLevel", "warn"], consumer); + console.log("check-package: Vite bundles a query for the browser"); +} + +/** @param {string} command @param {string[]} args @param {string} cwd */ +function run(command, args, cwd) { + execFileSync(command, args, { cwd, env: childEnv, stdio: "inherit", timeout: 300_000 }); +} + +/** @param {string} file */ +function readJson(file) { + return JSON.parse(readFileSync(file, "utf8")); +} + +/** @param {string} file @param {unknown} value */ +function writeJson(file, value) { + writeFileSync(file, `${JSON.stringify(value, null, 2)}\n`); +} diff --git a/packages/api/scripts/generate.js b/packages/api/scripts/generate.js new file mode 100644 index 0000000..e64a050 --- /dev/null +++ b/packages/api/scripts/generate.js @@ -0,0 +1,290 @@ +// Generates src/ for @hypercerts-org/api from the Lexicons declared in +// happyview-modules/manifest.json, in lex's own layout: the package exports lex's NSID +// namespace tree (app, com, org, pub), as in the @atproto/lex documentation. +// Modules for the API's own Lexicons (happyview-modules/lexicons/) are generated here; +// everything else in the tree (records and their definitions) points at +// @hypercerts-org/lexicon/records, so no record code is copied. Run with +// --check to fail when the committed output is stale. +import { execFileSync } from "node:child_process"; +import { existsSync } from "node:fs"; +import { mkdir, mkdtemp, readdir, readFile, rm, writeFile } from "node:fs/promises"; +import { createRequire } from "node:module"; +import { tmpdir } from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const modulesRoot = path.resolve(packageRoot, "../../happyview-modules"); +const lexEntry = path.join(packageRoot, "node_modules/@atproto/lex/bin/lex"); +const recordsSpecifier = "@hypercerts-org/lexicon/records"; +const header = + '/*\n * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT.\n */'; +const lexHeader = '/*\n * THIS FILE WAS GENERATED BY "@atproto/lex". DO NOT EDIT.\n */'; + +/** @param {string} a @param {string} b */ +const byCodeUnit = (a, b) => (a < b ? -1 : a > b ? 1 : 0); + +/** The installed @hypercerts-org/lexicon: its root directory and version. */ +async function lexiconPackage() { + const require = createRequire(path.join(packageRoot, "package.json")); + const packageFile = require.resolve("@hypercerts-org/lexicon/package.json"); + const { version } = JSON.parse(await readFile(packageFile, "utf8")); + return { root: path.dirname(packageFile), version: /** @type {string} */ (version) }; +} + +/** + * The Lexicons in happyview-modules/manifest.json validationLexicons: local ones from + * happyview-modules/lexicons/, record Lexicons from the installed @hypercerts-org/lexicon. + * @param {string} lexiconRoot + * @returns {Promise>} + */ +async function manifestLexicons(lexiconRoot) { + const manifest = JSON.parse(await readFile(path.join(modulesRoot, "manifest.json"), "utf8")); + return Promise.all( + manifest.validationLexicons.map(async (/** @type {any} */ source) => { + const file = source.path + ? path.join(modulesRoot, source.path) + : path.join(lexiconRoot, source.packagePath); + const lexicon = JSON.parse(await readFile(file, "utf8")); + if (lexicon.id !== source.id) { + throw new Error( + `happyview-modules/manifest.json declares ${source.id}, but its source contains ${lexicon.id}`, + ); + } + return { id: source.id, local: Boolean(source.path), lexicon }; + }), + ); +} + +/** @param {string} id */ +const lexiconPath = (id) => id.replaceAll(".", "/"); + +/** @param {string} dir @returns {Promise} paths relative to dir, POSIX separators */ +async function listFiles(dir) { + const entries = await readdir(dir, { recursive: true, withFileTypes: true }).catch(() => []); + return entries + .filter((entry) => entry.isFile() && !entry.name.startsWith(".")) + .map((entry) => + path.relative(dir, path.join(entry.parentPath, entry.name)).split(path.sep).join("/"), + ) + .sort(byCodeUnit); +} + +/** + * The generated files this package keeps: the modules of the API's own + * Lexicons, the namespace modules on the path to them, and the index. + * @param {string[]} files + * @param {string[]} localIds + */ +function keptFiles(files, localIds) { + const localPaths = localIds.map(lexiconPath); + const own = new Set(localPaths.flatMap((p) => [`${p}.ts`, `${p}.defs.ts`])); + return new Set( + files.filter((file) => { + if (file === "index.ts" || own.has(file)) return true; + if (file.endsWith(".defs.ts")) return false; + const namespace = file.slice(0, -".ts".length); + return localPaths.some((p) => p.startsWith(`${namespace}/`)); + }), + ); +} + +/** + * Keeps only this package's modules and points every import or re-export of + * another module at @hypercerts-org/lexicon/records. + * @param {string} lexiconsDir generated output + * @param {string[]} localIds + * @param {string} lexiconRoot installed @hypercerts-org/lexicon + */ +async function linkRecords(lexiconsDir, localIds, lexiconRoot) { + const files = await listFiles(lexiconsDir); + const keep = keptFiles(files, localIds); + await Promise.all( + files.filter((file) => !keep.has(file)).map((file) => rm(path.join(lexiconsDir, file))), + ); + await removeEmptyDirectories(lexiconsDir); + + for (const file of keep) { + const absolute = path.join(lexiconsDir, file); + const source = await readFile(absolute, "utf8"); + const directory = path.posix.dirname(file); + const linked = source.replaceAll(/from "(\.\.?\/[^"]+)"/g, (match, specifier) => { + // Workaround for bluesky-social/atproto#5738: @atproto/lex 0.4.2 emits + // "./.defs.js" for a query whose namespace is a record NSID + // (org.hypercerts.collection.getCollection imports + // org.hypercerts.collection). Remove once fixed upstream. + const fixed = + specifier === "./.defs.js" ? `../${path.posix.basename(directory)}.defs.js` : specifier; + const target = path.posix.normalize(path.posix.join(directory, fixed)); + if (keep.has(target.replace(/\.js$/, ".ts"))) { + return fixed === specifier ? match : `from "${fixed}"`; + } + const modulePath = target.slice(0, -".js".length); + if (!existsSync(path.join(lexiconRoot, "dist/records", `${modulePath}.js`))) { + throw new Error(`${file} needs ${modulePath}, which ${recordsSpecifier} does not export`); + } + return `from "${recordsSpecifier}/${modulePath}"`; + }); + if (linked !== source) await writeFile(absolute, linked); + } +} + +/** @param {string} dir */ +async function removeEmptyDirectories(dir) { + const entries = await readdir(dir, { withFileTypes: true }); + for (const entry of entries.filter((entry) => entry.isDirectory())) { + const child = path.join(dir, entry.name); + await removeEmptyDirectories(child); + if ((await readdir(child)).length === 0) await rm(child, { recursive: true }); + } +} + +/** Order of the export forms lex writes in namespace modules. @param {string} line */ +const exportRank = (line) => + line.startsWith("export * as ") ? 2 : line.startsWith("export {") ? 1 : 0; + +/** + * Puts the lines lex writes in a fixed order. lex reads Lexicon files in the + * order the file system lists them, which differs between machines, and that + * order leaks into its output: the exports of namespace modules and the + * imports of `.defs` modules. Namespace modules get a record's own exports + * first, then the child namespaces by name; `.defs` modules import their + * dependencies by name. This matters here because the output is committed + * and check:generated compares it. + * @param {string} source + * @param {boolean} isDefs + */ +function normalize(source, isDefs) { + const lines = source.split("\n"); + if (isDefs) { + const start = lines.findIndex((line) => line.startsWith("import * as ")); + if (start === -1) return source; + let end = start; + while (lines[end]?.startsWith("import * as ")) end++; + const imports = lines.slice(start, end).sort(byCodeUnit); + return [...lines.slice(0, start), ...imports, ...lines.slice(end)].join("\n"); + } + const first = lines.findIndex((line) => line.startsWith("export ")); + if (first === -1) return source; + const rest = lines.slice(first).filter((line) => line !== ""); + if (rest.some((line) => !line.startsWith("export "))) { + throw new Error("Unexpected namespace module layout from @atproto/lex"); + } + rest.sort((a, b) => exportRank(a) - exportRank(b) || byCodeUnit(a, b)); + return [...lines.slice(0, first), ...rest, ""].join("\n"); +} + +/** + * Normalizes every generated module and replaces lex's banner with this + * script's, since this script rewrites the files. + * @param {string} lexiconsDir + */ +async function normalizeOutput(lexiconsDir) { + for (const file of await listFiles(lexiconsDir)) { + const absolute = path.join(lexiconsDir, file); + const source = await readFile(absolute, "utf8"); + if (!source.startsWith(lexHeader)) { + throw new Error(`${file} does not start with the banner @atproto/lex writes`); + } + const normalized = normalize( + header + source.slice(lexHeader.length), + file.endsWith(".defs.ts"), + ); + if (normalized !== source) await writeFile(absolute, normalized); + } +} + +/** @param {string} srcDir @param {string} lexiconVersion */ +async function writeIndex(srcDir, lexiconVersion) { + const lines = [ + header, + "", + "// lex's NSID namespace tree for the Hypercerts API: queries are generated", + "// here; the records and other definitions they reference come from", + `// ${recordsSpecifier}, so org.hypercerts.claim.activity is the same`, + "// module in both packages.", + 'export * from "./lexicons/index.js";', + "", + "/** Version of @hypercerts-org/lexicon these definitions were generated from. */", + `export const LEXICON_VERSION = ${JSON.stringify(lexiconVersion)};`, + ]; + await writeFile(path.join(srcDir, "index.ts"), `${lines.join("\n")}\n`); +} + +/** @param {string} srcDir @param {{ root: string; version: string }} lexiconPkg */ +async function generate(srcDir, lexiconPkg) { + if (!existsSync(lexEntry)) { + throw new Error(`@atproto/lex is not installed at ${lexEntry}; run \`pnpm install\` first.`); + } + const lexicons = await manifestLexicons(lexiconPkg.root); + const lexiconsDir = path.join(srcDir, "lexicons"); + const inputDir = await mkdtemp(path.join(tmpdir(), "hypercerts-api-lexicons-")); + try { + await Promise.all( + lexicons.map(({ id, lexicon }) => + writeFile(path.join(inputDir, `${id}.json`), JSON.stringify(lexicon)), + ), + ); + execFileSync( + process.execPath, + [lexEntry, "build", "--lexicons", inputDir, "--out", lexiconsDir, "--clear", "--index-file"], + { stdio: ["ignore", "ignore", "inherit"] }, + ); + } finally { + await rm(inputDir, { recursive: true, force: true }); + } + const localIds = lexicons.filter((entry) => entry.local).map((entry) => entry.id); + await linkRecords(lexiconsDir, localIds, lexiconPkg.root); + await normalizeOutput(lexiconsDir); + await writeIndex(srcDir, lexiconPkg.version); +} + +/** @param {string} dir @returns {Promise>} every file under dir */ +async function readGenerated(dir) { + const files = await listFiles(dir); + const contents = await Promise.all(files.map((file) => readFile(path.join(dir, file), "utf8"))); + return new Map(files.map((file, index) => [file, contents[index] ?? ""])); +} + +async function main() { + const check = process.argv.includes("--check"); + const lexiconPkg = await lexiconPackage(); + const packageFile = path.join(packageRoot, "package.json"); + const packageJson = JSON.parse(await readFile(packageFile, "utf8")); + const srcDir = path.join(packageRoot, "src"); + + if (!check) { + await generate(srcDir, lexiconPkg); + packageJson.hypercerts = { ...packageJson.hypercerts, lexiconVersion: lexiconPkg.version }; + await writeFile(packageFile, `${JSON.stringify(packageJson, null, 2)}\n`); + console.log( + `Generated @hypercerts-org/api from @hypercerts-org/lexicon ${lexiconPkg.version}.`, + ); + return; + } + + const outDir = await mkdtemp(path.join(tmpdir(), "hypercerts-api-src-")); + try { + await mkdir(path.join(outDir, "src")); + await generate(path.join(outDir, "src"), lexiconPkg); + const expected = await readGenerated(path.join(outDir, "src")); + const actual = await readGenerated(srcDir); + const stale = [...new Set([...expected.keys(), ...actual.keys()])] + .filter((file) => expected.get(file) !== actual.get(file)) + .sort(byCodeUnit); + if (packageJson.hypercerts?.lexiconVersion !== lexiconPkg.version) { + stale.unshift("package.json (hypercerts.lexiconVersion)"); + } + if (stale.length > 0) { + const list = stale.map((file) => ` ${file}`).join("\n"); + console.error(`Generated sources are stale. Run \`pnpm client:generate\`.\n${list}`); + process.exitCode = 1; + return; + } + console.log("Generated sources are up to date."); + } finally { + await rm(outDir, { recursive: true, force: true }); + } +} + +await main(); diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts new file mode 100644 index 0000000..c2fee06 --- /dev/null +++ b/packages/api/src/index.ts @@ -0,0 +1,12 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +// lex's NSID namespace tree for the Hypercerts API: queries are generated +// here; the records and other definitions they reference come from +// @hypercerts-org/lexicon/records, so org.hypercerts.claim.activity is the same +// module in both packages. +export * from "./lexicons/index.js"; + +/** Version of @hypercerts-org/lexicon these definitions were generated from. */ +export const LEXICON_VERSION = "1.7.0"; diff --git a/packages/api/src/lexicons/app.ts b/packages/api/src/lexicons/app.ts new file mode 100644 index 0000000..622ce8d --- /dev/null +++ b/packages/api/src/lexicons/app.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as bsky from "@hypercerts-org/lexicon/records/app/bsky"; +export * as certified from "./app/certified.js"; diff --git a/packages/api/src/lexicons/app/certified.ts b/packages/api/src/lexicons/app/certified.ts new file mode 100644 index 0000000..6e0e047 --- /dev/null +++ b/packages/api/src/lexicons/app/certified.ts @@ -0,0 +1,12 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as actor from "./certified/actor.js"; +export * as badge from "./certified/badge.js"; +export * as defs from "@hypercerts-org/lexicon/records/app/certified/defs"; +export * as feed from "./certified/feed.js"; +export * as graph from "./certified/graph.js"; +export * as link from "./certified/link.js"; +export * as location from "./certified/location.js"; +export * as signature from "@hypercerts-org/lexicon/records/app/certified/signature"; diff --git a/packages/api/src/lexicons/app/certified/actor.ts b/packages/api/src/lexicons/app/certified/actor.ts new file mode 100644 index 0000000..5d03da1 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor.ts @@ -0,0 +1,14 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as getOrganization from "./actor/getOrganization.js"; +export * as getOrganizations from "./actor/getOrganizations.js"; +export * as getProfile from "./actor/getProfile.js"; +export * as getProfiles from "./actor/getProfiles.js"; +export * as listOrganizations from "./actor/listOrganizations.js"; +export * as listProfiles from "./actor/listProfiles.js"; +export * as organization from "@hypercerts-org/lexicon/records/app/certified/actor/organization"; +export * as profile from "@hypercerts-org/lexicon/records/app/certified/actor/profile"; +export * as searchOrganizations from "./actor/searchOrganizations.js"; +export * as searchProfiles from "./actor/searchProfiles.js"; diff --git a/packages/api/src/lexicons/app/certified/actor/getOrganization.defs.ts b/packages/api/src/lexicons/app/certified/actor/getOrganization.defs.ts new file mode 100644 index 0000000..c4fc4d3 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/getOrganization.defs.ts @@ -0,0 +1,50 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; + +const $nsid = "app.certified.actor.getOrganization"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Gets an actor's indexed organization sidecar and associated profile by DID. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","OrganizationQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** Actor with an indexed organization sidecar and nullable profile view. */ +type OrganizationActorView = { $type?: "app.certified.actor.getOrganization#organizationActorView";"did":l.DidString;"profile":ApiDefs.ProfileView | null;"organization":ApiDefs.OrganizationView }; + +export type { OrganizationActorView }; + +/** Actor with an indexed organization sidecar and nullable profile view. */ +const organizationActorView = /*#__PURE__*/ l.typedObject($nsid, "organizationActorView", /*#__PURE__*/ l.object({"did":/*#__PURE__*/ l.string({"format":"did"}),"profile":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any)),"organization":/*#__PURE__*/ l.ref((() => ApiDefs.organizationView) as any)})); + +export { organizationActorView }; + +type Output = { $type?: "app.certified.actor.getOrganization#output";"actor":OrganizationActorView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"actor":/*#__PURE__*/ l.ref((() => organizationActorView) as any)})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/actor/getOrganization.ts b/packages/api/src/lexicons/app/certified/actor/getOrganization.ts new file mode 100644 index 0000000..91fd61c --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/getOrganization.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getOrganization.defs.js"; +export { main as default } from "./getOrganization.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/actor/getOrganizations.defs.ts b/packages/api/src/lexicons/app/certified/actor/getOrganizations.defs.ts new file mode 100644 index 0000000..ded1234 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/getOrganizations.defs.ts @@ -0,0 +1,63 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ActorGetOrganization from "./getOrganization.defs.js"; + +const $nsid = "app.certified.actor.getOrganizations"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actors":/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"minLength":1,"maxLength":100})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns an indexed organization sidecar and associated profile for each supplied actor DID. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","OrganizationQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.actor.getOrganizations#output"; + + /** + * One result per supplied actor occurrence, in request order. + */ + "organizations":(OrganizationResult)[] }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"organizations":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => organizationResult) as any), )})); + +export { output }; + +type OrganizationResult = { $type?: "app.certified.actor.getOrganizations#organizationResult"; + + /** + * Actor DID from the corresponding request occurrence. + */ + "actor":l.DidString; + + /** + * Hydrated actor view, or null when no indexed organization sidecar exists. + */ + "organization":ActorGetOrganization.OrganizationActorView | null }; + +export type { OrganizationResult }; + +const organizationResult = /*#__PURE__*/ l.typedObject($nsid, "organizationResult", /*#__PURE__*/ l.object({"actor":/*#__PURE__*/ l.string({"format":"did"}),"organization":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ActorGetOrganization.organizationActorView) as any))})); + +export { organizationResult }; diff --git a/packages/api/src/lexicons/app/certified/actor/getOrganizations.ts b/packages/api/src/lexicons/app/certified/actor/getOrganizations.ts new file mode 100644 index 0000000..3187a49 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/getOrganizations.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getOrganizations.defs.js"; +export { main as default } from "./getOrganizations.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/actor/getProfile.defs.ts b/packages/api/src/lexicons/app/certified/actor/getProfile.defs.ts new file mode 100644 index 0000000..ce4e382 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/getProfile.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; + +const $nsid = "app.certified.actor.getProfile"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"at-identifier"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Gets an indexed Certified profile by DID or handle. Handles resolve through the configured resolver's com.atproto.identity.resolveHandle endpoint; no DID document is fetched for independent verification. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","HandleResolverConfigError","HandleResolutionFailed","RecordNotFound","ProfileQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.actor.getProfile#output"; + + /** + * Indexed Certified profile record with its AT-URI, CID, repository DID, and indexing time. + */ + "profile":ApiDefs.ProfileView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"profile":/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any)})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/actor/getProfile.ts b/packages/api/src/lexicons/app/certified/actor/getProfile.ts new file mode 100644 index 0000000..02f3be9 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/getProfile.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getProfile.defs.js"; +export { main as default } from "./getProfile.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/actor/getProfiles.defs.ts b/packages/api/src/lexicons/app/certified/actor/getProfiles.defs.ts new file mode 100644 index 0000000..2151de4 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/getProfiles.defs.ts @@ -0,0 +1,63 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; + +const $nsid = "app.certified.actor.getProfiles"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actors":/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"minLength":1,"maxLength":100})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns an indexed Certified profile for each supplied actor DID. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ProfileQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.actor.getProfiles#output"; + + /** + * One result per supplied actor occurrence, in request order. + */ + "profiles":(ProfileResult)[] }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"profiles":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => profileResult) as any), )})); + +export { output }; + +type ProfileResult = { $type?: "app.certified.actor.getProfiles#profileResult"; + + /** + * Actor DID from the corresponding request occurrence. + */ + "actor":l.DidString; + + /** + * Indexed profile view, or null when none is indexed. + */ + "profile":ApiDefs.ProfileView | null }; + +export type { ProfileResult }; + +const profileResult = /*#__PURE__*/ l.typedObject($nsid, "profileResult", /*#__PURE__*/ l.object({"actor":/*#__PURE__*/ l.string({"format":"did"}),"profile":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any))})); + +export { profileResult }; diff --git a/packages/api/src/lexicons/app/certified/actor/getProfiles.ts b/packages/api/src/lexicons/app/certified/actor/getProfiles.ts new file mode 100644 index 0000000..13570b1 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/getProfiles.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getProfiles.defs.js"; +export { main as default } from "./getProfiles.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/actor/listOrganizations.defs.ts b/packages/api/src/lexicons/app/certified/actor/listOrganizations.defs.ts new file mode 100644 index 0000000..6e340f2 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/listOrganizations.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ActorGetOrganization from "./getOrganization.defs.js"; + +const $nsid = "app.certified.actor.listOrganizations"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"organizationTypes":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"maxLength":128}), {"maxLength":100})),"visibility":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists actors with indexed organization sidecars matching the supplied filters. Filters combine with AND, and values within each array filter are ORed. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","OrganizationQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.actor.listOrganizations#output";"actors":(ActorGetOrganization.OrganizationActorView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"actors":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ActorGetOrganization.organizationActorView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/actor/listOrganizations.ts b/packages/api/src/lexicons/app/certified/actor/listOrganizations.ts new file mode 100644 index 0000000..8befceb --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/listOrganizations.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listOrganizations.defs.js"; +export { main as default } from "./listOrganizations.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/actor/listProfiles.defs.ts b/packages/api/src/lexicons/app/certified/actor/listProfiles.defs.ts new file mode 100644 index 0000000..e2e15a4 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/listProfiles.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; + +const $nsid = "app.certified.actor.listProfiles"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed Certified profiles with pagination. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ProfileQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.actor.listProfiles#output";"profiles":(ApiDefs.ProfileView)[]; + + /** + * Opaque cursor for the next page; omitted when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"profiles":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/actor/listProfiles.ts b/packages/api/src/lexicons/app/certified/actor/listProfiles.ts new file mode 100644 index 0000000..39685d8 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/listProfiles.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listProfiles.defs.js"; +export { main as default } from "./listProfiles.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/actor/searchOrganizations.defs.ts b/packages/api/src/lexicons/app/certified/actor/searchOrganizations.defs.ts new file mode 100644 index 0000000..211e249 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/searchOrganizations.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ActorGetOrganization from "./getOrganization.defs.js"; + +const $nsid = "app.certified.actor.searchOrganizations"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"search":/*#__PURE__*/ l.string(),"actors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"organizationTypes":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"maxLength":128}), {"maxLength":100})),"visibility":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Searches organizations by associated profile text and optional filters. Filters combine with AND, and values within each array filter are ORed. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","OrganizationQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.actor.searchOrganizations#output";"actors":(ActorGetOrganization.OrganizationActorView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"actors":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ActorGetOrganization.organizationActorView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/actor/searchOrganizations.ts b/packages/api/src/lexicons/app/certified/actor/searchOrganizations.ts new file mode 100644 index 0000000..6333edd --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/searchOrganizations.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./searchOrganizations.defs.js"; +export { main as default } from "./searchOrganizations.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/actor/searchProfiles.defs.ts b/packages/api/src/lexicons/app/certified/actor/searchProfiles.defs.ts new file mode 100644 index 0000000..2876f4f --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/searchProfiles.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; + +const $nsid = "app.certified.actor.searchProfiles"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"search":/*#__PURE__*/ l.string(),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"actors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Searches indexed Certified profiles by text, optionally restricted to actor DIDs. Filters combine with AND; values in the actor array are ORed. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ProfileQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.actor.searchProfiles#output";"profiles":(ApiDefs.ProfileView)[]; + + /** + * Opaque cursor for the next page; omitted when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"profiles":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/actor/searchProfiles.ts b/packages/api/src/lexicons/app/certified/actor/searchProfiles.ts new file mode 100644 index 0000000..aadb5a9 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/actor/searchProfiles.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./searchProfiles.defs.js"; +export { main as default } from "./searchProfiles.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/badge.ts b/packages/api/src/lexicons/app/certified/badge.ts new file mode 100644 index 0000000..cdeda83 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge.ts @@ -0,0 +1,14 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as award from "@hypercerts-org/lexicon/records/app/certified/badge/award"; +export * as definition from "@hypercerts-org/lexicon/records/app/certified/badge/definition"; +export * as getBadgeAward from "./badge/getBadgeAward.js"; +export * as getBadgeDefinition from "./badge/getBadgeDefinition.js"; +export * as getBadgeResponse from "./badge/getBadgeResponse.js"; +export * as listBadgeAwards from "./badge/listBadgeAwards.js"; +export * as listBadgeDefinitions from "./badge/listBadgeDefinitions.js"; +export * as listBadgeResponses from "./badge/listBadgeResponses.js"; +export * as response from "@hypercerts-org/lexicon/records/app/certified/badge/response"; +export * as searchBadgeDefinitions from "./badge/searchBadgeDefinitions.js"; diff --git a/packages/api/src/lexicons/app/certified/badge/getBadgeAward.defs.ts b/packages/api/src/lexicons/app/certified/badge/getBadgeAward.defs.ts new file mode 100644 index 0000000..709c8ac --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/getBadgeAward.defs.ts @@ -0,0 +1,88 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; +import * as BadgeAward from "@hypercerts-org/lexicon/records/app/certified/badge/award.defs"; +import * as BadgeDefinition from "@hypercerts-org/lexicon/records/app/certified/badge/definition.defs"; +import * as BadgeResponse from "@hypercerts-org/lexicon/records/app/certified/badge/response.defs"; + +const $nsid = "app.certified.badge.getBadgeAward"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Gets a badge award and its recipient response by AT-URI without authentication. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","BadgeAwardQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.badge.getBadgeAward#output";"badgeAward":BadgeAwardView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"badgeAward":/*#__PURE__*/ l.ref((() => badgeAwardView) as any)})); + +export { output }; + +/** Exact indexed badge-definition version referenced by the award. */ +type BadgeDefinitionRecordView = { $type?: "app.certified.badge.getBadgeAward#badgeDefinitionRecordView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":BadgeDefinition.Main }; + +export type { BadgeDefinitionRecordView }; + +/** Exact indexed badge-definition version referenced by the award. */ +const badgeDefinitionRecordView = /*#__PURE__*/ l.typedObject($nsid, "badgeDefinitionRecordView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => BadgeDefinition.main) as any)})); + +export { badgeDefinitionRecordView }; + +/** Raw recipient response record without author hydration. */ +type BadgeResponseRecordView = { $type?: "app.certified.badge.getBadgeAward#badgeResponseRecordView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":BadgeResponse.Main }; + +export type { BadgeResponseRecordView }; + +/** Raw recipient response record without author hydration. */ +const badgeResponseRecordView = /*#__PURE__*/ l.typedObject($nsid, "badgeResponseRecordView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => BadgeResponse.main) as any)})); + +export { badgeResponseRecordView }; + +/** Badge award with its publisher, exact definition version, and recipient response status. */ +type BadgeAwardView = { $type?: "app.certified.badge.getBadgeAward#badgeAwardView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":BadgeAward.Main; + + /** + * The referenced definition version, or null when it is unavailable. + */ + "badge":BadgeDefinitionRecordView | null; + + /** + * Latest eligible recipient response, or unanswered when none exists. + */ + "responseStatus":"accepted" | "rejected" | "unanswered"; + + /** + * Latest eligible response record, or null when unanswered. + */ + "recipientResponse":BadgeResponseRecordView | null }; + +export type { BadgeAwardView }; + +/** Badge award with its publisher, exact definition version, and recipient response status. */ +const badgeAwardView = /*#__PURE__*/ l.typedObject($nsid, "badgeAwardView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => BadgeAward.main) as any),"badge":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => badgeDefinitionRecordView) as any)),"responseStatus":/*#__PURE__*/ l.enum(["accepted","rejected","unanswered"]),"recipientResponse":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => badgeResponseRecordView) as any))})); + +export { badgeAwardView }; diff --git a/packages/api/src/lexicons/app/certified/badge/getBadgeAward.ts b/packages/api/src/lexicons/app/certified/badge/getBadgeAward.ts new file mode 100644 index 0000000..a868391 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/getBadgeAward.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getBadgeAward.defs.js"; +export { main as default } from "./getBadgeAward.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/badge/getBadgeDefinition.defs.ts b/packages/api/src/lexicons/app/certified/badge/getBadgeDefinition.defs.ts new file mode 100644 index 0000000..1a75a5f --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/getBadgeDefinition.defs.ts @@ -0,0 +1,51 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; +import * as BadgeDefinition from "@hypercerts-org/lexicon/records/app/certified/badge/definition.defs"; + +const $nsid = "app.certified.badge.getBadgeDefinition"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns an indexed badge definition and its publisher actor. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.badge.getBadgeDefinition#output";"badgeDefinition":BadgeDefinitionView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"badgeDefinition":/*#__PURE__*/ l.ref((() => badgeDefinitionView) as any)})); + +export { output }; + +/** Full indexed badge-definition record with its publisher actor. */ +type BadgeDefinitionView = { $type?: "app.certified.badge.getBadgeDefinition#badgeDefinitionView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":BadgeDefinition.Main }; + +export type { BadgeDefinitionView }; + +/** Full indexed badge-definition record with its publisher actor. */ +const badgeDefinitionView = /*#__PURE__*/ l.typedObject($nsid, "badgeDefinitionView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => BadgeDefinition.main) as any)})); + +export { badgeDefinitionView }; diff --git a/packages/api/src/lexicons/app/certified/badge/getBadgeDefinition.ts b/packages/api/src/lexicons/app/certified/badge/getBadgeDefinition.ts new file mode 100644 index 0000000..7a19547 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/getBadgeDefinition.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getBadgeDefinition.defs.js"; +export { main as default } from "./getBadgeDefinition.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/badge/getBadgeResponse.defs.ts b/packages/api/src/lexicons/app/certified/badge/getBadgeResponse.defs.ts new file mode 100644 index 0000000..3f7b7ee --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/getBadgeResponse.defs.ts @@ -0,0 +1,51 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; +import * as BadgeResponse from "@hypercerts-org/lexicon/records/app/certified/badge/response.defs"; + +const $nsid = "app.certified.badge.getBadgeResponse"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Gets one badge response by AT-URI without authentication. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","BadgeResponseQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.badge.getBadgeResponse#output";"badgeResponse":BadgeResponseView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"badgeResponse":/*#__PURE__*/ l.ref((() => badgeResponseView) as any)})); + +export { output }; + +/** Raw badge response with its publisher actor. */ +type BadgeResponseView = { $type?: "app.certified.badge.getBadgeResponse#badgeResponseView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":BadgeResponse.Main }; + +export type { BadgeResponseView }; + +/** Raw badge response with its publisher actor. */ +const badgeResponseView = /*#__PURE__*/ l.typedObject($nsid, "badgeResponseView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => BadgeResponse.main) as any)})); + +export { badgeResponseView }; diff --git a/packages/api/src/lexicons/app/certified/badge/getBadgeResponse.ts b/packages/api/src/lexicons/app/certified/badge/getBadgeResponse.ts new file mode 100644 index 0000000..b551540 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/getBadgeResponse.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getBadgeResponse.defs.js"; +export { main as default } from "./getBadgeResponse.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/badge/listBadgeAwards.defs.ts b/packages/api/src/lexicons/app/certified/badge/listBadgeAwards.defs.ts new file mode 100644 index 0000000..441519e --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/listBadgeAwards.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as BadgeGetBadgeAward from "./getBadgeAward.defs.js"; + +const $nsid = "app.certified.badge.listBadgeAwards"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"badgeUris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"badgeTypes":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"maxLength":100}), {"maxLength":100})),"subjects":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string(), {"maxLength":100})),"responses":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.enum(["accepted","rejected","unanswered"]), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.enum(["asc","desc"]), "desc")),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists public badge awards with recipient response status and pagination without authentication. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","BadgeAwardQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.badge.listBadgeAwards#output";"badgeAwards":(BadgeGetBadgeAward.BadgeAwardView)[]; + + /** + * Opaque cursor for the next page; omitted when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"badgeAwards":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => BadgeGetBadgeAward.badgeAwardView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/badge/listBadgeAwards.ts b/packages/api/src/lexicons/app/certified/badge/listBadgeAwards.ts new file mode 100644 index 0000000..f2fc287 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/listBadgeAwards.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listBadgeAwards.defs.js"; +export { main as default } from "./listBadgeAwards.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/badge/listBadgeDefinitions.defs.ts b/packages/api/src/lexicons/app/certified/badge/listBadgeDefinitions.defs.ts new file mode 100644 index 0000000..7f86b6a --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/listBadgeDefinitions.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as BadgeGetBadgeDefinition from "./getBadgeDefinition.defs.js"; + +const $nsid = "app.certified.badge.listBadgeDefinitions"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"badgeTypes":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"maxLength":100}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.enum(["asc","desc"]), "desc")),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed badge definitions. Author and badgeType filters are combined with AND; values within each filter are matched with OR. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.badge.listBadgeDefinitions#output";"badgeDefinitions":(BadgeGetBadgeDefinition.BadgeDefinitionView)[]; + + /** + * Cursor for the next page; omitted when there are no more results. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"badgeDefinitions":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => BadgeGetBadgeDefinition.badgeDefinitionView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/badge/listBadgeDefinitions.ts b/packages/api/src/lexicons/app/certified/badge/listBadgeDefinitions.ts new file mode 100644 index 0000000..a311a65 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/listBadgeDefinitions.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listBadgeDefinitions.defs.js"; +export { main as default } from "./listBadgeDefinitions.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/badge/listBadgeResponses.defs.ts b/packages/api/src/lexicons/app/certified/badge/listBadgeResponses.defs.ts new file mode 100644 index 0000000..37f210a --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/listBadgeResponses.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as BadgeGetBadgeResponse from "./getBadgeResponse.defs.js"; + +const $nsid = "app.certified.badge.listBadgeResponses"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"badgeAward":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({"format":"at-uri"})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.enum(["asc","desc"]), "desc")),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists raw public badge responses with optional award filtering and pagination without authentication. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","BadgeResponseQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.badge.listBadgeResponses#output";"badgeResponses":(BadgeGetBadgeResponse.BadgeResponseView)[]; + + /** + * Opaque cursor for the next page; omitted when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"badgeResponses":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => BadgeGetBadgeResponse.badgeResponseView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/badge/listBadgeResponses.ts b/packages/api/src/lexicons/app/certified/badge/listBadgeResponses.ts new file mode 100644 index 0000000..fb8d1c5 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/listBadgeResponses.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listBadgeResponses.defs.js"; +export { main as default } from "./listBadgeResponses.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/badge/searchBadgeDefinitions.defs.ts b/packages/api/src/lexicons/app/certified/badge/searchBadgeDefinitions.defs.ts new file mode 100644 index 0000000..89f2695 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/searchBadgeDefinitions.defs.ts @@ -0,0 +1,56 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; +import * as BadgeDefinition from "@hypercerts-org/lexicon/records/app/certified/badge/definition.defs"; + +const $nsid = "app.certified.badge.searchBadgeDefinitions"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"search":/*#__PURE__*/ l.string(),"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"badgeTypes":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"maxLength":100}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.enum(["asc","desc"]), "desc")),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Searches badge definitions by title or description without authentication. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","BadgeDefinitionQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.badge.searchBadgeDefinitions#output";"badgeDefinitions":(BadgeDefinitionView)[]; + + /** + * Opaque cursor for the next page; omitted when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"badgeDefinitions":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => badgeDefinitionView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; + +/** Indexed badge definition with its publisher actor. */ +type BadgeDefinitionView = { $type?: "app.certified.badge.searchBadgeDefinitions#badgeDefinitionView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":BadgeDefinition.Main }; + +export type { BadgeDefinitionView }; + +/** Indexed badge definition with its publisher actor. */ +const badgeDefinitionView = /*#__PURE__*/ l.typedObject($nsid, "badgeDefinitionView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => BadgeDefinition.main) as any)})); + +export { badgeDefinitionView }; diff --git a/packages/api/src/lexicons/app/certified/badge/searchBadgeDefinitions.ts b/packages/api/src/lexicons/app/certified/badge/searchBadgeDefinitions.ts new file mode 100644 index 0000000..c364128 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/badge/searchBadgeDefinitions.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./searchBadgeDefinitions.defs.js"; +export { main as default } from "./searchBadgeDefinitions.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/feed.ts b/packages/api/src/lexicons/app/certified/feed.ts new file mode 100644 index 0000000..d8d88b3 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed.ts @@ -0,0 +1,12 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as getActorLikes from "./feed/getActorLikes.js"; +export * as getActorReactions from "./feed/getActorReactions.js"; +export * as getActorReposts from "./feed/getActorReposts.js"; +export * as getLikes from "./feed/getLikes.js"; +export * as getReactionCounts from "./feed/getReactionCounts.js"; +export * as getReposts from "./feed/getReposts.js"; +export * as like from "@hypercerts-org/lexicon/records/app/certified/feed/like"; +export * as repost from "@hypercerts-org/lexicon/records/app/certified/feed/repost"; diff --git a/packages/api/src/lexicons/app/certified/feed/getActorLikes.defs.ts b/packages/api/src/lexicons/app/certified/feed/getActorLikes.defs.ts new file mode 100644 index 0000000..785b510 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getActorLikes.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as FeedGetLikes from "./getLikes.defs.js"; + +const $nsid = "app.certified.feed.getActorLikes"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did"}),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists an actor's indexed likes, one representative per subject URI regardless of subject CID. No authentication is required. Duplicates use the earliest createdAt, with URI ascending on ties. Returns raw like records including subject, via, and signatures when present; subjects are not hydrated and need not be indexed. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","LikeQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.feed.getActorLikes#output";"likes":(FeedGetLikes.LikeRecordView)[]; + + /** + * Next-page cursor; omitted when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"likes":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => FeedGetLikes.likeRecordView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/feed/getActorLikes.ts b/packages/api/src/lexicons/app/certified/feed/getActorLikes.ts new file mode 100644 index 0000000..9dca934 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getActorLikes.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getActorLikes.defs.js"; +export { main as default } from "./getActorLikes.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/feed/getActorReactions.defs.ts b/packages/api/src/lexicons/app/certified/feed/getActorReactions.defs.ts new file mode 100644 index 0000000..b5224b5 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getActorReactions.defs.ts @@ -0,0 +1,69 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as FeedGetLikes from "./getLikes.defs.js"; +import * as FeedGetReposts from "./getReposts.defs.js"; + +const $nsid = "app.certified.feed.getActorReactions"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did"}),"subjects":/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"minLength":1,"maxLength":100})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns the indexed like and repost for each supplied subject occurrence by one actor. Authentication is not required. Subject matching ignores CID; duplicate inputs and request order are preserved. For each reaction collection, duplicate actor and subject URI pairs use the earliest valid createdAt; when it is absent or invalid, ordering falls back to indexedAt and then the database row's created_at timestamp, with reaction URI ascending on ties. A missing indexed reaction is null; query failures return an error. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ActorReactionsQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.feed.getActorReactions#output"; + + /** + * One result for each supplied subject occurrence, in request order, including duplicates. + */ + "results":(ActorReactionResult)[] }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"results":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => actorReactionResult) as any), )})); + +export { output }; + +type ActorReactionResult = { $type?: "app.certified.feed.getActorReactions#actorReactionResult"; + + /** + * The subject AT-URI from this request occurrence; matching ignores CID. + */ + "subject":l.AtUriString; + + /** + * The actor's earliest indexed like for this subject URI, or null when none is indexed. + */ + "like":FeedGetLikes.LikeRecordView | null; + + /** + * The actor's earliest indexed repost for this subject URI, or null when none is indexed. + */ + "repost":FeedGetReposts.RepostRecordView | null }; + +export type { ActorReactionResult }; + +const actorReactionResult = /*#__PURE__*/ l.typedObject($nsid, "actorReactionResult", /*#__PURE__*/ l.object({"subject":/*#__PURE__*/ l.string({"format":"at-uri"}),"like":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => FeedGetLikes.likeRecordView) as any)),"repost":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => FeedGetReposts.repostRecordView) as any))})); + +export { actorReactionResult }; diff --git a/packages/api/src/lexicons/app/certified/feed/getActorReactions.ts b/packages/api/src/lexicons/app/certified/feed/getActorReactions.ts new file mode 100644 index 0000000..1ebeef6 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getActorReactions.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getActorReactions.defs.js"; +export { main as default } from "./getActorReactions.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/feed/getActorReposts.defs.ts b/packages/api/src/lexicons/app/certified/feed/getActorReposts.defs.ts new file mode 100644 index 0000000..4e5dbcd --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getActorReposts.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as FeedGetReposts from "./getReposts.defs.js"; + +const $nsid = "app.certified.feed.getActorReposts"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did"}),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists an actor's indexed reposts, one representative per subject URI regardless of subject CID. No authentication is required. Duplicates use the earliest createdAt, with URI ascending on ties. Returns raw repost records including subject, via, and signatures when present; subjects are not hydrated and need not be indexed. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RepostQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.feed.getActorReposts#output";"reposts":(FeedGetReposts.RepostRecordView)[]; + + /** + * Next-page cursor; omitted when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"reposts":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => FeedGetReposts.repostRecordView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/feed/getActorReposts.ts b/packages/api/src/lexicons/app/certified/feed/getActorReposts.ts new file mode 100644 index 0000000..55aaee9 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getActorReposts.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getActorReposts.defs.js"; +export { main as default } from "./getActorReposts.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/feed/getLikes.defs.ts b/packages/api/src/lexicons/app/certified/feed/getLikes.defs.ts new file mode 100644 index 0000000..09695d7 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getLikes.defs.ts @@ -0,0 +1,76 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; +import * as FeedLike from "@hypercerts-org/lexicon/records/app/certified/feed/like.defs"; + +const $nsid = "app.certified.feed.getLikes"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"subject":/*#__PURE__*/ l.string({"format":"at-uri"}),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists distinct actors liking a subject record. No authentication is required. Matches subject.uri regardless of CID or whether the subject is indexed. Duplicate author and subject URI pairs use the earliest createdAt, with URI ascending on ties. Only the returned page is hydrated; missing sidecars are null and hydration failures return errors, not partial pages. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","LikeQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** Raw indexed like preserving the full record, including subject, via, and signatures when present. Duplicates use the earliest createdAt, with URI ascending on ties. */ +type LikeRecordView = { $type?: "app.certified.feed.getLikes#likeRecordView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null; + + /** + * Repository-owner DID of the like publisher. + */ + "did":l.DidString;"record":FeedLike.Main }; + +export type { LikeRecordView }; + +/** Raw indexed like preserving the full record, including subject, via, and signatures when present. Duplicates use the earliest createdAt, with URI ascending on ties. */ +const likeRecordView = /*#__PURE__*/ l.typedObject($nsid, "likeRecordView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => FeedLike.main) as any)})); + +export { likeRecordView }; + +/** Liker actor sidecars paired with the representative raw like record. Missing profile and organization records are null. */ +type LikeView = { $type?: "app.certified.feed.getLikes#likeView";"did":l.DidString;"profile":ApiDefs.ProfileView | null;"organization":ApiDefs.OrganizationView | null;"like":LikeRecordView }; + +export type { LikeView }; + +/** Liker actor sidecars paired with the representative raw like record. Missing profile and organization records are null. */ +const likeView = /*#__PURE__*/ l.typedObject($nsid, "likeView", /*#__PURE__*/ l.object({"did":/*#__PURE__*/ l.string({"format":"did"}),"profile":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any)),"organization":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.organizationView) as any)),"like":/*#__PURE__*/ l.ref((() => likeRecordView) as any)})); + +export { likeView }; + +type Output = { $type?: "app.certified.feed.getLikes#output"; + + /** + * Total distinct indexed author DIDs liking this subject URI, independent of page size. Zero when no likes are indexed; totals may change between requests. + */ + "likeCount":number;"likes":(LikeView)[]; + + /** + * Next-page cursor; omitted when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"likeCount":/*#__PURE__*/ l.integer({"minimum":0}),"likes":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => likeView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/feed/getLikes.ts b/packages/api/src/lexicons/app/certified/feed/getLikes.ts new file mode 100644 index 0000000..0cd7f83 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getLikes.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getLikes.defs.js"; +export { main as default } from "./getLikes.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/feed/getReactionCounts.defs.ts b/packages/api/src/lexicons/app/certified/feed/getReactionCounts.defs.ts new file mode 100644 index 0000000..9b50b54 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getReactionCounts.defs.ts @@ -0,0 +1,67 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; + +const $nsid = "app.certified.feed.getReactionCounts"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"subjects":/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"minLength":1,"maxLength":100})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns current indexed like and repost counts for a list of subject records. No authentication is required. Counts are distinct publisher DIDs and match subject.uri regardless of CID or whether the subject is indexed. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ReactionCountQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type SubjectReactionCount = { $type?: "app.certified.feed.getReactionCounts#subjectReactionCount"; + + /** + * Subject AT-URI requested by the caller; matching ignores the subject CID. + */ + "subject":l.AtUriString; + + /** + * Number of distinct indexed publisher DIDs with a current like whose subject.uri matches this URI; zero when no matching likes are indexed. + */ + "likeCount":number; + + /** + * Number of distinct indexed publisher DIDs with a current repost whose subject.uri matches this URI; zero when no matching reposts are indexed. + */ + "repostCount":number }; + +export type { SubjectReactionCount }; + +const subjectReactionCount = /*#__PURE__*/ l.typedObject($nsid, "subjectReactionCount", /*#__PURE__*/ l.object({"subject":/*#__PURE__*/ l.string({"format":"at-uri"}),"likeCount":/*#__PURE__*/ l.integer({"minimum":0}),"repostCount":/*#__PURE__*/ l.integer({"minimum":0})})); + +export { subjectReactionCount }; + +type Output = { $type?: "app.certified.feed.getReactionCounts#output"; + + /** + * One entry for each requested subject, in request order. Repeated input URIs produce repeated entries. Counts reflect current indexed state and may change between requests. + */ + "counts":(SubjectReactionCount)[] }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"counts":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => subjectReactionCount) as any), )})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/feed/getReactionCounts.ts b/packages/api/src/lexicons/app/certified/feed/getReactionCounts.ts new file mode 100644 index 0000000..f063c52 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getReactionCounts.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getReactionCounts.defs.js"; +export { main as default } from "./getReactionCounts.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/feed/getReposts.defs.ts b/packages/api/src/lexicons/app/certified/feed/getReposts.defs.ts new file mode 100644 index 0000000..96e00f2 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getReposts.defs.ts @@ -0,0 +1,76 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; +import * as FeedRepost from "@hypercerts-org/lexicon/records/app/certified/feed/repost.defs"; + +const $nsid = "app.certified.feed.getReposts"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"subject":/*#__PURE__*/ l.string({"format":"at-uri"}),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists distinct actors reposting a subject record. No authentication is required. Matches subject.uri regardless of CID or whether the subject is indexed. Duplicate author and subject URI pairs use the earliest createdAt, with URI ascending on ties. Only the returned page is hydrated; missing sidecars are null and hydration failures return errors, not partial pages. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RepostQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** Raw indexed repost preserving the full record, including subject, via, and signatures when present. Its URI and CID identify the repost for feed attribution. Duplicates use the earliest createdAt, with URI ascending on ties. */ +type RepostRecordView = { $type?: "app.certified.feed.getReposts#repostRecordView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null; + + /** + * Repository-owner DID of the repost publisher. + */ + "did":l.DidString;"record":FeedRepost.Main }; + +export type { RepostRecordView }; + +/** Raw indexed repost preserving the full record, including subject, via, and signatures when present. Its URI and CID identify the repost for feed attribution. Duplicates use the earliest createdAt, with URI ascending on ties. */ +const repostRecordView = /*#__PURE__*/ l.typedObject($nsid, "repostRecordView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => FeedRepost.main) as any)})); + +export { repostRecordView }; + +/** Reposter actor sidecars paired with the representative raw repost record. Missing profile and organization records are null. */ +type RepostView = { $type?: "app.certified.feed.getReposts#repostView";"did":l.DidString;"profile":ApiDefs.ProfileView | null;"organization":ApiDefs.OrganizationView | null;"repost":RepostRecordView }; + +export type { RepostView }; + +/** Reposter actor sidecars paired with the representative raw repost record. Missing profile and organization records are null. */ +const repostView = /*#__PURE__*/ l.typedObject($nsid, "repostView", /*#__PURE__*/ l.object({"did":/*#__PURE__*/ l.string({"format":"did"}),"profile":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any)),"organization":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.organizationView) as any)),"repost":/*#__PURE__*/ l.ref((() => repostRecordView) as any)})); + +export { repostView }; + +type Output = { $type?: "app.certified.feed.getReposts#output"; + + /** + * Total distinct indexed author DIDs reposting this subject URI, independent of page size. Zero when no reposts are indexed; totals may change between requests. + */ + "repostCount":number;"reposts":(RepostView)[]; + + /** + * Next-page cursor; omitted when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"repostCount":/*#__PURE__*/ l.integer({"minimum":0}),"reposts":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => repostView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/feed/getReposts.ts b/packages/api/src/lexicons/app/certified/feed/getReposts.ts new file mode 100644 index 0000000..333d68a --- /dev/null +++ b/packages/api/src/lexicons/app/certified/feed/getReposts.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getReposts.defs.js"; +export { main as default } from "./getReposts.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/graph.ts b/packages/api/src/lexicons/app/certified/graph.ts new file mode 100644 index 0000000..bffcd84 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph.ts @@ -0,0 +1,15 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as entityFollow from "@hypercerts-org/lexicon/records/app/certified/graph/entityFollow"; +export * as follow from "@hypercerts-org/lexicon/records/app/certified/graph/follow"; +export * as getEntityFollow from "./graph/getEntityFollow.js"; +export * as getEntityFollows from "./graph/getEntityFollows.js"; +export * as getFollow from "./graph/getFollow.js"; +export * as getFollows from "./graph/getFollows.js"; +export * as listActorFollowers from "./graph/listActorFollowers.js"; +export * as listActorFollowing from "./graph/listActorFollowing.js"; +export * as listEntityFollowers from "./graph/listEntityFollowers.js"; +export * as listEntityFollowing from "./graph/listEntityFollowing.js"; +export * as listRecentFollows from "./graph/listRecentFollows.js"; diff --git a/packages/api/src/lexicons/app/certified/graph/getEntityFollow.defs.ts b/packages/api/src/lexicons/app/certified/graph/getEntityFollow.defs.ts new file mode 100644 index 0000000..9779802 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/getEntityFollow.defs.ts @@ -0,0 +1,55 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as GraphEntityFollow from "@hypercerts-org/lexicon/records/app/certified/graph/entityFollow.defs"; + +const $nsid = "app.certified.graph.getEntityFollow"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did"}),"entity":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns the representative entity-follow record for an actor and entity AT-URI, or null if none is indexed. No authentication is required; lookup failures return errors rather than null. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** Raw indexed entity-follow record view, including the DID that published the relationship. */ +type EntityFollowRecordView = { $type?: "app.certified.graph.getEntityFollow#entityFollowRecordView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":GraphEntityFollow.Main }; + +export type { EntityFollowRecordView }; + +/** Raw indexed entity-follow record view, including the DID that published the relationship. */ +const entityFollowRecordView = /*#__PURE__*/ l.typedObject($nsid, "entityFollowRecordView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => GraphEntityFollow.main) as any)})); + +export { entityFollowRecordView }; + +type Output = { $type?: "app.certified.graph.getEntityFollow#output"; + + /** + * Earliest matching record by createdAt, with URI ascending on ties; null if none is indexed. + */ + "follow":EntityFollowRecordView | null }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"follow":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => entityFollowRecordView) as any))})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/graph/getEntityFollow.ts b/packages/api/src/lexicons/app/certified/graph/getEntityFollow.ts new file mode 100644 index 0000000..141aeeb --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/getEntityFollow.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getEntityFollow.defs.js"; +export { main as default } from "./getEntityFollow.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/graph/getEntityFollows.defs.ts b/packages/api/src/lexicons/app/certified/graph/getEntityFollows.defs.ts new file mode 100644 index 0000000..3a9a72a --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/getEntityFollows.defs.ts @@ -0,0 +1,63 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as GraphGetEntityFollow from "./getEntityFollow.defs.js"; + +const $nsid = "app.certified.graph.getEntityFollows"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did","maxLength":2048}),"entities":/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri","maxLength":8192}), {"minLength":1,"maxLength":100})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns the representative raw entity-follow record, or null, for each requested actor-to-entity relationship. Authentication is not required. Supply 1–100 repeated entities values; the encoded GET request-target must not exceed 7,000 bytes. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","EntityFollowQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.graph.getEntityFollows#output"; + + /** + * One result per supplied entity occurrence, in request order. + */ + "results":(EntityFollowResult)[] }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"results":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => entityFollowResult) as any), )})); + +export { output }; + +type EntityFollowResult = { $type?: "app.certified.graph.getEntityFollows#entityFollowResult"; + + /** + * Entity AT-URI from the corresponding request occurrence. + */ + "entity":l.AtUriString; + + /** + * Earliest indexed matching record by createdAt, with URI ascending on ties, or null when no relationship is indexed. Query failures are errors, not null results. + */ + "follow":GraphGetEntityFollow.EntityFollowRecordView | null }; + +export type { EntityFollowResult }; + +const entityFollowResult = /*#__PURE__*/ l.typedObject($nsid, "entityFollowResult", /*#__PURE__*/ l.object({"entity":/*#__PURE__*/ l.string({"format":"at-uri"}),"follow":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => GraphGetEntityFollow.entityFollowRecordView) as any))})); + +export { entityFollowResult }; diff --git a/packages/api/src/lexicons/app/certified/graph/getEntityFollows.ts b/packages/api/src/lexicons/app/certified/graph/getEntityFollows.ts new file mode 100644 index 0000000..7d33f95 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/getEntityFollows.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getEntityFollows.defs.js"; +export { main as default } from "./getEntityFollows.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/graph/getFollow.defs.ts b/packages/api/src/lexicons/app/certified/graph/getFollow.defs.ts new file mode 100644 index 0000000..91c27fa --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/getFollow.defs.ts @@ -0,0 +1,68 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; +import * as GraphFollow from "@hypercerts-org/lexicon/records/app/certified/graph/follow.defs"; + +const $nsid = "app.certified.graph.getFollow"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did"}),"subject":/*#__PURE__*/ l.string({"format":"did"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns the representative follow record for an actor-to-actor relationship, or null if none is indexed. No authentication is required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** Raw indexed follow record with its publisher DID. For duplicates, the earliest createdAt wins, with URI ascending on ties. */ +type FollowRecordView = { $type?: "app.certified.graph.getFollow#followRecordView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":GraphFollow.Main }; + +export type { FollowRecordView }; + +/** Raw indexed follow record with its publisher DID. For duplicates, the earliest createdAt wins, with URI ascending on ties. */ +const followRecordView = /*#__PURE__*/ l.typedObject($nsid, "followRecordView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => GraphFollow.main) as any)})); + +export { followRecordView }; + +/** Displayed actor with nullable profile and organization sidecars, paired with the representative follow record. */ +type ActorFollowView = { $type?: "app.certified.graph.getFollow#actorFollowView";"did":l.DidString;"profile":ApiDefs.ProfileView | null;"organization":ApiDefs.OrganizationView | null;"follow":FollowRecordView }; + +export type { ActorFollowView }; + +/** Displayed actor with nullable profile and organization sidecars, paired with the representative follow record. */ +const actorFollowView = /*#__PURE__*/ l.typedObject($nsid, "actorFollowView", /*#__PURE__*/ l.object({"did":/*#__PURE__*/ l.string({"format":"did"}),"profile":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any)),"organization":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.organizationView) as any)),"follow":/*#__PURE__*/ l.ref((() => followRecordView) as any)})); + +export { actorFollowView }; + +/** Representative raw follow record, or null if no relationship is indexed. */ +type Output = { $type?: "app.certified.graph.getFollow#output"; + + /** + * Representative record for the actor and subject pair, with URI and publisher metadata. + */ + "follow":FollowRecordView | null }; + +export type { Output }; + +/** Representative raw follow record, or null if no relationship is indexed. */ +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"follow":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => followRecordView) as any))})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/graph/getFollow.ts b/packages/api/src/lexicons/app/certified/graph/getFollow.ts new file mode 100644 index 0000000..e827cd7 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/getFollow.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getFollow.defs.js"; +export { main as default } from "./getFollow.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/graph/getFollows.defs.ts b/packages/api/src/lexicons/app/certified/graph/getFollows.defs.ts new file mode 100644 index 0000000..50923d5 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/getFollows.defs.ts @@ -0,0 +1,63 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as GraphGetFollow from "./getFollow.defs.js"; + +const $nsid = "app.certified.graph.getFollows"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did","maxLength":2048}),"subjects":/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did","maxLength":2048}), {"minLength":1,"maxLength":100})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns the representative raw follow record, or null, for each requested actor-to-actor relationship. Authentication is not required. Supply 1–100 repeated subjects values; the encoded GET request-target must not exceed 7,000 bytes. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ActorFollowQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.graph.getFollows#output"; + + /** + * One result per supplied subject occurrence, in request order. + */ + "results":(FollowResult)[] }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"results":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => followResult) as any), )})); + +export { output }; + +type FollowResult = { $type?: "app.certified.graph.getFollows#followResult"; + + /** + * Subject DID from the corresponding request occurrence. + */ + "subject":l.DidString; + + /** + * Earliest indexed matching record by createdAt, with URI ascending on ties, or null when no relationship is indexed. Query failures are errors, not null results. + */ + "follow":GraphGetFollow.FollowRecordView | null }; + +export type { FollowResult }; + +const followResult = /*#__PURE__*/ l.typedObject($nsid, "followResult", /*#__PURE__*/ l.object({"subject":/*#__PURE__*/ l.string({"format":"did"}),"follow":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => GraphGetFollow.followRecordView) as any))})); + +export { followResult }; diff --git a/packages/api/src/lexicons/app/certified/graph/getFollows.ts b/packages/api/src/lexicons/app/certified/graph/getFollows.ts new file mode 100644 index 0000000..5faf6c0 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/getFollows.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getFollows.defs.js"; +export { main as default } from "./getFollows.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/graph/listActorFollowers.defs.ts b/packages/api/src/lexicons/app/certified/graph/listActorFollowers.defs.ts new file mode 100644 index 0000000..b3987ee --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/listActorFollowers.defs.ts @@ -0,0 +1,55 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as GraphGetFollow from "./getFollow.defs.js"; + +const $nsid = "app.certified.graph.listActorFollowers"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did"}),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists actors whose follow records name the requested DID as subject. No authentication is required; duplicate relationships are collapsed before pagination, and only the returned actors are hydrated. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.graph.listActorFollowers#output"; + + /** + * Incoming relationships; each displayed DID identifies the actor who published the follow. + */ + "followers":(GraphGetFollow.ActorFollowView)[]; + + /** + * Count of deduplicated relationships before cursor and limit are applied. + */ + "totalCount":number; + + /** + * Next-page cursor; omitted when no more results are available. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"followers":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => GraphGetFollow.actorFollowView) as any), ),"totalCount":/*#__PURE__*/ l.integer({"minimum":0}),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/graph/listActorFollowers.ts b/packages/api/src/lexicons/app/certified/graph/listActorFollowers.ts new file mode 100644 index 0000000..247647a --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/listActorFollowers.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listActorFollowers.defs.js"; +export { main as default } from "./listActorFollowers.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/graph/listActorFollowing.defs.ts b/packages/api/src/lexicons/app/certified/graph/listActorFollowing.defs.ts new file mode 100644 index 0000000..6fff8ac --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/listActorFollowing.defs.ts @@ -0,0 +1,55 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as GraphGetFollow from "./getFollow.defs.js"; + +const $nsid = "app.certified.graph.listActorFollowing"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did"}),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists actors named as subjects by the requested DID's follow records. No authentication is required; duplicate relationships are collapsed before pagination, and only the returned actors are hydrated. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.graph.listActorFollowing#output"; + + /** + * Outgoing relationships; each displayed DID identifies the actor named as the follow subject. + */ + "following":(GraphGetFollow.ActorFollowView)[]; + + /** + * Count of deduplicated relationships before cursor and limit are applied. + */ + "totalCount":number; + + /** + * Next-page cursor; omitted when no more results are available. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"following":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => GraphGetFollow.actorFollowView) as any), ),"totalCount":/*#__PURE__*/ l.integer({"minimum":0}),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/graph/listActorFollowing.ts b/packages/api/src/lexicons/app/certified/graph/listActorFollowing.ts new file mode 100644 index 0000000..40928a7 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/listActorFollowing.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listActorFollowing.defs.js"; +export { main as default } from "./listActorFollowing.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/graph/listEntityFollowers.defs.ts b/packages/api/src/lexicons/app/certified/graph/listEntityFollowers.defs.ts new file mode 100644 index 0000000..401d2dc --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/listEntityFollowers.defs.ts @@ -0,0 +1,61 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; +import * as GraphGetEntityFollow from "./getEntityFollow.defs.js"; + +const $nsid = "app.certified.graph.listEntityFollowers"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"entity":/*#__PURE__*/ l.string({"format":"at-uri"}),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists actors following an entity AT-URI. No authentication is required; duplicate actor–entity relationships use the earliest createdAt, with URI ascending on ties. totalCount reports distinct relationships before cursor and limit. Only the returned page is hydrated: missing profile and organization sidecars are null, while lookup failures return errors rather than partial pages. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** The follower actor and the raw entity-follow record representing its relationship. */ +type EntityFollowerView = { $type?: "app.certified.graph.listEntityFollowers#entityFollowerView";"did":l.DidString;"profile":ApiDefs.ProfileView | null;"organization":ApiDefs.OrganizationView | null;"follow":GraphGetEntityFollow.EntityFollowRecordView }; + +export type { EntityFollowerView }; + +/** The follower actor and the raw entity-follow record representing its relationship. */ +const entityFollowerView = /*#__PURE__*/ l.typedObject($nsid, "entityFollowerView", /*#__PURE__*/ l.object({"did":/*#__PURE__*/ l.string({"format":"did"}),"profile":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any)),"organization":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.organizationView) as any)),"follow":/*#__PURE__*/ l.ref((() => GraphGetEntityFollow.entityFollowRecordView) as any)})); + +export { entityFollowerView }; + +type Output = { $type?: "app.certified.graph.listEntityFollowers#output";"followers":(EntityFollowerView)[]; + + /** + * Count of distinct actor–entity relationships after duplicate records are collapsed, before cursor and limit are applied. + */ + "totalCount":number; + + /** + * Next-page cursor; omitted when no more results are available. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"followers":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => entityFollowerView) as any), ),"totalCount":/*#__PURE__*/ l.integer({"minimum":0}),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/graph/listEntityFollowers.ts b/packages/api/src/lexicons/app/certified/graph/listEntityFollowers.ts new file mode 100644 index 0000000..3bc83b9 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/listEntityFollowers.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listEntityFollowers.defs.js"; +export { main as default } from "./listEntityFollowers.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/graph/listEntityFollowing.defs.ts b/packages/api/src/lexicons/app/certified/graph/listEntityFollowing.defs.ts new file mode 100644 index 0000000..f6b1998 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/listEntityFollowing.defs.ts @@ -0,0 +1,68 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ClaimGetActivity from "../../../org/hypercerts/claim/getActivity.defs.js"; +import * as CollectionGetCollection from "../../../org/hypercerts/collection/getCollection.defs.js"; +import * as CollectionListCollectionItems from "../../../org/hypercerts/collection/listCollectionItems.defs.js"; +import * as GraphGetEntityFollow from "./getEntityFollow.defs.js"; + +const $nsid = "app.certified.graph.listEntityFollowing"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actor":/*#__PURE__*/ l.string({"format":"did"}),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists entities followed by an actor DID. No authentication is required; duplicate actor–entity relationships use the earliest createdAt, with URI ascending on ties. Only returned-page targets are hydrated and resolved to the latest indexed record by URI; missing or unsupported targets retain their URI and follow with entity null, while lookup failures return errors rather than partial pages. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** An entity-follow target and its relationship record. Resolve the latest indexed target by URI; retain the URI and follow when the target is missing or unsupported. */ +type EntityFollowingItem = { $type?: "app.certified.graph.listEntityFollowing#entityFollowingItem"; + + /** + * AT-URI of the followed entity, retained even when the target cannot be resolved. + */ + "uri":l.AtUriString; + + /** + * Resolved ActivityView, CollectionView, or author-hydrated FeatureView, or null when missing or unsupported. + */ + "entity":l.$Typed | l.$Typed | l.$Typed | l.Unknown$TypedObject | null;"follow":GraphGetEntityFollow.EntityFollowRecordView }; + +export type { EntityFollowingItem }; + +/** An entity-follow target and its relationship record. Resolve the latest indexed target by URI; retain the URI and follow when the target is missing or unsupported. */ +const entityFollowingItem = /*#__PURE__*/ l.typedObject($nsid, "entityFollowingItem", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"entity":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.typedUnion([/*#__PURE__*/ l.typedRef((() => ClaimGetActivity.activityView) as any),/*#__PURE__*/ l.typedRef((() => CollectionGetCollection.collectionView) as any),/*#__PURE__*/ l.typedRef((() => CollectionListCollectionItems.featureView) as any)], false)),"follow":/*#__PURE__*/ l.ref((() => GraphGetEntityFollow.entityFollowRecordView) as any)})); + +export { entityFollowingItem }; + +type Output = { $type?: "app.certified.graph.listEntityFollowing#output";"entities":(EntityFollowingItem)[]; + + /** + * Next-page cursor; omitted when no more results are available. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"entities":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => entityFollowingItem) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/graph/listEntityFollowing.ts b/packages/api/src/lexicons/app/certified/graph/listEntityFollowing.ts new file mode 100644 index 0000000..388d062 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/listEntityFollowing.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listEntityFollowing.defs.js"; +export { main as default } from "./listEntityFollowing.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/graph/listRecentFollows.defs.ts b/packages/api/src/lexicons/app/certified/graph/listRecentFollows.defs.ts new file mode 100644 index 0000000..5716bc4 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/listRecentFollows.defs.ts @@ -0,0 +1,86 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as GraphEntityFollow from "@hypercerts-org/lexicon/records/app/certified/graph/entityFollow.defs"; +import * as GraphFollow from "@hypercerts-org/lexicon/records/app/certified/graph/follow.defs"; + +const $nsid = "app.certified.graph.listRecentFollows"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"before":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({"format":"datetime"})),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Beta query for raw account- and entity-follow records from any publisher. No authentication is required; duplicates are preserved, and before is an exclusive bound on publisher-declared createdAt. Pages are not a snapshot, so late indexing or concurrent changes may cause records to be missed. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** Raw indexed account- or entity-follow record with its publisher DID. */ +type RecentFollowView = { $type?: "app.certified.graph.listRecentFollows#recentFollowView"; + + /** + * AT-URI of the follow record. + */ + "uri":l.AtUriString; + + /** + * CID of this indexed record version. + */ + "cid":l.CidString; + + /** + * Indexing time, or null if unavailable; ordering uses createdAt. + */ + "indexedAt":l.DatetimeString | null; + + /** + * DID of the repository that published the follow. + */ + "did":l.DidString; + + /** + * Unmodified follow record; $type identifies its collection. + */ + "record":l.$Typed | l.$Typed | l.Unknown$TypedObject }; + +export type { RecentFollowView }; + +/** Raw indexed account- or entity-follow record with its publisher DID. */ +const recentFollowView = /*#__PURE__*/ l.typedObject($nsid, "recentFollowView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.typedUnion([/*#__PURE__*/ l.typedRef((() => GraphFollow.main) as any),/*#__PURE__*/ l.typedRef((() => GraphEntityFollow.main) as any)], false)})); + +export { recentFollowView }; + +type Output = { $type?: "app.certified.graph.listRecentFollows#output"; + + /** + * Raw records ordered by createdAt descending, then URI descending; duplicates are included. + */ + "follows":(RecentFollowView)[]; + + /** + * Next-page cursor; omitted when no more records are available. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"follows":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => recentFollowView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/graph/listRecentFollows.ts b/packages/api/src/lexicons/app/certified/graph/listRecentFollows.ts new file mode 100644 index 0000000..129e26a --- /dev/null +++ b/packages/api/src/lexicons/app/certified/graph/listRecentFollows.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listRecentFollows.defs.js"; +export { main as default } from "./listRecentFollows.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/link.ts b/packages/api/src/lexicons/app/certified/link.ts new file mode 100644 index 0000000..21ec64c --- /dev/null +++ b/packages/api/src/lexicons/app/certified/link.ts @@ -0,0 +1,7 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as evm from "@hypercerts-org/lexicon/records/app/certified/link/evm"; +export * as getEvmLink from "./link/getEvmLink.js"; +export * as listEvmLinks from "./link/listEvmLinks.js"; diff --git a/packages/api/src/lexicons/app/certified/link/getEvmLink.defs.ts b/packages/api/src/lexicons/app/certified/link/getEvmLink.defs.ts new file mode 100644 index 0000000..52f69f3 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/link/getEvmLink.defs.ts @@ -0,0 +1,56 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; +import * as LinkEvm from "@hypercerts-org/lexicon/records/app/certified/link/evm.defs"; + +const $nsid = "app.certified.link.getEvmLink"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Looks up an indexed EVM-link record by exact AT-URI and hydrates its actor. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.link.getEvmLink#output";"evmLink":EvmLinkView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"evmLink":/*#__PURE__*/ l.ref((() => evmLinkView) as any)})); + +export { output }; + +/** Indexed EVM-link record with its original address and proof, and the linked actor's hydrated Certified records. */ +type EvmLinkView = { $type?: "app.certified.link.getEvmLink#evmLinkView";"uri":l.AtUriString;"cid":l.CidString; + + /** + * Index timestamp, or null when the indexed row has no timestamp. + */ + "indexedAt":l.DatetimeString | null;"did":l.DidString;"actor":ApiDefs.ActorView;"record":LinkEvm.Main }; + +export type { EvmLinkView }; + +/** Indexed EVM-link record with its original address and proof, and the linked actor's hydrated Certified records. */ +const evmLinkView = /*#__PURE__*/ l.typedObject($nsid, "evmLinkView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"actor":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => LinkEvm.main) as any)})); + +export { evmLinkView }; diff --git a/packages/api/src/lexicons/app/certified/link/getEvmLink.ts b/packages/api/src/lexicons/app/certified/link/getEvmLink.ts new file mode 100644 index 0000000..b22ce60 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/link/getEvmLink.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getEvmLink.defs.js"; +export { main as default } from "./getEvmLink.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/link/listEvmLinks.defs.ts b/packages/api/src/lexicons/app/certified/link/listEvmLinks.defs.ts new file mode 100644 index 0000000..cb09a59 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/link/listEvmLinks.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as LinkGetEvmLink from "./getEvmLink.defs.js"; + +const $nsid = "app.certified.link.listEvmLinks"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"actors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"addresses":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"minLength":42,"maxLength":42}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.enum(["asc","desc"]), "desc")),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed EVM-link records, optionally filtered by actor DID and wallet address. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.link.listEvmLinks#output";"evmLinks":(LinkGetEvmLink.EvmLinkView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"evmLinks":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => LinkGetEvmLink.evmLinkView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/link/listEvmLinks.ts b/packages/api/src/lexicons/app/certified/link/listEvmLinks.ts new file mode 100644 index 0000000..464985a --- /dev/null +++ b/packages/api/src/lexicons/app/certified/link/listEvmLinks.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listEvmLinks.defs.js"; +export { main as default } from "./listEvmLinks.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/location.ts b/packages/api/src/lexicons/app/certified/location.ts new file mode 100644 index 0000000..5064950 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/location.ts @@ -0,0 +1,8 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "@hypercerts-org/lexicon/records/app/certified/location.defs"; +export { main as default } from "@hypercerts-org/lexicon/records/app/certified/location.defs"; +export * as getLocation from "./location/getLocation.js"; +export * as listLocations from "./location/listLocations.js"; diff --git a/packages/api/src/lexicons/app/certified/location/getLocation.defs.ts b/packages/api/src/lexicons/app/certified/location/getLocation.defs.ts new file mode 100644 index 0000000..dc644e2 --- /dev/null +++ b/packages/api/src/lexicons/app/certified/location/getLocation.defs.ts @@ -0,0 +1,61 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../../../org/hypercerts/api/defs.defs.js"; +import * as CertifiedLocation from "@hypercerts-org/lexicon/records/app/certified/location.defs"; + +const $nsid = "app.certified.location.getLocation"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns one indexed location by AT-URI; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["RecordNotFound"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.location.getLocation#output"; + + /** + * The matching indexed location. + */ + "location":LocationView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"location":/*#__PURE__*/ l.ref((() => locationView) as any)})); + +export { output }; + +/** Indexed location with its original record and hydrated author. */ +type LocationView = { $type?: "app.certified.location.getLocation#locationView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString;"did":l.DidString; + + /** + * Author DID with indexed profile and organization views; missing records are null, while lookup failures fail the query. + */ + "author":ApiDefs.ActorView;"record":CertifiedLocation.Main }; + +export type { LocationView }; + +/** Indexed location with its original record and hydrated author. */ +const locationView = /*#__PURE__*/ l.typedObject($nsid, "locationView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.string({"format":"datetime"}),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => CertifiedLocation.main) as any)})); + +export { locationView }; diff --git a/packages/api/src/lexicons/app/certified/location/getLocation.ts b/packages/api/src/lexicons/app/certified/location/getLocation.ts new file mode 100644 index 0000000..59c885d --- /dev/null +++ b/packages/api/src/lexicons/app/certified/location/getLocation.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getLocation.defs.js"; +export { main as default } from "./getLocation.defs.js"; diff --git a/packages/api/src/lexicons/app/certified/location/listLocations.defs.ts b/packages/api/src/lexicons/app/certified/location/listLocations.defs.ts new file mode 100644 index 0000000..eb6bf8e --- /dev/null +++ b/packages/api/src/lexicons/app/certified/location/listLocations.defs.ts @@ -0,0 +1,50 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as LocationGetLocation from "./getLocation.defs.js"; + +const $nsid = "app.certified.location.listLocations"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"uris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"locationTypes":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"maxLength":20}), {"maxLength":100})),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"]))}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed location records; authentication is not required. Array filters use repeated unbracketed query keys; filters combine with AND, values within each array with OR, and omitted filters are unrestricted. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "app.certified.location.listLocations#output"; + + /** + * Matching location records in page order. + */ + "locations":(LocationGetLocation.LocationView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"locations":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => LocationGetLocation.locationView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/app/certified/location/listLocations.ts b/packages/api/src/lexicons/app/certified/location/listLocations.ts new file mode 100644 index 0000000..fc12bcc --- /dev/null +++ b/packages/api/src/lexicons/app/certified/location/listLocations.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listLocations.defs.js"; +export { main as default } from "./listLocations.defs.js"; diff --git a/packages/api/src/lexicons/index.ts b/packages/api/src/lexicons/index.ts new file mode 100644 index 0000000..4f13f45 --- /dev/null +++ b/packages/api/src/lexicons/index.ts @@ -0,0 +1,8 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as app from "./app.js"; +export * as com from "@hypercerts-org/lexicon/records/com"; +export * as org from "./org.js"; +export * as pub from "@hypercerts-org/lexicon/records/pub"; diff --git a/packages/api/src/lexicons/org.ts b/packages/api/src/lexicons/org.ts new file mode 100644 index 0000000..90248a7 --- /dev/null +++ b/packages/api/src/lexicons/org.ts @@ -0,0 +1,5 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as hypercerts from "./org/hypercerts.js"; diff --git a/packages/api/src/lexicons/org/hypercerts.ts b/packages/api/src/lexicons/org/hypercerts.ts new file mode 100644 index 0000000..2da2a6c --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts.ts @@ -0,0 +1,13 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as api from "./hypercerts/api.js"; +export * as claim from "./hypercerts/claim.js"; +export * as collection from "./hypercerts/collection.js"; +export * as context from "./hypercerts/context.js"; +export * as defs from "@hypercerts-org/lexicon/records/org/hypercerts/defs"; +export * as entity from "./hypercerts/entity.js"; +export * as funding from "./hypercerts/funding.js"; +export * as vocab from "./hypercerts/vocab.js"; +export * as workscope from "./hypercerts/workscope.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/api.ts b/packages/api/src/lexicons/org/hypercerts/api.ts new file mode 100644 index 0000000..94b6e13 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/api.ts @@ -0,0 +1,5 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as defs from "./api/defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/api/defs.defs.ts b/packages/api/src/lexicons/org/hypercerts/api/defs.defs.ts new file mode 100644 index 0000000..d2b6edc --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/api/defs.defs.ts @@ -0,0 +1,54 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ActorOrganization from "@hypercerts-org/lexicon/records/app/certified/actor/organization.defs"; +import * as ActorProfile from "@hypercerts-org/lexicon/records/app/certified/actor/profile.defs"; +import * as ContextAcknowledgement from "@hypercerts-org/lexicon/records/org/hypercerts/context/acknowledgement.defs"; + +const $nsid = "org.hypercerts.api.defs"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +/** Profile record view preserving the full indexed record; indexedAt may be null when the index has no timestamp. */ +type ProfileView = { $type?: "org.hypercerts.api.defs#profileView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":ActorProfile.Main }; + +export type { ProfileView }; + +/** Profile record view preserving the full indexed record; indexedAt may be null when the index has no timestamp. */ +const profileView = /*#__PURE__*/ l.typedObject($nsid, "profileView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => ActorProfile.main) as any)})); + +export { profileView }; + +/** Raw organization sidecar record view preserving the full indexed record; indexedAt may be null when the index has no timestamp. */ +type OrganizationView = { $type?: "org.hypercerts.api.defs#organizationView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":ActorOrganization.Main }; + +export type { OrganizationView }; + +/** Raw organization sidecar record view preserving the full indexed record; indexedAt may be null when the index has no timestamp. */ +const organizationView = /*#__PURE__*/ l.typedObject($nsid, "organizationView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => ActorOrganization.main) as any)})); + +export { organizationView }; + +/** Actor DID with nullable profile and raw organization sidecar views. */ +type ActorView = { $type?: "org.hypercerts.api.defs#actorView";"did":l.DidString;"profile":ProfileView | null;"organization":OrganizationView | null }; + +export type { ActorView }; + +/** Actor DID with nullable profile and raw organization sidecar views. */ +const actorView = /*#__PURE__*/ l.typedObject($nsid, "actorView", /*#__PURE__*/ l.object({"did":/*#__PURE__*/ l.string({"format":"did"}),"profile":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => profileView) as any)),"organization":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => organizationView) as any))})); + +export { actorView }; + +/** Acknowledgement record with its publisher actor. */ +type AcknowledgementView = { $type?: "org.hypercerts.api.defs#acknowledgementView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ActorView;"record":ContextAcknowledgement.Main }; + +export type { AcknowledgementView }; + +/** Acknowledgement record with its publisher actor. */ +const acknowledgementView = /*#__PURE__*/ l.typedObject($nsid, "acknowledgementView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => actorView) as any),"record":/*#__PURE__*/ l.ref((() => ContextAcknowledgement.main) as any)})); + +export { acknowledgementView }; diff --git a/packages/api/src/lexicons/org/hypercerts/api/defs.ts b/packages/api/src/lexicons/org/hypercerts/api/defs.ts new file mode 100644 index 0000000..c94e39e --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/api/defs.ts @@ -0,0 +1,5 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./defs.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/claim.ts b/packages/api/src/lexicons/org/hypercerts/claim.ts new file mode 100644 index 0000000..ff3bf61 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim.ts @@ -0,0 +1,17 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as activity from "@hypercerts-org/lexicon/records/org/hypercerts/claim/activity"; +export * as contribution from "@hypercerts-org/lexicon/records/org/hypercerts/claim/contribution"; +export * as contributorInformation from "@hypercerts-org/lexicon/records/org/hypercerts/claim/contributorInformation"; +export * as getActivity from "./claim/getActivity.js"; +export * as getContribution from "./claim/getContribution.js"; +export * as getContributorInformation from "./claim/getContributorInformation.js"; +export * as getRights from "./claim/getRights.js"; +export * as listActivities from "./claim/listActivities.js"; +export * as listContributions from "./claim/listContributions.js"; +export * as listContributorInformation from "./claim/listContributorInformation.js"; +export * as listRights from "./claim/listRights.js"; +export * as rights from "@hypercerts-org/lexicon/records/org/hypercerts/claim/rights"; +export * as searchActivities from "./claim/searchActivities.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/getActivity.defs.ts b/packages/api/src/lexicons/org/hypercerts/claim/getActivity.defs.ts new file mode 100644 index 0000000..5462b08 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/getActivity.defs.ts @@ -0,0 +1,88 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as ClaimActivity from "@hypercerts-org/lexicon/records/org/hypercerts/claim/activity.defs"; +import * as ClaimContributorInformation from "@hypercerts-org/lexicon/records/org/hypercerts/claim/contributorInformation.defs"; +import * as RepoStrongRef from "@hypercerts-org/lexicon/records/com/atproto/repo/strongRef.defs"; + +const $nsid = "org.hypercerts.claim.getActivity"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Looks up one indexed activity by full AT-URI. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","ActivityQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.claim.getActivity#output";"activity":ActivityView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"activity":/*#__PURE__*/ l.ref((() => activityView) as any)})); + +export { output }; + +/** Activity record with its original payload, hydrated author, and contributors only when present in the source record. */ +type ActivityView = { $type?: "org.hypercerts.claim.getActivity#activityView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":ClaimActivity.Main; + + /** + * Hydrated projection of object entries in record.contributors, preserving their relative order and multiplicity; legacy string entries are skipped and the original record remains unchanged. Omitted only when the source field is absent; if it contains no object entries, this is an empty array. + */ + "contributors"?:(ActivityContributorView)[] }; + +export type { ActivityView }; + +/** Activity record with its original payload, hydrated author, and contributors only when present in the source record. */ +const activityView = /*#__PURE__*/ l.typedObject($nsid, "activityView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => ClaimActivity.main) as any),"contributors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => activityContributorView) as any), ))})); + +export { activityView }; + +/** Source contributor fields with nullable hydrated projections; unavailable referenced information or unresolved identities are null, while lookup failures fail the query. */ +type ActivityContributorView = { $type?: "org.hypercerts.claim.getActivity#activityContributorView";"contributorIdentity":l.$Typed | l.$Typed | l.Unknown$TypedObject;"contributionWeight"?:string;"contributionDetails"?:l.$Typed | l.$Typed | l.Unknown$TypedObject;"contributorInformation":ContributorInformationView | null;"actor":ContributorActorView | null }; + +export type { ActivityContributorView }; + +/** Source contributor fields with nullable hydrated projections; unavailable referenced information or unresolved identities are null, while lookup failures fail the query. */ +const activityContributorView = /*#__PURE__*/ l.typedObject($nsid, "activityContributorView", /*#__PURE__*/ l.object({"contributorIdentity":/*#__PURE__*/ l.typedUnion([/*#__PURE__*/ l.typedRef((() => ClaimActivity.contributorIdentity) as any),/*#__PURE__*/ l.typedRef((() => RepoStrongRef.main) as any)], false),"contributionWeight":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({"maxLength":100})),"contributionDetails":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.typedUnion([/*#__PURE__*/ l.typedRef((() => ClaimActivity.contributorRole) as any),/*#__PURE__*/ l.typedRef((() => RepoStrongRef.main) as any)], false)),"contributorInformation":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => contributorInformationView) as any)),"actor":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => contributorActorView) as any))})); + +export { activityContributorView }; + +/** Contributor-information record matched by the source reference's URI and CID; newer versions are not substituted. */ +type ContributorInformationView = { $type?: "org.hypercerts.claim.getActivity#contributorInformationView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":ClaimContributorInformation.Main }; + +export type { ContributorInformationView }; + +/** Contributor-information record matched by the source reference's URI and CID; newer versions are not substituted. */ +const contributorInformationView = /*#__PURE__*/ l.typedObject($nsid, "contributorInformationView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => ClaimContributorInformation.main) as any)})); + +export { contributorInformationView }; + +/** Contributor DID with its current profile, if indexed. */ +type ContributorActorView = { $type?: "org.hypercerts.claim.getActivity#contributorActorView";"did":l.DidString;"profile":ApiDefs.ProfileView | null }; + +export type { ContributorActorView }; + +/** Contributor DID with its current profile, if indexed. */ +const contributorActorView = /*#__PURE__*/ l.typedObject($nsid, "contributorActorView", /*#__PURE__*/ l.object({"did":/*#__PURE__*/ l.string({"format":"did"}),"profile":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any))})); + +export { contributorActorView }; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/getActivity.ts b/packages/api/src/lexicons/org/hypercerts/claim/getActivity.ts new file mode 100644 index 0000000..04e53c8 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/getActivity.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getActivity.defs.js"; +export { main as default } from "./getActivity.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/getContribution.defs.ts b/packages/api/src/lexicons/org/hypercerts/claim/getContribution.defs.ts new file mode 100644 index 0000000..8f787a5 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/getContribution.defs.ts @@ -0,0 +1,51 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as ClaimContribution from "@hypercerts-org/lexicon/records/org/hypercerts/claim/contribution.defs"; + +const $nsid = "org.hypercerts.claim.getContribution"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Looks up one contribution record by exact AT-URI; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","ContributionQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.claim.getContribution#output";"contribution":ContributionView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"contribution":/*#__PURE__*/ l.ref((() => contributionView) as any)})); + +export { output }; + +/** Contribution record view with a hydrated publisher and unchanged source record; the publisher is not necessarily the contributor. */ +type ContributionView = { $type?: "org.hypercerts.claim.getContribution#contributionView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":ClaimContribution.Main }; + +export type { ContributionView }; + +/** Contribution record view with a hydrated publisher and unchanged source record; the publisher is not necessarily the contributor. */ +const contributionView = /*#__PURE__*/ l.typedObject($nsid, "contributionView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => ClaimContribution.main) as any)})); + +export { contributionView }; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/getContribution.ts b/packages/api/src/lexicons/org/hypercerts/claim/getContribution.ts new file mode 100644 index 0000000..35aef33 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/getContribution.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getContribution.defs.js"; +export { main as default } from "./getContribution.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/getContributorInformation.defs.ts b/packages/api/src/lexicons/org/hypercerts/claim/getContributorInformation.defs.ts new file mode 100644 index 0000000..3920869 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/getContributorInformation.defs.ts @@ -0,0 +1,51 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as ClaimContributorInformation from "@hypercerts-org/lexicon/records/org/hypercerts/claim/contributorInformation.defs"; + +const $nsid = "org.hypercerts.claim.getContributorInformation"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Publicly looks up one indexed contributor-information record by exact AT-URI and includes its publisher. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","ContributorInformationQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.claim.getContributorInformation#output";"contributorInformation":ContributorInformationView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"contributorInformation":/*#__PURE__*/ l.ref((() => contributorInformationView) as any)})); + +export { output }; + +/** Contributor-information record with its full source payload and hydrated publishing actor. */ +type ContributorInformationView = { $type?: "org.hypercerts.claim.getContributorInformation#contributorInformationView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":ClaimContributorInformation.Main }; + +export type { ContributorInformationView }; + +/** Contributor-information record with its full source payload and hydrated publishing actor. */ +const contributorInformationView = /*#__PURE__*/ l.typedObject($nsid, "contributorInformationView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => ClaimContributorInformation.main) as any)})); + +export { contributorInformationView }; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/getContributorInformation.ts b/packages/api/src/lexicons/org/hypercerts/claim/getContributorInformation.ts new file mode 100644 index 0000000..ceb8611 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/getContributorInformation.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getContributorInformation.defs.js"; +export { main as default } from "./getContributorInformation.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/getRights.defs.ts b/packages/api/src/lexicons/org/hypercerts/claim/getRights.defs.ts new file mode 100644 index 0000000..1ee8aae --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/getRights.defs.ts @@ -0,0 +1,51 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as ClaimRights from "@hypercerts-org/lexicon/records/org/hypercerts/claim/rights.defs"; + +const $nsid = "org.hypercerts.claim.getRights"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Looks up one indexed rights record by exact DID-authority AT-URI. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** Rights record with its publisher actor; the full record is preserved and attachments are not expanded. */ +type RightsView = { $type?: "org.hypercerts.claim.getRights#rightsView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":ClaimRights.Main }; + +export type { RightsView }; + +/** Rights record with its publisher actor; the full record is preserved and attachments are not expanded. */ +const rightsView = /*#__PURE__*/ l.typedObject($nsid, "rightsView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => ClaimRights.main) as any)})); + +export { rightsView }; + +type Output = { $type?: "org.hypercerts.claim.getRights#output";"rights":RightsView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"rights":/*#__PURE__*/ l.ref((() => rightsView) as any)})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/getRights.ts b/packages/api/src/lexicons/org/hypercerts/claim/getRights.ts new file mode 100644 index 0000000..ea93f2c --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/getRights.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getRights.defs.js"; +export { main as default } from "./getRights.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/listActivities.defs.ts b/packages/api/src/lexicons/org/hypercerts/claim/listActivities.defs.ts new file mode 100644 index 0000000..81c828c --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/listActivities.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ClaimGetActivity from "./getActivity.defs.js"; + +const $nsid = "org.hypercerts.claim.listActivities"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"hasOrganizationRecord":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.boolean()),"contributors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"involvedActors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"uris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed activities. Filters combine with AND; values within each array filter combine with OR, and duplicate values are ignored. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ActivityQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.claim.listActivities#output";"activities":(ClaimGetActivity.ActivityView)[]; + + /** + * Next-page cursor; absent when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"activities":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ClaimGetActivity.activityView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/listActivities.ts b/packages/api/src/lexicons/org/hypercerts/claim/listActivities.ts new file mode 100644 index 0000000..5614270 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/listActivities.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listActivities.defs.js"; +export { main as default } from "./listActivities.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/listContributions.defs.ts b/packages/api/src/lexicons/org/hypercerts/claim/listContributions.defs.ts new file mode 100644 index 0000000..78f94c5 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/listContributions.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ClaimGetContribution from "./getContribution.defs.js"; + +const $nsid = "org.hypercerts.claim.listContributions"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.enum(["asc","desc"]), "desc")),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists contribution records by publisher DID, sorted by createdAt and URI; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ContributionQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.claim.listContributions#output";"contributions":(ClaimGetContribution.ContributionView)[]; + + /** + * Opaque cursor for the next page; omitted after the last page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"contributions":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ClaimGetContribution.contributionView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/listContributions.ts b/packages/api/src/lexicons/org/hypercerts/claim/listContributions.ts new file mode 100644 index 0000000..a962d14 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/listContributions.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listContributions.defs.js"; +export { main as default } from "./listContributions.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/listContributorInformation.defs.ts b/packages/api/src/lexicons/org/hypercerts/claim/listContributorInformation.defs.ts new file mode 100644 index 0000000..b1d7cd5 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/listContributorInformation.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ClaimGetContributorInformation from "./getContributorInformation.defs.js"; + +const $nsid = "org.hypercerts.claim.listContributorInformation"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Publicly lists indexed contributor-information records with an optional publisher-DID filter and stable createdAt ordering. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ContributorInformationQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.claim.listContributorInformation#output";"contributorInformation":(ClaimGetContributorInformation.ContributorInformationView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"contributorInformation":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ClaimGetContributorInformation.contributorInformationView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/listContributorInformation.ts b/packages/api/src/lexicons/org/hypercerts/claim/listContributorInformation.ts new file mode 100644 index 0000000..9c3c7a5 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/listContributorInformation.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listContributorInformation.defs.js"; +export { main as default } from "./listContributorInformation.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/listRights.defs.ts b/packages/api/src/lexicons/org/hypercerts/claim/listRights.defs.ts new file mode 100644 index 0000000..141ae6f --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/listRights.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ClaimGetRights from "./getRights.defs.js"; + +const $nsid = "org.hypercerts.claim.listRights"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed rights records with an optional publisher-DID filter. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.claim.listRights#output";"rights":(ClaimGetRights.RightsView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"rights":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ClaimGetRights.rightsView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/listRights.ts b/packages/api/src/lexicons/org/hypercerts/claim/listRights.ts new file mode 100644 index 0000000..bcb1f07 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/listRights.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listRights.defs.js"; +export { main as default } from "./listRights.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/searchActivities.defs.ts b/packages/api/src/lexicons/org/hypercerts/claim/searchActivities.defs.ts new file mode 100644 index 0000000..ec27740 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/searchActivities.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ClaimGetActivity from "./getActivity.defs.js"; + +const $nsid = "org.hypercerts.claim.searchActivities"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"search":/*#__PURE__*/ l.string(),"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"hasOrganizationRecord":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.boolean()),"contributors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"involvedActors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"uris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Searches indexed activities by a case-insensitive literal substring of title or shortDescription. Search and other filters combine with AND; values within each array filter combine with OR, and duplicate values are ignored. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ActivityQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.claim.searchActivities#output";"activities":(ClaimGetActivity.ActivityView)[]; + + /** + * Next-page cursor; absent when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"activities":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ClaimGetActivity.activityView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/claim/searchActivities.ts b/packages/api/src/lexicons/org/hypercerts/claim/searchActivities.ts new file mode 100644 index 0000000..09a9500 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/claim/searchActivities.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./searchActivities.defs.js"; +export { main as default } from "./searchActivities.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/collection.ts b/packages/api/src/lexicons/org/hypercerts/collection.ts new file mode 100644 index 0000000..e614a84 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/collection.ts @@ -0,0 +1,10 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "@hypercerts-org/lexicon/records/org/hypercerts/collection.defs"; +export { main as default } from "@hypercerts-org/lexicon/records/org/hypercerts/collection.defs"; +export * as getCollection from "./collection/getCollection.js"; +export * as listCollectionItems from "./collection/listCollectionItems.js"; +export * as listCollections from "./collection/listCollections.js"; +export * as searchCollections from "./collection/searchCollections.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/collection/getCollection.defs.ts b/packages/api/src/lexicons/org/hypercerts/collection/getCollection.defs.ts new file mode 100644 index 0000000..05b946a --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/collection/getCollection.defs.ts @@ -0,0 +1,129 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ActorOrganization from "@hypercerts-org/lexicon/records/app/certified/actor/organization.defs"; +import * as ActorProfile from "@hypercerts-org/lexicon/records/app/certified/actor/profile.defs"; +import * as CertifiedLocation from "@hypercerts-org/lexicon/records/app/certified/location.defs"; +import * as HypercertsCollection from "@hypercerts-org/lexicon/records/org/hypercerts/collection.defs"; +import * as VocabTag from "@hypercerts-org/lexicon/records/org/hypercerts/vocab/tag.defs"; + +const $nsid = "org.hypercerts.collection.getCollection"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Looks up one indexed collection by exact AT-URI. Hydrates its author and exact-version location and tag sibling projections; the original collection record remains unchanged. Missing related target versions are null without hiding the collection. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.collection.getCollection#output";"collection":CollectionView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"collection":/*#__PURE__*/ l.ref((() => collectionView) as any)})); + +export { output }; + +/** Profile record view used in collection author projections; indexedAt is required and may be null when the index has no timestamp. */ +type CollectionProfileView = { $type?: "org.hypercerts.collection.getCollection#collectionProfileView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":ActorProfile.Main }; + +export type { CollectionProfileView }; + +/** Profile record view used in collection author projections; indexedAt is required and may be null when the index has no timestamp. */ +const collectionProfileView = /*#__PURE__*/ l.typedObject($nsid, "collectionProfileView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => ActorProfile.main) as any)})); + +export { collectionProfileView }; + +/** Organization sidecar view used in collection author projections; indexedAt is required and may be null when the index has no timestamp. */ +type CollectionOrganizationView = { $type?: "org.hypercerts.collection.getCollection#collectionOrganizationView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":ActorOrganization.Main }; + +export type { CollectionOrganizationView }; + +/** Organization sidecar view used in collection author projections; indexedAt is required and may be null when the index has no timestamp. */ +const collectionOrganizationView = /*#__PURE__*/ l.typedObject($nsid, "collectionOrganizationView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => ActorOrganization.main) as any)})); + +export { collectionOrganizationView }; + +/** Collection author DID with nullable profile and organization sidecar views whose indexedAt values may be null. */ +type CollectionActorView = { $type?: "org.hypercerts.collection.getCollection#collectionActorView";"did":l.DidString;"profile":CollectionProfileView | null;"organization":CollectionOrganizationView | null }; + +export type { CollectionActorView }; + +/** Collection author DID with nullable profile and organization sidecar views whose indexedAt values may be null. */ +const collectionActorView = /*#__PURE__*/ l.typedObject($nsid, "collectionActorView", /*#__PURE__*/ l.object({"did":/*#__PURE__*/ l.string({"format":"did"}),"profile":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => collectionProfileView) as any)),"organization":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => collectionOrganizationView) as any))})); + +export { collectionActorView }; + +/** Raw location record view with metadata and no author hydration, used for exact-version collection reference projections. */ +type LocationRecordView = { $type?: "org.hypercerts.collection.getCollection#locationRecordView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":CertifiedLocation.Main }; + +export type { LocationRecordView }; + +/** Raw location record view with metadata and no author hydration, used for exact-version collection reference projections. */ +const locationRecordView = /*#__PURE__*/ l.typedObject($nsid, "locationRecordView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => CertifiedLocation.main) as any)})); + +export { locationRecordView }; + +/** Raw vocabulary-tag record view with metadata and no author hydration, used for exact-version collection reference projections. */ +type VocabTagRecordView = { $type?: "org.hypercerts.collection.getCollection#vocabTagRecordView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"record":VocabTag.Main }; + +export type { VocabTagRecordView }; + +/** Raw vocabulary-tag record view with metadata and no author hydration, used for exact-version collection reference projections. */ +const vocabTagRecordView = /*#__PURE__*/ l.typedObject($nsid, "vocabTagRecordView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"record":/*#__PURE__*/ l.ref((() => VocabTag.main) as any)})); + +export { vocabTagRecordView }; + +/** Original strong-reference URI and CID plus the exact referenced location record view, or null when that version is unavailable. */ +type CollectionLocationView = { $type?: "org.hypercerts.collection.getCollection#collectionLocationView";"uri":l.AtUriString;"cid":l.CidString;"record":LocationRecordView | null }; + +export type { CollectionLocationView }; + +/** Original strong-reference URI and CID plus the exact referenced location record view, or null when that version is unavailable. */ +const collectionLocationView = /*#__PURE__*/ l.typedObject($nsid, "collectionLocationView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"record":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => locationRecordView) as any))})); + +export { collectionLocationView }; + +/** Original strong-reference URI and CID plus the exact referenced vocabulary-tag record view, or null when that version is unavailable. */ +type CollectionTagView = { $type?: "org.hypercerts.collection.getCollection#collectionTagView";"uri":l.AtUriString;"cid":l.CidString;"record":VocabTagRecordView | null }; + +export type { CollectionTagView }; + +/** Original strong-reference URI and CID plus the exact referenced vocabulary-tag record view, or null when that version is unavailable. */ +const collectionTagView = /*#__PURE__*/ l.typedObject($nsid, "collectionTagView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"record":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => vocabTagRecordView) as any))})); + +export { collectionTagView }; + +/** Collection record with hydrated author and exact-version location and tag projections. Missing author sidecars are null; unavailable referenced versions retain their source URI and CID with a null record. The original record is unchanged. */ +type CollectionView = { $type?: "org.hypercerts.collection.getCollection#collectionView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":CollectionActorView;"record":HypercertsCollection.Main;"location"?:CollectionLocationView; + + /** + * Projection of record.tags in source order, preserving duplicates. Present as an empty array when record.tags is empty; omitted when it is absent. + */ + "tags"?:(CollectionTagView)[] }; + +export type { CollectionView }; + +/** Collection record with hydrated author and exact-version location and tag projections. Missing author sidecars are null; unavailable referenced versions retain their source URI and CID with a null record. The original record is unchanged. */ +const collectionView = /*#__PURE__*/ l.typedObject($nsid, "collectionView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => collectionActorView) as any),"record":/*#__PURE__*/ l.ref((() => HypercertsCollection.main) as any),"location":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.ref((() => collectionLocationView) as any)),"tags":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => collectionTagView) as any), {"maxLength":20}))})); + +export { collectionView }; diff --git a/packages/api/src/lexicons/org/hypercerts/collection/getCollection.ts b/packages/api/src/lexicons/org/hypercerts/collection/getCollection.ts new file mode 100644 index 0000000..83f921e --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/collection/getCollection.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getCollection.defs.js"; +export { main as default } from "./getCollection.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/collection/listCollectionItems.defs.ts b/packages/api/src/lexicons/org/hypercerts/collection/listCollectionItems.defs.ts new file mode 100644 index 0000000..e90c05b --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/collection/listCollectionItems.defs.ts @@ -0,0 +1,83 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ClaimGetActivity from "../claim/getActivity.defs.js"; +import * as CollectionGetCollection from "./getCollection.defs.js"; +import * as EntityFeature from "@hypercerts-org/lexicon/records/org/hypercerts/entity/feature.defs"; +import * as RepoStrongRef from "@hypercerts-org/lexicon/records/com/atproto/repo/strongRef.defs"; + +const $nsid = "org.hypercerts.collection.listCollectionItems"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"collection":/*#__PURE__*/ l.string({"format":"at-uri"}),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Resolves one collection's embedded items in source order, one level only. Each target must match the item's exact strong-reference URI+CID; nested collections are summaries, and unavailable versions or unsupported kinds return record null. Pagination follows the latest indexed collection at the same URI across pages, even after collection changes; no version-change error or restart is required. Item additions, removals, or reordering may cause skipped or repeated results. There is no sortDirection parameter. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.collection.listCollectionItems#output";"items":(CollectionItemView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"items":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => collectionItemView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; + +/** Non-recursive summary of a collection item target. */ +type CollectionSummaryView = { $type?: "org.hypercerts.collection.listCollectionItems#collectionSummaryView";"uri":l.AtUriString;"cid":l.CidString;"did":l.DidString;"type"?:string;"title":string;"shortDescription"?:string }; + +export type { CollectionSummaryView }; + +/** Non-recursive summary of a collection item target. */ +const collectionSummaryView = /*#__PURE__*/ l.typedObject($nsid, "collectionSummaryView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"did":/*#__PURE__*/ l.string({"format":"did"}),"type":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({"maxLength":64})),"title":/*#__PURE__*/ l.string({"maxLength":800,"maxGraphemes":80}),"shortDescription":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({"maxLength":3000,"maxGraphemes":300}))})); + +export { collectionSummaryView }; + +/** Feature record view with hydrated author actor; feature location, tag, and sameAs references remain unexpanded. */ +type FeatureView = { $type?: "org.hypercerts.collection.listCollectionItems#featureView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":CollectionGetCollection.CollectionActorView;"record":EntityFeature.Main }; + +export type { FeatureView }; + +/** Feature record view with hydrated author actor; feature location, tag, and sameAs references remain unexpanded. */ +const featureView = /*#__PURE__*/ l.typedObject($nsid, "featureView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => CollectionGetCollection.collectionActorView) as any),"record":/*#__PURE__*/ l.ref((() => EntityFeature.main) as any)})); + +export { featureView }; + +/** One embedded collection item in source order, retaining its original strong reference and optional weight. Resolve only an exact URI+CID target one level deep; nested collections use a summary, and unavailable versions or unsupported kinds produce record null. */ +type CollectionItemView = { $type?: "org.hypercerts.collection.listCollectionItems#collectionItemView";"itemIdentifier":RepoStrongRef.Main;"itemWeight"?:string; + + /** + * Resolved ActivityView, CollectionSummaryView, or FeatureView using the item strong reference's exact URI+CID; otherwise null. + */ + "record":l.$Typed | l.$Typed | l.$Typed | l.Unknown$TypedObject | null }; + +export type { CollectionItemView }; + +/** One embedded collection item in source order, retaining its original strong reference and optional weight. Resolve only an exact URI+CID target one level deep; nested collections use a summary, and unavailable versions or unsupported kinds produce record null. */ +const collectionItemView = /*#__PURE__*/ l.typedObject($nsid, "collectionItemView", /*#__PURE__*/ l.object({"itemIdentifier":/*#__PURE__*/ l.ref((() => RepoStrongRef.main) as any),"itemWeight":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({"maxLength":100})),"record":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.typedUnion([/*#__PURE__*/ l.typedRef((() => ClaimGetActivity.activityView) as any),/*#__PURE__*/ l.typedRef((() => collectionSummaryView) as any),/*#__PURE__*/ l.typedRef((() => featureView) as any)], false))})); + +export { collectionItemView }; diff --git a/packages/api/src/lexicons/org/hypercerts/collection/listCollectionItems.ts b/packages/api/src/lexicons/org/hypercerts/collection/listCollectionItems.ts new file mode 100644 index 0000000..3b24dd4 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/collection/listCollectionItems.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listCollectionItems.defs.js"; +export { main as default } from "./listCollectionItems.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/collection/listCollections.defs.ts b/packages/api/src/lexicons/org/hypercerts/collection/listCollections.defs.ts new file mode 100644 index 0000000..d8266cd --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/collection/listCollections.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as CollectionGetCollection from "./getCollection.defs.js"; + +const $nsid = "org.hypercerts.collection.listCollections"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"hasOrganizationRecord":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.boolean()),"types":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"maxLength":64}), {"maxLength":100})),"uris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"itemUris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"tagUris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed collections. Pass array filters as repeated query parameters; filters combine with AND, while values in each array are ORed except tagUris, which requires every supplied URI. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.collection.listCollections#output";"collections":(CollectionGetCollection.CollectionView)[]; + + /** + * Cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"collections":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => CollectionGetCollection.collectionView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/collection/listCollections.ts b/packages/api/src/lexicons/org/hypercerts/collection/listCollections.ts new file mode 100644 index 0000000..da6d7ce --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/collection/listCollections.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listCollections.defs.js"; +export { main as default } from "./listCollections.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/collection/searchCollections.defs.ts b/packages/api/src/lexicons/org/hypercerts/collection/searchCollections.defs.ts new file mode 100644 index 0000000..9dde9f9 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/collection/searchCollections.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as CollectionGetCollection from "./getCollection.defs.js"; + +const $nsid = "org.hypercerts.collection.searchCollections"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"search":/*#__PURE__*/ l.string(),"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"hasOrganizationRecord":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.boolean()),"types":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"maxLength":64}), {"maxLength":100})),"uris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"itemUris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"tagUris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Searches collection title or shortDescription for the complete trimmed text as a case-insensitive literal substring; blank text adds no search restriction. Other filters combine with search using AND, with OR within arrays except tagUris, which requires every supplied URI. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.collection.searchCollections#output";"collections":(CollectionGetCollection.CollectionView)[]; + + /** + * Cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"collections":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => CollectionGetCollection.collectionView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/collection/searchCollections.ts b/packages/api/src/lexicons/org/hypercerts/collection/searchCollections.ts new file mode 100644 index 0000000..ebf3533 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/collection/searchCollections.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./searchCollections.defs.js"; +export { main as default } from "./searchCollections.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/context.ts b/packages/api/src/lexicons/org/hypercerts/context.ts new file mode 100644 index 0000000..60c0767 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context.ts @@ -0,0 +1,16 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as acknowledgement from "@hypercerts-org/lexicon/records/org/hypercerts/context/acknowledgement"; +export * as attachment from "@hypercerts-org/lexicon/records/org/hypercerts/context/attachment"; +export * as evaluation from "@hypercerts-org/lexicon/records/org/hypercerts/context/evaluation"; +export * as getAcknowledgement from "./context/getAcknowledgement.js"; +export * as getAttachment from "./context/getAttachment.js"; +export * as getEvaluation from "./context/getEvaluation.js"; +export * as getMeasurement from "./context/getMeasurement.js"; +export * as listAcknowledgements from "./context/listAcknowledgements.js"; +export * as listAttachments from "./context/listAttachments.js"; +export * as listEvaluations from "./context/listEvaluations.js"; +export * as listMeasurements from "./context/listMeasurements.js"; +export * as measurement from "@hypercerts-org/lexicon/records/org/hypercerts/context/measurement"; diff --git a/packages/api/src/lexicons/org/hypercerts/context/getAcknowledgement.defs.ts b/packages/api/src/lexicons/org/hypercerts/context/getAcknowledgement.defs.ts new file mode 100644 index 0000000..a1394d9 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/getAcknowledgement.defs.ts @@ -0,0 +1,40 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; + +const $nsid = "org.hypercerts.context.getAcknowledgement"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Gets one public acknowledgement by exact AT-URI; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","AcknowledgementQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.context.getAcknowledgement#output";"acknowledgement":ApiDefs.AcknowledgementView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"acknowledgement":/*#__PURE__*/ l.ref((() => ApiDefs.acknowledgementView) as any)})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/context/getAcknowledgement.ts b/packages/api/src/lexicons/org/hypercerts/context/getAcknowledgement.ts new file mode 100644 index 0000000..5069010 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/getAcknowledgement.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getAcknowledgement.defs.js"; +export { main as default } from "./getAcknowledgement.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/context/getAttachment.defs.ts b/packages/api/src/lexicons/org/hypercerts/context/getAttachment.defs.ts new file mode 100644 index 0000000..01e2e03 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/getAttachment.defs.ts @@ -0,0 +1,51 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as ContextAttachment from "@hypercerts-org/lexicon/records/org/hypercerts/context/attachment.defs"; + +const $nsid = "org.hypercerts.context.getAttachment"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns the current indexed attachment at the given AT-URI with its publisher view. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","AttachmentQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.context.getAttachment#output";"attachment":AttachmentView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"attachment":/*#__PURE__*/ l.ref((() => attachmentView) as any)})); + +export { output }; + +/** Attachment with its hydrated publisher and unchanged source record; subject, content, and location references are not expanded, and external files are not fetched. Missing publisher sidecars are null; query or hydration failures fail the request. */ +type AttachmentView = { $type?: "org.hypercerts.context.getAttachment#attachmentView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":ContextAttachment.Main }; + +export type { AttachmentView }; + +/** Attachment with its hydrated publisher and unchanged source record; subject, content, and location references are not expanded, and external files are not fetched. Missing publisher sidecars are null; query or hydration failures fail the request. */ +const attachmentView = /*#__PURE__*/ l.typedObject($nsid, "attachmentView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => ContextAttachment.main) as any)})); + +export { attachmentView }; diff --git a/packages/api/src/lexicons/org/hypercerts/context/getAttachment.ts b/packages/api/src/lexicons/org/hypercerts/context/getAttachment.ts new file mode 100644 index 0000000..4aab086 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/getAttachment.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getAttachment.defs.js"; +export { main as default } from "./getAttachment.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/context/getEvaluation.defs.ts b/packages/api/src/lexicons/org/hypercerts/context/getEvaluation.defs.ts new file mode 100644 index 0000000..62df9ac --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/getEvaluation.defs.ts @@ -0,0 +1,76 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as ContextEvaluation from "@hypercerts-org/lexicon/records/org/hypercerts/context/evaluation.defs"; + +const $nsid = "org.hypercerts.context.getEvaluation"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns the indexed evaluation at the given AT-URI with its publisher and evaluator views. Invalid evaluator entries are omitted from the hydrated projection while the original record is preserved. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** A valid original evaluator entry with its profile and organization sidecars looked up. */ +type HydratedEvaluationEvaluatorView = { $type?: "org.hypercerts.context.getEvaluation#hydratedEvaluationEvaluatorView";"did":l.DidString;"hydrationStatus":"hydrated";"profile":ApiDefs.ProfileView | null;"organization":ApiDefs.OrganizationView | null }; + +export type { HydratedEvaluationEvaluatorView }; + +/** A valid original evaluator entry with its profile and organization sidecars looked up. */ +const hydratedEvaluationEvaluatorView = /*#__PURE__*/ l.typedObject($nsid, "hydratedEvaluationEvaluatorView", /*#__PURE__*/ l.object({"did":/*#__PURE__*/ l.string({"format":"did"}),"hydrationStatus":/*#__PURE__*/ l.literal("hydrated"),"profile":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.profileView) as any)),"organization":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.ref((() => ApiDefs.organizationView) as any))})); + +export { hydratedEvaluationEvaluatorView }; + +/** A valid original evaluator entry beyond the hydration position limit. */ +type OmittedEvaluationEvaluatorView = { $type?: "org.hypercerts.context.getEvaluation#omittedEvaluationEvaluatorView";"did":l.DidString;"hydrationStatus":"omitted" }; + +export type { OmittedEvaluationEvaluatorView }; + +/** A valid original evaluator entry beyond the hydration position limit. */ +const omittedEvaluationEvaluatorView = /*#__PURE__*/ l.typedObject($nsid, "omittedEvaluationEvaluatorView", /*#__PURE__*/ l.object({"did":/*#__PURE__*/ l.string({"format":"did"}),"hydrationStatus":/*#__PURE__*/ l.literal("omitted")})); + +export { omittedEvaluationEvaluatorView }; + +/** Evaluation with the original record, hydrated publisher, and evaluator projections. The record is not rewritten when evaluator data is malformed. A missing or non-array evaluator container yields an empty hydrated array; malformed entries are omitted. For hydrated actors, missing profile or organization sidecars are null; query or hydration failures fail the request. Evaluator arrays over 1000 entries still fail exact lookup and are skipped by lists. */ +type EvaluationView = { $type?: "org.hypercerts.context.getEvaluation#evaluationView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString;"did":l.DidString;"author":ApiDefs.ActorView;"record":ContextEvaluation.Main; + + /** + * Dense projection of valid record.evaluators object entries with valid DIDs, preserving their source order and duplicates. Entries with malformed shapes or invalid DIDs are omitted without changing the original record; a missing or non-array source yields an empty array. Valid entries at source positions after 100 remain present with hydrationStatus "omitted" and no profile or organization. The raw evaluator array is limited to 1000 entries; over-limit records fail exact lookup and are skipped by lists. + */ + "evaluators":(l.$Typed | l.$Typed | l.Unknown$TypedObject)[] }; + +export type { EvaluationView }; + +/** Evaluation with the original record, hydrated publisher, and evaluator projections. The record is not rewritten when evaluator data is malformed. A missing or non-array evaluator container yields an empty hydrated array; malformed entries are omitted. For hydrated actors, missing profile or organization sidecars are null; query or hydration failures fail the request. Evaluator arrays over 1000 entries still fail exact lookup and are skipped by lists. */ +const evaluationView = /*#__PURE__*/ l.typedObject($nsid, "evaluationView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.string({"format":"datetime"}),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => ContextEvaluation.main) as any),"evaluators":/*#__PURE__*/ l.array(/*#__PURE__*/ l.typedUnion([/*#__PURE__*/ l.typedRef((() => hydratedEvaluationEvaluatorView) as any),/*#__PURE__*/ l.typedRef((() => omittedEvaluationEvaluatorView) as any)], false), {"maxLength":1000})})); + +export { evaluationView }; + +type Output = { $type?: "org.hypercerts.context.getEvaluation#output";"evaluation":EvaluationView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"evaluation":/*#__PURE__*/ l.ref((() => evaluationView) as any)})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/context/getEvaluation.ts b/packages/api/src/lexicons/org/hypercerts/context/getEvaluation.ts new file mode 100644 index 0000000..b5615ab --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/getEvaluation.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getEvaluation.defs.js"; +export { main as default } from "./getEvaluation.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/context/getMeasurement.defs.ts b/packages/api/src/lexicons/org/hypercerts/context/getMeasurement.defs.ts new file mode 100644 index 0000000..e7833ca --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/getMeasurement.defs.ts @@ -0,0 +1,51 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as ContextMeasurement from "@hypercerts-org/lexicon/records/org/hypercerts/context/measurement.defs"; + +const $nsid = "org.hypercerts.context.getMeasurement"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Gets an indexed measurement by exact AT-URI and hydrates its publisher. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** Indexed measurement with its publisher actor and original record. */ +type MeasurementView = { $type?: "org.hypercerts.context.getMeasurement#measurementView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":ContextMeasurement.Main }; + +export type { MeasurementView }; + +/** Indexed measurement with its publisher actor and original record. */ +const measurementView = /*#__PURE__*/ l.typedObject($nsid, "measurementView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => ContextMeasurement.main) as any)})); + +export { measurementView }; + +type Output = { $type?: "org.hypercerts.context.getMeasurement#output";"measurement":MeasurementView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"measurement":/*#__PURE__*/ l.ref((() => measurementView) as any)})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/context/getMeasurement.ts b/packages/api/src/lexicons/org/hypercerts/context/getMeasurement.ts new file mode 100644 index 0000000..089dcd8 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/getMeasurement.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getMeasurement.defs.js"; +export { main as default } from "./getMeasurement.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/context/listAcknowledgements.defs.ts b/packages/api/src/lexicons/org/hypercerts/context/listAcknowledgements.defs.ts new file mode 100644 index 0000000..c971d5b --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/listAcknowledgements.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; + +const $nsid = "org.hypercerts.context.listAcknowledgements"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"subjects":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists public acknowledgements by publisher or subject; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","AcknowledgementQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.context.listAcknowledgements#output";"acknowledgements":(ApiDefs.AcknowledgementView)[]; + + /** + * Omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"acknowledgements":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ApiDefs.acknowledgementView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/context/listAcknowledgements.ts b/packages/api/src/lexicons/org/hypercerts/context/listAcknowledgements.ts new file mode 100644 index 0000000..4b129e8 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/listAcknowledgements.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listAcknowledgements.defs.js"; +export { main as default } from "./listAcknowledgements.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/context/listAttachments.defs.ts b/packages/api/src/lexicons/org/hypercerts/context/listAttachments.defs.ts new file mode 100644 index 0000000..05cc985 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/listAttachments.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ContextGetAttachment from "./getAttachment.defs.js"; + +const $nsid = "org.hypercerts.context.listAttachments"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"uris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"subjects":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"contentTypes":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string(), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed attachments with optional publisher, record URI, subject URI, and content-type filters. Values within each array filter use OR; distinct filters use AND, and duplicate values are ignored. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","AttachmentQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.context.listAttachments#output";"attachments":(ContextGetAttachment.AttachmentView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"attachments":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ContextGetAttachment.attachmentView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/context/listAttachments.ts b/packages/api/src/lexicons/org/hypercerts/context/listAttachments.ts new file mode 100644 index 0000000..b2fe006 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/listAttachments.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listAttachments.defs.js"; +export { main as default } from "./listAttachments.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/context/listEvaluations.defs.ts b/packages/api/src/lexicons/org/hypercerts/context/listEvaluations.defs.ts new file mode 100644 index 0000000..7bff25e --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/listEvaluations.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ContextGetEvaluation from "./getEvaluation.defs.js"; + +const $nsid = "org.hypercerts.context.listEvaluations"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"evaluators":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"subjects":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed evaluations with optional publisher, evaluator, and subject filters. Values within each array filter use OR; distinct filters use AND. Records remain listed when evaluator entries cannot be projected; malformed entries are omitted from hydrated views while the original record is preserved. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.context.listEvaluations#output";"evaluations":(ContextGetEvaluation.EvaluationView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"evaluations":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ContextGetEvaluation.evaluationView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/context/listEvaluations.ts b/packages/api/src/lexicons/org/hypercerts/context/listEvaluations.ts new file mode 100644 index 0000000..cf7cf65 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/listEvaluations.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listEvaluations.defs.js"; +export { main as default } from "./listEvaluations.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/context/listMeasurements.defs.ts b/packages/api/src/lexicons/org/hypercerts/context/listMeasurements.defs.ts new file mode 100644 index 0000000..4dd5705 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/listMeasurements.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ContextGetMeasurement from "./getMeasurement.defs.js"; + +const $nsid = "org.hypercerts.context.listMeasurements"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"subjects":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.enum(["asc","desc"]), "desc")),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({"maxLength":8192}))}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists measurements with optional publisher and subject filters. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.context.listMeasurements#output";"measurements":(ContextGetMeasurement.MeasurementView)[]; + + /** + * Next-page cursor; omitted when no page follows. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"measurements":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => ContextGetMeasurement.measurementView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({"maxLength":8192}))})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/context/listMeasurements.ts b/packages/api/src/lexicons/org/hypercerts/context/listMeasurements.ts new file mode 100644 index 0000000..4700e89 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/context/listMeasurements.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listMeasurements.defs.js"; +export { main as default } from "./listMeasurements.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/entity.ts b/packages/api/src/lexicons/org/hypercerts/entity.ts new file mode 100644 index 0000000..5192456 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/entity.ts @@ -0,0 +1,8 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as defs from "./entity/defs.js"; +export * as feature from "@hypercerts-org/lexicon/records/org/hypercerts/entity/feature"; +export * as getFeature from "./entity/getFeature.js"; +export * as listFeatures from "./entity/listFeatures.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/entity/defs.defs.ts b/packages/api/src/lexicons/org/hypercerts/entity/defs.defs.ts new file mode 100644 index 0000000..aa7d2f6 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/entity/defs.defs.ts @@ -0,0 +1,23 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as EntityFeature from "@hypercerts-org/lexicon/records/org/hypercerts/entity/feature.defs"; + +const $nsid = "org.hypercerts.entity.defs"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +/** Indexed feature record with its hydrated author actor. */ +type FeatureView = { $type?: "org.hypercerts.entity.defs#featureView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":EntityFeature.Main }; + +export type { FeatureView }; + +/** Indexed feature record with its hydrated author actor. */ +const featureView = /*#__PURE__*/ l.typedObject($nsid, "featureView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => EntityFeature.main) as any)})); + +export { featureView }; diff --git a/packages/api/src/lexicons/org/hypercerts/entity/defs.ts b/packages/api/src/lexicons/org/hypercerts/entity/defs.ts new file mode 100644 index 0000000..c94e39e --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/entity/defs.ts @@ -0,0 +1,5 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./defs.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/entity/getFeature.defs.ts b/packages/api/src/lexicons/org/hypercerts/entity/getFeature.defs.ts new file mode 100644 index 0000000..2fd52de --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/entity/getFeature.defs.ts @@ -0,0 +1,40 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as EntityDefs from "./defs.defs.js"; + +const $nsid = "org.hypercerts.entity.getFeature"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Looks up one indexed feature by exact AT-URI with author hydration; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.entity.getFeature#output";"feature":EntityDefs.FeatureView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"feature":/*#__PURE__*/ l.ref((() => EntityDefs.featureView) as any)})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/entity/getFeature.ts b/packages/api/src/lexicons/org/hypercerts/entity/getFeature.ts new file mode 100644 index 0000000..8722f63 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/entity/getFeature.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getFeature.defs.js"; +export { main as default } from "./getFeature.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/entity/listFeatures.defs.ts b/packages/api/src/lexicons/org/hypercerts/entity/listFeatures.defs.ts new file mode 100644 index 0000000..c732399 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/entity/listFeatures.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as EntityDefs from "./defs.defs.js"; + +const $nsid = "org.hypercerts.entity.listFeatures"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"hasOrganizationRecord":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.boolean()),"types":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"maxLength":64}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.enum(["asc","desc"]), "desc")),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({"maxLength":32768}))}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed features with filters and direction-bound pagination; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.entity.listFeatures#output";"features":(EntityDefs.FeatureView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"features":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => EntityDefs.featureView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/entity/listFeatures.ts b/packages/api/src/lexicons/org/hypercerts/entity/listFeatures.ts new file mode 100644 index 0000000..b15c150 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/entity/listFeatures.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listFeatures.defs.js"; +export { main as default } from "./listFeatures.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/funding.ts b/packages/api/src/lexicons/org/hypercerts/funding.ts new file mode 100644 index 0000000..51c618b --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/funding.ts @@ -0,0 +1,7 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as getReceipt from "./funding/getReceipt.js"; +export * as listReceipts from "./funding/listReceipts.js"; +export * as receipt from "@hypercerts-org/lexicon/records/org/hypercerts/funding/receipt"; diff --git a/packages/api/src/lexicons/org/hypercerts/funding/getReceipt.defs.ts b/packages/api/src/lexicons/org/hypercerts/funding/getReceipt.defs.ts new file mode 100644 index 0000000..92fc5f3 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/funding/getReceipt.defs.ts @@ -0,0 +1,51 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as FundingReceipt from "@hypercerts-org/lexicon/records/org/hypercerts/funding/receipt.defs"; + +const $nsid = "org.hypercerts.funding.getReceipt"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns one indexed funding receipt and hydrates its publisher actor. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","ReceiptQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.funding.getReceipt#output";"receipt":ReceiptView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"receipt":/*#__PURE__*/ l.ref((() => receiptView) as any)})); + +export { output }; + +/** Funding receipt with its publisher actor hydrated; the indexed record is unchanged, including its decimal-string amount, and party and funded-target references are not expanded. Missing publisher profile or organization sidecars are null; indexedAt is null when the index has no timestamp. A receipt is not proof of payment. */ +type ReceiptView = { $type?: "org.hypercerts.funding.getReceipt#receiptView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":FundingReceipt.Main }; + +export type { ReceiptView }; + +/** Funding receipt with its publisher actor hydrated; the indexed record is unchanged, including its decimal-string amount, and party and funded-target references are not expanded. Missing publisher profile or organization sidecars are null; indexedAt is null when the index has no timestamp. A receipt is not proof of payment. */ +const receiptView = /*#__PURE__*/ l.typedObject($nsid, "receiptView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => FundingReceipt.main) as any)})); + +export { receiptView }; diff --git a/packages/api/src/lexicons/org/hypercerts/funding/getReceipt.ts b/packages/api/src/lexicons/org/hypercerts/funding/getReceipt.ts new file mode 100644 index 0000000..298b5b7 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/funding/getReceipt.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getReceipt.defs.js"; +export { main as default } from "./getReceipt.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/funding/listReceipts.defs.ts b/packages/api/src/lexicons/org/hypercerts/funding/listReceipts.defs.ts new file mode 100644 index 0000000..4c0ddaf --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/funding/listReceipts.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as FundingGetReceipt from "./getReceipt.defs.js"; + +const $nsid = "org.hypercerts.funding.listReceipts"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"uris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"from":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string(), {"maxLength":100})),"to":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string(), {"maxLength":100})),"forUris":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"at-uri"}), {"maxLength":100})),"transactionIds":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string(), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.enum(["asc","desc"])),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100})),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed funding receipts matching the supplied filters: filters combine with AND, while values within an array combine with OR. Repeat array parameters to supply multiple values; duplicates are ignored. Authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","ReceiptQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.funding.listReceipts#output";"receipts":(FundingGetReceipt.ReceiptView)[]; + + /** + * Opaque cursor for the next page; omitted when there is no next page. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"receipts":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => FundingGetReceipt.receiptView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/funding/listReceipts.ts b/packages/api/src/lexicons/org/hypercerts/funding/listReceipts.ts new file mode 100644 index 0000000..96d67d4 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/funding/listReceipts.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listReceipts.defs.js"; +export { main as default } from "./listReceipts.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/vocab.ts b/packages/api/src/lexicons/org/hypercerts/vocab.ts new file mode 100644 index 0000000..5b36479 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/vocab.ts @@ -0,0 +1,7 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as getVocabTag from "./vocab/getVocabTag.js"; +export * as listVocabTags from "./vocab/listVocabTags.js"; +export * as tag from "@hypercerts-org/lexicon/records/org/hypercerts/vocab/tag"; diff --git a/packages/api/src/lexicons/org/hypercerts/vocab/getVocabTag.defs.ts b/packages/api/src/lexicons/org/hypercerts/vocab/getVocabTag.defs.ts new file mode 100644 index 0000000..0a841e7 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/vocab/getVocabTag.defs.ts @@ -0,0 +1,51 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as VocabTag from "@hypercerts-org/lexicon/records/org/hypercerts/vocab/tag.defs"; + +const $nsid = "org.hypercerts.vocab.getVocabTag"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Looks up one published vocabulary tag by full DID-authority AT-URI and returns its unchanged record with publisher details; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","VocabTagQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.vocab.getVocabTag#output";"vocabTag":VocabTagView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"vocabTag":/*#__PURE__*/ l.ref((() => vocabTagView) as any)})); + +export { output }; + +/** Vocabulary-tag record with its unchanged source and hydrated publisher actor. */ +type VocabTagView = { $type?: "org.hypercerts.vocab.getVocabTag#vocabTagView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":VocabTag.Main }; + +export type { VocabTagView }; + +/** Vocabulary-tag record with its unchanged source and hydrated publisher actor. */ +const vocabTagView = /*#__PURE__*/ l.typedObject($nsid, "vocabTagView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => VocabTag.main) as any)})); + +export { vocabTagView }; diff --git a/packages/api/src/lexicons/org/hypercerts/vocab/getVocabTag.ts b/packages/api/src/lexicons/org/hypercerts/vocab/getVocabTag.ts new file mode 100644 index 0000000..b3d5516 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/vocab/getVocabTag.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getVocabTag.defs.js"; +export { main as default } from "./getVocabTag.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/vocab/listVocabTags.defs.ts b/packages/api/src/lexicons/org/hypercerts/vocab/listVocabTags.defs.ts new file mode 100644 index 0000000..b2ddd3e --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/vocab/listVocabTags.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as VocabGetVocabTag from "./getVocabTag.defs.js"; + +const $nsid = "org.hypercerts.vocab.listVocabTags"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.enum(["asc","desc"]), "desc")),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists published vocabulary tags by optional publisher DIDs with stable cursor pagination; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","VocabTagQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.vocab.listVocabTags#output";"vocabTags":(VocabGetVocabTag.VocabTagView)[]; + + /** + * Opaque cursor for the next page; omitted when pagination is complete. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"vocabTags":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => VocabGetVocabTag.vocabTagView) as any), ),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/vocab/listVocabTags.ts b/packages/api/src/lexicons/org/hypercerts/vocab/listVocabTags.ts new file mode 100644 index 0000000..302aca2 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/vocab/listVocabTags.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listVocabTags.defs.js"; +export { main as default } from "./listVocabTags.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/workscope.ts b/packages/api/src/lexicons/org/hypercerts/workscope.ts new file mode 100644 index 0000000..93a92c2 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/workscope.ts @@ -0,0 +1,8 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * as cel from "@hypercerts-org/lexicon/records/org/hypercerts/workscope/cel"; +export * as getWorkscopeTag from "./workscope/getWorkscopeTag.js"; +export * as listWorkscopeTags from "./workscope/listWorkscopeTags.js"; +export * as tag from "@hypercerts-org/lexicon/records/org/hypercerts/workscope/tag"; diff --git a/packages/api/src/lexicons/org/hypercerts/workscope/getWorkscopeTag.defs.ts b/packages/api/src/lexicons/org/hypercerts/workscope/getWorkscopeTag.defs.ts new file mode 100644 index 0000000..a6cea68 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/workscope/getWorkscopeTag.defs.ts @@ -0,0 +1,51 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as ApiDefs from "../api/defs.defs.js"; +import * as WorkscopeTag from "@hypercerts-org/lexicon/records/org/hypercerts/workscope/tag.defs"; + +const $nsid = "org.hypercerts.workscope.getWorkscopeTag"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"uri":/*#__PURE__*/ l.string({"format":"at-uri"})}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Returns an indexed work-scope tag and its hydrated publisher for an exact AT-URI; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","RecordNotFound","WorkscopeTagQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +/** Work-scope tag view with its hydrated publisher, unchanged record, and nullable index timestamp. */ +type WorkscopeTagView = { $type?: "org.hypercerts.workscope.getWorkscopeTag#workscopeTagView";"uri":l.AtUriString;"cid":l.CidString;"indexedAt":l.DatetimeString | null;"did":l.DidString;"author":ApiDefs.ActorView;"record":WorkscopeTag.Main }; + +export type { WorkscopeTagView }; + +/** Work-scope tag view with its hydrated publisher, unchanged record, and nullable index timestamp. */ +const workscopeTagView = /*#__PURE__*/ l.typedObject($nsid, "workscopeTagView", /*#__PURE__*/ l.object({"uri":/*#__PURE__*/ l.string({"format":"at-uri"}),"cid":/*#__PURE__*/ l.string({"format":"cid"}),"indexedAt":/*#__PURE__*/ l.nullable(/*#__PURE__*/ l.string({"format":"datetime"})),"did":/*#__PURE__*/ l.string({"format":"did"}),"author":/*#__PURE__*/ l.ref((() => ApiDefs.actorView) as any),"record":/*#__PURE__*/ l.ref((() => WorkscopeTag.main) as any)})); + +export { workscopeTagView }; + +type Output = { $type?: "org.hypercerts.workscope.getWorkscopeTag#output";"workscopeTag":WorkscopeTagView }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"workscopeTag":/*#__PURE__*/ l.ref((() => workscopeTagView) as any)})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/workscope/getWorkscopeTag.ts b/packages/api/src/lexicons/org/hypercerts/workscope/getWorkscopeTag.ts new file mode 100644 index 0000000..50a84e0 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/workscope/getWorkscopeTag.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./getWorkscopeTag.defs.js"; +export { main as default } from "./getWorkscopeTag.defs.js"; diff --git a/packages/api/src/lexicons/org/hypercerts/workscope/listWorkscopeTags.defs.ts b/packages/api/src/lexicons/org/hypercerts/workscope/listWorkscopeTags.defs.ts new file mode 100644 index 0000000..779976b --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/workscope/listWorkscopeTags.defs.ts @@ -0,0 +1,45 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +import { l } from "@atproto/lex"; +import * as WorkscopeGetWorkscopeTag from "./getWorkscopeTag.defs.js"; + +const $nsid = "org.hypercerts.workscope.listWorkscopeTags"; + +type $nsid = typeof $nsid; + +export { $nsid }; + +export const $params = /*#__PURE__*/ l.params({"authors":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({"format":"did"}), {"maxLength":100})),"sortDirection":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.enum(["asc","desc"]), "desc")),"limit":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.withDefault(/*#__PURE__*/ l.integer({"minimum":1,"maximum":100}), 25)),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({"maxLength":8192}))}); + +export type $Params = l.InferOutput; + +export const $output = /*#__PURE__*/ l.payload("application/json", /*#__PURE__*/ l.ref((() => output) as any)); + +export type $Output = l.InferPayload; +export type $OutputBody = l.InferPayloadBody; + +/** Lists indexed work-scope tags by publisher DID with stable timestamp-and-URI ordering; authentication is not required. */ +const main = /*#__PURE__*/ l.query($nsid, $params, $output, ["InvalidRequest","WorkscopeTagQueryFailed"]); + +export { main }; + +const $lxm = $nsid; + +type $lxm = typeof $lxm; + +export { $lxm }; + +type Output = { $type?: "org.hypercerts.workscope.listWorkscopeTags#output";"workscopeTags":(WorkscopeGetWorkscopeTag.WorkscopeTagView)[]; + + /** + * Opaque cursor for the next page; omitted when no next page exists. + */ + "cursor"?:string }; + +export type { Output }; + +const output = /*#__PURE__*/ l.typedObject($nsid, "output", /*#__PURE__*/ l.object({"workscopeTags":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref((() => WorkscopeGetWorkscopeTag.workscopeTagView) as any), {"maxLength":100}),"cursor":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())})); + +export { output }; diff --git a/packages/api/src/lexicons/org/hypercerts/workscope/listWorkscopeTags.ts b/packages/api/src/lexicons/org/hypercerts/workscope/listWorkscopeTags.ts new file mode 100644 index 0000000..fee7868 --- /dev/null +++ b/packages/api/src/lexicons/org/hypercerts/workscope/listWorkscopeTags.ts @@ -0,0 +1,6 @@ +/* + * THIS FILE WAS GENERATED BY scripts/generate.js WITH "@atproto/lex". DO NOT EDIT. + */ + +export * from "./listWorkscopeTags.defs.js"; +export { main as default } from "./listWorkscopeTags.defs.js"; diff --git a/packages/api/test/client.test.js b/packages/api/test/client.test.js new file mode 100644 index 0000000..04503af --- /dev/null +++ b/packages/api/test/client.test.js @@ -0,0 +1,91 @@ +// Loads the built package by its name, as a consumer would. No network access. +import assert from "node:assert/strict"; +import { readFile } from "node:fs/promises"; +import test from "node:test"; +import { Client, XrpcResponseValidationError } from "@atproto/lex"; +import * as api from "@hypercerts-org/api"; + +const packageJson = JSON.parse(await readFile(new URL("../package.json", import.meta.url), "utf8")); +const manifest = JSON.parse( + await readFile(new URL("../../../happyview-modules/manifest.json", import.meta.url), "utf8"), +); + +/** + * @param {unknown} body + * @returns {typeof globalThis.fetch} + */ +const stubFetch = (body) => async () => + new Response(JSON.stringify(body), { headers: { "content-type": "application/json" } }); + +test("LEXICON_VERSION matches the package metadata", () => { + assert.equal(api.LEXICON_VERSION, packageJson.hypercerts.lexiconVersion); +}); + +/** + * Follows an NSID through lex's namespace tree: org.hypercerts.claim.getActivity. + * @param {object} root + * @param {string} nsid + * @returns {any} + */ +const lookup = (root, nsid) => + nsid.split(".").reduce((node, part) => /** @type {any} */ (node)?.[part], root); + +test("every Lexicon in happyview-modules/manifest.json is at its NSID path", async () => { + const records = await import("@hypercerts-org/lexicon/records"); + const sources = manifest.validationLexicons; + const queryIds = sources + .filter((/** @type {any} */ source) => source.path && !source.id.endsWith(".defs")) + .map((/** @type {any} */ source) => source.id); + assert.ok(queryIds.length > 0); + for (const id of queryIds) { + assert.equal(lookup(api, id)?.main?.nsid, id, `${id} should be its query definition`); + } + // Records and other referenced definitions are the lexicon package's own + // modules, not copies: every export is the same object. (A record that also + // has queries under its NSID, like org.hypercerts.collection, is a different + // namespace object here, with the query modules added.) + for (const source of sources.filter((/** @type {any} */ source) => source.packagePath)) { + const fromApi = lookup(api, source.id); + const fromRecords = lookup(records, source.id); + assert.ok(fromApi, `${source.id} should be in the tree`); + const keys = Object.keys(fromRecords); + assert.ok(keys.length > 0, `${source.id} should have exports`); + for (const key of keys) { + assert.equal(fromApi[key], fromRecords[key], `${source.id}.${key} is not shared`); + } + } +}); + +test("embedded records are validated with the schemas from @hypercerts-org/lexicon/records", async () => { + const view = { + uri: "at://did:plc:abc123/org.hypercerts.claim.activity/3k2abc", + cid: "bafyreie5737gdxlw5i64vzichcalba3z2v5n6icifvx5xytvske7mr3hpm", + indexedAt: "2026-10-30T12:00:00.000Z", + did: "did:plc:abc123", + author: { did: "did:plc:abc123", handle: null, profile: null, organization: null }, + record: { + $type: "org.hypercerts.claim.activity", + title: "Reforestation", + shortDescription: "Planting native trees.", + createdAt: "2026-10-30T12:00:00.000Z", + }, + contributors: [], + }; + const uri = /** @type {const} */ ("at://did:plc:abc123/org.hypercerts.claim.activity/3k2abc"); + const valid = new Client({ + service: "https://api.example", + fetch: stubFetch({ activity: view }), + }); + const body = await valid.call(api.org.hypercerts.claim.getActivity, { uri }); + assert.equal(body.activity.record.title, "Reforestation"); + + const broken = { ...view, record: { ...view.record, title: 42 } }; + const invalid = new Client({ + service: "https://api.example", + fetch: stubFetch({ activity: broken }), + }); + await assert.rejects( + invalid.call(api.org.hypercerts.claim.getActivity, { uri }), + XrpcResponseValidationError, + ); +}); diff --git a/packages/api/test/types.ts b/packages/api/test/types.ts new file mode 100644 index 0000000..fcdab85 --- /dev/null +++ b/packages/api/test/types.ts @@ -0,0 +1,36 @@ +// Type-level tests for the built package: compiled by `pnpm test` +// (tsconfig.test.json), never run. Each @ts-expect-error must stay an error. +import { Client } from "@atproto/lex"; +import { app, org } from "@hypercerts-org/api"; +import type { org as records } from "@hypercerts-org/lexicon/records"; + +const api = new Client("https://api.example"); +const uri = "at://did:plc:abc123/org.hypercerts.claim.activity/3k2abc" as const; + +type ActivityView = org.hypercerts.claim.getActivity.ActivityView; + +export async function views(): Promise { + const { activity } = await api.call(org.hypercerts.claim.getActivity, { uri }); + return activity; +} + +// Records in the API tree are the modules of @hypercerts-org/lexicon/records. +export const record = (view: ActivityView): records.hypercerts.claim.activity.Main => view.record; +export const sameRecord = ( + activity: records.hypercerts.claim.activity.Main, +): org.hypercerts.claim.activity.Main => activity; + +export const params: org.hypercerts.claim.getActivity.$Params = { uri }; +export const profile = (view: org.hypercerts.api.defs.ProfileView): string => view.did; +export type BadgeDefinitionView = app.certified.badge.getBadgeDefinition.BadgeDefinitionView; + +export async function awards() { + const { badgeAwards } = await api.call(app.certified.badge.listBadgeAwards, { limit: 5 }); + return badgeAwards; +} + +// @ts-expect-error unknown parameter +export const unknownParam = () => api.call(org.hypercerts.claim.getActivity, { uri, nope: 1 }); + +// @ts-expect-error uri is required +export const missingUri = () => api.call(org.hypercerts.claim.getActivity, {}); diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json new file mode 100644 index 0000000..f0bd9d1 --- /dev/null +++ b/packages/api/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "es2024", + "lib": ["es2024"], + "module": "nodenext", + "moduleResolution": "nodenext", + "verbatimModuleSyntax": true, + "isolatedModules": true, + "strict": true, + "noUncheckedIndexedAccess": true, + // Code generated by @atproto/lex 0.4.2 does not compile with exactOptionalPropertyTypes. + "exactOptionalPropertyTypes": false, + "noImplicitOverride": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "skipLibCheck": true, + "rootDir": "src", + "outDir": "dist", + "types": [] + }, + "include": ["src"] +} diff --git a/packages/api/tsconfig.test.json b/packages/api/tsconfig.test.json new file mode 100644 index 0000000..d61f624 --- /dev/null +++ b/packages/api/tsconfig.test.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "noEmit": true, + "strict": true, + "skipLibCheck": true, + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": ["node"] + }, + "include": ["test"] +} diff --git a/packages/api/vendor/hypercerts-org-lexicon-1.7.0.tgz b/packages/api/vendor/hypercerts-org-lexicon-1.7.0.tgz new file mode 100644 index 0000000..36109f7 Binary files /dev/null and b/packages/api/vendor/hypercerts-org-lexicon-1.7.0.tgz differ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3584053..15d3051 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,7 +15,38 @@ importers: specifier: 3.0.2 version: 3.0.2 - api: + docs: + dependencies: + '@hypercerts-org/ui-react': + specifier: 0.2.0 + version: 0.2.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@scalar/api-reference-react': + specifier: ^0.9.75 + version: 0.9.75(react@19.3.0)(tailwindcss@4.3.3)(typescript@7.0.2)(zod@4.6.5) + react: + specifier: ^19.3.0 + version: 19.3.0 + react-dom: + specifier: ^19.3.0 + version: 19.3.0(react@19.3.0) + devDependencies: + '@types/react': + specifier: ^19.3.0 + version: 19.3.0 + '@types/react-dom': + specifier: ^19.3.0 + version: 19.3.0(@types/react@19.3.0) + '@vitejs/plugin-react': + specifier: ^6.0.1 + version: 6.1.1(vite@8.3.1(@types/node@24.19.2)(yaml@2.9.1)) + typescript: + specifier: ^7.0.2 + version: 7.0.2 + vite: + specifier: ^8.3.1 + version: 8.3.1(@types/node@24.19.2)(yaml@2.9.1) + + happyview-modules: dependencies: '@atcute/cbor': specifier: 2.3.2 @@ -49,36 +80,26 @@ importers: specifier: 5.9.3 version: 5.9.3 - docs: - dependencies: - '@hypercerts-org/ui-react': - specifier: 0.2.0 - version: 0.2.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) - '@scalar/api-reference-react': - specifier: ^0.9.75 - version: 0.9.75(react@19.3.0)(tailwindcss@4.3.3)(typescript@7.0.2)(zod@4.6.5) - react: - specifier: ^19.3.0 - version: 19.3.0 - react-dom: - specifier: ^19.3.0 - version: 19.3.0(react@19.3.0) + packages/api: devDependencies: - '@types/react': - specifier: ^19.3.0 - version: 19.3.0 - '@types/react-dom': - specifier: ^19.3.0 - version: 19.3.0(@types/react@19.3.0) - '@vitejs/plugin-react': - specifier: ^6.0.1 - version: 6.1.1(vite@8.3.1(@types/node@24.3.0)(yaml@2.9.1)) + '@atproto/lex': + specifier: 0.4.2 + version: 0.4.2 + '@biomejs/biome': + specifier: 2.6.3 + version: 2.6.3 + '@hypercerts-org/lexicon': + specifier: file:vendor/hypercerts-org-lexicon-1.7.0.tgz + version: file:packages/api/vendor/hypercerts-org-lexicon-1.7.0.tgz(@atproto/lex@0.4.2) + '@types/node': + specifier: 24.19.2 + version: 24.19.2 typescript: - specifier: ^7.0.2 + specifier: 7.0.2 version: 7.0.2 vite: - specifier: ^8.3.1 - version: 8.3.1(@types/node@24.3.0)(yaml@2.9.1) + specifier: 8.3.5 + version: 8.3.5(@types/node@24.19.2)(yaml@2.9.1) packages: @@ -116,26 +137,109 @@ packages: '@atcute/uint8array@1.2.0': resolution: {integrity: sha512-KoBGTbV4lS8zXNu91osM3FecrH3NUnxNPsBAkaNtn6uf/p240245qoLn7keFpRM0npX522X8R+XBBb2rvtE7Rg==} + '@atproto-labs/did-resolver@0.3.11': + resolution: {integrity: sha512-CeAC6VY3xaXQ8CaOXLz4EOopSvfcQBcuJvX3J5ew2nbf+BM0nes45ZvxUieP5ZlLPXbJborwJh5zDeJcYpwCFQ==} + engines: {node: '>=22'} + + '@atproto-labs/fetch-node@0.4.3': + resolution: {integrity: sha512-qENUCoXKKNegxin34IpFxNd8yRijTfHq9FEoAVk7ZSciedstUJrVbt4CbdGLkn1t5gcZUH+Csct+MTAEQzvNbA==} + engines: {node: '>=22'} + + '@atproto-labs/fetch@0.4.0': + resolution: {integrity: sha512-9HEcZuCU4nWAzV3XZ7nwbDPdV8tbhICzyYeyE5SPHTPuuKS6C3i5WOdwGP1diCCUaYF3Vadw5ArVlQPtXnn73w==} + engines: {node: '>=22'} + + '@atproto-labs/handle-resolver-node@0.2.15': + resolution: {integrity: sha512-ksH6h268dkDAXft45guvYPI/8CnJFlibyBKqpzX75kezQ+Hj8RLbVaScpsnywkE6Jqt31y8E/dW8dyMXKDqidg==} + engines: {node: '>=22'} + + '@atproto-labs/handle-resolver@0.4.10': + resolution: {integrity: sha512-hsYYvGhi6Tv6f4Fti//i/vllVIb/wrJaOcbT3Yh7oo10VxBKAyxzVaB7mIJcho2YJ5kHd2kbCYYPWLw8pvm/bg==} + engines: {node: '>=22'} + + '@atproto-labs/pipe@0.2.4': + resolution: {integrity: sha512-n67jCcrC+ouAeO10cWkpPzzLMlDi/lDCU30Us+LGqhOPhT6c4t5ASdBLQi9W3jUQtRzQBt3G9zipF+xKWNvVbw==} + engines: {node: '>=22'} + + '@atproto-labs/simple-store-memory@0.2.6': + resolution: {integrity: sha512-DD1v7MEfYF3BAcEpMTTpzfBLWLoI2HuyBhku2YpjHoqPrRrhCtE1alkxfPHjtjJVIjuU/XNU0cF/wB3+5FiKsA==} + engines: {node: '>=22'} + + '@atproto-labs/simple-store@0.5.1': + resolution: {integrity: sha512-vfvoDhu6ds6BT3Pqe+d2/LBU1WpDRtt69y6zltlfMCoucPm82m1j50/Wb6xTvv+oZ+2j0JyZVXsmXQ12SWYQJg==} + engines: {node: '>=22'} + '@atproto/common-web@0.4.21': resolution: {integrity: sha512-Odq+wdk3YNasGCjjlpl3bCIPvqYHige5DLfMkIffNv/2PI/iIj5ZvAvMvJlJ59OhReKSxtpI0invx5UQPc3+fw==} - '@atproto/common-web@0.5.12': - resolution: {integrity: sha512-FumNnUOUsk68gP+jU0sXY2wY2piqFV9/qU2YaoQq/IZknhJBlLYCzjQXXCN0FCzxAZWD0YUzgydeyuRvFoAxfA==} + '@atproto/common-web@0.5.15': + resolution: {integrity: sha512-1u/30RbRtF8h69soQFldCiYmvv90KIG38MvZyFYBnUn8ygQxE3TRL2SDU87hJeU5mSXySgAMcJc4GE7m/kZK/A==} + engines: {node: '>=22'} + + '@atproto/common@0.8.7': + resolution: {integrity: sha512-Oy4xR0wUKm9Q5hL9mPUoI8d5hX06t6fkGooviTVr8Te79yF2ZaC2ssECQX4Wbhjj9zAJ7b+zlSDWgNtniemvvA==} + engines: {node: '>=22'} + + '@atproto/crypto@0.5.7': + resolution: {integrity: sha512-r3uizKlzcBVRJ4mQMXlsRVZMSfAcZ9tr/dijnJ95C1aNGvV5k9bQ+Hvu6OLnwsnVTISzYRkgAfJCDNLCrOBilw==} + engines: {node: '>=22'} + + '@atproto/did@0.5.6': + resolution: {integrity: sha512-8bLfOnaoWBmg9S8naqzk5mG8zYAXfSKT4odB5OHcCAd1o7p6RFb0Rk9WGobEgboKtxP2CIeul6mzI5PUT4v6Gg==} + engines: {node: '>=22'} + + '@atproto/lex-builder@0.1.18': + resolution: {integrity: sha512-O8U8ufEsvldHhtdSKI6AHk0Cd6PF5t7wII/MuptauizvwApn9pNXVtz12VGdlehl0hcK357CNYNvunz5s2thpQ==} + engines: {node: '>=22'} + hasBin: true + + '@atproto/lex-cbor@0.1.7': + resolution: {integrity: sha512-3v68HO94wbE/2ZNejTSseb4ZkpjayxU4SmGy/s5zfpG8q1mNCvKcu9B1043yO+RCrE5BsOBiaRMituifbPiy3Q==} + engines: {node: '>=22'} + + '@atproto/lex-client@0.4.0': + resolution: {integrity: sha512-XrTmVlzI9QwvdcN9aL7z0pN/MYZb/Y8IO6r5L5je37mJxaV9c0QC7ZWqvJDn25mrLvAScFy9y3xSucnQzRKSZg==} engines: {node: '>=22'} '@atproto/lex-data@0.0.15': resolution: {integrity: sha512-ZsbGiaM5S3CnGrcTMbDGON3bLZzCi/Mx9UvcMREKSRujnF68eHgMiXxJqvykP7+QpOX6tYCK93axZkuJVhtSEw==} - '@atproto/lex-data@0.1.7': - resolution: {integrity: sha512-kW/dPLqo/WgCLV+XESR4JKwV6c1rZWJGOfuPupZGTjEDAKoBbKXdaEzX9/1vKQYbZ9U3j0DS/n7OFFK7wBugyQ==} + '@atproto/lex-data@0.1.8': + resolution: {integrity: sha512-RuCIPXGT9sesyPC0frQgpXGD9egucqRjDRqQ8SPXEp+C6bO6EiXA1cAxNw83F1kpTLhtt6AJUaH/s8u0N7ip7g==} + engines: {node: '>=22'} + + '@atproto/lex-document@0.1.14': + resolution: {integrity: sha512-snXkPN3oPaX7bw6brKlfME/15hQbbN4eFP3WN+0HeeklC4LXF+JZS2q+/Bi+acyj9VCcuvklI33xf0nmQmlIaQ==} engines: {node: '>=22'} + '@atproto/lex-installer@0.2.4': + resolution: {integrity: sha512-L6j/oxND97JkH120/ooCAjkltwvEcebysdmb67IzrvlRfbMaLw9wscLKNRCyEPPaSjJRPkdZXn8l0GHTRibs4Q==} + engines: {node: '>=22'} + hasBin: true + '@atproto/lex-json@0.0.16': resolution: {integrity: sha512-IgLgQ0krshVlrIYZ+heTBDbCnM3LmAgWvsaYn5MxvKA3LcBot3PG3ptdO8VOweVZ+WgCLuo39cz9EbUmIbqdtg==} - '@atproto/lex-json@0.1.6': - resolution: {integrity: sha512-mvrAd0lbyuecIHjyld8QN6MN6CBf4j0GCxLzegsvLh0SvDf+GbYWklkcQqmITL44yFQOwmA/QNIQj0Uvh7+R/g==} + '@atproto/lex-json@0.1.7': + resolution: {integrity: sha512-4ABSfAkv+zLiPHvexZ7n/xR8wCLShbpEqcGxvniejZGsFrms980nl+BOaWPuU+OgLRNzpicMwSVOYDF6X62IHg==} + engines: {node: '>=22'} + + '@atproto/lex-resolver@0.4.1': + resolution: {integrity: sha512-nha9esJ74l5P9QrJb6pTnIr+T0VRaHVvsB9EHqsjslmoihXGFB70NcHk5LfTe2N8Ayks2shbesO/AiWNQ/2Xvg==} + engines: {node: '>=22'} + + '@atproto/lex-rpc@0.0.1': + resolution: {integrity: sha512-Dzzg+MuOv0P2FdnVOHDteaF8mdE+unTQev9uVe38AOiSrNTNlxAApiX6bHR1mItquVgTK9tSwGzjnCFZJcRmxA==} + engines: {node: '>=22'} + + '@atproto/lex-schema@0.2.9': + resolution: {integrity: sha512-RkY6c77VTWUior/D2UsfBG/bAba5fNMZhjxB0/V1nN4XIgOs8fIo2c42WdFtCelVzc06Dr5oO62FjqSWulfdpg==} + engines: {node: '>=22'} + + '@atproto/lex@0.4.2': + resolution: {integrity: sha512-5agIAaGJPgy+91r2WIbEE7jhWkSMVxdz6enRjwx79kTX3KeKDQXl+jyyZ1i/6Rj39r2AjBTY/JGuFs+VUI6+Xw==} engines: {node: '>=22'} + hasBin: true '@atproto/lexicon@0.6.2': resolution: {integrity: sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw==} @@ -144,11 +248,15 @@ packages: resolution: {integrity: sha512-hDG2+61JTrvxDFtoojDFxKmZkFVl/lR/jFi82gSN0zNDjr+dlpUGKlG9MoPBkUKK83+Pi+I2jZ55xXboJq6JTA==} engines: {node: '>=22'} + '@atproto/repo@0.11.2': + resolution: {integrity: sha512-I4Nak2e9O7mzBO9y7RNYwCnjcHoNafG1mmDj3vomLp2U8x6a8zlMZVq44mqx6mCMzXgnYKOZGigWRAAuS//FgQ==} + engines: {node: '>=22'} + '@atproto/syntax@0.5.4': resolution: {integrity: sha512-9XJOpMAgsGFxMEIp8nJ8AIWv+krrY1xQMj+wULbbXhQztQV+9aZ0TbG9Jtn3Op2or8Kr6OqyWR4ga9Z189kKDw==} - '@atproto/syntax@0.7.6': - resolution: {integrity: sha512-luKQTcWw1H1jLmYvX34ldBqNjz2orF082njmcF9fxbWTqVhsO+TpY0FHRKVPoV7dwL0Y3L16DNz1ma0LFGH25g==} + '@atproto/syntax@0.7.7': + resolution: {integrity: sha512-MJ+QUo8yzAGP2SOQKs2CBI2ouY5KaO9Pv5a7laX3xtrkfWmS/s96L/FCJm5VBHEvKXmd6ap/HSGypYclQcfoWA==} engines: {node: '>=22'} '@atproto/xrpc@0.8.13': @@ -172,6 +280,71 @@ packages: resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} engines: {node: '>=6.9.0'} + '@biomejs/biome@2.6.3': + resolution: {integrity: sha512-va/0xPku7wnfzv+D8Zpdm5uKiGJWiV8neqoEPnRjvNQQwhl4tVXS4fETs4H0CCB2rGeqJ4cu9y4iOZOnOYKAUA==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-android-arm64@2.6.3': + resolution: {integrity: sha512-5JD7QQDEHxdeEb4sftEHG+lsuUyu8Cob/hVLqRELbgGlFl68Rldv/PPi2k4dRjERZ/EItJ3O6Xmv8lqsEtUBiw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [android] + + '@biomejs/cli-android-x64@2.6.3': + resolution: {integrity: sha512-70WOGKCgpT+Uqg6LFdTLqefV54/DypdZg+LnBQDO6AWvkgXO+9xhVClajQyDsIHYjnXMtI1pRO5sP+zMXlS/bw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [android] + + '@biomejs/cli-darwin-arm64@2.6.3': + resolution: {integrity: sha512-ezf+XEKeyJ2yYlBhrzyEEHLvfRYrhtNKc6maLzR/WcAcBccb4RVDeFxsymjBve2LO0bpIMRUAiS90D4bUBRT0A==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.6.3': + resolution: {integrity: sha512-Lg2tFdg4elJo+7i707PpLMs6N1hATVt4kqDo6MD/q/VnPs8rsKReKXsz1TA5GNdfRVAQNJ5GRiyK2EwNptK+MA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.6.3': + resolution: {integrity: sha512-dYU70A89OFHzakQPE9VOPbE60JNcQt4mtxvUGQl+EgTkGtqCFxLD2RUn1SbiMu8Mu5xFscS1bfYDpoasaUrqNA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@2.6.3': + resolution: {integrity: sha512-8Stcvq98n1gs9VyLKuaWrnsd8kbXE2nKDAHtuLHGSYdGyNWN5JIIm5a28xdnmgdKzKHmiDgYyATetkEv7+zGow==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@2.6.3': + resolution: {integrity: sha512-j6eFjUcWSphmgVTbrobEMA0wdbfNHKrGi8hRsFkc17jeS1n7nHwFACxp6jWqe9sxQqyFAeyOgt2/1bOGVcbATA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@2.6.3': + resolution: {integrity: sha512-CShmx0bO6BngywT3minv8K1xsQX1ig1vsBqYTLnmDY3mBiDYHlaLRIsdHoM1pEU9dV3BN5a0uiH0IGDtYh9TWA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@2.6.3': + resolution: {integrity: sha512-00SthDxBPwNiT7IL/mOneif6fiEU1PXK875zhr+InpeZjovY1mF5tCuDhXo1Hh0GYyiKHKzLbItzn58SAyLhJQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.6.3': + resolution: {integrity: sha512-GhtOPphBWlnCepqpNk/w5eGN5oGRCzL20EbAkL1XCIpyboeVC9R642noyT43l8LSenGS4qz9IL8sKPfwY37V/Q==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@cacheable/memory@2.2.0': resolution: {integrity: sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==} @@ -385,6 +558,15 @@ packages: peerDependencies: '@atproto/xrpc': '*' + '@hypercerts-org/lexicon@file:packages/api/vendor/hypercerts-org-lexicon-1.7.0.tgz': + resolution: {integrity: sha512-K2A8fRxPD9iCCJJeLrFCRRwPy/3LgSpb4xFEI+eBagO2t7PIkcQ9FOc3WIwwdjcE6CISpkSV3Spta2RICNGn8w==, tarball: file:packages/api/vendor/hypercerts-org-lexicon-1.7.0.tgz} + version: 1.7.0 + peerDependencies: + '@atproto/lex': ^0.4.2 + peerDependenciesMeta: + '@atproto/lex': + optional: true + '@hypercerts-org/ui-react@0.2.0': resolution: {integrity: sha512-3/8PJluH07euvnAliQaIYGsVrrpTApeo/NgwoHMQpRTf8PXOagoEhnv/NffSgJNfTKao5ShKLCk5F5I6gpKLLw==} engines: {node: '>=20.12.0'} @@ -452,6 +634,14 @@ packages: '@marijn/find-cluster-break@1.0.4': resolution: {integrity: sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==} + '@noble/curves@1.9.7': + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} @@ -459,9 +649,15 @@ packages: '@oxc-project/types@0.151.0': resolution: {integrity: sha512-J1yXrIlNDZVzE3ada310xeAw7nH8yCAyLPuUIsjKatFPmfn5bS1oW+cM+QsGOtVWd5nhSpbwZWx/rue+r5Z+PA==} + '@oxc-project/types@0.156.0': + resolution: {integrity: sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw==} + '@phosphor-icons/core@2.1.1': resolution: {integrity: sha512-v4ARvrip4qBCImOE5rmPUylOEK4iiED9ZyKjcvzuezqMaiRASCHKcRIuvvxL/twvLpkfnEODCOJp5dM4eZilxQ==} + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + '@pnpm/deps.graph-sequencer@1100.0.1': resolution: {integrity: sha512-pOr5+q1fLYKwFN3LAJuGZEnfXDcQ73zqgDHMtGy+K+uIoUqyY+6MeDCWFwfu+4EFuq76I5EPFofoNAI+Bmmq4A==} engines: {node: '>=22.13'} @@ -479,90 +675,180 @@ packages: cpu: [arm] os: [android] + '@rolldown/binding-android-arm-eabi@1.2.16': + resolution: {integrity: sha512-ia3DwAs0OsMGS7+IConptSiyk9pEXkOx/AbJ2n/lAGxH3QkWQus1t8d7gnAT38FCU2sQu8lUbeR6AiZFv4JxaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + '@rolldown/binding-android-arm64@1.2.11': resolution: {integrity: sha512-z6cTycz+iJ4PVkuL4HHW4DfTfoeU/2nqYYuSOrTmH7yHK5Y0LCOnA03V4ZNxavyVaU1oOqUgIg2klN/s+USGOA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] + '@rolldown/binding-android-arm64@1.2.16': + resolution: {integrity: sha512-kx5wBiMB6E7TEvpl2B9gjLU004BkvEm2Dr941BFjx/SontPwSzNuQUIoVKxHHoSjpFIfHMmcguyLOtyn0hObRg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@rolldown/binding-darwin-arm64@1.2.11': resolution: {integrity: sha512-jShvqNtP6vDC6/A5JOAzbVV+DkgHqhl/ScVCJEbt+TUY6QYz7YnXcrg3sLtFBniro0f/Ld50ZwCWA6f7KYD1nQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-arm64@1.2.16': + resolution: {integrity: sha512-qslZrXnKJU4cUpjoAmtAo/KQM9e2IRMlmpig6Zpwj+8KWxW8v+nkAf9216Bsek9lOC1jvg2yCjygCFo2f83msQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.2.11': resolution: {integrity: sha512-f2i2xiNWq1Z1l2++q2fuhZRdLAT3aqxD6vRNm1RAxpUoBcdqNB3C0s1Bt+K+PbEx2F5F4gQp6hqKkphCY/xF9w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@rolldown/binding-darwin-x64@1.2.16': + resolution: {integrity: sha512-FdF+y48ND13eAyM2mQn+85kvAqNlvRWROy2rhgA463X/0Gv4vGtazZtfaF1mRBLscYvtOlh4QnLjOWiFzX69OQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@rolldown/binding-freebsd-x64@1.2.11': resolution: {integrity: sha512-4Ir5FSOKIAMr4r0kExpt1s3bMgzJU3rA45AYOHtQpls0oNeqcYBKrWMlckrYH4KCfGLfkfn1tN1dmZPMVsdXow==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@rolldown/binding-freebsd-x64@1.2.16': + resolution: {integrity: sha512-ddjqFM5e95AgLbUPtKIS7V1KTVlA0RUgCVr5mn+/IEhsdy3pr+Vuj/HZ7nlMN2FyxIwUktOH1LEPIQXO1v9y1Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.2.11': resolution: {integrity: sha512-/gnRDM+39BROzAN/k1OZjDPnDMcZxB/0EUxKjONO5yVkNEvlsoMDrxGNKgZi/ttFriS2gwlDNzB65pvNbFOXIQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.2.16': + resolution: {integrity: sha512-tHdKWbFkFBI687iim3LIyIvyL7j66VvQYkDPss5Stn/qyE2tWkR1YD0dXmXPFKKqT/o5ZEJVsaRsWS2meQwGOA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.2.11': resolution: {integrity: sha512-PFaK8HwvAHbaKbBcDNQihjMKYvFnA5hiENx/l5tphTDz1E0WFp32l0A7aq7lyUwGsRw/xSrNIy/gIK4thrSCrw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.2.16': + resolution: {integrity: sha512-FJiLGAblPBMlBEdbOqw6kW6QcXDWAf/oJu7gYs9ZJZwmg+K+/zjFLxPTIY9izJUzxzc24FHvmseyA0IvJSl17w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + '@rolldown/binding-linux-arm64-musl@1.2.11': resolution: {integrity: sha512-AskzJUIKRLPxkruR1wLKewGbOw+EYfU/9lOrBFj4AFrEA8hPpKFnODWNu2WLaNs0QNkEb9QIJufmVZZIL/bJlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + '@rolldown/binding-linux-arm64-musl@1.2.16': + resolution: {integrity: sha512-hrJpblMsrQ58U9veWpbXzkhV5zStunds6HWLprqq1qauvgBr1E6P+24kLj6lSLI9vjRn/RYpjprhkHQPKGWpNg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + '@rolldown/binding-linux-ppc64-gnu@1.2.11': resolution: {integrity: sha512-qlUGAheh2yh8afH7QBgx0PrRHN85hKnNd78x8MeMhXivuevgd8vgf6/CstOzmNKY/lLTHvNTrPy98cLnAugzJw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + '@rolldown/binding-linux-ppc64-gnu@1.2.16': + resolution: {integrity: sha512-qJd/dC6j6CwLG9/s/RP2nb1RZ0GIgj7Ioj7x/SYa3RzjVrlzrmH0fhIOpfvqQDeIsdP0loi+kHaMhJzY1PBIaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + '@rolldown/binding-linux-s390x-gnu@1.2.11': resolution: {integrity: sha512-secpEad+0vCbSfn8upFySkDskv+bGPk3THSDS9Y89yc4rb4kzqHp8Dmyd9BkQW4SnhNXBZCl/6CrO//hZahNJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + '@rolldown/binding-linux-s390x-gnu@1.2.16': + resolution: {integrity: sha512-Vx7Xg5uUJuNcujJjI70OICaH0EYj80BtOLZTSN7uOYg8QOLlyKnaG0IW7Fn/J0IpJsaKzmDKMhOQv1JBM9m9vg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + '@rolldown/binding-linux-x64-gnu@1.2.11': resolution: {integrity: sha512-mOVBT3dPpkWm8XBWPmU4bf+U6dYDLeMo/9ojUmis4N0L5uu10qra5vOyngZ7/PSdoE4G9KvRt4bloRxNjLas7A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + '@rolldown/binding-linux-x64-gnu@1.2.16': + resolution: {integrity: sha512-TNKhgE3uJTsTzatUSSYt0Kgo+Oa2uSlSjz4r1aEIea7HX6ULBym4fAlYUhG1i6pjNf2njfCUAfKwr6C3E9Xg1w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + '@rolldown/binding-linux-x64-musl@1.2.11': resolution: {integrity: sha512-Is78i9A8Ui4SqcxUwFJ9uMmjDn58IbVTjFWYdQestFEgeuEmHMLGNriXnVJKkwG2YiZjw8cP0zCTyDMdDGtOOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + '@rolldown/binding-linux-x64-musl@1.2.16': + resolution: {integrity: sha512-7chXdpjXZ8qG0+mIxECN3cT9kvhZ3/oZhMX6Pp876P7CDrIy8nJswva6Mq357JR7eYXfuskwZxMeV1SzoZdHrA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + '@rolldown/binding-openharmony-arm64@1.2.11': resolution: {integrity: sha512-dUCXneZ87INUMyQ0D+C0HrEBNUPNXHaPmU5GTjyKTJEiussw9Kaj5Ln8UztPe4epV/ffvgNBEadksdYhmW6xJA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.2.16': + resolution: {integrity: sha512-Kwjt+7uNTJK5/MDkGWGVO2KQPnj8yAV75dMpfwyHZrJSXWHrniOB0aUEWlVYf3H1hOqFLIStLdM5QXq6bnKmOQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-win32-arm64-msvc@1.2.11': resolution: {integrity: sha512-jByxb6qfd+bH1xUd0qnfFnb17i9sWBPY2tOavJ0l3tdr3OTu+Kvtm8cd/JV5nFt657b1VqGltxg9olOEfofXWw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.2.16': + resolution: {integrity: sha512-/LH6WfjDRXXJz/p5xl4TmU+jpcnwcxbKEQBW/GZE0JHfN0lGIyTtsUEGaQ/q/GikkGJ2yLKe6pwm7AnEWO8pdw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.2.11': resolution: {integrity: sha512-/PzKqzAJ03i19oy2ItPvyvaVjOjBCNnfaJs8yvUdGBKmiESgnrJSQ2awd81QzFbbnAmu7YO9ZnJrDCb9VSJPRA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.2.16': + resolution: {integrity: sha512-1lv1KvX0Z871zfk7vw+dnXMMnHNyDwMzWG8Kv3HxDXMOhzCX4SHc7HK319fInP0i+0p9D8brkfzL7pJOaGl+tw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} @@ -689,6 +975,9 @@ packages: peerDependencies: vue: ^2.7.0 || ^3.0.0 + '@ts-morph/common@0.28.1': + resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} + '@types/debug@4.1.13': resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} @@ -713,6 +1002,9 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@24.19.2': + resolution: {integrity: sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==} + '@types/node@24.3.0': resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} @@ -991,10 +1283,22 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ansi-regex@6.5.0: + resolution: {integrity: sha512-zhvbbbdt1kbw7EJ9OQoxmQcuaNR9P5kTj7e/YdmOSU10aHWbycofJxA6jKfoEy3vlLdctOF9ZHaxLtmSm998wQ==} + engines: {node: '>=12'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + aria-hidden@1.2.6: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -1013,6 +1317,10 @@ packages: cacheable@2.5.0: resolution: {integrity: sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==} + cborg@4.5.8: + resolution: {integrity: sha512-6/viltD51JklRhq4L7jC3zgy6gryuG5xfZ3kzpE+PravtyeQLeQmCYLREhQH7pWENg5pY4Yu/XCd6a7dKScVlw==} + hasBin: true + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1029,13 +1337,23 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + core-js@3.51.0: + resolution: {integrity: sha512-7bDKx/5jm5MxzsXxc93g6Z2+4ZsuT/MddrfRmTDJNAkWsYWHU8EVNEsBiIEWnMAMCHMmRfUEjkuo3jeNBOIHRw==} + crelt@1.0.7: resolution: {integrity: sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==} @@ -1086,6 +1404,9 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -1094,6 +1415,10 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -1206,6 +1531,14 @@ packages: resolution: {integrity: sha512-sQtrEfA+ez/3G0cCZecF70oqpCRttCexYUG4mUrtWL49ULUzUyxokt5kyqwtKzj1270RaKih+hcP3qLcumccow==} engines: {node: '>=10'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.7.0: + resolution: {integrity: sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==} + engines: {node: '>=18'} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -1314,6 +1647,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + ipaddr.js@2.5.0: + resolution: {integrity: sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==} + engines: {node: '>= 10'} + is-absolute-url@4.0.1: resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1444,6 +1781,9 @@ packages: lowlight@3.3.0: resolution: {integrity: sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lucide-react@0.468.0: resolution: {integrity: sha512-6koYRhnM2N0GGZIdXzSeiNwguv1gt/FAjZOiPl76roBi3xKEXa4WmfpxgQwTTL4KipXjefrnf3oV4IsYhi4JFA==} peerDependencies: @@ -1599,6 +1939,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.20: + resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@5.1.16: resolution: {integrity: sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==} engines: {node: ^18 || >=20} @@ -1610,6 +1955,10 @@ packages: neverpanic@0.0.8: resolution: {integrity: sha512-vVdkelrLxaow/fdWDumzNBO+jwm6X8bxeLJc34THtpj70u0C5QBkcV6CRCu2X726km7XD45N0A3QtYCla4RvKw==} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -1632,6 +1981,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1650,18 +2002,40 @@ packages: resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} engines: {node: '>=12'} + pino-abstract-transport@3.0.0: + resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@10.4.0: + resolution: {integrity: sha512-bk1ZMTwG/Vymx+zPoa28MhNzucFvXJWp3csrSuxuHPSMeUettaCoQ5Jvg07mtC4JGNpcfTwz41oVCnNgBK9+vA==} + hasBin: true + postcss@8.5.28: resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.32: + resolution: {integrity: sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier@3.9.10: + resolution: {integrity: sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==} + engines: {node: '>=14'} + hasBin: true + pretty-ms@9.3.1: resolution: {integrity: sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA==} engines: {node: '>=18'} + process-warning@5.1.1: + resolution: {integrity: sha512-oCkNVj4OKnKEcocVBcDfiIugN1/cE6rgfT3nCtzeqZPA8+rIxMaQ0xXzIkGP8Gj2qUaP1UR7uhJ1VD8lUCpzCg==} + property-information@7.2.0: resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} @@ -1673,6 +2047,9 @@ packages: resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==} engines: {node: '>=20'} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + radix-vue@1.9.17: resolution: {integrity: sha512-mVCu7I2vXt1L2IUYHTt0sZMz7s1K2ZtqKeTIxG3yC5mMFfLBG4FtE1FDeRMpDd+Hhg/ybi9+iXmAP1ISREndoQ==} peerDependencies: @@ -1687,6 +2064,9 @@ packages: resolution: {integrity: sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==} engines: {node: '>=0.10.0'} + real-require@1.0.0: + resolution: {integrity: sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==} + rehype-external-links@3.0.0: resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} @@ -1728,6 +2108,15 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rolldown@1.2.16: + resolution: {integrity: sha512-bWvlMpFKiTfDKfnK7FC2MPgPeWCf/Kpwsq49ApdW+FQaBZb6O6dZ4MAPbPUjp7hYQrw/RobqCzn64BRrQecGHw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + scheduler@0.28.0: resolution: {integrity: sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==} @@ -1754,13 +2143,24 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map-js@1.2.2: + resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} + engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + string-byte-length@3.0.1: resolution: {integrity: sha512-yJ8vP0HMwZ54CcA8S8mKoXbkezpZHANFtmafFo8lGxZThCQcAwRHjdFabuSLgOzxj9OFJcmssmiAvmcOK4O2Hw==} engines: {node: '>=18.18.0'} @@ -1769,9 +2169,21 @@ packages: resolution: {integrity: sha512-GWv2K4lYyd2+AhmKH3BV+OVx62xDX+99rSLfKpaqFiQU7uOMaUY1tDjdrRD4gsrCr9lTyjMgjna7tZcCOw+Smg==} engines: {node: '>=18.18.0'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string-width@8.3.0: + resolution: {integrity: sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==} + engines: {node: '>=20'} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + style-mod@4.1.4: resolution: {integrity: sha512-XXWIQt633/EpAFx8aZDOTjBzrCaGmhvEQlQo6MVPfa2OzO2cWo+4hV9h+6UkHYlXGfy+ODXKUdP7Pthmcu5ATw==} @@ -1797,6 +2209,10 @@ packages: tailwindcss@4.3.3: resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} + thread-stream@4.2.0: + resolution: {integrity: sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==} + engines: {node: '>=20'} + tinyexec@1.3.1: resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} engines: {node: '>=18'} @@ -1818,6 +2234,9 @@ packages: resolution: {integrity: sha512-QVsbr1WhGLq2F0oDyYbqtOXcf3gcnL8C9H5EX8bBwAr8ZWvWGJzukpPrDrWgJMrNtgDbo74BIjI4kJu3q2xQWw==} engines: {node: '>=18.18.0'} + ts-morph@27.0.2: + resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -1842,13 +2261,31 @@ packages: uint8arrays@3.0.0: resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} + uint8arrays@5.1.1: + resolution: {integrity: sha512-9muQwa4wZG4dKi9gMAIBtnk2Pw87SRpvWTH6lOGm19V2Uqxr4uomUf2PGqPnWc+qs06sN8owUU4jfcoWOcfwVQ==} + undici-types@7.10.0: resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + + undici@6.29.1: + resolution: {integrity: sha512-EvRlUt/QqAEvXdQeRMYUfwOQsfzpDztykrG2owGEE/rBOBoYv9uF39ZzsNDh4lTFHhTr2XOZjKkYgueD12ZmGA==} + engines: {node: '>=18.17'} + undici@7.29.0: resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} engines: {node: '>=20.18.1'} + undici@7.30.1: + resolution: {integrity: sha512-03KrMbjIFDWQR5RNPrSw3bd1r12JpyFQl9/yxjUbJtqkjmllqC5lFjZh6ujeuJCKr8EOQvRW872Oy/az+nLYxg==} + engines: {node: '>=20.18.1'} + + undici@8.12.3: + resolution: {integrity: sha512-+fdndUTwBP86cVjihTp21hZHo7d6oj1c/47XPA3lL8mM0XHs+C4EkcjmgRsFnFk2f/UONGDy9ItBItmXsLOQHw==} + engines: {node: '>=22.19.0'} + unhead@2.1.17: resolution: {integrity: sha512-HLMKXOszRhAPBrr6VlqCeVeJq2kbC4kXwzGLEZvvojPLWNYTJw22xG7Bfwhsvs31+IBet3Wl8ADg9dwYdyphfQ==} @@ -1879,6 +2316,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -1931,6 +2371,49 @@ packages: yaml: optional: true + vite@8.3.5: + resolution: {integrity: sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.7.1 || ^0.8.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vue-component-type-helpers@3.3.11: resolution: {integrity: sha512-LwcxzeliO9fkQcpJG0PoX8X5kmAhKmH9wkpDLxNabwzkQ9Zeib2YVHwFV4pcWmMLfXVfjr/dSV+DaJ3cIPgSNA==} @@ -1971,11 +2454,27 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yaml@2.9.1: resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} engines: {node: '>= 14.6'} hasBin: true + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yargs@18.2.0: + resolution: {integrity: sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -2036,6 +2535,50 @@ snapshots: '@atcute/uint8array@1.2.0': {} + '@atproto-labs/did-resolver@0.3.11': + dependencies: + '@atproto-labs/fetch': 0.4.0 + '@atproto-labs/pipe': 0.2.4 + '@atproto-labs/simple-store': 0.5.1 + '@atproto-labs/simple-store-memory': 0.2.6 + '@atproto/did': 0.5.6 + zod: 3.25.76 + + '@atproto-labs/fetch-node@0.4.3': + dependencies: + '@atproto-labs/fetch': 0.4.0 + '@atproto-labs/pipe': 0.2.4 + ipaddr.js: 2.5.0 + undici_v6: undici@6.29.1 + undici_v7: undici@7.30.1 + undici_v8: undici@8.12.3 + + '@atproto-labs/fetch@0.4.0': + dependencies: + '@atproto-labs/pipe': 0.2.4 + + '@atproto-labs/handle-resolver-node@0.2.15': + dependencies: + '@atproto-labs/fetch-node': 0.4.3 + '@atproto-labs/handle-resolver': 0.4.10 + '@atproto/did': 0.5.6 + + '@atproto-labs/handle-resolver@0.4.10': + dependencies: + '@atproto-labs/simple-store': 0.5.1 + '@atproto-labs/simple-store-memory': 0.2.6 + '@atproto/did': 0.5.6 + zod: 3.25.76 + + '@atproto-labs/pipe@0.2.4': {} + + '@atproto-labs/simple-store-memory@0.2.6': + dependencies: + '@atproto-labs/simple-store': 0.5.1 + lru-cache: 10.4.3 + + '@atproto-labs/simple-store@0.5.1': {} + '@atproto/common-web@0.4.21': dependencies: '@atproto/lex-data': 0.0.15 @@ -2043,13 +2586,53 @@ snapshots: '@atproto/syntax': 0.5.4 zod: 3.25.76 - '@atproto/common-web@0.5.12': + '@atproto/common-web@0.5.15': dependencies: - '@atproto/lex-data': 0.1.7 - '@atproto/lex-json': 0.1.6 - '@atproto/syntax': 0.7.6 + '@atproto/lex-data': 0.1.8 + '@atproto/lex-json': 0.1.7 + '@atproto/syntax': 0.7.7 zod: 3.25.76 + '@atproto/common@0.8.7': + dependencies: + '@atproto/common-web': 0.5.15 + '@atproto/lex-cbor': 0.1.7 + '@atproto/lex-data': 0.1.8 + multiformats: 13.4.2 + pino: 10.4.0 + + '@atproto/crypto@0.5.7': + dependencies: + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + uint8arrays: 5.1.1 + + '@atproto/did@0.5.6': + dependencies: + zod: 3.25.76 + + '@atproto/lex-builder@0.1.18': + dependencies: + '@atproto/lex-document': 0.1.14 + '@atproto/lex-schema': 0.2.9 + prettier: 3.9.10 + ts-morph: 27.0.2 + tslib: 2.8.1 + yargs: 18.2.0 + + '@atproto/lex-cbor@0.1.7': + dependencies: + '@atproto/lex-data': 0.1.8 + cborg: 4.5.8 + tslib: 2.8.1 + + '@atproto/lex-client@0.4.0': + dependencies: + '@atproto/lex-data': 0.1.8 + '@atproto/lex-rpc': 0.0.1 + '@atproto/lex-schema': 0.2.9 + tslib: 2.8.1 + '@atproto/lex-data@0.0.15': dependencies: multiformats: 9.9.0 @@ -2057,21 +2640,83 @@ snapshots: uint8arrays: 3.0.0 unicode-segmenter: 0.14.5 - '@atproto/lex-data@0.1.7': + '@atproto/lex-data@0.1.8': dependencies: multiformats: 13.4.2 tslib: 2.8.1 unicode-segmenter: 0.14.5 + '@atproto/lex-document@0.1.14': + dependencies: + '@atproto/lex-schema': 0.2.9 + core-js: 3.51.0 + tslib: 2.8.1 + + '@atproto/lex-installer@0.2.4': + dependencies: + '@atproto-labs/did-resolver': 0.3.11 + '@atproto-labs/fetch-node': 0.4.3 + '@atproto-labs/handle-resolver': 0.4.10 + '@atproto-labs/handle-resolver-node': 0.2.15 + '@atproto/did': 0.5.6 + '@atproto/lex-builder': 0.1.18 + '@atproto/lex-cbor': 0.1.7 + '@atproto/lex-data': 0.1.8 + '@atproto/lex-document': 0.1.14 + '@atproto/lex-resolver': 0.4.1 + '@atproto/lex-rpc': 0.0.1 + '@atproto/lex-schema': 0.2.9 + '@atproto/syntax': 0.7.7 + prettier: 3.9.10 + tslib: 2.8.1 + yargs: 18.2.0 + '@atproto/lex-json@0.0.16': dependencies: '@atproto/lex-data': 0.0.15 tslib: 2.8.1 - '@atproto/lex-json@0.1.6': + '@atproto/lex-json@0.1.7': + dependencies: + '@atproto/lex-data': 0.1.8 + tslib: 2.8.1 + + '@atproto/lex-resolver@0.4.1': + dependencies: + '@atproto-labs/did-resolver': 0.3.11 + '@atproto/crypto': 0.5.7 + '@atproto/lex-data': 0.1.8 + '@atproto/lex-document': 0.1.14 + '@atproto/lex-rpc': 0.0.1 + '@atproto/lex-schema': 0.2.9 + '@atproto/repo': 0.11.2 + '@atproto/syntax': 0.7.7 + tslib: 2.8.1 + + '@atproto/lex-rpc@0.0.1': + dependencies: + '@atproto/lex-data': 0.1.8 + '@atproto/lex-json': 0.1.7 + '@atproto/lex-schema': 0.2.9 + tslib: 2.8.1 + + '@atproto/lex-schema@0.2.9': + dependencies: + '@atproto/lex-data': 0.1.8 + '@atproto/syntax': 0.7.7 + '@standard-schema/spec': 1.1.0 + tslib: 2.8.1 + + '@atproto/lex@0.4.2': dependencies: - '@atproto/lex-data': 0.1.7 + '@atproto/lex-builder': 0.1.18 + '@atproto/lex-client': 0.4.0 + '@atproto/lex-data': 0.1.8 + '@atproto/lex-installer': 0.2.4 + '@atproto/lex-json': 0.1.7 + '@atproto/lex-schema': 0.2.9 tslib: 2.8.1 + yargs: 18.2.0 '@atproto/lexicon@0.6.2': dependencies: @@ -2083,16 +2728,27 @@ snapshots: '@atproto/lexicon@0.7.14': dependencies: - '@atproto/common-web': 0.5.12 - '@atproto/syntax': 0.7.6 + '@atproto/common-web': 0.5.15 + '@atproto/syntax': 0.7.7 multiformats: 13.4.2 zod: 3.25.76 + '@atproto/repo@0.11.2': + dependencies: + '@atproto/common': 0.8.7 + '@atproto/common-web': 0.5.15 + '@atproto/crypto': 0.5.7 + '@atproto/lex-cbor': 0.1.7 + '@atproto/lex-data': 0.1.8 + '@atproto/syntax': 0.7.7 + varint: 6.0.0 + zod: 3.25.76 + '@atproto/syntax@0.5.4': dependencies: tslib: 2.8.1 - '@atproto/syntax@0.7.6': + '@atproto/syntax@0.7.7': dependencies: iso-datestring-validator: 2.2.2 tslib: 2.8.1 @@ -2115,6 +2771,49 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 + '@biomejs/biome@2.6.3': + optionalDependencies: + '@biomejs/cli-android-arm64': 2.6.3 + '@biomejs/cli-android-x64': 2.6.3 + '@biomejs/cli-darwin-arm64': 2.6.3 + '@biomejs/cli-darwin-x64': 2.6.3 + '@biomejs/cli-linux-arm64': 2.6.3 + '@biomejs/cli-linux-arm64-musl': 2.6.3 + '@biomejs/cli-linux-x64': 2.6.3 + '@biomejs/cli-linux-x64-musl': 2.6.3 + '@biomejs/cli-win32-arm64': 2.6.3 + '@biomejs/cli-win32-x64': 2.6.3 + + '@biomejs/cli-android-arm64@2.6.3': + optional: true + + '@biomejs/cli-android-x64@2.6.3': + optional: true + + '@biomejs/cli-darwin-arm64@2.6.3': + optional: true + + '@biomejs/cli-darwin-x64@2.6.3': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.6.3': + optional: true + + '@biomejs/cli-linux-arm64@2.6.3': + optional: true + + '@biomejs/cli-linux-x64-musl@2.6.3': + optional: true + + '@biomejs/cli-linux-x64@2.6.3': + optional: true + + '@biomejs/cli-win32-arm64@2.6.3': + optional: true + + '@biomejs/cli-win32-x64@2.6.3': + optional: true + '@cacheable/memory@2.2.0': dependencies: '@cacheable/utils': 2.5.0 @@ -2442,6 +3141,13 @@ snapshots: '@atproto/xrpc': 0.8.13 multiformats: 13.4.2 + '@hypercerts-org/lexicon@file:packages/api/vendor/hypercerts-org-lexicon-1.7.0.tgz(@atproto/lex@0.4.2)': + dependencies: + '@atproto/lexicon': 0.6.2 + multiformats: 13.4.2 + optionalDependencies: + '@atproto/lex': 0.4.2 + '@hypercerts-org/ui-react@0.2.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: lucide-react: 0.468.0(react@19.3.0) @@ -2529,12 +3235,22 @@ snapshots: '@marijn/find-cluster-break@1.0.4': {} + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.8.0': {} + '@opentelemetry/api@1.9.0': {} '@oxc-project/types@0.151.0': {} + '@oxc-project/types@0.156.0': {} + '@phosphor-icons/core@2.1.1': {} + '@pinojs/redact@0.4.0': {} + '@pnpm/deps.graph-sequencer@1100.0.1': {} '@replit/codemirror-css-color-picker@6.3.0(@codemirror/language@6.12.4)(@codemirror/state@6.7.6)(@codemirror/view@6.43.13)': @@ -2546,48 +3262,93 @@ snapshots: '@rolldown/binding-android-arm-eabi@1.2.11': optional: true + '@rolldown/binding-android-arm-eabi@1.2.16': + optional: true + '@rolldown/binding-android-arm64@1.2.11': optional: true + '@rolldown/binding-android-arm64@1.2.16': + optional: true + '@rolldown/binding-darwin-arm64@1.2.11': optional: true + '@rolldown/binding-darwin-arm64@1.2.16': + optional: true + '@rolldown/binding-darwin-x64@1.2.11': optional: true + '@rolldown/binding-darwin-x64@1.2.16': + optional: true + '@rolldown/binding-freebsd-x64@1.2.11': optional: true + '@rolldown/binding-freebsd-x64@1.2.16': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.2.11': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.2.16': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.2.11': optional: true + '@rolldown/binding-linux-arm64-gnu@1.2.16': + optional: true + '@rolldown/binding-linux-arm64-musl@1.2.11': optional: true + '@rolldown/binding-linux-arm64-musl@1.2.16': + optional: true + '@rolldown/binding-linux-ppc64-gnu@1.2.11': optional: true + '@rolldown/binding-linux-ppc64-gnu@1.2.16': + optional: true + '@rolldown/binding-linux-s390x-gnu@1.2.11': optional: true + '@rolldown/binding-linux-s390x-gnu@1.2.16': + optional: true + '@rolldown/binding-linux-x64-gnu@1.2.11': optional: true + '@rolldown/binding-linux-x64-gnu@1.2.16': + optional: true + '@rolldown/binding-linux-x64-musl@1.2.11': optional: true + '@rolldown/binding-linux-x64-musl@1.2.16': + optional: true + '@rolldown/binding-openharmony-arm64@1.2.11': optional: true + '@rolldown/binding-openharmony-arm64@1.2.16': + optional: true + '@rolldown/binding-win32-arm64-msvc@1.2.11': optional: true + '@rolldown/binding-win32-arm64-msvc@1.2.16': + optional: true + '@rolldown/binding-win32-x64-msvc@1.2.11': optional: true + '@rolldown/binding-win32-x64-msvc@1.2.16': + optional: true + '@rolldown/pluginutils@1.0.1': {} '@scalar/agent-chat@0.12.38(tailwindcss@4.3.3)(typescript@7.0.2)(zod@4.6.5)': @@ -2817,7 +3578,7 @@ snapshots: '@scalar/icons@0.7.6(typescript@7.0.2)': dependencies: '@phosphor-icons/core': 2.1.1 - '@types/node': 24.3.0 + '@types/node': 24.19.2 chalk: 5.6.2 vue: 3.5.43(typescript@7.0.2) transitivePeerDependencies: @@ -2986,6 +3747,12 @@ snapshots: '@tanstack/virtual-core': 3.17.11 vue: 3.5.43(typescript@7.0.2) + '@ts-morph/common@0.28.1': + dependencies: + minimatch: 10.2.6 + path-browserify: 1.0.1 + tinyglobby: 0.2.17 + '@types/debug@4.1.13': dependencies: '@types/ms': 2.1.0 @@ -3008,6 +3775,10 @@ snapshots: '@types/ms@2.1.0': {} + '@types/node@24.19.2': + dependencies: + undici-types: 7.24.6 + '@types/node@24.3.0': dependencies: undici-types: 7.10.0 @@ -3096,10 +3867,10 @@ snapshots: '@vercel/oidc@3.1.0': {} - '@vitejs/plugin-react@6.1.1(vite@8.3.1(@types/node@24.3.0)(yaml@2.9.1))': + '@vitejs/plugin-react@6.1.1(vite@8.3.1(@types/node@24.19.2)(yaml@2.9.1))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.3.1(@types/node@24.3.0)(yaml@2.9.1) + vite: 8.3.1(@types/node@24.19.2)(yaml@2.9.1) '@vue/compiler-core@3.5.43': dependencies: @@ -3217,10 +3988,16 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ansi-regex@6.5.0: {} + + ansi-styles@6.2.3: {} + aria-hidden@1.2.6: dependencies: tslib: 2.8.1 + atomic-sleep@1.0.0: {} + bail@2.0.2: {} balanced-match@4.0.4: {} @@ -3239,6 +4016,8 @@ snapshots: keyv: 5.6.0 qified: 0.10.1 + cborg@4.5.8: {} + ccount@2.0.1: {} chalk@5.6.2: {} @@ -3249,10 +4028,20 @@ snapshots: character-entities@2.0.2: {} + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + clsx@2.1.1: {} + code-block-writer@13.0.3: {} + comma-separated-tokens@2.0.3: {} + core-js@3.51.0: {} + crelt@1.0.7: {} cross-spawn@7.0.6: @@ -3291,10 +4080,14 @@ snapshots: dependencies: dequal: 2.0.3 + emoji-regex@10.6.0: {} + entities@6.0.1: {} entities@7.0.1: {} + escalade@3.2.0: {} + escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} @@ -3415,6 +4208,10 @@ snapshots: fuse.js@7.5.0: {} + get-caller-file@2.0.5: {} + + get-east-asian-width@1.7.0: {} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 @@ -3598,6 +4395,8 @@ snapshots: imurmurhash@0.1.4: {} + ipaddr.js@2.5.0: {} + is-absolute-url@4.0.1: {} is-extglob@2.1.1: {} @@ -3699,6 +4498,8 @@ snapshots: devlop: 1.1.0 highlight.js: 11.11.2 + lru-cache@10.4.3: {} + lucide-react@0.468.0(react@19.3.0): dependencies: react: 19.3.0 @@ -4036,12 +4837,16 @@ snapshots: nanoid@3.3.19: {} + nanoid@3.3.20: {} + nanoid@5.1.16: {} natural-compare@1.4.0: {} neverpanic@0.0.8: {} + on-exit-leak-free@2.1.2: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -4067,6 +4872,8 @@ snapshots: dependencies: entities: 6.0.1 + path-browserify@1.0.1: {} + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -4077,18 +4884,48 @@ snapshots: picomatch@4.0.7: {} + pino-abstract-transport@3.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.1.0: {} + + pino@10.4.0: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.1.1 + quick-format-unescaped: 4.0.4 + real-require: 1.0.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.1 + thread-stream: 4.2.0 + postcss@8.5.28: dependencies: nanoid: 3.3.19 picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.32: + dependencies: + nanoid: 3.3.20 + picocolors: 1.1.1 + source-map-js: 1.2.2 + prelude-ls@1.2.1: {} + prettier@3.9.10: {} + pretty-ms@9.3.1: dependencies: parse-ms: 4.0.0 + process-warning@5.1.1: {} + property-information@7.2.0: {} punycode@2.3.1: {} @@ -4097,6 +4934,8 @@ snapshots: dependencies: hookified: 2.2.0 + quick-format-unescaped@4.0.4: {} + radix-vue@1.9.17(vue@3.5.43(typescript@7.0.2)): dependencies: '@floating-ui/dom': 1.8.0 @@ -4121,6 +4960,8 @@ snapshots: react@19.3.0: {} + real-require@1.0.0: {} + rehype-external-links@3.0.0: dependencies: '@types/hast': 3.0.5 @@ -4226,6 +5067,29 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.2.11 '@rolldown/binding-win32-x64-msvc': 1.2.11 + rolldown@1.2.16: + dependencies: + '@oxc-project/types': 0.156.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm-eabi': 1.2.16 + '@rolldown/binding-android-arm64': 1.2.16 + '@rolldown/binding-darwin-arm64': 1.2.16 + '@rolldown/binding-darwin-x64': 1.2.16 + '@rolldown/binding-freebsd-x64': 1.2.16 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.16 + '@rolldown/binding-linux-arm64-gnu': 1.2.16 + '@rolldown/binding-linux-arm64-musl': 1.2.16 + '@rolldown/binding-linux-ppc64-gnu': 1.2.16 + '@rolldown/binding-linux-s390x-gnu': 1.2.16 + '@rolldown/binding-linux-x64-gnu': 1.2.16 + '@rolldown/binding-linux-x64-musl': 1.2.16 + '@rolldown/binding-openharmony-arm64': 1.2.16 + '@rolldown/binding-win32-arm64-msvc': 1.2.16 + '@rolldown/binding-win32-x64-msvc': 1.2.16 + + safe-stable-stringify@2.5.0: {} + scheduler@0.28.0: {} semver@7.8.5: {} @@ -4242,19 +5106,42 @@ snapshots: sisteransi@1.0.5: {} + sonic-boom@4.2.1: + dependencies: + atomic-sleep: 1.0.0 + source-map-js@1.2.1: {} + source-map-js@1.2.2: {} + space-separated-tokens@2.0.2: {} + split2@4.2.0: {} + string-byte-length@3.0.1: {} string-byte-slice@3.0.1: {} + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.7.0 + strip-ansi: 7.2.0 + + string-width@8.3.0: + dependencies: + get-east-asian-width: 1.7.0 + strip-ansi: 7.2.0 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.5.0 + style-mod@4.1.4: {} swrv@1.3.0(vue@3.5.43(typescript@7.0.2)): @@ -4269,6 +5156,10 @@ snapshots: tailwindcss@4.3.3: {} + thread-stream@4.2.0: + dependencies: + real-require: 1.0.0 + tinyexec@1.3.1: {} tinyglobby@0.2.17: @@ -4288,6 +5179,11 @@ snapshots: string-byte-length: 3.0.1 string-byte-slice: 3.0.1 + ts-morph@27.0.2: + dependencies: + '@ts-morph/common': 0.28.1 + code-block-writer: 13.0.3 + tslib@2.8.1: {} type-check@0.4.0: @@ -4327,10 +5223,22 @@ snapshots: dependencies: multiformats: 9.9.0 + uint8arrays@5.1.1: + dependencies: + multiformats: 13.4.2 + undici-types@7.10.0: {} + undici-types@7.24.6: {} + + undici@6.29.1: {} + undici@7.29.0: {} + undici@7.30.1: {} + + undici@8.12.3: {} + unhead@2.1.17: dependencies: hookable: 6.1.2 @@ -4379,6 +5287,8 @@ snapshots: dependencies: punycode: 2.3.1 + varint@6.0.0: {} + vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -4394,7 +5304,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.3.1(@types/node@24.3.0)(yaml@2.9.1): + vite@8.3.1(@types/node@24.19.2)(yaml@2.9.1): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 @@ -4402,7 +5312,19 @@ snapshots: rolldown: 1.2.11 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 24.19.2 + fsevents: 2.3.3 + yaml: 2.9.1 + + vite@8.3.5(@types/node@24.19.2)(yaml@2.9.1): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.32 + rolldown: 1.2.16 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 24.19.2 fsevents: 2.3.3 yaml: 2.9.1 @@ -4434,8 +5356,27 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + + y18n@5.0.8: {} + yaml@2.9.1: {} + yargs-parser@22.0.0: {} + + yargs@18.2.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 8.3.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yocto-queue@0.1.0: {} zod@3.25.76: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e631893..30310f2 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - - api + - happyview-modules + - packages/* - docs