@oesp/sync-http 5.0.0 → 6.0.0

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.
package/dist/env.js CHANGED
@@ -2,8 +2,9 @@ export function getSyncConfig(overrides = {}) {
2
2
  const defaultBaseUrl = "http://oesp-sync-server:8000";
3
3
  let envBaseUrl;
4
4
  // Node.js
5
- if (typeof process !== "undefined" && process.env?.OESP_SYNC_BASE_URL) {
6
- envBaseUrl = process.env.OESP_SYNC_BASE_URL;
5
+ const nodeEnv = globalThis?.process?.env;
6
+ if (nodeEnv?.OESP_SYNC_BASE_URL) {
7
+ envBaseUrl = nodeEnv.OESP_SYNC_BASE_URL;
7
8
  }
8
9
  // Vite / Web
9
10
  // @ts-ignore
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oesp/sync-http",
3
- "version": "5.0.0",
3
+ "version": "6.0.0",
4
4
  "private": false,
5
5
  "description": "OESP HTTP Sync Client",
6
6
  "license": "MIT",
@@ -22,7 +22,7 @@
22
22
  "access": "public"
23
23
  },
24
24
  "dependencies": {
25
- "@oesp/core": "5.0.0"
25
+ "@oesp/core": "6.0.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "tsup": "^8.0.1",
package/dist/index.cjs DELETED
@@ -1,133 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var index_exports = {};
22
- __export(index_exports, {
23
- OESPSyncClient: () => OESPSyncClient,
24
- getSyncConfig: () => getSyncConfig
25
- });
26
- module.exports = __toCommonJS(index_exports);
27
-
28
- // src/SyncClient.ts
29
- var import_core = require("@oesp/core");
30
-
31
- // src/env.ts
32
- var import_meta = {};
33
- function getSyncConfig(overrides = {}) {
34
- const defaultBaseUrl = "http://oesp-sync-server:8000";
35
- let envBaseUrl;
36
- if (typeof process !== "undefined" && process.env?.OESP_SYNC_BASE_URL) {
37
- envBaseUrl = process.env.OESP_SYNC_BASE_URL;
38
- }
39
- if (typeof import_meta !== "undefined" && import_meta.env?.VITE_OESP_SYNC_BASE_URL) {
40
- envBaseUrl = import_meta.env.VITE_OESP_SYNC_BASE_URL;
41
- }
42
- return {
43
- baseUrl: overrides.baseUrl || envBaseUrl || defaultBaseUrl,
44
- apiKey: overrides.apiKey,
45
- timeoutMs: overrides.timeoutMs || 3e4,
46
- maxChunkBytes: overrides.maxChunkBytes || 5e5
47
- // 500KB
48
- };
49
- }
50
-
51
- // src/SyncClient.ts
52
- var OESPSyncClient = class {
53
- constructor(opts) {
54
- this.config = getSyncConfig(opts);
55
- this.sha256 = opts.sha256;
56
- }
57
- setBaseUrl(url) {
58
- this.config.baseUrl = url;
59
- }
60
- /**
61
- * Synchronise une liste de tokens vers le serveur
62
- */
63
- async syncTokens(tokens, deviceDid, opts = {}) {
64
- try {
65
- const startRes = await fetch(`${this.config.baseUrl}/sync/start`, {
66
- method: "POST",
67
- headers: { "Content-Type": "application/json" },
68
- body: JSON.stringify({
69
- did: deviceDid,
70
- pub: opts.devicePubB64,
71
- meta: opts.clientMeta
72
- })
73
- });
74
- if (!startRes.ok) throw new Error(`Failed to start sync: ${startRes.statusText}`);
75
- const { session_id } = await startRes.json();
76
- let uploadedCount = 0;
77
- let totalBytes = 0;
78
- const jsonlData = tokens.map((t) => JSON.stringify({ token: t })).join("\n");
79
- const dataBytes = new TextEncoder().encode(jsonlData);
80
- const chunks = this.chunkBytes(dataBytes, this.config.maxChunkBytes);
81
- for (let i = 0; i < chunks.length; i++) {
82
- const chunkRes = await fetch(`${this.config.baseUrl}/sync/upload`, {
83
- method: "POST",
84
- headers: {
85
- "X-Session-ID": session_id,
86
- "X-Chunk-Index": i.toString(),
87
- "Content-Type": "application/octet-stream"
88
- },
89
- body: chunks[i]
90
- });
91
- if (!chunkRes.ok) throw new Error(`Failed to upload chunk ${i}: ${chunkRes.statusText}`);
92
- totalBytes += chunks[i].length;
93
- }
94
- const finalHashBytes = await this.sha256(dataBytes);
95
- const finalHash = (0, import_core.base64Encode)(finalHashBytes);
96
- const commitRes = await fetch(`${this.config.baseUrl}/sync/commit`, {
97
- method: "POST",
98
- headers: { "Content-Type": "application/json" },
99
- body: JSON.stringify({
100
- session_id,
101
- final_hash: finalHash,
102
- allow_expired: opts.allowExpired ?? true
103
- })
104
- });
105
- if (!commitRes.ok) throw new Error(`Failed to commit: ${commitRes.statusText}`);
106
- return {
107
- success: true,
108
- uploadedCount: tokens.length,
109
- totalBytes,
110
- sessionId: session_id
111
- };
112
- } catch (e) {
113
- return {
114
- success: false,
115
- uploadedCount: 0,
116
- totalBytes: 0,
117
- error: e.message
118
- };
119
- }
120
- }
121
- chunkBytes(data, maxSize) {
122
- const chunks = [];
123
- for (let i = 0; i < data.length; i += maxSize) {
124
- chunks.push(data.slice(i, i + maxSize));
125
- }
126
- return chunks;
127
- }
128
- };
129
- // Annotate the CommonJS export names for ESM import in node:
130
- 0 && (module.exports = {
131
- OESPSyncClient,
132
- getSyncConfig
133
- });
package/dist/index.d.cts DELETED
@@ -1,35 +0,0 @@
1
- interface SyncConfig {
2
- baseUrl: string;
3
- apiKey?: string;
4
- timeoutMs: number;
5
- maxChunkBytes: number;
6
- }
7
- declare function getSyncConfig(overrides?: Partial<SyncConfig>): SyncConfig;
8
-
9
- interface SyncSummary {
10
- success: boolean;
11
- uploadedCount: number;
12
- totalBytes: number;
13
- sessionId?: string;
14
- error?: string;
15
- }
16
- interface SyncOpts extends Partial<SyncConfig> {
17
- sha256: (data: Uint8Array) => Uint8Array | Promise<Uint8Array>;
18
- }
19
- declare class OESPSyncClient {
20
- private config;
21
- private sha256;
22
- constructor(opts: SyncOpts);
23
- setBaseUrl(url: string): void;
24
- /**
25
- * Synchronise une liste de tokens vers le serveur
26
- */
27
- syncTokens(tokens: string[], deviceDid: string, opts?: {
28
- devicePubB64?: string;
29
- clientMeta?: any;
30
- allowExpired?: boolean;
31
- }): Promise<SyncSummary>;
32
- private chunkBytes;
33
- }
34
-
35
- export { OESPSyncClient, type SyncConfig, type SyncOpts, type SyncSummary, getSyncConfig };