Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EIN-4783: TypeSpec #3

Merged
merged 71 commits into from
Jan 13, 2025
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
bb83ec4
Add typespec
gne Oct 22, 2024
d8764ff
Add "email" to innsynskravDel
gne Oct 23, 2024
e8c7a98
Added innsynskravDel.email
gne Oct 23, 2024
e033861
Merge remote-tracking branch 'origin/main' into gne-typespec
gne Nov 15, 2024
ba97610
Typespec
gne Nov 18, 2024
60c0883
TypeSpec
gne Nov 28, 2024
ee54f22
Refactor TypeSpec for codegen
gne Dec 16, 2024
b577305
ExpandableObject -> ExpandableField
gne Dec 18, 2024
9a28a6e
Changed Klasse.parent
gne Dec 18, 2024
3c66ebd
Rename (arkiv, arkivdel, klassifikasjonssystem).parent
gne Dec 18, 2024
dcccbbb
Codegen preparations
gne Dec 19, 2024
e6515f6
Prepare TypeSpec
gne Jan 9, 2025
ff2f75e
Update README.md
gne Jan 9, 2025
8056df1
Update README.md
gne Jan 9, 2025
94884c8
Update README.md
gne Jan 9, 2025
3ed12ad
Merge origin/main
gne Jan 9, 2025
2ccb93b
Update README.md
gne Jan 9, 2025
f4ea126
Update build-openapi.yml
gne Jan 9, 2025
b083af7
Update build-openapi.yml
gne Jan 9, 2025
bdb7159
Update build-openapi.yml
gne Jan 9, 2025
2ef6608
Update build-openapi.yml
gne Jan 9, 2025
9676c4c
Update build-openapi.yml
gne Jan 9, 2025
cc9fb8e
Update build-openapi.yml
gne Jan 9, 2025
26cd33e
Update build-openapi.yml
gne Jan 9, 2025
8cd7155
Add authentication
gne Jan 9, 2025
76eaa38
Update README.md
gne Jan 9, 2025
ec823bb
Update build-openapi.yml
gne Jan 9, 2025
88ce1cd
Update build-openapi.yml
gne Jan 9, 2025
d6fb8c2
Update build-openapi.yml
gne Jan 9, 2025
237e27d
Update build-openapi.yml
gne Jan 9, 2025
5b838df
Update build-openapi.yml
gne Jan 9, 2025
3f7ec53
Autogenerate OpenAPI spec from TypeSpec
github-actions[bot] Jan 9, 2025
a6f6981
Update build-openapi.yml
gne Jan 10, 2025
a3e188d
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
748bf18
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
156ceb1
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
6d9b594
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
05918ef
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
8525776
Update build-openapi.yml
gne Jan 10, 2025
01d2b23
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
608dc84
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
e6a7074
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
3c2193e
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
108e35b
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
16e2961
Update build-openapi.yml
gne Jan 10, 2025
8addabd
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
8cd1f54
Update build-openapi.yml
gne Jan 10, 2025
35983b2
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
1b78870
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
0641e82
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
3d34f30
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
8fccdac
Update build-openapi.yml
gne Jan 10, 2025
87f9f8c
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
f782907
Update build-openapi.yml
gne Jan 10, 2025
e71c7b6
Update build-openapi.yml
gne Jan 10, 2025
b801c96
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
668ad3e
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
3db0c32
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
7bf2974
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
a95c263
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
d93c2b3
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
d81bd97
Update build-openapi.yml
gne Jan 10, 2025
a74fc65
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
26c9ce8
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
cf62691
Update build-openapi.yml
gne Jan 10, 2025
8881edd
Update build-openapi.yml
gne Jan 10, 2025
a3e40b7
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
6423299
Update build-openapi.yml
gne Jan 10, 2025
7632035
Autogenerate OpenAPI spec from TypeSpec
einnsyn-codegen[bot] Jan 10, 2025
4fa13bb
Add statistics endpoint
gne Jan 10, 2025
62e5619
Merge branch 'gne-typespec' of https://github.com/felleslosninger/ein…
gne Jan 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/build-openapi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Build OpenAPI and commit changes

on:
pull_request:
branches:
- main

jobs:
build-and-commit:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- run: bun install
- run: bun run build

- name: Configure Git
run: |
git config --global user.name "Codegen"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global commit.gpgSign true

- name: Commit and push changes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git add .
if git diff --cached --quiet; then
echo "No changes to commit."
else
git commit -S -m "Build OpenAPI from TypeSpec"
git push origin HEAD:${{ github.head_ref }}
fi
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
**/node_modules
**/tsp-output
112 changes: 110 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,110 @@
# ein-openapi
OpenAPI specification for eInnsyn
# <img src="https://einnsyn.no/8ebf89f8e40d3eb75183.svg" width="180px" alt="eInnsyn"/>

This repository contains the API specification for [eInnsyn](https://einnsyn.no)'s API. The API is written in [TypeSpec](https://typespec.io), with an auto-generated OpenAPI version in the [openapi](openapi)-folder.

The [typespec](typespec)-folder contains the following files:
- `einnsyn.arkiv.models.tsp`: Model definition for archive data, mostly Noark 5 with some extensions for meetings.
- `einnsyn.arkiv.operations.tsp`: Endpoints for archive models.
- `einnsyn.queryparameters.tsp`: Base models for query parameters.
- `einnsyn.responses.tsp`: Models for API responses.
- `einnsyn.web.models.tsp`: Models for entities that are mainly used for the eInnsyn website, not related to archive data.
- `einnsyn.web.operations.tsp`: Endpoints for web models.


## Authentication

The eInnsyn API uses API keys to authenticate requests. The keys are long-lived, and should be handled carefully. All API keys are prefixed with `secret_`.

To send an authenticated request, the API key should be sent in the `X-EIN-API-KEY` header:

```
curl -H "X-EIN-API-KEY: secret_..." https://api.einnsyn.no
```

## General endpoint structure

All entities has standard CRUD-endpoints:
- `POST /{entityName}`: Create object
- `GET /{entityName}`: Get a paginated list of objects
- `GET /{entityName}/{id}`: Get an object
- `PATCH /{entityName}/{id}`: Update an object
- `DELETE /{entityName}/{id}`: Delete an object

## IDs

All objects in eInnsyn will get an auto-generated `eInnsynId`. An eInnsynId is a Base32 encoded UUID, with a prefix to indicate the type of resource. In the API specification, all entities has an extension annotation describing it's ID prefix.

Example annotation for the Journalpost entity: `@extension("x-idPrefix", "jp")`.

Example journalpost ID: `jp_01jh532p3ve6haq7n53xgpqayh`

In addition, all Noark5 objects must have a globally unique systemId assigned by the publisher. This identifier can be used interchangeably with the eInnsynId in the API.

## Expanding responses

We use a concept called "expandable fields", inspired by Stripe's API ([Expanding Responses](https://docs.stripe.com/api/expanding_objects)). Throughout the API, all references to entity objects are either an ID, or the actual object. By default, all nested objects in a `GET` response are sent as an ID. For `POST` and `PATCH` requests, all new objects are returned. If you need to access to nested objects, you can use the `expand` query parameter:

### Default expansion:

```
curl -H "X-EIN-API-KEY: secret\_..." https://api.einnsyn.no/saksmappe/sm_01jh50h5brf7wrbwga8xd0rwdy
{
"entity": "Saksmappe",
"id": "sm_01jh532p0jfdh8j3evmpgk4atx",
...
"journalpost": [
"jp_01jh532p3ve6haq7n53xgpqayh"
]
}
```

### Expand `journalpost`:

```
curl ... https://api.einnsyn.no/saksmappe/sm_01jh50h5brf7wrbwga8xd0rwdy?expand=journalpost
{
"entity": "Saksmappe",
"id": "sm_01jh532p0jfdh8j3evmpgk4atx",
...
"journalpost": [{
"entity": "Journalpost",
"id": "jp_01jh532p3ve6haq7n53xgpqayh",
...
"korrespondansepart": [
"kp_01jh532p50epvvcjfv8xrzzwp5",
"kp_01jh532p6qfhxrz1w9fdw4jjrh"
]
}]
}
```

### Expand `journalpost.korrespondansepart`:

```
curl ... https://api.einnsyn.no/saksmappe/sm_01jh50h5brf7wrbwga8xd0rwdy?expand=journalpost.korrespondansepart
{
"entity": "Saksmappe",
"id": "sm_01jh532p0jfdh8j3evmpgk4atx",
...
"journalpost": [{
"entity": "Journalpost",
"id": "jp_01jh532p3ve6haq7n53xgpqayh",
...
"korrespondansepart": [{
"entity": "Korrespondansepart",
"id": "kp_01jh532p50epvvcjfv8xrzzwp5",
...
},
{
"entity": "Korrespondansepart",
"id": "kp_01jh532p6qfhxrz1w9fdw4jjrh",
...
}]
}]
}
```

## Client libraries

Client libraries for Java and TypeScript are in the works. We're also considering a .NET client library.

Loading