# @digdir/einnsyn-sdk 中文文档

规范地址：https://npmcn.com/package/%40digdir/einnsyn-sdk/

版本：1\.7\.0
npm 元数据更新时间：2026-11-05T10:46:21.369Z
中文译文更新时间：2026-11-12T07:57:48.967Z
软件包许可：BSD-3-Clause

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40digdir/einnsyn-sdk
原文对照：https://npmcn.com/package/%40digdir/einnsyn-sdk/?lang=original
项目主页：https://github.com/felleslosninger/einnsyn-sdk-typescript
源码仓库：https://github.com/felleslosninger/einnsyn-sdk-typescript

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：1.1 MB，9 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2025-06-26T08:33:41.036Z
- 最新版本发布：2026-11-05T10:46:20.846Z
- 近 30 天下载量：8316（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：9（近 12 个月 6 个）

## 中文简介

EInnsyn API 的 TypeScript 客户端库

## 安装

```sh
npm install @digdir/einnsyn-sdk
```

也可以使用：`pnpm add @digdir/einnsyn-sdk`、`yarn add @digdir/einnsyn-sdk`、`bun add @digdir/einnsyn-sdk`

## README

# ![eInnsyn](https://einnsyn.no/8ebf89f8e40d3eb75183.svg)

EInnsyn API 的脚本 SDK

## 目录

-   [安装](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-installation)
-   [测试](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-testing)
-   [认证](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-authentication)
-   [使用量](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-usage)
    -   [创建客户端实例](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-creating-a-client-instance)
    -   [使用 JWT 认证](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-authenticating-using-jwt)
    -   [正在使用 eInnsyn 用户名/ 密码进行认证](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-authenticating-using-an-einnsyn-username--password)
    -   [正在使用 API 密钥认证](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-authenticating-using-an-api-key)
    -   [获取内容](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-fetching-content)
    -   [重复列出的清单](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-iterating-over-paginated-lists)
    -   [扩展字段](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-expanding-fields)
    -   [添加/ 更新内容](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-adding--updating-content)
    -   [删除内容](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-deleting-content)
    -   [搜索](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-search)
-   [API 文档](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-api-documentation)
-   [许可证](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-license)
-   [参考资料](https://npmcn.com/package/%40digdir/einnsyn-sdk/#readme-references)

## 安装

通过 npm 安装软件包 :

```sh
npm install https://github.com/felleslosninger/einnsyn-sdk-typescript
```

导入并在您的 TypeScript 项目中使用 :

```typescript
import { EInnsynClient } from 'einnsyn-sdk';
```

## 测试

运行测试套件 :

```sh
npm test
```

编写覆盖报告:

```sh
npm run test:coverage
```

## 认证

SDK支持多种认证方法:

-   日本
-   用户名/名词
-   API 密钥

## 使用量

### 创建客户端实例

```typescript
// Client set-up (all options are optional)
const client = new EInnsynClient({
  baseUrl: 'https://api.einnsyn.no',
  appInfo: 'My eInnsyn client',
  username: 'eInnsynUser@example.com',
  password: 'myPassword',
  jwtToken: '...',
  apiKey: 'secret_apikey',
});
```

### 使用 JWT 认证

在通过Ansattporten认证为组织时,您会提供这样的JWT:

```typescript
const authenticatedClient = new EInnsynClient({
  jwt: '...',
});
```

### 正在使用 eInnsyn 用户名/ 密码进行认证

```typescript
const authenticatedClient = new EInnsynClient({
  username: 'eInnsynUser@example.com',
  password: '...',
});
```

### 正在使用 API 密钥认证

```typescript
const authenticatedClient = new EInnsynClient({
  apiKey: 'secret_...',
});
```

### 获取内容

```typescript
// Get a saksmappe
const saksmappe = await client.saksmappe.get('sm_...');
console.log(saksmappe.offentligTittel);

// Get all journalposts in the saksmappe
const journalpostList = await client.saksmappe.getJournalpost('sm_...');

// Iterate over all journalposts
for await (const journalpost of client.iterate(journalpostList)) {
  console.log(`${journalpost.offentligTittel}`);
}
```

### 重复列出的清单

您可以自动在这样的 pagnizing 列表上显示:

```
const journalpostList = await client.saksmappe.getJournalpost('sm_...');

// Iterate over all journalposts
for await (const journalpost of client.iterate(journalpostList)) {
  console.log(`${journalpost.offentligTittel}`);
}
```

### 扩展字段

您可以在查询中扩展字段以包括相关实体:

```typescript
// Non-expanded:
const saksmappe = await client.saksmappe.get('sm_...');
console.log(saksmappe);
// Example output:
// {
//   entity: 'Saksmappe',
//   id: 'sm_...',
//   offentligTittel: 'Saksmappe title',
//   offentligTittelSensitiv: 'Saksmappe title with sensitive data',
//   saksaar: 2025,
//   sakssekvensnummer: 1,
//   journalpost: ['jp_...'],
// }

// Expanded:
const expandedSaksmappe = await client.saksmappe.get('sm_...', { expand: ['journalpost'] });
console.log(expandedSaksmappe);
// Example output:
// {
//   entity: 'Saksmappe',
//   id: 'sm_...',
//   offentligTittel: 'Saksmappe title',
//   offentligTittelSensitiv: 'Saksmappe title with sensitive data',
//   saksaar: 2025,
//   sakssekvensnummer: 1,
//   journalpost: [{
//     offentligTittel: 'Journalpost title',
//     offentligTittelSensitiv: 'Journalpost title with sensitive data',
//     journalaar: 2025,
//     journalsekvensnummer: 1,
//     journalpostnummer: 1,
//     journalposttype: 'inngaaende_dokument',
//     journaldato: '2025-01-01',
//   }],
// }
```

### 添加/ 更新内容

```typescript
// Create a containing Arkiv
const arkiv = await client.arkiv.add({
  tittel: 'Arkiv title',
});

// Create a containing Arkivdel
const arkivdel = await client.arkiv.addArkivdel(arkiv.id, {
  tittel: 'Arkivdel title'
});

// Create a saksmappe with a Journalpost
const saksmappe = await client.arkivdel.addSaksmappe(arkivdel.id, {
  offentligTittel: 'Saksmappe title',
  offentligTittelSensitiv: 'Saksmappe title with sensitive data',
  saksaar: 2025,
  sakssekvensnummer: 1,
  journalpost: [{
    offentligTittel: 'Journalpost title',
    offentligTittelSensitiv: 'Journalpost title with sensitive data',
    journalaar: 2025,
    journalsekvensnummer: 1,
    journalpostnummer: 1,
    journalposttype: 'inngaaende_dokument',
    journaldato: '2025-01-01',
  }]
});

// Add a Journalpost with a Dokumentbeskrivelse to an existing Saksmappe
const journalpost = await client.saksmappe.addJournalpost(saksmappe.id, {
    offentligTittel: 'Second Journalpost',
    offentligTittelSensitiv: 'Second Journalpost title with sensitive data',
    journalaar: 2025,
    journalsekvensnummer: 2,
    journalpostnummer: 2,
    journalposttype: 'inngaaende_dokument',
    journaldato: '2025-01-03',
    dokumentbeskrivelse: [{
      tittel: 'Dokumentbeskrivelse title',
      tittelSensitiv: 'Title with sensitive data',
      dokumentnummer: 1,
      tilknyttetRegistreringSom: 'vedlegg',
    }]
});

// Update an existing Saksmappe
const updatedSaksmappe = await client.saksmappe.update(saksmappe.id, {
  offentligTittel: 'Updated offentligTittel',
});
```

### 删除内容

```typescript
const deletedSaksmappe = client.saksmappe.delete(saksmappe.id);
```

### 搜索

```typescript
// Search for "robot"
const searchResultList = client.search({
  query: 'robot',
});

// Iterate all results
for await (const searchResult of client.iterate(searchResultList)) {
    if (isSaksmappe(result)) {
      // This is a Saksmappe.
      console.log(`Saksmappe: ${result.offentligTittel}`);
    } else if (isJournalpost(result)) {
      // This is a Journalpost.
      console.log(`Journalpost - ${result.offentligTittel}`);
    } else if (isMoetemappe(result)) {
      // This is a Moetemappe.
      console.log(`Moetemappe - ${result.offentligTittel}`);
    } else if (isMoetesak(result)) {
      // This is a Moetesak.
      console.log(`Moetesak - ${result.offentligTittel}`);
    } else {
      // Unknown search result, should not happen.
      console.log(`Unknown result type`);
    }
}

// Search for "robot", in documents by a given enhet
const enhetsRobotList = client.search({
  query: 'robot',
  administrativEnhet: 'enh_...',
});

// Advanced search
const advancedSearch = client.search({
  query: 'advanced query',
  administrativEnhet: 'enh_...',
  excludeAdministrativEnhet: 'enh_...',
  sortBy: 'publisertDato',
  sortOrder: 'asc',
});
```

## API 文档

关于详细的API文件,请参见: [eInnsyn API 规格](https://github.com/felleslosninger/einnsyn-api-spec)。 。 。 .

## 许可证

该项目根据BSD 3-Clause许可证获得许可证。 见 [自由主义](https://npmcn.com/package/%40digdir/einnsyn-sdk/LICENSE) 详细文件.

## 参考资料

-   [eInnsyn API 规格](https://github.com/felleslosninger/einnsyn-api-spec/)
-   [einnsyn 后端](https://github.com/felleslosninger/einnsyn-backend/)

## 常见问题

### @digdir/einnsyn-sdk 是什么？

EInnsyn API 的 TypeScript 客户端库

### 如何安装 @digdir/einnsyn-sdk？

在项目目录运行 npm install @digdir/einnsyn-sdk，或使用 pnpm add / yarn add / bun add。

### @digdir/einnsyn-sdk 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @digdir/einnsyn-sdk 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @digdir/einnsyn-sdk 可以商用吗？

@digdir/einnsyn-sdk 使用 BSD-3-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括，不构成法律意见，请以许可原文为准。

### @digdir/einnsyn-sdk 的下载量有多少？

根据 npm 官方下载统计，@digdir/einnsyn-sdk 在 2026/10/12 – 2026/11/10 这 30 天内被下载 8,316 次，日均约 277 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @digdir/einnsyn-sdk 还在维护吗？

最新版本 1\.7\.0 发布于 2026/11/05（6 天前）；至今共发布 9 个版本，其中过去 12 个月发布了 6 个；首次发布于 2025/06/26。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

