open-index/open-npm huggingface dataset:
npm package: @s2-dev/streamstore
Description: TypeScript SDK for [S2](https://s2.dev), a serverless data store for streams.
Latest version: 0.22.8

# @s2-dev/streamstore

TypeScript SDK for [S2](https://s2.dev), a serverless data store for streams.

This package is the core client for S2's [REST API](https://s2.dev/docs/rest/protocol), providing an ergonomic interface for appending to streams and reading data from them.

## Installation

```bash
npm add @s2-dev/streamstore
# or
yarn add @s2-dev/streamstore
# or
bun add @s2-dev/streamstore
```

## Quick start

Generate an access token from the S2 console at <https://s2.dev/dashboard>, then:

<!-- snippet:start quick-start -->
```ts
import {
	AppendAck,
	AppendInput,
	AppendRecord,
	S2,
	S2Environment,
} from "@s2-dev/streamstore";

const basinName = process.env.S2_BASIN ?? "my-existing-basin";
const streamName = process.env.S2_STREAM ?? "my-new-stream";

const s2 = new S2({
	...S2Environment.parse(),
	accessToken: process.env.S2_ACCESS_TOKEN ?? "my-access-token",
});

// Create a basin (namespace) client for basin-level operations.
const basin = s2.basin(basinName);

// Make a new stream within the basin, using the default configuration.
const streamResponse = await basin.streams.create({ stream: streamName });
console.dir(streamResponse, { depth: null });

// Create a stream client on our new stream.
const stream = basin.stream(streamName);

// Make a single append call.
const append: Promise<AppendAck> = stream.append(
	// `append` expects an input batch of one or many records.
	AppendInput.create([
		// Records can use a string encoding...
		AppendRecord.string({
			body: "Hello from the docs snippet!",
			headers: [["content-type", "text/plain"]],
		}),
		// ...or contain raw binary data.
		AppendRecord.bytes({
			body: new TextEncoder().encode("Bytes payload"),
		}),
	]),
);

// When the promise resolves, the data is fully durable and present on the stream.
const ack = await append;
console.log(
	`Appended records ${ack.start.seqNum} through ${ack.end.seqNum} (exclusive).`,
);
console.dir(ack, { depth: null });

// Read the two records back as binary.
const batch = await stream.read(
	{
		start: { from: { seqNum: ack.start.seqNum } },
		stop: { limits: { count: 2 } },
	},
	{ as: "bytes" },
);

for (const record of batch.records) {
	console.dir(record, { depth: null });
	console.log("decoded body: %s", new TextDecoder().decode(record.body));
}
```
<!-- snippet:end quick-start -->

> Tip: snippets look for `S2_ACCESS_TOKEN`, `S2_BASIN`, and `S2_STREAM` so you can run them with `npx tsx examples/<file>.ts`.

## More documentation

- Full SDK overview and additional examples: see the root repo README at <https://github.com/s2-streamstore/s2-sdk-typescript>.
- S2 service docs: <https://s2.dev/docs>.
npm package: @s20.ai/react-native-vision-camera-plugin-s20-food-classification
Description: TODO
Author: paramaguru
Latest version: 0.0.6

# react-native-vision-camera-plugin-s20-food-classification

## Getting started

`$ npm install react-native-vision-camera-plugin-s20-food-classification --save`

### Mostly automatic installation

`$ react-native link react-native-vision-camera-plugin-s20-food-classification`

## Usage
```javascript
import VisionCameraPluginS20FoodClassification from 'react-native-vision-camera-plugin-s20-food-classification';

// TODO: What to do with the module?
VisionCameraPluginS20FoodClassification;
```
npm package: @s20.ai/react-native-vision-camera-plugin-s20-object-detection
Description: TODO
Author: paramaguru
Latest version: 0.0.16

# react-native-vision-camera-plugin-s20-object-detection

## Getting started

`$ npm install react-native-vision-camera-plugin-s20-object-detection --save`

### Mostly automatic installation

`$ react-native link react-native-vision-camera-plugin-s20-object-detection`

## Usage
```javascript
import VisionCameraPluginS20ObjectDetection from 'react-native-vision-camera-plugin-s20-object-detection';
npm package: @s21g/ref
Description: Ref object for TypeScript
Author: Genki Takiuchi
Latest version: 0.1.1

ref
===
The ref object for TypeScript

Install
-------

```sh
npm insgall @s21g/ref
```

Usage
-----

As a variable to refer the property of the state object with checking type and existance.

```ts
import ref { Ref, getRef, setRef } from "@s21g/ref"
const state = {name:"Taro", age:20};
const nameRef:Ref<string> = ref({name:state});
const name = getRef(nameRef);
setRef(nameRef, "Jiro");
```

As an argument to refer the property of the state object with checking type and existance.

```ts
const foo = <V,K extends string,S>(
  ref:Ref<V,K,S>,
  value:V,
) => {
  setRef(ref, value);  
};
const state:{count:number, name:string} = {count: 0, name: "foo"};
foo({count:state}, 2);
getRef({count:state})) // => 2
```
npm package: @s21toolkit/auth
Description: Auth library for platform.21-school.ru
Latest version: 1.2.1

# s21auth 📦🤰

Библиотека авторизации/аутентификации для платформы platform.21-school.ru.

```sh
npm install @s21toolkit/auth
```

## Использование

Получение токена:

```ts
import { fetchAccessToken } from "@s21toolkit/auth"

const response = await fetchAccessToken("username", "p4ssw0rd")

console.log(response.accessToken)
```

Получение контекстных заголовков (нужны для большей части запросов):

```ts
import { fetchContextHeaders } from "@s21toolkit/auth"

const headers = await fetchContextHeaders(accessToken)
```

Автоматическое обновление токена:

```ts
import { UserAuthProvider, S21_GQL_API_URL, getAuthHeaders } from "@s21toolkit/auth"

const auth = new UserAuthProvider("username", "p4ssw0rd")

const response = await fetch(S21_GQL_API_URL, {
   method: "POST",
   headers: {
      ...await getAuthHeaders(auth)
   },
   body: JSON.stringify({ query: "..." })
})
```
npm package: @s21toolkit/auto-client
Description: Клиент для внутреннего GQL API платформы edu.21-school.ru. Предназначен для использования с [s21auto](https://github.com/s21toolkit/s21auto) для генерации запросов (`src/api.ts`) из HAR логов платформы (см. [Генерация методов](#генерация-методов)).
Latest version: 1.0.0

# s21auto-client-ts 🦤🫦

Клиент для внутреннего GQL API платформы edu.21-school.ru.
Предназначен для использования с [s21auto](https://github.com/s21toolkit/s21auto) для генерации запросов (`src/api.ts`) из HAR логов платформы (см. [Генерация методов](#генерация-методов)).

> [!TIP]
> Если вам нужен простой доступ к платформе, используйте [s21client](https://github.com/s21toolkit/s21client).

Пример использования:

```ts
import { Client, UserAuthProvider } from "@s21toolkit/auto-client"
import { ApiContext } from "./api"

const client = new Client(
   ApiContext,
   new UserAuthProvider(
      process.env.S21_USERNAME,
      process.env.S21_PASSWORD
   )
)

const user = await client.api.getCurrentUser()

console.log(user)
```

## Генерация методов

Методы клиента генерируются автоматически на основе запросов платформы к бекенду.

Для генерации запросов используется [s21auto](https://github.com/s21toolkit/s21auto):

```sh
s21auto client-ts generate log.har -o api.ts
```

## Сборка и выпуск релизов

```sh
pnpm install
pnpm build
pnpm release major
```
npm package: @s21toolkit/client
Description: GQL API client for edu.21-school.ru
Latest version: 1.1.4

# s21client 🤰👍

Клиент для внутреннего GQL API платформы edu.21-school.ru.
Используется в связке с [s21client-schema](https://github.com/s21toolkit/s21client-schema) - автогенерируемым пакетом со схемой апи.
При обновлении схемы апи нужно обновлять именно `s21client-schema`.

```sh
npm install @s21toolkit/{client,client-schema}
```

## Использование

```ts
import { Client, UserAuthProvider } from "@s21toolkit/client"
import { Schema } from "@s21toolkit/client-schema"

const client = new Client(Schema, new UserAuthProvider("username", "p4ssw0rd"))

const user = await client.api.getCurrentUser()
```
npm package: @s21toolkit/client-schema
Description: New s21toolkit package.
Latest version: 78.1.1-build.1

# s21client-schema 📦👍

Схема GQL API платформы edu.21-school.ru для [s21client](https://github.com/s21toolkit/s21client).
Обновляется автоматически при изменении схемы.

Версия пакета соответствует версии продукта + номер сборки в формате `PRODUCT_VERSION-build.N`.
Например, версия `76.2.0-build.1` означает версию продукта `76.2.0` и номер сборки `1`.
Номер сборки инкрементируется при изменении схемы без изменения версии продукта.
Новые версии продукта всегда имеют номер сборки `0`, например `75.3.0-build.0`.

```sh
npm install @s21toolkit/client-schema
```

## Использование

```ts
import { Client, UserAuthAdapter } from "@s21toolkit/client"
import { Schema } from "@s21toolkit/client-schema"

const client = new Client(Schema, new UserAuthAdapter("username", "p4ssw0rd"))

const user = await client.api.getCurrentUser()
```

## Зачем отдельный пакет

Для удобства обновления и версионирования. Пакет со схемой обновляется только в случае изменения схемы, за остальное отвечает пакет клиента.

## Использованте без клиента

Если нужны только запросы и своя реализация клиента:

```ts
import { GraphQLClient } from "graphql-request"
import { S21_GQL_API_URL, UserAuthProvider, getAuthHeaders } from "@s21toolkit/auth"
import { getSdk } from "@s21toolkit/client-schema"

const auth = new UserAuthProvider("username", "p4sswo0rd")

const client = new GraphQLClient(S21_GQL_API_URL, {
   requestMiddleware: async (request) => {
      const authHeaders = await getAuthHeaders(auth)
      return {
         ...request,
         headers: {
            ...request.headers,
            ...authHeaders,
         }
      }
   }
})

const sdk = getSdk(client)

const user = await sdk.getCurrentUser()
```
npm package: @s21toolkit/introspector
Description: GQL Introspection CLI for edu.21-school.ru
Latest version: 1.1.3

# s21introspector

Утилита для интроспекции схемы GQL API платформы platform.21-school.ru.

## Установка

```sh
npm install --global @s21toolkit/introspector
```

## Использование

> `s21i` - псевдоним для `s21introspector`

Получение GraphQL схемы:

```sh
s21i introspect --token MyAccessToken
s21i introspect $(s21i auth login p4s5w0rd)
s21i introspect $(s21i auth login p4s5w0rd) --out-file schema.graphql
s21i introspect $(s21 auth | s21i _) # Авторизация через s21cli
```

Поддерживается подстановка статических свойств в `out-file`, например `schema_{PRODUCT_VERSION}.gql` (по умолчанию).

Может принимать HAR лог в качестве аргумента. Все страницы, скрипты, запросы и их связи их лога будут проанализированы.
Вместо возможные данные будут браться из лога вместо запросов по сети.

```sh
s21i introspect $(s21 auth | s21i _) log.har
```

Флаг `split-operations` позволяет сгенерировать отдельный файлы для всех операций (запросов, мутаций и тд.).
В таком режиме `out-file` будет обозначать результирующую директорию.

```sh
s21i introspect $(s21 auth | s21i _) --split-operations --out-file schema
```

```txt
schema/
   schema.gql
   operations/
      getUsers.gql
      getCurrentUser.gql
```

Если нужны только типы (без операция) следует использовать флаг `types-only`.

> См. `s21i introspect --help`

Получение статических свойств платформы:

```sh
s21i static
s21i static --select PRODUCT_VERSION --no-name
```

> См. `s21i static --help`

Получение исходного кода платформы:

```sh
s21i sources
s21i sources --out-dir edu_src
```

> См. `s21i sources --help`