open-index/open-npm huggingface dataset:
npm package: @salla.sa/twilight-bundles
Description: SDK for Salla Twilight Bundles - Develop and build custom components for Salla platform
Author: Salla
Latest version: 0.1.39

# @salla.sa/twilight-bundles

Core build tools and plugins for Salla Twilight components. This package provides the build infrastructure used by the starter kit and other Twilight component packages.

## Features

- **Vite Plugins**: A set of plugins for building and developing Twilight components
- **Build Configuration**: Optimized build settings for component bundling
- **Development Tools**: Development server and demo environment

## Plugins

### 1. Transform Plugin (`sallaTransformPlugin`)

Transforms component files to ensure proper naming and registration in the Twilight system.

```typescript
import { sallaTransformPlugin } from '@salla.sa/twilight-bundles/vite-plugins';

export default defineConfig({
  plugins: [
    sallaTransformPlugin()
  ]
});
```

The transform plugin:
- Matches components in `src/components/*/index.ts`
- Ensures proper component registration
- Handles component naming based on directory structure

### 2. Build Plugin (`sallaBuildPlugin`)

Handles component bundling and output configuration.

```typescript
import { sallaBuildPlugin } from '@salla.sa/twilight-bundles/vite-plugins';

export default defineConfig({
  plugins: [
    sallaBuildPlugin()
  ]
});
```

The build plugin:
- Automatically discovers components in `src/components/`
- Creates individual files for each component
- Configures external dependencies (lit libraries)
- Optimizes build output

### 3. Demo Plugin (`sallaDemoPlugin`)

Provides a development environment for testing components.

```typescript
import { sallaDemoPlugin } from '@salla.sa/twilight-bundles/vite-plugins';

export default defineConfig({
  plugins: [
    sallaDemoPlugin()
  ]
});
```

The demo plugin:
- Creates a demo page with all components
- Configures hot module reloading
- Sets up the development server
- Provides a testing environment

## Usage

This package is typically used as a dependency in Twilight component packages. See the starter kit for a complete example of how to use these plugins.

## Development

1. Install dependencies:
```bash
pnpm install
```

2. Build the package:
```bash
pnpm run build
```

## License

MIT
npm package: @salla.sa/ui-merchant-salla-chat
Description: A React component library using Tailwind CSS and Vite for merchant services
Author: Salla App
Latest version: 0.13.0

# Salla Chat Integration (For Partners)

A React-based project integrating Salla and Chatwoot for chat management, using TypeScript and React Query.

## Features

- Fetch and paginate chat conversations via Salla API
- Integrate Chatwoot chat widget with custom settings
- TypeScript type safety for global objects and API responses
- React Query for efficient data fetching and caching

## Tech Stack

- React
- TypeScript
- @tanstack/react-query
- Chatwoot
- Salla Bridge SDK
- Salla Admin UI
- Salla Utils
- Salla Styles
- Tailwind CSS

## Getting Started

### Prerequisites

- Node.js (v16+ recommended)
- npm

### Installation

```bash
npm install
```

### Running the Project

```bash
Running the Project
```

### Building for Production

```bash
npm run build
```

## Project Structure

src/types/global.ts — Global TypeScript type declarations for window objects and Salla/Chatwoot integration.
src/api/SallaChatAPI.ts — React Query hooks for fetching chat conversations from Salla.
src/context — React context for Salla chat API requests.

## Usage

Use the useGetChatList hook to fetch and paginate chat conversations.
Global window objects (chatwootSDK, $chatwoot, chatwootSettings, salla) are typed for safe access.

## Code Style

Enforced with project code style settings (.idea/codeStyles/Project.xml)
2-space indentation, trailing commas removed, spaces within object braces/imports

## License

Salla.sa
npm package: @sallbro/auto-api-doc
Description: AUTO API DOC FOR FRAMEWORK EXPRESS, FASTIFY, AND KOA WITH SWAGGER UI
Author: sallbro-salman asu
Latest version: 1.0.1


# 🚀 API DOC FOR FRAMEWORK EXPRESS, FASTIFY, AND KOA WITH SWAGGER UI  


## **📌 Features** 
✅ **Supports Express, Koa, and Fastify** — Generate OpenAPI docs for any of these frameworks.  
✅ **Swagger UI Integration** — Visualize API documentation interactively. 
✅ **Generates YAML & JSON OpenAPI Files** — Saves `openapi.yaml` and `openapi.json` formats.  
✅ **Beta Feature: OpenAPI Files To Code Generation!** 🚀  


## **📖 Example Usage**  
Generate OpenAPI documentation for **Express, Koa, or Fastify** with one command! 🎯  

### ** Install Dependencies**  
```sh
npm install @sallbro/auto-api-doc
```

### ** Generate Doc**  
```sh
const { generateOpenAPISpec, writeOpenAPIFiles } = require("@sallbro/auto-api-doc");

const openapiSpec = generateOpenAPISpec("express",app); // pass framework name and application route as a parameter
writeOpenAPIFiles(openapiSpec, "./docs"); // generate doc file - .yaml and .json

```

### ** Setup swagger ui**  
```sh
const { setupSwaggerUI } = require("@sallbro/auto-api-doc");
setupSwaggerUI(app, openapiSpec); // generate swagger ui at /api-docs/swagger-ui

```

### ** express example**  
```sh
const express = require("express");
const { generateOpenAPISpec, writeOpenAPIFiles, setupSwaggerUI } = require("@sallbro/auto-api-doc");
const app = express();

const openapiSpec = generateOpenAPISpec("express",app); // pass framework name and application route as a parameter
writeOpenAPIFiles(openapiSpec, "./docs"); // generate doc file - .yaml and .json
setupSwaggerUI(app, openapiSpec); // generate swagger ui at /api-docs/swagger-ui

```

### ** fastify example**  
```sh
const fastify  = require("fastify");
const { generateOpenAPISpec, writeOpenAPIFiles, setupSwaggerUI } = require("@sallbro/auto-api-doc");
const app = fastify();

const openapiSpec = generateOpenAPISpec("express",app); // pass framework name and application route as a parameter
writeOpenAPIFiles(openapiSpec, "./docs"); // generate doc file - .yaml and .json
setupSwaggerUI(app, openapiSpec); // generate swagger ui at /api-docs/swagger-ui

```


### ** koa example**  
```sh
const Koa = require("koa");
const Router = require("@koa/router");
const app = new Koa();
const router = new Router();
const { generateOpenAPISpec, writeOpenAPIFiles, setupSwaggerUI } = require("@sallbro/auto-api-doc");

const openapiSpec = generateOpenAPISpec("express",router); // pass framework name and application route as a parameter
writeOpenAPIFiles(openapiSpec, "./docs"); // generate doc file - .yaml and .json
setupSwaggerUI(router, openapiSpec); // generate swagger ui at /api-docs/swagger-ui

```


## **🚀 Beta Feature**  
Generate Code from doc.yaml or doc.json file for **Express, Koa, or Fastify** with one command! 🎯  

### ** Generate Code**  
```sh
const { generateCodeFromOpenAPI } = require("@sallbro/auto-api-doc");

generateCodeFromOpenAPI("./docs/openapi.yaml", "./output","express");

```
npm package: @sallbro/log-colorify
Description: colorify your log messages
Author: sallbro
Latest version: 1.0.1

# log-colorify [![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](https://choosealicense.com/licenses/mit/)
> step to install package
```
npm i @sallbro/log-colorify
```
-----
> how to use 
```
import {Log} from "@sallbro/log-colorify"
const log=Log();
log.success("pass string");
log.info("pass string");
log.danger("pass string");
log.custom("you can add custom style",
  {
  color:"red",
  bgcolor:"yellow",
  font:"",
  weight:"bold",
  size:"20px",
  shadow:"3px 3px rbg(1,1,1,0.7)"
  }
);
```
npm package: @salling-group/auth
Description: Makes it easy to authenticate when using Salling Group's APIs.
Author: Salling Group - API Developers
Latest version: 1.0.3
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# Salling Group API Authentication
[![Build Status](https://dev.azure.com/emilholmnauerby/emilholmnauerby/_apis/build/status/DanskSupermarked.sg-auth)](https://dev.azure.com/emilholmnauerby/emilholmnauerby/_build/latest?definitionId=1)

This library allows you to easily set up an Axios instance that can query the Salling Group API.

## Getting Started
This will check if 2017-12-24 is a holiday by querying the Holidays API.
```js
const { createInstance } = require('@salling-group/auth');
const instance = createInstance({
  'applicationName': 'My Application v1.0.1',
  'auth': {
    'type': 'bearer',
    'token': 'my_token',
  },
});

instance.get('/v1/holidays/is-holiday', {
  'params': {
    'date': '2017-12-24',
  },
}).then((response) => console.log(response.data));
```

## Instance
The authentication library exposes two authentication methods for setting up an Axios instance.
This means that you can use this instance as you would use [Axios](https://github.com/axios/axios),
and it will handle authentication for you.

The available authentication methods are Bearer and JWT. You can get your credentials on the [developer portal](https://developer.sallinggroup.com/).

### `getInstance(options: object): Instance`
This function gets a new Axios instance with access to the Salling Group API
(given the provided credentials are correct and has access to the requested ressource).
The provided options object must contain an `auth` object with the following specification:

|Property|Value|Required|Description|
|--------|-----|--------|-----------|
|`type`|`'jwt'` or `'bearer'`|Yes|The authentication type. This is either a JWT or a Bearer Token.|
|`token`|`String`|If `type` is `'bearer'`.|The token associared with the bearer token credentials.|
|`issuer`|`String`|If `type` is `'jwt'`.|The issuer associated with the JWT credentials.|
|`secret`|`String`|If `type` is `'jwt'`.|The secret associated with the JWT credentials.|

## Examples
### Bearer
If you use a Bearer token, you can access the API like this:
```js
const instance = createInstance({
  'applicationName': 'My Application v1.0.1',
  'auth': {
    'type': 'bearer',
    'token': 'my_token',
  },
});
instance.get('/v1/stores/').then(response => {
  console.log(response.data);
});
```

### JWT
If you use a JWT, you can access the API like so:
```js
const instance = createInstance({
  'applicationName': 'My Application v1.0.1',
  'auth': {
    'type': 'jwt',
    'issuer': 'my_issuer',
    'secret': 'my_secret',
  },
});
instance.get('/v1/stores/').then(response => {
  console.log(response.data);
});
```
npm package: @salling-group/pagination-traverser
Description: A library for traversing paginated API resources.
Author: Salling Group - API Developers
Latest version: 1.0.1
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# Salling Group Pagination Traverser
`Traverser` helps you paginate through Salling Group API resources
(e.g. the Stores API serves stores in pages).
It relies on a `Link` header in responses and will throw an error if none is present.
`Traverser` class is required like this:
```js
const Traverser = require('@salling-group/pagination-traverser');
```

The class is instantiated like this:
```js
const traverser = new Traverser(instance, '/v1/stores/', {
  'params': {
    'brand': 'netto',
  },
});
```

The parameters for the initialization is:

| Parameter | Required | Type | Description |
|-----------|----------|------|-------------|
|`instance`| Yes | Axios instance|An authenticated Axios instance (see NPM module @salling-group/auth). |
|`resource`| Yes | String | The resource to traverse. |
|`baseOptions`| No | Object |  Axios options to apply to the requests. |

The `Traverser` class has the following methods:

| Method | Description |
---------|-------------|
| `async get()` | Get the current page. |
| `async next()` | Move the traverser to the next page and get it. |
| `async previous()` | Move the traverser to the previous page and get it.|
| `async first()` | Move the traverser to the first page and get it. |
| `async last()` | Move the traverser to the last page and get it. |
| `async goto(page)` | Move the traverser to the given page and get it. |
| `pageNumber()` | Get the page that the traverser is on.

## Example: Paginate response from Stores API
```js
const Traverser = require('@salling-group/pagination-traverser');
const { createInstance } = require('@salling-group/auth');

const instance = createInstance({
  'auth': {
    'issuer': 'my_issuer',
    'secret': 'my_secret',
    'type': 'jwt',
  },
});
const traverser = new Traverser(instance, '/v1/stores/');

traverser.get().then((firstPage) => {
  console.log(firstPage);
  traverser.next().then((secondPage) => {
    console.log(secondPage);
  });
});
```
npm package: @salman-fsd/n8n-nodes-amazon-paapi-extended
Description: Enhanced n8n node for Amazon Product Advertising API (PA-API 5.0) with extended resource options including availability, pricing, and product details
Author: Salman Zain
Latest version: 1.0.0

# n8n Amazon PA API Node

This package provides integration with the Amazon Product Advertising API (PA API) for n8n. It supports operations such as `SearchItems`, `GetItems`, and
npm package: @salman1995/axapi-crud-ops
Description: Provides functions to fetch, deploy, update and remove device configurations
Author: eMumba
Latest version: 0.1.527

# axapi-crud-ops
Provides functions to fetch, deploy, update and remove device configurations.
#Usage

##import
import { initAxapiCrudOps } from '../lib/axapi-crud-ops'

## Inititialization 
  Pass Auth Token and Options Object (You can see default options in defaultOptions.js)
  ```
    const axapiCrudOpsObject = initAxapiCrudOps(token,  {})
  ```
## Executions 

### Apply Configurations 
configurationsObject (Object containing keys for those enities you want to push configs),
configuredPartitionList (necessory for configuration comparison and  if you want remove existing configuration), isDeleteSequenceSkipped (default is false, if you want to skip delete sequence from previously configured partition), isSharedConfigDeleteSkipped (skip delete sequence from previously shared partition)
```
  const response = await axapiCrudOpsObject.applyConfigurations(configurationsObject,  configuredPartitionList,  isDeleteSequenceSkipped,  isSharedConfigDeleteSkipped)
```
```
const configurationsObject = {
    SERVER: [], // Array of objects, for which object having same structure as JSON return from axapi for that entity
    SERVICE_GROUP: [],
    VIRTUAL_SERVER: [],
    partitionsList: [], // list of partitions that we are using for deploying new configurations
    ...
  }
```
to check complete list of keys for respective endpoints, please refer to the following files in git repository
[Keys order](https://gitlab.com/emumba/a10/axapi-crud-ops/blob/master/src/constants/responseOrder.js)
[Endpoint to keys mappings](https://gitlab.com/emumba/a10/axapi-crud-ops/blob/master/src/constants/urls.js)

```
configuredPartitionList =  [{  name: 'partition name'}]
```
npm package: @salman65/diagram-js
Description: A modeling framework for the web
Author: Nico Rehwaldt
Latest version: 6.7.2

> As of version `1.0.0` this library exposes [ES modules](http://exploringjs.com/es6/ch_modules.html#sec_basics-of-es6-modules). Use an ES module aware bundler such as [Webpack](https://webpack.js.org) or [Rollup](https://rollupjs.org) to bundle it for the browser.

# diagram-js

[![Build Status](https://travis-ci.org/bpmn-io/diagram-js.svg?branch=develop)](https://travis-ci.org/bpmn-io/diagram-js)

A toolbox for displaying and modifying diagrams on the web.


## Built with diagram-js

Some libraries / applications built on top of diagram-js:

#### Part of [bpmn.io](https://bpmn.io/)

* [bpmn-js](https://github.com/bpmn-io/bpmn-js) - A BPMN 2.0 viewer / modeler ([Demo](https://demo.bpmn.io/bpmn))
* [cmmn-js](https://github.com/bpmn-io/cmmn-js) - A CMMN 1.1 viewer / modeler ([Demo](https://demo.bpmn.io/cmmn))
* [dmn-js](https://github.com/bpmn-io/dmn-js) - A DMN 1.1 viewer / modeler / table editor ([Demo](https://demo.bpmn.io/dmn))

#### External

* [Node Sequencer](https://github.com/philippfromme/node-sequencer) - A Node-Based Sequencer for the Web ([Demo](https://philippfromme.github.io/node-sequencer-demo/))
* [chor-js](https://github.com/bptlab/chor-js) - A BPMN 2.0 Choreography diagram viewer and editor
* [postit-js](https://github.com/pinussilvestrus/postit-js) - Create Post-it boards on a canvas editor ([Demo](https://postit-js-demo.netlify.app/))

## Resources

* [Issues](https://github.com/bpmn-io/diagram-js/issues)
* [Changelog](./CHANGELOG.md)
* [Contributing Guide](https://github.com/bpmn-io/diagram-js/blob/master/.github/CONTRIBUTING.md)
* [Example Application](https://github.com/bpmn-io/diagram-js/tree/master/example)


## Hacking the Project

To get the development setup make sure to have [NodeJS](https://nodejs.org/en/download/) installed.
If your set up, clone the project and execute

```
npm install
```


### Testing

Execute `npm run dev` to run the test suite in watch mode.

Expose an environment variable `TEST_BROWSERS=(Chrome|Firefox|IE)` to execute the tests in a non-headless browser.


### Package

Execute `npm run all` to lint and test the project.

__Note:__ We do not generate any build artifacts. Required parts of the library should be bundled by modelers / viewers as needed instead.



## License

MIT
npm package: @salman65/diagram-js-direct-editing
Description: Direct editing support for diagram-js
Author: bpmn.io
Latest version: 1.6.2

# diagram-js-direct-editing

[![Build Status](https://travis-ci.org/bpmn-io/diagram-js-direct-editing.svg?branch=master)](https://travis-ci.org/bpmn-io/diagram-js-direct-editing)

A direct editing box for [diagram-js](https://github.com/bpmn-io/diagram-js).

![Direct Editing Demo](./resources/screencast.gif)


## License

MIT
npm package: @salmanbao/jackal.nodejs
Description: Javascript Node.js library for interacting with the Jackal Chain
Latest version: 1.0.9

# jackal.js

[![License: MIT](https://badgen.net/github/license/JackalLabs/jackal.nodejs)](https://opensource.org/licenses/MIT)
[![github: version](https://badgen.net/github/release/JackalLabs/jackal.nodejs)](https://github.com/JackalLabs/jackal.nodejs)
[![npm: version](https://badgen.net/npm/v/@jackallabs/jackal.nodejs)](https://www.npmjs.com/package/@jackallabs/jackal.nodejs)

Check out [our changelog](https://github.com/JackalLabs/jackal.nodejs/#CHANGELOG) for the latest updates.
npm package: @salmanbao/safe-core-sdk-utils
Description: Safe Core SDK Utilities
Author: Safe
Latest version: 1.7.2

# Safe Core SDK Utils

[![NPM Version](https://badge.fury.io/js/%40safe-global%2Fsafe-core-sdk-utils.svg)](https://badge.fury.io/js/%40safe-global%2Fsafe-core-sdk-utils)
[![GitHub Release](https://img.shields.io/github/release/safe-global/safe-core-sdk.svg?style=flat)](https://github.com/safe-global/safe-core-sdk/releases)
[![GitHub](https://img.shields.io/github/license/safe-global/safe-core-sdk)](https://github.com/safe-global/safe-core-sdk/blob/main/LICENSE.md)

Utilities for the [Safe Core SDK](https://github.com/safe-global/safe-core-sdk) monorepo.

## Table of contents
* [Installation](#installation)
* [Build](#build)

## <a name="installation">Installation</a>

Install the package with yarn or npm:

```bash
yarn install
npm install
```

## <a name="build">Build</a>

Build the package with yarn or npm:

```bash
yarn build
npm build
```
npm package: @salmanbao/safe-ethers-adapters
Description: Safe Ethers Adapters
Author: Safe
Latest version: 0.1.4

# Safe Ethers Adapters

[![NPM Version](https://badge.fury.io/js/%40safe-global%2Fsafe-ethers-adapters.svg)](https://badge.fury.io/js/%40safe-global%2Fsafe-ethers-adapters)
[![GitHub](https://img.shields.io/github/license/safe-global/safe-core-sdk)](https://github.com/safe-global/safe-core-sdk/blob/main/LICENSE.md)

[Ethers](https://docs.ethers.io/v5/single-page/) adapter that facilitates the interaction with the [Safe Services](https://github.com/safe-global/safe-transaction-service)

## Getting Started

The only adapter currently provided is the `SafeEthersSigner` which implements the [`Signer` interface](https://docs.ethers.io/v5/api/signer/#Signer) from Ethers.

The `SafeEthersSigner` can be used with [Ethers Contracts](https://docs.ethers.io/v5/getting-started/#getting-started--contracts) to deploy and interact with them. Each of these interactions will create a Safe transaction that is published to the [Safe transaction service](https://docs.gnosis.io/safe/docs/services_transactions/). 

For this to work it is required to initialize the `SafeEthersSigner` with an account that is either an owner of the specified Safe or a [delegate](https://docs.gnosis.io/safe/docs/tutorial_tx_service_set_delegate/) of one of the owners.

An example for such an account would be the private key of one of the owners that is used with an [Ethers Wallet](https://docs.ethers.io/v5/api/signer/#Wallet)

```js
const signer = new Wallet("some_private_key", ethereumProvider)
```

It is also necessary to specify a service instance that should be used to publish the Safe transactions. An example for this would be the Mainnet instance of the [Safe Transaction Service](https://safe-transaction-mainnet.safe.global/): `https://safe-transaction-mainnet.safe.global/`

```js
const service = new SafeService("some_service_url")
```

A Safe instance must also be created before obtaining the signer.
It may be obtained with:

```js
import { ethers } from "ethers"
import Safe from "@salmanbao/safe-core-sdk"
import EthersAdapter from "@salmanbao/safe-ethers-lib"

const safe = await Safe.create({
  ethAdapter: new EthersAdapter({ ethers, signerOrProvider }),
  safeAddress: "some_safe_address"
})
```

Using these components it is possible to create an instance of the `SafeEthersSigner`

```js
const safeSigner = new SafeEthersSigner(safe, service, provider)
```

See [examples](/packages/safe-ethers-adapters/examples) for more information.

## Installation

Select correct nvm version:

```bash
nvm use
```

Install the package with yarn or npm:

```bash
yarn install
npm install
```

## Build

Build the package with yarn or npm:

```bash
yarn build
npm build
```

## License

This library is released under MIT.

## Contributors

- Richard Meisser ([rmeissner](https://github.com/rmeissner))
- Germán Martínez ([germartinez](https://github.com/germartinez))
npm package: @salmanbao/safe-ethers-lib
Description: Ethers library adapter to be used by Safe Core SDK
Author: Safe
Latest version: 1.9.2

# Safe Ethers Lib

[![NPM Version](https://badge.fury.io/js/%40safe-global%2Fsafe-ethers-lib.svg)](https://badge.fury.io/js/%40safe-global%2Fsafe-ethers-lib)
[![GitHub Release](https://img.shields.io/github/release/safe-global/safe-core-sdk.svg?style=flat)](https://github.com/safe-global/safe-core-sdk/releases)
[![GitHub](https://img.shields.io/github/license/safe-global/safe-core-sdk)](https://github.com/safe-global/safe-core-sdk/blob/main/LICENSE.md)

Ethers.js wrapper that contains some utilities and the Safe contracts types (generated with typechain ethers-v5). It is used to initialize the [Safe Core SDK](https://github.com/safe-global/safe-core-sdk/tree/main/packages/safe-core-sdk).

## Table of contents
* [Installation](#installation)
* [Build](#build)
* [Initialization](#initialization)
* [License](#license)
* [Contributors](#contributors)

## <a name="installation">Installation</a>

Install the package with yarn or npm:

```bash
yarn install
npm install
```

## <a name="build">Build</a>

Build the package with yarn or npm:

```bash
yarn build
npm build
```

## <a name="initialization">Initialization</a>

If the app integrating the SDK is using `Ethers` `v5`, create an instance of the `EthersAdapter`, where `signer` is the Ethereum account we are connecting and the one who will sign the transactions.

```js
import { ethers } from 'ethers'
import EthersAdapter from '@salmanbao/safe-ethers-lib'

const web3Provider = // ...
const provider = new ethers.providers.Web3Provider(web3Provider)
const safeOwner = provider.getSigner(0)

const ethAdapter = new EthersAdapter({
  ethers,
  signerOrProvider: safeOwner
})
```

Depending on whether the `ethAdapter` instance is used to sign/execute transactions or just call read-only methods, the `signerOrProvider` property can be a `Signer` or a `Provider`.

## <a name="license">License</a>

This library is released under MIT.

## <a name="contributors">Contributors</a>

- Germán Martínez ([germartinez](https://github.com/germartinez))
npm package: @salmanbao/safe-web3-lib
Description: Web3 library adapter to be used by Safe Core SDK
Author: Safe
Latest version: 1.9.1

# Safe Web3 Lib

[![NPM Version](https://badge.fury.io/js/%40safe-global%2Fsafe-web3-lib.svg)](https://badge.fury.io/js/%40safe-global%2Fsafe-web3-lib)
[![GitHub Release](https://img.shields.io/github/release/safe-global/safe-core-sdk.svg?style=flat)](https://github.com/safe-global/safe-core-sdk/releases)
[![GitHub](https://img.shields.io/github/license/safe-global/safe-core-sdk)](https://github.com/safe-global/safe-core-sdk/blob/main/LICENSE.md)

Web3.js wrapper that contains some utilities and the Safe contracts types (generated with typechain web3-v1). It is used to initialize the [Safe Core SDK](https://github.com/safe-global/safe-core-sdk/tree/main/packages/safe-core-sdk).

## Table of contents
* [Installation](#installation)
* [Build](#build)
* [Initialization](#initialization)
* [License](#license)
* [Contributors](#contributors)

## <a name="installation">Installation</a>

Install the package with yarn or npm:

```bash
yarn install
npm install
```

## <a name="build">Build</a>

Build the package with yarn or npm:

```bash
yarn build
npm build
```

## <a name="initialization">Initialization</a>

If the app integrating the SDK is using `Web3`, create an instance of the `Web3Adapter`, where `signerAddress` is the Ethereum account we are connecting and the one who will sign the transactions.

```js
import Web3 from 'web3'
import Web3Adapter from '@salmanbao/safe-web3-lib'

const provider = new Web3.providers.HttpProvider('http://localhost:8545')
const web3 = new Web3(provider)
const safeOwner = '0x<address>'

const ethAdapter = new Web3Adapter({
  web3,
  signerAddress: safeOwner
})
```

In case the `ethAdapter` instance is only used to execute read-only methods the `signerAddress` property can be omitted.

```js
const readOnlyEthAdapter = new Web3Adapter({ web3 })
```

## <a name="license">License</a>

This library is released under MIT.

## <a name="contributors">Contributors</a>

- Germán Martínez ([germartinez](https://github.com/germartinez))
npm package: @salmansaeed/ag-cli
Description: AG CLI for scaffolding React projects, components, services, and contexts
Author: Salman Saeed, Conscious Neurons LLC
Latest version: 1.0.21

# AG CLI

AG CLI is a project scaffolding tool built and maintained by **Conscious Neurons LLC**.  
Website: [https://consciousneurons.com](https://consciousneurons.com)
Built by Salman Saeed: [https://salmansaeed.us](https://salmansaeed.us)
🚀 AG CLI - Powered by Conscious Neurons LLC
https://consciousneurons.com
Built by Salman Saeed
https://salmansaeed.us
npm package: @salmansaeed/sg
Description: SG CLI for scaffolding React/Vite apps, components, services, and contexts
Author: Salman Saeed, Conscious Neurons LLC
Latest version: 1.0.16

# SG CLI

**React Power. Angular Simplicity. Vite Speed.**

🚀 **SG CLI** - Powered by **Conscious Neurons LLC**  
Website: [https://consciousneurons.com](https://consciousneurons.com)  
Built by Salman Saeed: [https://salmansaeed.us](https://salmansaeed.us)

---

## About SG CLI

**SG CLI** is a powerful command-line interface created by Salman Saeed. It combines the familiar folder structure and command patterns from **Angular** with the modern principles of **React Power** and **Vite Speed**, providing a ready-to-use boilerplate for web applications.

SG CLI comes with built-in navigation and project scaffolding, reducing setup overhead and making it ideal for developing regular applications efficiently.

---

## Installation

```bash
npx --verbose @salmansaeed/sg@latest new app <AppName>
```

---

## Core Commands

| Command                      | Description                                                  |
| ---------------------------- | ------------------------------------------------------------ |
| `sg new app <app-name>`      | Initialize a new React Vite app with Angular-style structure |
| `sg new gc <component-name>` | Create a Game Component                                      |
| `sg new cc <component-name>` | Create a Commerce Component                                  |
| `sg new svc <service-name>`  | Create a Service                                             |
| `sg new ctx <context-name>`  | Create a React Context                                       |
| `sg dev`                     | Start the development server                                 |
| `sg build`                   | Build the project for production                             |
| `sg deploy`                  | Deploy the project to your hosting environment               |

---

## Advanced Options

SG CLI supports additional flags to customize your app setup:

```bash
sg new app <app-name> --typescript --tailwind
```

---

## Tips for Effective Use

- Run `sg dev` for fast hot-reloading during development.
- Use `sg update` to keep dependencies and boilerplate up-to-date.
- Check `sg help` for a full list of available commands.

---

## Why SG CLI?

By merging Angular-style structure and commands with React Vite’s lightweight approach, **SG CLI** provides developers with a robust, flexible, and minimal setup.

It comes ready with routing, navigation, and a folder structure that scales with projects, making it the perfect starting point for many regular applications.

---

## Authorship

**SG CLI** is built and maintained by **Salman Saeed**.
For more information, visit **Conscious Neurons LLC**: [https://consciousneurons.com](https://consciousneurons.com)

---

## Sponsored By

**AG App**: [https://alba.gold](https://alba.gold)

✅ The key change is:

```bash

npx --verbose @salmansaeed/sg@latest new app <AppName>

```

so users always get the most recent version.
npm package: @salmanul/react-simple-timeline
Description: A simple Timeline Component using CSS.
Author: Salmanul Faris K
Latest version: 1.9.1


# React Simple Timeline

A modern and responsive React timeline component using basic CSS.
Checkout the [examples here](https://github.com/salmanul/react-simple-timeline)!

# Contents

- [Getting Started](#getting-started)
- [Usage](#usage)

# Getting started

```bash
# via yarn
yarn add @salmanul/react-simple-timeline

# via npm
npm install --save @salmanul/react-simple-timeline
```

# Usage

At the very minimum:

```jsx
import Timeline from '@salmanul/react-simple-timeline';
import '@salmanul/react-simple-timeline/styles/index.css';

const data =  {
      status: "initialized",
      nodes: [
        {
          title: "Initialized",
          dataIndex: "initialized"
        },
        {
          title: "Acknowledged",
          dataIndex: "acknowledged"
        },
        {
          title: "Processed",
          dataIndex: "processed"
        }
      ]
    }

ReactDOM.render(
  <div>
    <Timeline
      mode='horizontal'
      data={data}
    />
  </div>,
  document.getElementById('root')
)
```
npm package: @salmon-ui/icons
Description: A tree-shakeable Vue 3 icon library
Author: Owen
Latest version: 1.1.8

<h1 align="center">Salmon Icons</h1>
<p align="center">
  <img align="center" src="https://raw.githubusercontent.com/Owen-Tsai/salmon-icons/master/assets/banner.svg" alt="banner">
  <p align="center" color="gray">A tree-shakable icons library built for <a href="https://github.com/Owen-Tsai/salmon-ui">Salmon UI</a>.</p>
</p>

<!-- **A complete list of icons can be found here.** -->
**[Link to the complete list of icons](https://owen-cai.space/salmon-icons/)**

*`salmon-icons` requires Vue 3*

> **NOTICE** Since version `1.0.5-beta2` <br> salmon-icons is now a scoped package under @salmon-ui. Please use @salmon-ui/icons instead.

## Install

```sh
npm install @salmon-ui/icons
```

OR

```sh
yarn add @salmon-ui/icons
```

## Usage

Local registration:

```vue
<template>
  <heart-fill />
  <close class="custom-class" />
</template>

<script lang="ts" setup>
import {
  HeartFill,
  Close
} from '@salmon-ui/icons'
</script>
```

Alternatively, you can import all icons and register them all via a loop.

Note that the icon name might be reserved in HTML, or has the same name as one of your component, or your code of conduct prohibits the usage of single-word custom tags. When dealing with such circumstances, remember to specify an alias.

```js
import {
  At as IconAt,
  UserFill
} from '@salmon-ui/icons'
```

## Development

Put all your source icons (*.svg) into the `icons` directory, then run:

```sh
npm run generate:sfc
```

to generate vue components in `packages` directory.

Run

```sh
npm run build
```

to build the library. Bundled files will be written into `dist` folder.

## Other Scripts

Build library without type declarations:

```sh
npm run build:sfc
```

Generate type declarations only:

```sh
npm run build:types
```
npm package: @salmonco/react-loader-spinner
Description: You can display the loading status visually through the loader.
Author: salmonco
Latest version: 0.0.1

# react-loader-spinner

You can display the loading status visually through the loader.

## Screenshot

![fade0](https://github.com/salmonco/react-loader-spinner/assets/86469788/2d6a78ff-c3d8-4b72-b650-03ff973a9d6b)
![fade1](https://github.com/salmonco/react-loader-spinner/assets/86469788/db600b8e-47de-46b0-8c98-458c83bb286b)
![fade2](https://github.com/salmonco/react-loader-spinner/assets/86469788/71e12111-3909-483c-bb64-87a07581cac4)

You can resize the loader using margin.

## Installation

```
npm install @salmonco/react-loader-spinner
```

## Usage

```typescript
import { FadeLoader } from '@salmonco/react-loader-spinner';

<FadeLoader color="green" width={3} height={10} margin={8} />;
```

## Props

|Prop|Description|Type|Default|
|---|---|---|---|
|color|Color of the loader|string|salmon|
|width|Width of elements that make up the loader|number|5|
|height|Height of elements that make up the loader|number|15|
|radius|Border radius of elements that make up the loader|number|2|
|margin|Distance of elements from the center of the loader|number|10|

If you write it as a number, it will automatically be treated as px.

## Contributing

Contributions are always welcome!

## License

MIT
npm package: @salmuz/reverse-sentence
Description: Reverses the words of a sentence
Author: Juan Carranza Alarcón
Latest version: 0.1.0

# reverse-sentence

Reverses the words of a sentence

## Install

```sh
npm install @salmuz/reverse-sentence
```

## API

```js
require("reverse-sentence") => Function
reverse(sentence) => String
```

## Example

```js
const reverseSentence = require("reverse-sentence");
const sentence = "Hello Salmuz!";
const reversed = reverseSentence(sentence);
console.log(reversed) // Salmuz! Hello;

## License

MIT

```
npm package: @salocreative/react-accordion
Description: Simple React accordion component.
Author: Rich Comber
Latest version: 1.4.0

# react-accordion

Simple React accordion component

## Usage

Install

```
yarn add @salocreative/react-accordion
```

Include the component at the top of the component it's required in.

```
import Accordion from '@salocreative/react-accordion';
```

Implement as follows

```
const data = [
  {
    label: 'Accordion label 1',
    content: 'Lorem ipsum dolor sit amet'
  },
  {
    label: 'Accordion label 2',
    content: 'Lorem ipsum dolor sit amet'
  },
  {
    label: 'Example with jsx',
    content: (
      <div>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec scelerisque quis est eget vestibulum.
          Donec urna lorem, ornare non sollicitudin a, euismod quis purus.</p>
        <img src='https://placeholdit.imgix.net/~text?txtsize=24&txt=Image&w=150&h=150' />
        <p><button>A button</button></p>
      </div>
    )
  }
];

<Accordion data={ data } />

```

### Cofiguration options

as well as passing in the data array to populate the accordion you can also use the following config options:

- `multipleOpen: PropTypes.bool` default is `false` - toggles whether we have one or multiple items open at once
- `activeClickClose: PropTypes.bool` default is `true` - toggles functionality of whether a click on an open accordion closes it or we enforce at least one item being open
- `firstOpen: PropTypes.bool` default is `true` - toggles whether we start with the first item open



You can also set some style overrides for the core colours in the component

```
const styles = {
  titleBackground: '#F7F8F9',
  titleColor: '#000',
  titleBackgroundActive: '#000',
  titleColorActive: '#fff',
  contentBackground: '#fff',
  contentColor: '#000'
};

<Accordion { ...this.props } data={ data } styles={ styles } />

```

## LICENSE

MIT
npm package: @salocreative/react-loading-wrapper
Description: A loading wrapper and supporting components for handling async loading actions
Author: Rich Comber
Latest version: 1.0.1

# react-loading-wrapper

A loading wrapper and supporting components for handling async loading actions

## Install

```
yarn add @salocreative/react-loading-wrapper
```

## Usage

```
import LoadingWrapper from '@salocreative/react-ui';
```

implement as follows

```
<LoadingWrapper
  display={ displayContent }
  loading={ product.meta.fetching }
  error={ product.meta.failed }
  errorMessage={ ErrorMessages.getProductFailed.message }
  retryAction={ () => this.attemptProductFetch() }
>

 Wrapped content dependant on Async content goes here

</LoadingWrapper>
```

The Loading wrapper is designed to wrap content that depends on an Async action (or multiple) resolving and improve the user experience. It can show a loading spinner while requests are processing and also error messages and even emit retry actions on failure. With this in mind the wrapper needs/accepts the following props:

- `display` : boolean value of whether the content in the wrapper should display or not. This should be based on the response of the Async action and passed in from a function as required. e.g. request complete and response has data ets
- `loading` boolean value determines whether the loading spinner should show
- `error` : boolean value that sets whether error should be displayed
- `errorMessage` : string value that sets the error message for the wrapper if the error flag is set to true
- `retryAction` : optional function that can be used to trigger further fetch attempts if the previous one has failed
npm package: @salocreative/react-pagination
Description: Simple React pagination component.
Author: Rich Comber
Latest version: 2.1.0

# react-pagination

Simple React pagination component

## Usage

Install

```
yarn add @salocreative/react-pagination
```

Include the stylesheet in your project

```
@import '~@salocreative/react-pagination/src/scss/styles';
```

Include the component at the top of the component it's required in.

```
import Pagination from '@salocreative/react-pagination';
```

Basic implementation requirement

```
<Pagination
    total={ this.state.total }
    page={ this.state.page }
    changePage={ (e) => this.changePage(e) } />
```

Example implementation as follows

```
class Demo extends Component {

  constructor(props) {
    super(props);
    this.state = {
      total: 52,
      page: 1,
      perPage: 25
    }
  }

  changePage(page) {
    return () => {
        this.setState({page: parseInt(page)});
    };
  }

  render() {
    return (
      <Pagination
          total={ this.state.total }
          page={ this.state.page }
          perPage={ this.state.perPage }
          changePage={ (page) => this.changePage(page) } />
    );
  }

}

render(<Demo />, document.getElementById('demo'));

```

## LICENSE

MIT
npm package: @salocreative/react-redux-alerts
Description: React-Redux component for handling system alerts
Author: Rich Comber
Latest version: 5.0.1

# react-redux-alerts

Description of component and any special notes

## Usage

Install

```
yarn add @salocreative/react-redux-alerts
```

Include the Alerts component at the top of the component it's required in.

```
import { Alerts } from '@salocreative/react-redux-alerts';
```

Implement as follows

```
<Alerts alerts={ this.props.systemAlerts } />
```

In order to make sure the alerts are in your state you need to include the system alerts reducer into your combine reducer function.

in your reducer index include:

```
import { systemAlerts } from '@salocreative/react-redux-alerts';
```
and add to your combine reducer function. Next make sure that `systemAlerts` is mapped to props and connected to your component

## ADD ALERTS
You can add alerts either via the `API_FAILURE` or `ADD_ALERT` action types. Both of these should be imported from this package. Although functionality is currently the same they are deliberately seperated for future development.

Both actions need to be dispatched with a payload as below:

```
return {
    type: API_FAILURE,
    payload: {
      errorMessage: {
       type: 'error',
       message: 'My failure message goes here'
     }
    }
};

```

or ADD_ALERT as per:

```
return {
   type: ADD_ALERT,
   payload: {
     message: {
       type: 'success',
       message: 'My alert message goes here'
     }
   }
 };
```

## Setting alert timeout

The alerts will automatically remove themselves after 5 seconds. You can customise this in the payload by setting an additional key in the message of time (this is in seconds). eg.

```
return {
   type: ADD_ALERT,
   payload: {
     message: {
       type: 'success',
       message: 'My alert message goes here',
       time: 20
     }
   }
 };
```

## Remove Alerts
Currently alerts timeout after 5s and are removed from state. It is possible to manually remove all alerts from state via the following action types

```
return {
   type: CLEAR_ALL_SYSTEM_ALERTS

};
```

### Further Development
- [ ] Add ability to set dismissable true/false
- [x] Ability to set timeouts per alert
- [x] Improve documentation

## LICENSE

MIT
npm package: @salomaosnff/acl
Description: Access Control List for Javascript
Latest version: 1.0.0

# Access Control List For JavaScript

## Install

```bash
npm i --save @salomaosnff/acl
```

## Create a Role
```javascript
const { ACL, ACLRole } = require('@salomaosnff/acl')
const guest = new ACLRole('guest', ['read'])
const user = new ACLRole('user', ['create'])

user.extends(guest)

const list = new ACL({ guest, user })

// Or
const list = ACL.fromJSON({
  guest: {
    permissions: ['read']
  },
  user: {
    permissions: ['create'],
    extends: ['guest']
  }
})
```

## Create a user
```javascript
const user = {
  name: 'John',
  roles: ['guest']
}

user.acl = new ACLUser({
  roles: user.roles,
})
```

## Check Roles
```javascript
user.acl.is('guest') // true
user.acl.is('user') // false

// Conditional (and, or, not)
user.acl.is({
  or: ['guest', 'user'] // Is guest or user
}) // true

user.acl.is({
  and: ['guest', 'user'] // Is guest and user
}) // false

user.acl.is({
  not: 'user' // Not is user
}) // true


user.acl.is({
  // Is guest or Not is user and is guest
  or: [
    { and: 'guest' },
    { not: 'user', and: 'guest' },
  ]
})
```
## Check permissions

```javascript
user.acl.can('edit') // false
user.acl.can('read') // true

// Conditionals (and, or, not)
user.alc.can({
  not: 'edit'
}) // true
```
npm package: @salomaosnff/express-router-map
Description: Map Express routes
Author: Salomão Neto
Latest version: 1.0.0

# Express Router Map

## Install

```bash
npm i --save @salomaosnff/express-router-map
```

## Example

```javascript
const express = require("express");
const RouterMap = require("@salomaosnff/express-router-map");

const app = express();

// Create RouterMap instance
const mainRouter = new RouterMap({
  // Set your routes here
  routes: {
    "/": (req, res) => res.send("Welcome to home!"),
    "/donate": (req, res) => res.send("Please, pay me a coffee."),
    "/error": (req, res, next) => next(new Error("Ops!"))
  },

  // NotFound Handler
  notFound: (req, res, next) => next(new Error("Not Found")),

  // Error Handler
  error: (err, req, res, next) => {
    res.send(`An error has occurred: ${err.message}`);
  }
});

// Transforms to Express Router
app.use(mainRouter.toRouter());

app.listen(8080, () => console.log("Server is running..."));
```

## Methods and Middleware stack

```javascript
new RouterMap({
  routes: {
    "/users": {
      GET: UsersController.listAll,
      POST: [checkAuth(), UsersController.create] // Use an array to define a stack of middlewares to execute!
    },
    "/users/:id": {
      GET: UsersController.getOne,
      PUT: [checkAuth(), UsersController.updateOne],
      DELETE: [checkAuth(), UsersController.removeOne]
    }
  }
});
```

## Rest API Example

```javascript
// products.js
module.exports = new RouterMap({
  routes: {
    "/": {
      GET: (req, res) => res.send("List All Products"),
      POST: (req, res) => res.send("Product Created!"),
      ALL: (req, res) => res.send("Method Not Allowed!")
    },
    "/:id": {
      GET: (req, res) => res.send("Show Product details"),
      PUT: (req, res) => res.send("Product Updated!"),
      DELETE: (req, res) => res.send("Product Removed!"),
      ALL: (req, res) => res.send("Method Not Allowed!")
    }
  }
});
```

```javascript
// api.js
module.exports = new RouterMap({
  routes: {
    "/": (req, res) => res.send("Explore the API!")
  },
  // Set API Entrypoints here
  use: {
    "/products": productsMap
  },
  notFound: (req, res, next) => next(new Error("Entrypoint not Found."))
});
```

```javascript
// router.js
const apiMap = require("./api");

module.exports = new RouterMap({
  // Set pages here
  routes: {
    "/": (req, res) => res.send("Website Homepage")
  },

  // Set sub-applications here
  use: {
    "/api": apiMap
  }
});
```
npm package: @salomaosnff/mp3-downloader
Description: ## Instalação: ```bash $ sudo npm install -g @salomaosnff/mp3-downloader ```
Author: Salomão Neto
Latest version: 1.0.3

# MP3 Downloader

## Instalação:
```bash
$ sudo npm install -g @salomaosnff/mp3-downloader
```

## Usando
```bash
$ mp3 <nome da musica> <opcoes>
```

| Opção     | Ação                  |
| ----------| ----------------------|
| --parallel| Baixa todas as  músicas selecionadas  ao mesmo tempo|