@sogni-ai/sogni-client 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +3 -0
  2. package/dist/Account/CurrentAccount.d.ts +25 -0
  3. package/dist/Account/CurrentAccount.js +71 -0
  4. package/dist/Account/CurrentAccount.js.map +1 -0
  5. package/dist/Account/index.d.ts +23 -0
  6. package/dist/Account/index.js +139 -0
  7. package/dist/Account/index.js.map +1 -0
  8. package/dist/Account/types.d.ts +16 -0
  9. package/dist/Account/types.js +3 -0
  10. package/dist/Account/types.js.map +1 -0
  11. package/dist/ApiClient/ApiClient.d.ts +42 -0
  12. package/dist/ApiClient/ApiClient.js +79 -0
  13. package/dist/ApiClient/ApiClient.js.map +1 -0
  14. package/dist/ApiClient/WebSocketClient/ErrorCode.d.ts +7 -0
  15. package/dist/ApiClient/WebSocketClient/ErrorCode.js +18 -0
  16. package/dist/ApiClient/WebSocketClient/ErrorCode.js.map +1 -0
  17. package/dist/ApiClient/WebSocketClient/events.d.ts +83 -0
  18. package/dist/ApiClient/WebSocketClient/events.js +3 -0
  19. package/dist/ApiClient/WebSocketClient/events.js.map +1 -0
  20. package/dist/ApiClient/WebSocketClient/index.d.ts +28 -0
  21. package/dist/ApiClient/WebSocketClient/index.js +161 -0
  22. package/dist/ApiClient/WebSocketClient/index.js.map +1 -0
  23. package/dist/ApiClient/WebSocketClient/messages.d.ts +5 -0
  24. package/dist/ApiClient/WebSocketClient/messages.js +3 -0
  25. package/dist/ApiClient/WebSocketClient/messages.js.map +1 -0
  26. package/dist/ApiClient/WebSocketClient/types.d.ts +1 -0
  27. package/dist/ApiClient/WebSocketClient/types.js +3 -0
  28. package/dist/ApiClient/WebSocketClient/types.js.map +1 -0
  29. package/dist/ApiClient/events.d.ts +19 -0
  30. package/dist/ApiClient/events.js +3 -0
  31. package/dist/ApiClient/events.js.map +1 -0
  32. package/dist/ApiGroup.d.ts +15 -0
  33. package/dist/ApiGroup.js +11 -0
  34. package/dist/ApiGroup.js.map +1 -0
  35. package/dist/Projects/AvailableModels.d.ts +17 -0
  36. package/dist/Projects/AvailableModels.js +19 -0
  37. package/dist/Projects/AvailableModels.js.map +1 -0
  38. package/dist/Projects/Job.d.ts +30 -0
  39. package/dist/Projects/Job.js +40 -0
  40. package/dist/Projects/Job.js.map +1 -0
  41. package/dist/Projects/Project.d.ts +42 -0
  42. package/dist/Projects/Project.js +71 -0
  43. package/dist/Projects/Project.js.map +1 -0
  44. package/dist/Projects/createJobRequestMessage.d.ts +63 -0
  45. package/dist/Projects/createJobRequestMessage.js +68 -0
  46. package/dist/Projects/createJobRequestMessage.js.map +1 -0
  47. package/dist/Projects/index.d.ts +38 -0
  48. package/dist/Projects/index.js +224 -0
  49. package/dist/Projects/index.js.map +1 -0
  50. package/dist/Projects/models.json +8906 -0
  51. package/dist/Projects/types/EstimationResponse.d.ts +40 -0
  52. package/dist/Projects/types/EstimationResponse.js +3 -0
  53. package/dist/Projects/types/EstimationResponse.js.map +1 -0
  54. package/dist/Projects/types/index.d.ts +53 -0
  55. package/dist/Projects/types/index.js +3 -0
  56. package/dist/Projects/types/index.js.map +1 -0
  57. package/dist/index.d.ts +26 -0
  58. package/dist/index.js +53 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/lib/EIP712Helper.d.ts +13 -0
  61. package/dist/lib/EIP712Helper.js +39 -0
  62. package/dist/lib/EIP712Helper.js.map +1 -0
  63. package/dist/lib/Entity.d.ts +11 -0
  64. package/dist/lib/Entity.js +22 -0
  65. package/dist/lib/Entity.js.map +1 -0
  66. package/dist/lib/RestClient.d.ts +18 -0
  67. package/dist/lib/RestClient.js +69 -0
  68. package/dist/lib/RestClient.js.map +1 -0
  69. package/dist/lib/TypedEventEmitter.d.ts +28 -0
  70. package/dist/lib/TypedEventEmitter.js +46 -0
  71. package/dist/lib/TypedEventEmitter.js.map +1 -0
  72. package/dist/lib/base64.d.ts +2 -0
  73. package/dist/lib/base64.js +15 -0
  74. package/dist/lib/base64.js.map +1 -0
  75. package/dist/lib/isNodejs.d.ts +2 -0
  76. package/dist/lib/isNodejs.js +5 -0
  77. package/dist/lib/isNodejs.js.map +1 -0
  78. package/dist/types/json.d.ts +5 -0
  79. package/dist/types/json.js +3 -0
  80. package/dist/types/json.js.map +1 -0
  81. package/package.json +49 -0
@@ -0,0 +1,40 @@
1
+ export interface EstimationResponse {
2
+ request: Request;
3
+ rate: Rate;
4
+ quote: Quote;
5
+ }
6
+ export interface Quote {
7
+ model: Model;
8
+ job: Job;
9
+ project: Job;
10
+ }
11
+ export interface Job {
12
+ costInRenderSec: string;
13
+ costInUSD: string;
14
+ costInToken: string;
15
+ calculatedStepCount?: number;
16
+ }
17
+ export interface Model {
18
+ weight: string;
19
+ secPerStep: string;
20
+ secPerPreview: string;
21
+ secForCN: string;
22
+ }
23
+ export interface Rate {
24
+ costPerBaseHQRenderInUSD: string;
25
+ tokenMarkePriceUSD: string;
26
+ costPerRenderSecUSD: string;
27
+ costPerRenderSecToken: string;
28
+ network: string;
29
+ networkCostMultiplier: string;
30
+ }
31
+ export interface Request {
32
+ model: string;
33
+ name: string;
34
+ imageCount: number;
35
+ stepCount: number;
36
+ previewCount: number;
37
+ cnEnabled: boolean;
38
+ denoiseStrength: string;
39
+ time: Date;
40
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=EstimationResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EstimationResponse.js","sourceRoot":"","sources":["../../../src/Projects/types/EstimationResponse.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ import { SupernetType } from '../../ApiClient/WebSocketClient/types';
2
+ export interface AiModel {
3
+ isSD3: boolean;
4
+ modelShortName: string;
5
+ isIOSslowest: boolean;
6
+ hasOriginalVersionOnly: boolean;
7
+ isUserModel: boolean;
8
+ isTurboXL: boolean;
9
+ isRealistic: boolean;
10
+ isArtistic: boolean;
11
+ tier: string;
12
+ splitAttentionSuffix: string;
13
+ isSD3XL: boolean;
14
+ originalAttentionSuffix: string;
15
+ isLCM: boolean;
16
+ zipWeight: number;
17
+ modelId: string;
18
+ modelVersion: string;
19
+ parentId: string;
20
+ quantized: boolean;
21
+ isXL: boolean;
22
+ splitAttentionV2Suffix: string;
23
+ supportsAttentionV2: boolean;
24
+ supportsControlNet: boolean;
25
+ supportsEncoder: boolean;
26
+ onlySplitEinsumV2available: boolean;
27
+ customSize?: number[];
28
+ }
29
+ export interface ProjectParams {
30
+ modelId: string;
31
+ positivePrompt: string;
32
+ negativePrompt: string;
33
+ stylePrompt: string;
34
+ steps: number;
35
+ guidance: number;
36
+ seed: string;
37
+ numberOfImages: number;
38
+ }
39
+ export type ImageUrlParams = {
40
+ imageId: string;
41
+ jobId: string;
42
+ type: 'preview' | 'complete' | 'startingImage' | 'cnImage';
43
+ startContentType?: string;
44
+ };
45
+ export interface EstimateRequest {
46
+ network: SupernetType;
47
+ model: string;
48
+ imageCount: number;
49
+ stepCount: number;
50
+ previewCount: number;
51
+ cnEnabled?: boolean;
52
+ denoiseStrength?: number;
53
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Projects/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import Account from './Account';
2
+ import Projects from './Projects';
3
+ interface BaseConfig {
4
+ appId: string;
5
+ restEndpoint: string;
6
+ socketEndpoint: string;
7
+ }
8
+ interface SimpleConfig extends BaseConfig {
9
+ testnet: boolean;
10
+ }
11
+ interface FullConfig extends BaseConfig {
12
+ jsonRpcUrl: string;
13
+ }
14
+ type SogniClientConfig = SimpleConfig | FullConfig;
15
+ declare class SogniClient {
16
+ account: Account;
17
+ projects: Projects;
18
+ private constructor();
19
+ get currentAccount(): import("./Account/CurrentAccount").default;
20
+ /**
21
+ * Instance creation may involve async operations, so we use a static method
22
+ * @param config
23
+ */
24
+ static createInstance(config: SogniClientConfig): Promise<SogniClient>;
25
+ }
26
+ export default SogniClient;
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const ethers_1 = require("ethers");
16
+ const Account_1 = __importDefault(require("./Account"));
17
+ const ApiClient_1 = __importDefault(require("./ApiClient/ApiClient"));
18
+ const EIP712Helper_1 = __importDefault(require("./lib/EIP712Helper"));
19
+ const Projects_1 = __importDefault(require("./Projects"));
20
+ class SogniClient {
21
+ constructor(config) {
22
+ this.account = new Account_1.default(config);
23
+ this.projects = new Projects_1.default(config);
24
+ }
25
+ get currentAccount() {
26
+ return this.account.currentAccount;
27
+ }
28
+ /**
29
+ * Instance creation may involve async operations, so we use a static method
30
+ * @param config
31
+ */
32
+ static createInstance(config) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ const client = new ApiClient_1.default(config.restEndpoint, config.socketEndpoint, config.appId);
35
+ let provider;
36
+ if ('jsonRpcUrl' in config) {
37
+ provider = new ethers_1.JsonRpcProvider(config.jsonRpcUrl);
38
+ }
39
+ else {
40
+ provider = (0, ethers_1.getDefaultProvider)(config.testnet ? 84532 : 8453);
41
+ }
42
+ const chainId = yield provider.getNetwork().then((network) => network.chainId);
43
+ const eip712 = new EIP712Helper_1.default({
44
+ name: 'Sogni-testnet',
45
+ version: '1',
46
+ chainId: chainId.toString()
47
+ });
48
+ return new SogniClient({ client, provider, eip712 });
49
+ });
50
+ }
51
+ }
52
+ exports.default = SogniClient;
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,mCAA+E;AAC/E,wDAAgC;AAChC,sEAA8C;AAE9C,sEAA8C;AAC9C,0DAAkC;AAkBlC,MAAM,WAAW;IAIf,YAAoB,MAAiB;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAQ,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAO,cAAc,CAAC,MAAyB;;YACnD,MAAM,MAAM,GAAG,IAAI,mBAAS,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACvF,IAAI,QAA0B,CAAC;YAC/B,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;gBAC3B,QAAQ,GAAG,IAAI,wBAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,IAAA,2BAAkB,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,IAAI,sBAAY,CAAC;gBAC9B,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,GAAG;gBACZ,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;aAC5B,CAAC,CAAC;YACH,OAAO,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;KAAA;CACF;AAED,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { AbstractSigner } from 'ethers';
2
+ type SupportedTypes = 'authentication' | 'signup';
3
+ interface Options {
4
+ name: string;
5
+ version: string;
6
+ chainId: string;
7
+ }
8
+ declare class EIP712Helper {
9
+ private readonly EIP712Domain;
10
+ constructor(options: Options);
11
+ signTypedData(signer: AbstractSigner, type: SupportedTypes, data: Record<string, string | number>): Promise<string>;
12
+ }
13
+ export default EIP712Helper;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const EIP712_TYPES = {
4
+ authentication: {
5
+ Authentication: [
6
+ { name: 'walletAddress', type: 'address' },
7
+ { name: 'nonce', type: 'string' }
8
+ ]
9
+ },
10
+ signup: {
11
+ Signup: [
12
+ { name: 'appid', type: 'string' },
13
+ { name: 'username', type: 'string' },
14
+ { name: 'email', type: 'string' },
15
+ { name: 'subscribe', type: 'uint256' },
16
+ { name: 'walletAddress', type: 'address' },
17
+ { name: 'nonce', type: 'string' }
18
+ ]
19
+ }
20
+ };
21
+ class EIP712Helper {
22
+ constructor(options) {
23
+ this.EIP712Domain = {
24
+ name: options.name,
25
+ version: options.version,
26
+ chainId: options.chainId,
27
+ verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC'
28
+ };
29
+ }
30
+ signTypedData(signer, type, data) {
31
+ const types = EIP712_TYPES[type];
32
+ if (!types) {
33
+ throw new Error(`Unknown type: ${type}`);
34
+ }
35
+ return signer.signTypedData(this.EIP712Domain, types, data);
36
+ }
37
+ }
38
+ exports.default = EIP712Helper;
39
+ //# sourceMappingURL=EIP712Helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EIP712Helper.js","sourceRoot":"","sources":["../../src/lib/EIP712Helper.ts"],"names":[],"mappings":";;AAKA,MAAM,YAAY,GAAwC;IACxD,cAAc,EAAE;QACd,cAAc,EAAE;YACd,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE;YAC1C,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;SAClC;KACF;IACD,MAAM,EAAE;QACN,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;YACjC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;YACpC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;YACjC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;YACtC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE;YAC1C,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;SAClC;KACF;CACF,CAAC;AAQF,MAAM,YAAY;IAGhB,YAAY,OAAgB;QAC1B,IAAI,CAAC,YAAY,GAAG;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,iBAAiB,EAAE,4CAA4C;SAChE,CAAC;IACJ,CAAC;IAED,aAAa,CACX,MAAsB,EACtB,IAAoB,EACpB,IAAqC;QAErC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,kBAAe,YAAY,CAAC"}
@@ -0,0 +1,11 @@
1
+ import TypedEventEmitter from './TypedEventEmitter';
2
+ type EntityEvents<D> = {
3
+ updated: Partial<D>;
4
+ };
5
+ declare abstract class Entity<D> extends TypedEventEmitter<EntityEvents<D>> {
6
+ protected data: D;
7
+ constructor(data: D);
8
+ _update(delta: Partial<D>): void;
9
+ toJSON(): D;
10
+ }
11
+ export default Entity;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const lodash_1 = require("lodash");
7
+ const TypedEventEmitter_1 = __importDefault(require("./TypedEventEmitter"));
8
+ class Entity extends TypedEventEmitter_1.default {
9
+ constructor(data) {
10
+ super();
11
+ this.data = data;
12
+ }
13
+ _update(delta) {
14
+ this.data = Object.assign(Object.assign({}, this.data), delta);
15
+ this.emit('updated', delta);
16
+ }
17
+ toJSON() {
18
+ return (0, lodash_1.cloneDeep)(this.data);
19
+ }
20
+ }
21
+ exports.default = Entity;
22
+ //# sourceMappingURL=Entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../../src/lib/Entity.ts"],"names":[],"mappings":";;;;;AAAA,mCAAmC;AACnC,4EAAoD;AAMpD,MAAe,MAAU,SAAQ,2BAAkC;IAGjE,YAAY,IAAO;QACjB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,KAAiB;QACvB,IAAI,CAAC,IAAI,mCAAQ,IAAI,CAAC,IAAI,GAAK,KAAK,CAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM;QACJ,OAAO,IAAA,kBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,18 @@
1
+ import TypedEventEmitter, { EventMap } from './TypedEventEmitter';
2
+ import { JSONValue } from '../types/json';
3
+ export interface AuthData {
4
+ token: string;
5
+ }
6
+ declare class RestClient<E extends EventMap = never> extends TypedEventEmitter<E> {
7
+ readonly baseUrl: string;
8
+ _auth: AuthData | null;
9
+ constructor(baseUrl: string);
10
+ get auth(): AuthData | null;
11
+ set auth(auth: AuthData | null);
12
+ private formatUrl;
13
+ private request;
14
+ private processResponse;
15
+ get<T = JSONValue>(path: string, query?: Record<string, string>): Promise<T>;
16
+ post<T = JSONValue>(path: string, body?: Record<string, unknown>): Promise<T>;
17
+ }
18
+ export default RestClient;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const ApiClient_1 = require("../ApiClient/ApiClient");
16
+ const TypedEventEmitter_1 = __importDefault(require("./TypedEventEmitter"));
17
+ class RestClient extends TypedEventEmitter_1.default {
18
+ constructor(baseUrl) {
19
+ super();
20
+ this._auth = null;
21
+ this.baseUrl = baseUrl;
22
+ }
23
+ get auth() {
24
+ return this._auth;
25
+ }
26
+ set auth(auth) {
27
+ this._auth = auth;
28
+ }
29
+ formatUrl(relativeUrl, query = {}) {
30
+ const url = new URL(relativeUrl, this.baseUrl);
31
+ Object.keys(query).forEach((key) => {
32
+ url.searchParams.append(key, query[key]);
33
+ });
34
+ return url.toString();
35
+ }
36
+ request(url, options = {}) {
37
+ return fetch(url, Object.assign(Object.assign({}, options), { headers: Object.assign(Object.assign({}, (options.headers || {})), (this.auth ? { Authorization: this.auth.token } : {})) })).then((r) => this.processResponse(r));
38
+ }
39
+ processResponse(response) {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ let responseData;
42
+ try {
43
+ responseData = yield response.json();
44
+ }
45
+ catch (e) {
46
+ console.error('Failed to parse response:', e);
47
+ throw new Error('Failed to parse response');
48
+ }
49
+ if (!response.ok) {
50
+ throw new ApiClient_1.ApiError(response.status, responseData);
51
+ }
52
+ return responseData;
53
+ });
54
+ }
55
+ get(path, query = {}) {
56
+ return this.request(this.formatUrl(path, query), query);
57
+ }
58
+ post(path, body = {}) {
59
+ return this.request(this.formatUrl(path), {
60
+ method: 'POST',
61
+ headers: {
62
+ 'Content-Type': 'application/json'
63
+ },
64
+ body: JSON.stringify(body)
65
+ });
66
+ }
67
+ }
68
+ exports.default = RestClient;
69
+ //# sourceMappingURL=RestClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestClient.js","sourceRoot":"","sources":["../../src/lib/RestClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,sDAAoE;AACpE,4EAAkE;AAOlE,MAAM,UAAuC,SAAQ,2BAAoB;IAIvE,YAAY,OAAe;QACzB,KAAK,EAAE,CAAC;QAHV,UAAK,GAAoB,IAAI,CAAC;QAI5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,IAAqB;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAEO,SAAS,CAAC,WAAmB,EAAE,QAAgC,EAAE;QACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACjC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAEO,OAAO,CAAgB,GAAW,EAAE,UAAuB,EAAE;QACnE,OAAO,KAAK,CAAC,GAAG,kCACX,OAAO,KACV,OAAO,kCACF,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,GACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAE1D,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAM,CAAC,CAAC;IAC/C,CAAC;IAEa,eAAe,CAAC,QAAkB;;YAC9C,IAAI,YAAY,CAAC;YACjB,IAAI,CAAC;gBACH,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,oBAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAgC,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,YAAyB,CAAC;QACnC,CAAC;KAAA;IAED,GAAG,CAAgB,IAAY,EAAE,QAAgC,EAAE;QACjE,OAAO,IAAI,CAAC,OAAO,CAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAgB,IAAY,EAAE,OAAgC,EAAE;QAClE,OAAO,IAAI,CAAC,OAAO,CAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;CACF;AAED,kBAAe,UAAU,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type EventMap = {
2
+ [key: string]: unknown;
3
+ };
4
+ export type EventListener<D> = (data: D) => void;
5
+ declare abstract class TypedEventEmitter<E extends EventMap> {
6
+ protected listeners: {
7
+ [K in keyof E]?: EventListener<E[K]>[];
8
+ };
9
+ /**
10
+ * Add an event listener, returns a function that can be called to remove the listener
11
+ * @param event
12
+ * @param listener
13
+ */
14
+ on<T extends keyof E>(event: T, listener: EventListener<E[T]>): () => void;
15
+ /**
16
+ * Remove an event listener
17
+ * @param event
18
+ * @param listener
19
+ */
20
+ off<T extends keyof E>(event: T, listener: EventListener<E[T]>): void;
21
+ /**
22
+ * Dispatch an event to all listeners
23
+ * @param event
24
+ * @param data
25
+ */
26
+ emit<T extends keyof E>(event: T, data: E[T]): void;
27
+ }
28
+ export default TypedEventEmitter;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class TypedEventEmitter {
4
+ constructor() {
5
+ this.listeners = {};
6
+ }
7
+ /**
8
+ * Add an event listener, returns a function that can be called to remove the listener
9
+ * @param event
10
+ * @param listener
11
+ */
12
+ on(event, listener) {
13
+ if (!this.listeners[event]) {
14
+ this.listeners[event] = [];
15
+ }
16
+ this.listeners[event].push(listener);
17
+ return () => {
18
+ this.off(event, listener);
19
+ };
20
+ }
21
+ /**
22
+ * Remove an event listener
23
+ * @param event
24
+ * @param listener
25
+ */
26
+ off(event, listener) {
27
+ if (!this.listeners[event]) {
28
+ return;
29
+ }
30
+ this.listeners[event] = this.listeners[event].filter((l) => l !== listener);
31
+ }
32
+ /**
33
+ * Dispatch an event to all listeners
34
+ * @param event
35
+ * @param data
36
+ */
37
+ emit(event, data) {
38
+ const listeners = this.listeners[event];
39
+ if (!listeners) {
40
+ return;
41
+ }
42
+ listeners.forEach((listener) => listener(data));
43
+ }
44
+ }
45
+ exports.default = TypedEventEmitter;
46
+ //# sourceMappingURL=TypedEventEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypedEventEmitter.js","sourceRoot":"","sources":["../../src/lib/TypedEventEmitter.ts"],"names":[],"mappings":";;AAMA,MAAe,iBAAiB;IAAhC;QACY,cAAS,GAA+C,EAAE,CAAC;IAyCvE,CAAC;IAvCC;;;;OAIG;IACH,EAAE,CAAoB,KAAQ,EAAE,QAA6B;QAC3D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAoB,KAAQ,EAAE,QAA6B;QAC5D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAoB,KAAQ,EAAE,IAAU;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;CACF;AAED,kBAAe,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function base64Encode(str: string): string;
2
+ export declare function base64Decode(str: string): string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.base64Encode = base64Encode;
7
+ exports.base64Decode = base64Decode;
8
+ const isNodejs_1 = __importDefault(require("./isNodejs"));
9
+ function base64Encode(str) {
10
+ return isNodejs_1.default ? Buffer.from(str).toString('base64') : btoa(str);
11
+ }
12
+ function base64Decode(str) {
13
+ return isNodejs_1.default ? Buffer.from(str, 'base64').toString() : atob(str);
14
+ }
15
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/lib/base64.ts"],"names":[],"mappings":";;;;;AAEA,oCAEC;AAED,oCAEC;AARD,0DAAkC;AAElC,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,kBAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpE,CAAC;AAED,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,kBAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const isNodejs: boolean;
2
+ export default isNodejs;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const isNodejs = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
4
+ exports.default = isNodejs;
5
+ //# sourceMappingURL=isNodejs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isNodejs.js","sourceRoot":"","sources":["../../src/lib/isNodejs.ts"],"names":[],"mappings":";;AAAA,MAAM,QAAQ,GACZ,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC;AAE9F,kBAAe,QAAQ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type JSONValue = undefined | null | string | number | boolean | JSONObject | JSONArray;
2
+ export type JSONObject = {
3
+ [x: string]: JSONValue;
4
+ };
5
+ export type JSONArray = Array<JSONValue>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/types/json.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@sogni-ai/sogni-client",
3
+ "publishConfig": {
4
+ "access": "public"
5
+ },
6
+ "version": "0.0.1",
7
+ "description": "Sogni.ai API wrapper",
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "files": [
11
+ "README.md",
12
+ "dist/"
13
+ ],
14
+ "scripts": {
15
+ "clean": "rimraf ./dist",
16
+ "prepublish": "npm run build",
17
+ "build": "npm run clean && tsc --project tsconfig.json",
18
+ "watch": "npm run clean && tsc --watch --project tsconfig.json",
19
+ "prettier": "prettier --check ./src",
20
+ "prettier:fix": "prettier --write ./src"
21
+ },
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/Sogni-AI/sogni-client.git"
25
+ },
26
+ "author": "",
27
+ "license": "ISC",
28
+ "bugs": {
29
+ "url": "https://github.com/Sogni-AI/sogni-client/issues"
30
+ },
31
+ "homepage": "https://github.com/Sogni-AI/sogni-client#readme",
32
+ "dependencies": {
33
+ "@lukeed/uuid": "^2.0.1",
34
+ "ethers": "^6.13.4",
35
+ "isomorphic-ws": "^5.0.0",
36
+ "js-cookie": "^3.0.5",
37
+ "jwt-decode": "^4.0.0",
38
+ "lodash": "^4.17.21",
39
+ "ws": "^8.18.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/js-cookie": "^3.0.6",
43
+ "@types/lodash": "^4.17.13",
44
+ "@types/ws": "^8.5.13",
45
+ "prettier": "^3.3.3",
46
+ "rimraf": "^6.0.1",
47
+ "typescript": "^5.6.3"
48
+ }
49
+ }