@symbo.ls/sdk 2.32.2 → 2.32.4
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/cjs/config/environment.js +43 -8
- package/dist/cjs/index.js +12 -4
- package/dist/cjs/services/AdminService.js +4 -4
- package/dist/cjs/services/AuthService.js +36 -149
- package/dist/cjs/services/BaseService.js +5 -18
- package/dist/cjs/services/BranchService.js +10 -10
- package/dist/cjs/services/CollabService.js +94 -61
- package/dist/cjs/services/CoreService.js +19 -19
- package/dist/cjs/services/DnsService.js +4 -4
- package/dist/cjs/services/FileService.js +2 -2
- package/dist/cjs/services/PaymentService.js +2 -2
- package/dist/cjs/services/PlanService.js +12 -12
- package/dist/cjs/services/ProjectService.js +45 -35
- package/dist/cjs/services/PullRequestService.js +7 -7
- package/dist/cjs/services/ScreenshotService.js +304 -0
- package/dist/cjs/services/SubscriptionService.js +14 -14
- package/dist/cjs/services/index.js +4 -0
- package/dist/cjs/utils/TokenManager.js +16 -5
- package/dist/cjs/utils/changePreprocessor.js +134 -0
- package/dist/cjs/utils/jsonDiff.js +46 -4
- package/dist/cjs/utils/ordering.js +274 -0
- package/dist/cjs/utils/services.js +14 -1
- package/dist/esm/config/environment.js +43 -8
- package/dist/esm/index.js +1099 -417
- package/dist/esm/services/AdminService.js +68 -35
- package/dist/esm/services/AuthService.js +100 -168
- package/dist/esm/services/BaseService.js +64 -31
- package/dist/esm/services/BranchService.js +74 -41
- package/dist/esm/services/CollabService.js +570 -97
- package/dist/esm/services/CoreService.js +83 -50
- package/dist/esm/services/DnsService.js +68 -35
- package/dist/esm/services/FileService.js +66 -33
- package/dist/esm/services/PaymentService.js +66 -33
- package/dist/esm/services/PlanService.js +76 -43
- package/dist/esm/services/ProjectService.js +547 -66
- package/dist/esm/services/PullRequestService.js +71 -38
- package/dist/esm/services/ScreenshotService.js +992 -0
- package/dist/esm/services/SubscriptionService.js +78 -45
- package/dist/esm/services/index.js +1076 -412
- package/dist/esm/utils/CollabClient.js +89 -12
- package/dist/esm/utils/TokenManager.js +16 -5
- package/dist/esm/utils/changePreprocessor.js +442 -0
- package/dist/esm/utils/jsonDiff.js +46 -4
- package/dist/esm/utils/ordering.js +256 -0
- package/dist/esm/utils/services.js +14 -1
- package/dist/node/config/environment.js +43 -8
- package/dist/node/index.js +14 -5
- package/dist/node/services/AdminService.js +4 -4
- package/dist/node/services/AuthService.js +36 -139
- package/dist/node/services/BaseService.js +5 -18
- package/dist/node/services/BranchService.js +10 -10
- package/dist/node/services/CollabService.js +95 -62
- package/dist/node/services/CoreService.js +19 -19
- package/dist/node/services/DnsService.js +4 -4
- package/dist/node/services/FileService.js +2 -2
- package/dist/node/services/PaymentService.js +2 -2
- package/dist/node/services/PlanService.js +12 -12
- package/dist/node/services/ProjectService.js +45 -35
- package/dist/node/services/PullRequestService.js +7 -7
- package/dist/node/services/ScreenshotService.js +285 -0
- package/dist/node/services/SubscriptionService.js +14 -14
- package/dist/node/services/index.js +4 -0
- package/dist/node/utils/TokenManager.js +16 -5
- package/dist/node/utils/changePreprocessor.js +115 -0
- package/dist/node/utils/jsonDiff.js +46 -4
- package/dist/node/utils/ordering.js +255 -0
- package/dist/node/utils/services.js +14 -1
- package/package.json +7 -6
- package/src/config/environment.js +48 -9
- package/src/index.js +38 -22
- package/src/services/AdminService.js +4 -4
- package/src/services/AuthService.js +42 -175
- package/src/services/BaseService.js +7 -24
- package/src/services/BranchService.js +10 -10
- package/src/services/CollabService.js +115 -74
- package/src/services/CoreService.js +19 -19
- package/src/services/DnsService.js +4 -4
- package/src/services/FileService.js +2 -2
- package/src/services/PaymentService.js +2 -2
- package/src/services/PlanService.js +12 -12
- package/src/services/ProjectService.js +50 -35
- package/src/services/PullRequestService.js +7 -7
- package/src/services/ScreenshotService.js +258 -0
- package/src/services/SubscriptionService.js +14 -14
- package/src/services/index.js +6 -1
- package/src/utils/TokenManager.js +19 -5
- package/src/utils/changePreprocessor.js +139 -0
- package/src/utils/jsonDiff.js +40 -5
- package/src/utils/ordering.js +244 -0
- package/src/utils/services.js +15 -1
package/dist/esm/index.js
CHANGED
|
@@ -14111,18 +14111,28 @@ var CONFIG = {
|
|
|
14111
14111
|
// For based api
|
|
14112
14112
|
basedOrg: "symbols",
|
|
14113
14113
|
// For based api
|
|
14114
|
-
githubClientId: "
|
|
14114
|
+
githubClientId: "Ov23liAFrsR0StbAO6PO",
|
|
14115
14115
|
// For github api
|
|
14116
14116
|
// Environment-specific feature toggles (override common)
|
|
14117
14117
|
features: {
|
|
14118
14118
|
betaFeatures: true
|
|
14119
14119
|
// Enable beta features in local dev
|
|
14120
|
-
}
|
|
14120
|
+
},
|
|
14121
|
+
typesenseCollectionName: "docs",
|
|
14122
|
+
typesenseApiKey: "vZya3L2zpq8L6iI5WWMUZJZABvT63VDb",
|
|
14123
|
+
typesenseHost: "localhost",
|
|
14124
|
+
typesensePort: "8108",
|
|
14125
|
+
typesenseProtocol: "http"
|
|
14121
14126
|
},
|
|
14122
14127
|
development: {
|
|
14123
14128
|
socketUrl: "https://dev.api.symbols.app",
|
|
14124
14129
|
apiUrl: "https://dev.api.symbols.app",
|
|
14125
|
-
githubClientId: "Ov23liHxyWFBxS8f1gnF"
|
|
14130
|
+
githubClientId: "Ov23liHxyWFBxS8f1gnF",
|
|
14131
|
+
typesenseCollectionName: "docs",
|
|
14132
|
+
typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
|
|
14133
|
+
typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
|
|
14134
|
+
typesensePort: "443",
|
|
14135
|
+
typesenseProtocol: "https"
|
|
14126
14136
|
},
|
|
14127
14137
|
testing: {
|
|
14128
14138
|
socketUrl: "https://test.api.symbols.app",
|
|
@@ -14130,12 +14140,22 @@ var CONFIG = {
|
|
|
14130
14140
|
basedEnv: "testing",
|
|
14131
14141
|
basedProject: "platform-v2-sm",
|
|
14132
14142
|
basedOrg: "symbols",
|
|
14133
|
-
githubClientId: "Ov23liHxyWFBxS8f1gnF"
|
|
14143
|
+
githubClientId: "Ov23liHxyWFBxS8f1gnF",
|
|
14144
|
+
typesenseCollectionName: "docs",
|
|
14145
|
+
typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
|
|
14146
|
+
typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
|
|
14147
|
+
typesensePort: "443",
|
|
14148
|
+
typesenseProtocol: "https"
|
|
14134
14149
|
},
|
|
14135
14150
|
upcoming: {
|
|
14136
14151
|
socketUrl: "https://upcoming.api.symbols.app",
|
|
14137
14152
|
apiUrl: "https://upcoming.api.symbols.app",
|
|
14138
|
-
githubClientId: "Ov23liWF7NvdZ056RV5J"
|
|
14153
|
+
githubClientId: "Ov23liWF7NvdZ056RV5J",
|
|
14154
|
+
typesenseCollectionName: "docs",
|
|
14155
|
+
typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
|
|
14156
|
+
typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
|
|
14157
|
+
typesensePort: "443",
|
|
14158
|
+
typesenseProtocol: "https"
|
|
14139
14159
|
},
|
|
14140
14160
|
staging: {
|
|
14141
14161
|
socketUrl: "https://staging.api.symbols.app",
|
|
@@ -14143,7 +14163,12 @@ var CONFIG = {
|
|
|
14143
14163
|
basedEnv: "staging",
|
|
14144
14164
|
basedProject: "platform-v2-sm",
|
|
14145
14165
|
basedOrg: "symbols",
|
|
14146
|
-
githubClientId: "Ov23ligwZDQVD0VfuWNa"
|
|
14166
|
+
githubClientId: "Ov23ligwZDQVD0VfuWNa",
|
|
14167
|
+
typesenseCollectionName: "docs",
|
|
14168
|
+
typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
|
|
14169
|
+
typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
|
|
14170
|
+
typesensePort: "443",
|
|
14171
|
+
typesenseProtocol: "https"
|
|
14147
14172
|
},
|
|
14148
14173
|
production: {
|
|
14149
14174
|
socketUrl: "https://api.symbols.app",
|
|
@@ -14151,7 +14176,12 @@ var CONFIG = {
|
|
|
14151
14176
|
basedEnv: "production",
|
|
14152
14177
|
basedProject: "platform-v2-sm",
|
|
14153
14178
|
basedOrg: "symbols",
|
|
14154
|
-
githubClientId: "Ov23liFAlOEIXtX3dBtR"
|
|
14179
|
+
githubClientId: "Ov23liFAlOEIXtX3dBtR",
|
|
14180
|
+
typesenseCollectionName: "docs",
|
|
14181
|
+
typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
|
|
14182
|
+
typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
|
|
14183
|
+
typesensePort: "443",
|
|
14184
|
+
typesenseProtocol: "https"
|
|
14155
14185
|
}
|
|
14156
14186
|
};
|
|
14157
14187
|
var getEnvironment = () => {
|
|
@@ -14173,6 +14203,11 @@ var getConfig = () => {
|
|
|
14173
14203
|
basedProject: process.env.SYMBOLS_APP_BASED_PROJECT || envConfig.basedProject,
|
|
14174
14204
|
basedOrg: process.env.SYMBOLS_APP_BASED_ORG || envConfig.basedOrg,
|
|
14175
14205
|
githubClientId: process.env.SYMBOLS_APP_GITHUB_CLIENT_ID || envConfig.githubClientId,
|
|
14206
|
+
typesenseCollectionName: process.env.TYPESENSE_COLLECTION_NAME || envConfig.typesenseCollectionName,
|
|
14207
|
+
typesenseApiKey: process.env.TYPESENSE_API_KEY || envConfig.typesenseApiKey,
|
|
14208
|
+
typesenseHost: process.env.TYPESENSE_HOST || envConfig.typesenseHost,
|
|
14209
|
+
typesensePort: process.env.TYPESENSE_PORT || envConfig.typesensePort,
|
|
14210
|
+
typesenseProtocol: process.env.TYPESENSE_PROTOCOL || envConfig.typesenseProtocol,
|
|
14176
14211
|
isDevelopment: isDevelopment(env),
|
|
14177
14212
|
isTesting: env === "testing",
|
|
14178
14213
|
isStaging: env === "staging",
|
|
@@ -14192,7 +14227,7 @@ var getConfig = () => {
|
|
|
14192
14227
|
);
|
|
14193
14228
|
}
|
|
14194
14229
|
if (finalConfig.isDevelopment) {
|
|
14195
|
-
console.
|
|
14230
|
+
console.warn(
|
|
14196
14231
|
"environment in SDK:",
|
|
14197
14232
|
env || process.env.NODE_ENV || process.env.NODE_ENV
|
|
14198
14233
|
);
|
|
@@ -14231,7 +14266,7 @@ var TokenManager = class {
|
|
|
14231
14266
|
});
|
|
14232
14267
|
this.config = {
|
|
14233
14268
|
storagePrefix: "symbols_",
|
|
14234
|
-
storageType: typeof window === "undefined" || process.env.NODE_ENV === "test" ? "memory" : "localStorage",
|
|
14269
|
+
storageType: typeof window === "undefined" || process.env.NODE_ENV === "test" || process.env.NODE_ENV === "testing" ? "memory" : "localStorage",
|
|
14235
14270
|
// 'localStorage' | 'sessionStorage' | 'memory'
|
|
14236
14271
|
refreshBuffer: 60 * 1e3,
|
|
14237
14272
|
// Refresh 1 minute before expiry
|
|
@@ -14271,15 +14306,26 @@ var TokenManager = class {
|
|
|
14271
14306
|
if (typeof window === "undefined") {
|
|
14272
14307
|
return this._memoryStorage;
|
|
14273
14308
|
}
|
|
14274
|
-
const
|
|
14275
|
-
|
|
14309
|
+
const safeGetStorage = (provider) => {
|
|
14310
|
+
try {
|
|
14311
|
+
const storage = provider();
|
|
14312
|
+
const testKey = `${this.config.storagePrefix}__tm_test__`;
|
|
14313
|
+
storage.setItem(testKey, "1");
|
|
14314
|
+
storage.removeItem(testKey);
|
|
14315
|
+
return storage;
|
|
14316
|
+
} catch {
|
|
14317
|
+
return null;
|
|
14318
|
+
}
|
|
14319
|
+
};
|
|
14320
|
+
const localStorageInstance = safeGetStorage(() => window.localStorage);
|
|
14321
|
+
const sessionStorageInstance = safeGetStorage(() => window.sessionStorage);
|
|
14276
14322
|
switch (this.config.storageType) {
|
|
14277
14323
|
case "sessionStorage":
|
|
14278
|
-
return
|
|
14324
|
+
return sessionStorageInstance || this._memoryStorage;
|
|
14279
14325
|
case "memory":
|
|
14280
14326
|
return this._memoryStorage;
|
|
14281
14327
|
default:
|
|
14282
|
-
return
|
|
14328
|
+
return localStorageInstance || this._memoryStorage;
|
|
14283
14329
|
}
|
|
14284
14330
|
}
|
|
14285
14331
|
/**
|
|
@@ -14618,20 +14664,10 @@ var BaseService = class {
|
|
|
14618
14664
|
}
|
|
14619
14665
|
this._tokenManager = getTokenManager({
|
|
14620
14666
|
apiUrl: this._apiUrl,
|
|
14621
|
-
onTokenRefresh: (tokens) => {
|
|
14622
|
-
this.updateContext({ authToken: tokens.accessToken });
|
|
14623
|
-
},
|
|
14624
|
-
onTokenExpired: () => {
|
|
14625
|
-
this.updateContext({ authToken: null });
|
|
14626
|
-
},
|
|
14627
14667
|
onTokenError: (error) => {
|
|
14628
14668
|
console.error("Token management error:", error);
|
|
14629
14669
|
}
|
|
14630
14670
|
});
|
|
14631
|
-
const { authToken } = this._context;
|
|
14632
|
-
if (authToken && !this._tokenManager.hasTokens()) {
|
|
14633
|
-
this._tokenManager.setTokens({ access_token: authToken });
|
|
14634
|
-
}
|
|
14635
14671
|
this._setReady();
|
|
14636
14672
|
} catch (error) {
|
|
14637
14673
|
this._setError(error);
|
|
@@ -14640,7 +14676,9 @@ var BaseService = class {
|
|
|
14640
14676
|
}
|
|
14641
14677
|
// Update context
|
|
14642
14678
|
updateContext(context) {
|
|
14643
|
-
|
|
14679
|
+
if (context && typeof context === "object") {
|
|
14680
|
+
Object.assign(this._context, context);
|
|
14681
|
+
}
|
|
14644
14682
|
}
|
|
14645
14683
|
// Get service status
|
|
14646
14684
|
getStatus() {
|
|
@@ -14695,11 +14733,6 @@ var BaseService = class {
|
|
|
14695
14733
|
error
|
|
14696
14734
|
);
|
|
14697
14735
|
}
|
|
14698
|
-
} else if (this._requiresInit(options.methodName)) {
|
|
14699
|
-
const { authToken } = this._context;
|
|
14700
|
-
if (authToken) {
|
|
14701
|
-
defaultHeaders.Authorization = `Bearer ${authToken}`;
|
|
14702
|
-
}
|
|
14703
14736
|
}
|
|
14704
14737
|
try {
|
|
14705
14738
|
const response = await fetch(url2, {
|
|
@@ -14717,11 +14750,11 @@ var BaseService = class {
|
|
|
14717
14750
|
error = await response.json();
|
|
14718
14751
|
} catch {
|
|
14719
14752
|
}
|
|
14720
|
-
throw new Error(error.message || error.error || "Request failed");
|
|
14753
|
+
throw new Error(error.message || error.error || "Request failed", { cause: error });
|
|
14721
14754
|
}
|
|
14722
14755
|
return response.status === 204 ? null : response.json();
|
|
14723
14756
|
} catch (error) {
|
|
14724
|
-
throw new Error(`Request failed: ${error.message}
|
|
14757
|
+
throw new Error(`Request failed: ${error.message}`, { cause: error });
|
|
14725
14758
|
}
|
|
14726
14759
|
}
|
|
14727
14760
|
// Helper method to determine if a method requires initialization
|
|
@@ -14902,118 +14935,10 @@ var AuthService = class extends BaseService {
|
|
|
14902
14935
|
"pro2",
|
|
14903
14936
|
"enterprise"
|
|
14904
14937
|
]);
|
|
14905
|
-
this._initialized = false;
|
|
14906
|
-
this._apiUrl = null;
|
|
14907
|
-
this._tokenManager = null;
|
|
14908
14938
|
this._projectRoleCache = /* @__PURE__ */ new Map();
|
|
14909
14939
|
this._roleCacheExpiry = 5 * 60 * 1e3;
|
|
14910
14940
|
}
|
|
14911
|
-
|
|
14912
|
-
try {
|
|
14913
|
-
const { appKey, authToken } = context || this._context;
|
|
14914
|
-
this._apiUrl = environment_default.apiUrl;
|
|
14915
|
-
if (!this._apiUrl) {
|
|
14916
|
-
throw new Error("Auth service base URL not configured");
|
|
14917
|
-
}
|
|
14918
|
-
this._tokenManager = getTokenManager({
|
|
14919
|
-
apiUrl: this._apiUrl,
|
|
14920
|
-
onTokenRefresh: (tokens) => {
|
|
14921
|
-
this.updateContext({ authToken: tokens.accessToken });
|
|
14922
|
-
},
|
|
14923
|
-
onTokenExpired: () => {
|
|
14924
|
-
this.updateContext({ authToken: null });
|
|
14925
|
-
},
|
|
14926
|
-
onTokenError: (error) => {
|
|
14927
|
-
console.error("Token management error:", error);
|
|
14928
|
-
}
|
|
14929
|
-
});
|
|
14930
|
-
if (authToken && !this._tokenManager.hasTokens()) {
|
|
14931
|
-
this._tokenManager.setTokens({ access_token: authToken });
|
|
14932
|
-
}
|
|
14933
|
-
this._info = {
|
|
14934
|
-
config: {
|
|
14935
|
-
apiUrl: this._apiUrl,
|
|
14936
|
-
appKey: appKey ? `${appKey.substr(0, 4)}...${appKey.substr(-4)}` : null,
|
|
14937
|
-
hasToken: Boolean(authToken)
|
|
14938
|
-
}
|
|
14939
|
-
};
|
|
14940
|
-
this._initialized = true;
|
|
14941
|
-
this._setReady();
|
|
14942
|
-
} catch (error) {
|
|
14943
|
-
this._setError(error);
|
|
14944
|
-
throw error;
|
|
14945
|
-
}
|
|
14946
|
-
}
|
|
14947
|
-
// Helper method to make HTTP requests
|
|
14948
|
-
async _request(endpoint, options = {}) {
|
|
14949
|
-
const url2 = `${this._apiUrl}/core${endpoint}`;
|
|
14950
|
-
const defaultHeaders = {};
|
|
14951
|
-
if (!(options.body instanceof FormData)) {
|
|
14952
|
-
defaultHeaders["Content-Type"] = "application/json";
|
|
14953
|
-
}
|
|
14954
|
-
if (this._requiresInit(options.methodName) && this._tokenManager) {
|
|
14955
|
-
try {
|
|
14956
|
-
const validToken = await this._tokenManager.ensureValidToken();
|
|
14957
|
-
if (validToken) {
|
|
14958
|
-
const authHeader = this._tokenManager.getAuthHeader();
|
|
14959
|
-
if (authHeader) {
|
|
14960
|
-
defaultHeaders.Authorization = authHeader;
|
|
14961
|
-
}
|
|
14962
|
-
}
|
|
14963
|
-
} catch (error) {
|
|
14964
|
-
console.warn(
|
|
14965
|
-
"Token management failed, proceeding without authentication:",
|
|
14966
|
-
error
|
|
14967
|
-
);
|
|
14968
|
-
}
|
|
14969
|
-
} else if (this._requiresInit(options.methodName)) {
|
|
14970
|
-
const { authToken } = this._context;
|
|
14971
|
-
if (authToken) {
|
|
14972
|
-
defaultHeaders.Authorization = `Bearer ${authToken}`;
|
|
14973
|
-
}
|
|
14974
|
-
}
|
|
14975
|
-
try {
|
|
14976
|
-
const response = await fetch(url2, {
|
|
14977
|
-
...options,
|
|
14978
|
-
headers: {
|
|
14979
|
-
...defaultHeaders,
|
|
14980
|
-
...options.headers
|
|
14981
|
-
}
|
|
14982
|
-
});
|
|
14983
|
-
if (!response.ok) {
|
|
14984
|
-
let error = {
|
|
14985
|
-
message: `HTTP ${response.status}: ${response.statusText}`
|
|
14986
|
-
};
|
|
14987
|
-
try {
|
|
14988
|
-
error = await response.json();
|
|
14989
|
-
} catch {
|
|
14990
|
-
}
|
|
14991
|
-
throw new Error(error.message || error.error || "Request failed");
|
|
14992
|
-
}
|
|
14993
|
-
return response.status === 204 ? null : response.json();
|
|
14994
|
-
} catch (error) {
|
|
14995
|
-
throw new Error(`Request failed: ${error.message}`);
|
|
14996
|
-
}
|
|
14997
|
-
}
|
|
14998
|
-
_requiresInit(methodName) {
|
|
14999
|
-
const noInitMethods = /* @__PURE__ */ new Set([
|
|
15000
|
-
"register",
|
|
15001
|
-
"login",
|
|
15002
|
-
"googleAuth",
|
|
15003
|
-
"googleAuthCallback",
|
|
15004
|
-
"githubAuth",
|
|
15005
|
-
"requestPasswordReset",
|
|
15006
|
-
"confirmPasswordReset",
|
|
15007
|
-
"confirmRegistration",
|
|
15008
|
-
"verifyEmail"
|
|
15009
|
-
]);
|
|
15010
|
-
return !noInitMethods.has(methodName);
|
|
15011
|
-
}
|
|
15012
|
-
_requireReady(methodName) {
|
|
15013
|
-
if (this._requiresInit(methodName) && !this._initialized) {
|
|
15014
|
-
throw new Error("Auth service not initialized");
|
|
15015
|
-
}
|
|
15016
|
-
}
|
|
14941
|
+
// Use BaseService.init/_request/_requireReady implementations
|
|
15017
14942
|
// ==================== AUTH METHODS ====================
|
|
15018
14943
|
async register(userData) {
|
|
15019
14944
|
try {
|
|
@@ -15027,7 +14952,7 @@ var AuthService = class extends BaseService {
|
|
|
15027
14952
|
}
|
|
15028
14953
|
throw new Error(response.message);
|
|
15029
14954
|
} catch (error) {
|
|
15030
|
-
throw new Error(`Registration failed: ${error.message}
|
|
14955
|
+
throw new Error(`Registration failed: ${error.message}`, { cause: error });
|
|
15031
14956
|
}
|
|
15032
14957
|
}
|
|
15033
14958
|
async login(email, password) {
|
|
@@ -15049,14 +14974,13 @@ var AuthService = class extends BaseService {
|
|
|
15049
14974
|
if (this._tokenManager) {
|
|
15050
14975
|
this._tokenManager.setTokens(tokenData);
|
|
15051
14976
|
}
|
|
15052
|
-
this.updateContext({ authToken: tokens.accessToken });
|
|
15053
14977
|
}
|
|
15054
14978
|
if (response.success) {
|
|
15055
14979
|
return response.data;
|
|
15056
14980
|
}
|
|
15057
14981
|
throw new Error(response.message);
|
|
15058
14982
|
} catch (error) {
|
|
15059
|
-
throw new Error(`Login failed: ${error.message}
|
|
14983
|
+
throw new Error(`Login failed: ${error.message}`, { cause: error });
|
|
15060
14984
|
}
|
|
15061
14985
|
}
|
|
15062
14986
|
async logout() {
|
|
@@ -15069,13 +14993,11 @@ var AuthService = class extends BaseService {
|
|
|
15069
14993
|
if (this._tokenManager) {
|
|
15070
14994
|
this._tokenManager.clearTokens();
|
|
15071
14995
|
}
|
|
15072
|
-
this.updateContext({ authToken: null });
|
|
15073
14996
|
} catch (error) {
|
|
15074
14997
|
if (this._tokenManager) {
|
|
15075
14998
|
this._tokenManager.clearTokens();
|
|
15076
14999
|
}
|
|
15077
|
-
|
|
15078
|
-
throw new Error(`Logout failed: ${error.message}`);
|
|
15000
|
+
throw new Error(`Logout failed: ${error.message}`, { cause: error });
|
|
15079
15001
|
}
|
|
15080
15002
|
}
|
|
15081
15003
|
async refreshToken(refreshToken) {
|
|
@@ -15090,7 +15012,7 @@ var AuthService = class extends BaseService {
|
|
|
15090
15012
|
}
|
|
15091
15013
|
throw new Error(response.message);
|
|
15092
15014
|
} catch (error) {
|
|
15093
|
-
throw new Error(`Token refresh failed: ${error.message}
|
|
15015
|
+
throw new Error(`Token refresh failed: ${error.message}`, { cause: error });
|
|
15094
15016
|
}
|
|
15095
15017
|
}
|
|
15096
15018
|
async googleAuth(idToken, inviteToken = null) {
|
|
@@ -15116,14 +15038,13 @@ var AuthService = class extends BaseService {
|
|
|
15116
15038
|
if (this._tokenManager) {
|
|
15117
15039
|
this._tokenManager.setTokens(tokenData);
|
|
15118
15040
|
}
|
|
15119
|
-
this.updateContext({ authToken: tokens.accessToken });
|
|
15120
15041
|
}
|
|
15121
15042
|
if (response.success) {
|
|
15122
15043
|
return response.data;
|
|
15123
15044
|
}
|
|
15124
15045
|
throw new Error(response.message);
|
|
15125
15046
|
} catch (error) {
|
|
15126
|
-
throw new Error(`Google auth failed: ${error.message}
|
|
15047
|
+
throw new Error(`Google auth failed: ${error.message}`, { cause: error });
|
|
15127
15048
|
}
|
|
15128
15049
|
}
|
|
15129
15050
|
async githubAuth(code, inviteToken = null) {
|
|
@@ -15149,14 +15070,13 @@ var AuthService = class extends BaseService {
|
|
|
15149
15070
|
if (this._tokenManager) {
|
|
15150
15071
|
this._tokenManager.setTokens(tokenData);
|
|
15151
15072
|
}
|
|
15152
|
-
this.updateContext({ authToken: tokens.accessToken });
|
|
15153
15073
|
}
|
|
15154
15074
|
if (response.success) {
|
|
15155
15075
|
return response.data;
|
|
15156
15076
|
}
|
|
15157
15077
|
throw new Error(response.message);
|
|
15158
15078
|
} catch (error) {
|
|
15159
|
-
throw new Error(`GitHub auth failed: ${error.message}
|
|
15079
|
+
throw new Error(`GitHub auth failed: ${error.message}`, { cause: error });
|
|
15160
15080
|
}
|
|
15161
15081
|
}
|
|
15162
15082
|
async googleAuthCallback(code, redirectUri, inviteToken = null) {
|
|
@@ -15182,14 +15102,13 @@ var AuthService = class extends BaseService {
|
|
|
15182
15102
|
if (this._tokenManager) {
|
|
15183
15103
|
this._tokenManager.setTokens(tokenData);
|
|
15184
15104
|
}
|
|
15185
|
-
this.updateContext({ authToken: tokens.accessToken });
|
|
15186
15105
|
}
|
|
15187
15106
|
if (response.success) {
|
|
15188
15107
|
return response.data;
|
|
15189
15108
|
}
|
|
15190
15109
|
throw new Error(response.message);
|
|
15191
15110
|
} catch (error) {
|
|
15192
|
-
throw new Error(`Google auth callback failed: ${error.message}
|
|
15111
|
+
throw new Error(`Google auth callback failed: ${error.message}`, { cause: error });
|
|
15193
15112
|
}
|
|
15194
15113
|
}
|
|
15195
15114
|
async requestPasswordReset(email) {
|
|
@@ -15204,7 +15123,7 @@ var AuthService = class extends BaseService {
|
|
|
15204
15123
|
}
|
|
15205
15124
|
throw new Error(response.message);
|
|
15206
15125
|
} catch (error) {
|
|
15207
|
-
throw new Error(`Password reset request failed: ${error.message}
|
|
15126
|
+
throw new Error(`Password reset request failed: ${error.message}`, { cause: error });
|
|
15208
15127
|
}
|
|
15209
15128
|
}
|
|
15210
15129
|
async confirmPasswordReset(token, password) {
|
|
@@ -15219,7 +15138,7 @@ var AuthService = class extends BaseService {
|
|
|
15219
15138
|
}
|
|
15220
15139
|
throw new Error(response.message);
|
|
15221
15140
|
} catch (error) {
|
|
15222
|
-
throw new Error(`Password reset confirmation failed: ${error.message}
|
|
15141
|
+
throw new Error(`Password reset confirmation failed: ${error.message}`, { cause: error });
|
|
15223
15142
|
}
|
|
15224
15143
|
}
|
|
15225
15144
|
async confirmRegistration(token) {
|
|
@@ -15234,7 +15153,7 @@ var AuthService = class extends BaseService {
|
|
|
15234
15153
|
}
|
|
15235
15154
|
throw new Error(response.message);
|
|
15236
15155
|
} catch (error) {
|
|
15237
|
-
throw new Error(`Registration confirmation failed: ${error.message}
|
|
15156
|
+
throw new Error(`Registration confirmation failed: ${error.message}`, { cause: error });
|
|
15238
15157
|
}
|
|
15239
15158
|
}
|
|
15240
15159
|
async requestPasswordChange() {
|
|
@@ -15249,7 +15168,7 @@ var AuthService = class extends BaseService {
|
|
|
15249
15168
|
}
|
|
15250
15169
|
throw new Error(response.message);
|
|
15251
15170
|
} catch (error) {
|
|
15252
|
-
throw new Error(`Password change request failed: ${error.message}
|
|
15171
|
+
throw new Error(`Password change request failed: ${error.message}`, { cause: error });
|
|
15253
15172
|
}
|
|
15254
15173
|
}
|
|
15255
15174
|
async confirmPasswordChange(currentPassword, newPassword, code) {
|
|
@@ -15265,7 +15184,7 @@ var AuthService = class extends BaseService {
|
|
|
15265
15184
|
}
|
|
15266
15185
|
throw new Error(response.message);
|
|
15267
15186
|
} catch (error) {
|
|
15268
|
-
throw new Error(`Password change confirmation failed: ${error.message}
|
|
15187
|
+
throw new Error(`Password change confirmation failed: ${error.message}`, { cause: error });
|
|
15269
15188
|
}
|
|
15270
15189
|
}
|
|
15271
15190
|
async getMe() {
|
|
@@ -15280,7 +15199,7 @@ var AuthService = class extends BaseService {
|
|
|
15280
15199
|
}
|
|
15281
15200
|
throw new Error(response.message);
|
|
15282
15201
|
} catch (error) {
|
|
15283
|
-
throw new Error(`Failed to get user profile: ${error.message}
|
|
15202
|
+
throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
|
|
15284
15203
|
}
|
|
15285
15204
|
}
|
|
15286
15205
|
/**
|
|
@@ -15380,7 +15299,7 @@ var AuthService = class extends BaseService {
|
|
|
15380
15299
|
}
|
|
15381
15300
|
throw new Error(response.message);
|
|
15382
15301
|
} catch (error) {
|
|
15383
|
-
throw new Error(`Failed to get user profile: ${error.message}
|
|
15302
|
+
throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
|
|
15384
15303
|
}
|
|
15385
15304
|
}
|
|
15386
15305
|
async updateUserProfile(profileData) {
|
|
@@ -15396,7 +15315,7 @@ var AuthService = class extends BaseService {
|
|
|
15396
15315
|
}
|
|
15397
15316
|
throw new Error(response.message);
|
|
15398
15317
|
} catch (error) {
|
|
15399
|
-
throw new Error(`Failed to update user profile: ${error.message}
|
|
15318
|
+
throw new Error(`Failed to update user profile: ${error.message}`, { cause: error });
|
|
15400
15319
|
}
|
|
15401
15320
|
}
|
|
15402
15321
|
async getUserProjects() {
|
|
@@ -15419,7 +15338,7 @@ var AuthService = class extends BaseService {
|
|
|
15419
15338
|
}
|
|
15420
15339
|
throw new Error(response.message);
|
|
15421
15340
|
} catch (error) {
|
|
15422
|
-
throw new Error(`Failed to get user projects: ${error.message}
|
|
15341
|
+
throw new Error(`Failed to get user projects: ${error.message}`, { cause: error });
|
|
15423
15342
|
}
|
|
15424
15343
|
}
|
|
15425
15344
|
async getUser(userId) {
|
|
@@ -15437,7 +15356,7 @@ var AuthService = class extends BaseService {
|
|
|
15437
15356
|
}
|
|
15438
15357
|
throw new Error(response.message);
|
|
15439
15358
|
} catch (error) {
|
|
15440
|
-
throw new Error(`Failed to get user: ${error.message}
|
|
15359
|
+
throw new Error(`Failed to get user: ${error.message}`, { cause: error });
|
|
15441
15360
|
}
|
|
15442
15361
|
}
|
|
15443
15362
|
async getUserByEmail(email) {
|
|
@@ -15455,7 +15374,7 @@ var AuthService = class extends BaseService {
|
|
|
15455
15374
|
}
|
|
15456
15375
|
throw new Error(response.message);
|
|
15457
15376
|
} catch (error) {
|
|
15458
|
-
throw new Error(`Failed to get user by email: ${error.message}
|
|
15377
|
+
throw new Error(`Failed to get user by email: ${error.message}`, { cause: error });
|
|
15459
15378
|
}
|
|
15460
15379
|
}
|
|
15461
15380
|
// ==================== PROJECT ROLE METHODS ====================
|
|
@@ -15468,6 +15387,9 @@ var AuthService = class extends BaseService {
|
|
|
15468
15387
|
if (!projectId) {
|
|
15469
15388
|
throw new Error("Project ID is required");
|
|
15470
15389
|
}
|
|
15390
|
+
if (!this.hasValidTokens()) {
|
|
15391
|
+
return "guest";
|
|
15392
|
+
}
|
|
15471
15393
|
const cacheKey = `role_${projectId}`;
|
|
15472
15394
|
const cached = this._projectRoleCache.get(cacheKey);
|
|
15473
15395
|
if (cached && Date.now() - cached.timestamp < this._roleCacheExpiry) {
|
|
@@ -15488,7 +15410,11 @@ var AuthService = class extends BaseService {
|
|
|
15488
15410
|
}
|
|
15489
15411
|
throw new Error(response.message);
|
|
15490
15412
|
} catch (error) {
|
|
15491
|
-
|
|
15413
|
+
const message = (error == null ? void 0 : error.message) || "";
|
|
15414
|
+
if (/401|403|unauthorized|no token|invalid token/iu.test(message)) {
|
|
15415
|
+
return "guest";
|
|
15416
|
+
}
|
|
15417
|
+
throw new Error(`Failed to get project role: ${message}`, { cause: error });
|
|
15492
15418
|
}
|
|
15493
15419
|
}
|
|
15494
15420
|
/**
|
|
@@ -15500,6 +15426,9 @@ var AuthService = class extends BaseService {
|
|
|
15500
15426
|
if (!projectKey) {
|
|
15501
15427
|
throw new Error("Project key is required");
|
|
15502
15428
|
}
|
|
15429
|
+
if (!this.hasValidTokens()) {
|
|
15430
|
+
return "guest";
|
|
15431
|
+
}
|
|
15503
15432
|
const cacheKey = `role_key_${projectKey}`;
|
|
15504
15433
|
const cached = this._projectRoleCache.get(cacheKey);
|
|
15505
15434
|
if (cached && Date.now() - cached.timestamp < this._roleCacheExpiry) {
|
|
@@ -15520,7 +15449,11 @@ var AuthService = class extends BaseService {
|
|
|
15520
15449
|
}
|
|
15521
15450
|
throw new Error(response.message);
|
|
15522
15451
|
} catch (error) {
|
|
15523
|
-
|
|
15452
|
+
const message = (error == null ? void 0 : error.message) || "";
|
|
15453
|
+
if (/401|403|unauthorized|no token|invalid token/iu.test(message)) {
|
|
15454
|
+
return "guest";
|
|
15455
|
+
}
|
|
15456
|
+
throw new Error(`Failed to get project role by key: ${message}`, { cause: error });
|
|
15524
15457
|
}
|
|
15525
15458
|
}
|
|
15526
15459
|
/**
|
|
@@ -15623,7 +15556,7 @@ var AuthService = class extends BaseService {
|
|
|
15623
15556
|
try {
|
|
15624
15557
|
return await this.getMe();
|
|
15625
15558
|
} catch (error) {
|
|
15626
|
-
throw new Error(`Failed to get current user: ${error.message}
|
|
15559
|
+
throw new Error(`Failed to get current user: ${error.message}`, { cause: error });
|
|
15627
15560
|
}
|
|
15628
15561
|
}
|
|
15629
15562
|
/**
|
|
@@ -15780,7 +15713,6 @@ var AuthService = class extends BaseService {
|
|
|
15780
15713
|
this._tokenManager = null;
|
|
15781
15714
|
}
|
|
15782
15715
|
this._projectRoleCache.clear();
|
|
15783
|
-
this._initialized = false;
|
|
15784
15716
|
this._setReady(false);
|
|
15785
15717
|
}
|
|
15786
15718
|
};
|
|
@@ -15933,11 +15865,11 @@ var CoreService = class extends BaseService {
|
|
|
15933
15865
|
error = await response.json();
|
|
15934
15866
|
} catch {
|
|
15935
15867
|
}
|
|
15936
|
-
throw new Error(error.message || error.error || "Request failed");
|
|
15868
|
+
throw new Error(error.message || error.error || "Request failed", { cause: error });
|
|
15937
15869
|
}
|
|
15938
15870
|
return response.status === 204 ? null : response.json();
|
|
15939
15871
|
} catch (error) {
|
|
15940
|
-
throw new Error(`Request failed: ${error.message}
|
|
15872
|
+
throw new Error(`Request failed: ${error.message}`, { cause: error });
|
|
15941
15873
|
}
|
|
15942
15874
|
}
|
|
15943
15875
|
// ==================== AUTH METHODS ====================
|
|
@@ -15953,7 +15885,7 @@ var CoreService = class extends BaseService {
|
|
|
15953
15885
|
}
|
|
15954
15886
|
throw new Error(response.message);
|
|
15955
15887
|
} catch (error) {
|
|
15956
|
-
throw new Error(`Registration failed: ${error.message}
|
|
15888
|
+
throw new Error(`Registration failed: ${error.message}`, { cause: error });
|
|
15957
15889
|
}
|
|
15958
15890
|
}
|
|
15959
15891
|
async login(email, password) {
|
|
@@ -15982,7 +15914,7 @@ var CoreService = class extends BaseService {
|
|
|
15982
15914
|
}
|
|
15983
15915
|
throw new Error(response.message);
|
|
15984
15916
|
} catch (error) {
|
|
15985
|
-
throw new Error(`Login failed: ${error.message}
|
|
15917
|
+
throw new Error(`Login failed: ${error.message}`, { cause: error });
|
|
15986
15918
|
}
|
|
15987
15919
|
}
|
|
15988
15920
|
async logout() {
|
|
@@ -16001,7 +15933,7 @@ var CoreService = class extends BaseService {
|
|
|
16001
15933
|
this._tokenManager.clearTokens();
|
|
16002
15934
|
}
|
|
16003
15935
|
this.updateContext({ authToken: null });
|
|
16004
|
-
throw new Error(`Logout failed: ${error.message}
|
|
15936
|
+
throw new Error(`Logout failed: ${error.message}`, { cause: error });
|
|
16005
15937
|
}
|
|
16006
15938
|
}
|
|
16007
15939
|
async refreshToken(refreshToken) {
|
|
@@ -16016,7 +15948,7 @@ var CoreService = class extends BaseService {
|
|
|
16016
15948
|
}
|
|
16017
15949
|
throw new Error(response.message);
|
|
16018
15950
|
} catch (error) {
|
|
16019
|
-
throw new Error(`Token refresh failed: ${error.message}
|
|
15951
|
+
throw new Error(`Token refresh failed: ${error.message}`, { cause: error });
|
|
16020
15952
|
}
|
|
16021
15953
|
}
|
|
16022
15954
|
async googleAuth(idToken, inviteToken = null) {
|
|
@@ -16049,7 +15981,7 @@ var CoreService = class extends BaseService {
|
|
|
16049
15981
|
}
|
|
16050
15982
|
throw new Error(response.message);
|
|
16051
15983
|
} catch (error) {
|
|
16052
|
-
throw new Error(`Google auth failed: ${error.message}
|
|
15984
|
+
throw new Error(`Google auth failed: ${error.message}`, { cause: error });
|
|
16053
15985
|
}
|
|
16054
15986
|
}
|
|
16055
15987
|
async githubAuth(code, inviteToken = null) {
|
|
@@ -16082,7 +16014,7 @@ var CoreService = class extends BaseService {
|
|
|
16082
16014
|
}
|
|
16083
16015
|
throw new Error(response.message);
|
|
16084
16016
|
} catch (error) {
|
|
16085
|
-
throw new Error(`GitHub auth failed: ${error.message}
|
|
16017
|
+
throw new Error(`GitHub auth failed: ${error.message}`, { cause: error });
|
|
16086
16018
|
}
|
|
16087
16019
|
}
|
|
16088
16020
|
async googleAuthCallback(code, redirectUri, inviteToken = null) {
|
|
@@ -16115,7 +16047,7 @@ var CoreService = class extends BaseService {
|
|
|
16115
16047
|
}
|
|
16116
16048
|
throw new Error(response.message);
|
|
16117
16049
|
} catch (error) {
|
|
16118
|
-
throw new Error(`Google auth callback failed: ${error.message}
|
|
16050
|
+
throw new Error(`Google auth callback failed: ${error.message}`, { cause: error });
|
|
16119
16051
|
}
|
|
16120
16052
|
}
|
|
16121
16053
|
async requestPasswordReset(email) {
|
|
@@ -16130,7 +16062,7 @@ var CoreService = class extends BaseService {
|
|
|
16130
16062
|
}
|
|
16131
16063
|
throw new Error(response.message);
|
|
16132
16064
|
} catch (error) {
|
|
16133
|
-
throw new Error(`Password reset request failed: ${error.message}
|
|
16065
|
+
throw new Error(`Password reset request failed: ${error.message}`, { cause: error });
|
|
16134
16066
|
}
|
|
16135
16067
|
}
|
|
16136
16068
|
async confirmPasswordReset(token, password) {
|
|
@@ -16145,7 +16077,7 @@ var CoreService = class extends BaseService {
|
|
|
16145
16077
|
}
|
|
16146
16078
|
throw new Error(response.message);
|
|
16147
16079
|
} catch (error) {
|
|
16148
|
-
throw new Error(`Password reset confirmation failed: ${error.message}
|
|
16080
|
+
throw new Error(`Password reset confirmation failed: ${error.message}`, { cause: error });
|
|
16149
16081
|
}
|
|
16150
16082
|
}
|
|
16151
16083
|
async confirmRegistration(token) {
|
|
@@ -16160,7 +16092,7 @@ var CoreService = class extends BaseService {
|
|
|
16160
16092
|
}
|
|
16161
16093
|
throw new Error(response.message);
|
|
16162
16094
|
} catch (error) {
|
|
16163
|
-
throw new Error(`Registration confirmation failed: ${error.message}
|
|
16095
|
+
throw new Error(`Registration confirmation failed: ${error.message}`, { cause: error });
|
|
16164
16096
|
}
|
|
16165
16097
|
}
|
|
16166
16098
|
async requestPasswordChange() {
|
|
@@ -16175,7 +16107,7 @@ var CoreService = class extends BaseService {
|
|
|
16175
16107
|
}
|
|
16176
16108
|
throw new Error(response.message);
|
|
16177
16109
|
} catch (error) {
|
|
16178
|
-
throw new Error(`Password change request failed: ${error.message}
|
|
16110
|
+
throw new Error(`Password change request failed: ${error.message}`, { cause: error });
|
|
16179
16111
|
}
|
|
16180
16112
|
}
|
|
16181
16113
|
async confirmPasswordChange(currentPassword, newPassword, code) {
|
|
@@ -16191,7 +16123,7 @@ var CoreService = class extends BaseService {
|
|
|
16191
16123
|
}
|
|
16192
16124
|
throw new Error(response.message);
|
|
16193
16125
|
} catch (error) {
|
|
16194
|
-
throw new Error(`Password change confirmation failed: ${error.message}
|
|
16126
|
+
throw new Error(`Password change confirmation failed: ${error.message}`, { cause: error });
|
|
16195
16127
|
}
|
|
16196
16128
|
}
|
|
16197
16129
|
async getMe() {
|
|
@@ -16206,7 +16138,7 @@ var CoreService = class extends BaseService {
|
|
|
16206
16138
|
}
|
|
16207
16139
|
throw new Error(response.message);
|
|
16208
16140
|
} catch (error) {
|
|
16209
|
-
throw new Error(`Failed to get user profile: ${error.message}
|
|
16141
|
+
throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
|
|
16210
16142
|
}
|
|
16211
16143
|
}
|
|
16212
16144
|
/**
|
|
@@ -16322,7 +16254,7 @@ var CoreService = class extends BaseService {
|
|
|
16322
16254
|
}
|
|
16323
16255
|
throw new Error(response.message);
|
|
16324
16256
|
} catch (error) {
|
|
16325
|
-
throw new Error(`Failed to update user profile: ${error.message}
|
|
16257
|
+
throw new Error(`Failed to update user profile: ${error.message}`, { cause: error });
|
|
16326
16258
|
}
|
|
16327
16259
|
}
|
|
16328
16260
|
async getUserProjects() {
|
|
@@ -16345,7 +16277,7 @@ var CoreService = class extends BaseService {
|
|
|
16345
16277
|
}
|
|
16346
16278
|
throw new Error(response.message);
|
|
16347
16279
|
} catch (error) {
|
|
16348
|
-
throw new Error(`Failed to get user projects: ${error.message}
|
|
16280
|
+
throw new Error(`Failed to get user projects: ${error.message}`, { cause: error });
|
|
16349
16281
|
}
|
|
16350
16282
|
}
|
|
16351
16283
|
async getUser(userId) {
|
|
@@ -16363,7 +16295,7 @@ var CoreService = class extends BaseService {
|
|
|
16363
16295
|
}
|
|
16364
16296
|
throw new Error(response.message);
|
|
16365
16297
|
} catch (error) {
|
|
16366
|
-
throw new Error(`Failed to get user: ${error.message}
|
|
16298
|
+
throw new Error(`Failed to get user: ${error.message}`, { cause: error });
|
|
16367
16299
|
}
|
|
16368
16300
|
}
|
|
16369
16301
|
async getUserByEmail(email) {
|
|
@@ -16381,7 +16313,7 @@ var CoreService = class extends BaseService {
|
|
|
16381
16313
|
}
|
|
16382
16314
|
throw new Error(response.message);
|
|
16383
16315
|
} catch (error) {
|
|
16384
|
-
throw new Error(`Failed to get user by email: ${error.message}
|
|
16316
|
+
throw new Error(`Failed to get user by email: ${error.message}`, { cause: error });
|
|
16385
16317
|
}
|
|
16386
16318
|
}
|
|
16387
16319
|
// ==================== PROJECT METHODS ====================
|
|
@@ -21953,12 +21885,54 @@ function isPlainObject(o) {
|
|
|
21953
21885
|
return o && typeof o === "object" && !Array.isArray(o);
|
|
21954
21886
|
}
|
|
21955
21887
|
function deepEqual(a, b) {
|
|
21956
|
-
|
|
21957
|
-
return
|
|
21958
|
-
}
|
|
21959
|
-
|
|
21888
|
+
if (Object.is(a, b)) {
|
|
21889
|
+
return true;
|
|
21890
|
+
}
|
|
21891
|
+
if (typeof a === "function" && typeof b === "function") {
|
|
21892
|
+
try {
|
|
21893
|
+
return a.toString() === b.toString();
|
|
21894
|
+
} catch {
|
|
21895
|
+
return false;
|
|
21896
|
+
}
|
|
21897
|
+
}
|
|
21898
|
+
if (typeof a === "function" || typeof b === "function") {
|
|
21960
21899
|
return false;
|
|
21961
21900
|
}
|
|
21901
|
+
if (a instanceof Date && b instanceof Date) {
|
|
21902
|
+
return a.getTime() === b.getTime();
|
|
21903
|
+
}
|
|
21904
|
+
if (a instanceof RegExp && b instanceof RegExp) {
|
|
21905
|
+
return String(a) === String(b);
|
|
21906
|
+
}
|
|
21907
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
21908
|
+
if (a.length !== b.length) {
|
|
21909
|
+
return false;
|
|
21910
|
+
}
|
|
21911
|
+
for (let i = 0; i < a.length; i++) {
|
|
21912
|
+
if (!deepEqual(a[i], b[i])) {
|
|
21913
|
+
return false;
|
|
21914
|
+
}
|
|
21915
|
+
}
|
|
21916
|
+
return true;
|
|
21917
|
+
}
|
|
21918
|
+
if (a && b && typeof a === "object" && typeof b === "object") {
|
|
21919
|
+
const aKeys = Object.keys(a);
|
|
21920
|
+
const bKeys = Object.keys(b);
|
|
21921
|
+
if (aKeys.length !== bKeys.length) {
|
|
21922
|
+
return false;
|
|
21923
|
+
}
|
|
21924
|
+
for (let i = 0; i < aKeys.length; i++) {
|
|
21925
|
+
const key = aKeys[i];
|
|
21926
|
+
if (!Object.hasOwn(b, key)) {
|
|
21927
|
+
return false;
|
|
21928
|
+
}
|
|
21929
|
+
if (!deepEqual(a[key], b[key])) {
|
|
21930
|
+
return false;
|
|
21931
|
+
}
|
|
21932
|
+
}
|
|
21933
|
+
return true;
|
|
21934
|
+
}
|
|
21935
|
+
return false;
|
|
21962
21936
|
}
|
|
21963
21937
|
function getRootMap(ydoc) {
|
|
21964
21938
|
return ydoc.getMap("root");
|
|
@@ -28337,86 +28311,452 @@ var validateParams = {
|
|
|
28337
28311
|
};
|
|
28338
28312
|
|
|
28339
28313
|
// src/services/CollabService.js
|
|
28340
|
-
import {
|
|
28341
|
-
|
|
28342
|
-
|
|
28343
|
-
|
|
28344
|
-
|
|
28345
|
-
|
|
28346
|
-
|
|
28347
|
-
|
|
28348
|
-
|
|
28349
|
-
this._isUndoRedo = false;
|
|
28350
|
-
this._pendingOps = [];
|
|
28314
|
+
import { deepStringifyFunctions } from "@domql/utils";
|
|
28315
|
+
|
|
28316
|
+
// src/utils/ordering.js
|
|
28317
|
+
function isObjectLike(val) {
|
|
28318
|
+
return val && typeof val === "object" && !Array.isArray(val);
|
|
28319
|
+
}
|
|
28320
|
+
function normalizePath(path) {
|
|
28321
|
+
if (Array.isArray(path)) {
|
|
28322
|
+
return path;
|
|
28351
28323
|
}
|
|
28352
|
-
|
|
28353
|
-
|
|
28354
|
-
try {
|
|
28355
|
-
this._stateManager = new RootStateManager(context.state);
|
|
28356
|
-
} catch (err) {
|
|
28357
|
-
this._setError(err);
|
|
28358
|
-
throw err;
|
|
28359
|
-
}
|
|
28360
|
-
}
|
|
28361
|
-
this._setReady();
|
|
28324
|
+
if (typeof path === "string") {
|
|
28325
|
+
return [path];
|
|
28362
28326
|
}
|
|
28363
|
-
|
|
28364
|
-
|
|
28365
|
-
|
|
28366
|
-
|
|
28367
|
-
|
|
28368
|
-
|
|
28369
|
-
|
|
28370
|
-
|
|
28327
|
+
return [];
|
|
28328
|
+
}
|
|
28329
|
+
function getParentPathsFromTuples(tuples = []) {
|
|
28330
|
+
const seen = /* @__PURE__ */ new Set();
|
|
28331
|
+
const parents = [];
|
|
28332
|
+
const META_KEYS = /* @__PURE__ */ new Set([
|
|
28333
|
+
"style",
|
|
28334
|
+
"class",
|
|
28335
|
+
"text",
|
|
28336
|
+
"html",
|
|
28337
|
+
"content",
|
|
28338
|
+
"data",
|
|
28339
|
+
"attr",
|
|
28340
|
+
"state",
|
|
28341
|
+
"scope",
|
|
28342
|
+
"define",
|
|
28343
|
+
"on",
|
|
28344
|
+
"extend",
|
|
28345
|
+
"extends",
|
|
28346
|
+
"childExtend",
|
|
28347
|
+
"childExtends",
|
|
28348
|
+
"children",
|
|
28349
|
+
"component",
|
|
28350
|
+
"context",
|
|
28351
|
+
"tag",
|
|
28352
|
+
"key",
|
|
28353
|
+
"__order",
|
|
28354
|
+
"if"
|
|
28355
|
+
]);
|
|
28356
|
+
for (let i = 0; i < tuples.length; i++) {
|
|
28357
|
+
const tuple = tuples[i];
|
|
28358
|
+
if (!Array.isArray(tuple) || tuple.length < 2) {
|
|
28359
|
+
continue;
|
|
28371
28360
|
}
|
|
28372
|
-
|
|
28373
|
-
|
|
28374
|
-
|
|
28375
|
-
|
|
28376
|
-
|
|
28377
|
-
|
|
28378
|
-
|
|
28379
|
-
|
|
28380
|
-
|
|
28381
|
-
|
|
28382
|
-
if (!(
|
|
28383
|
-
|
|
28361
|
+
const path = normalizePath(tuple[1]);
|
|
28362
|
+
if (!path.length) {
|
|
28363
|
+
continue;
|
|
28364
|
+
}
|
|
28365
|
+
if (path[0] === "schema") {
|
|
28366
|
+
continue;
|
|
28367
|
+
}
|
|
28368
|
+
const immediateParent = path.slice(0, -1);
|
|
28369
|
+
if (immediateParent.length) {
|
|
28370
|
+
const key = JSON.stringify(immediateParent);
|
|
28371
|
+
if (!seen.has(key)) {
|
|
28372
|
+
seen.add(key);
|
|
28373
|
+
parents.push(immediateParent);
|
|
28384
28374
|
}
|
|
28385
|
-
this._stateManager = new RootStateManager(this._context.state);
|
|
28386
28375
|
}
|
|
28387
|
-
const
|
|
28388
|
-
if (
|
|
28389
|
-
|
|
28390
|
-
|
|
28391
|
-
|
|
28392
|
-
|
|
28393
|
-
|
|
28394
|
-
|
|
28395
|
-
call: (method, ...args2) => {
|
|
28396
|
-
switch (method) {
|
|
28397
|
-
case "openNotification": {
|
|
28398
|
-
const [payload = {}] = args2;
|
|
28399
|
-
const { type = "info", title = "", message = "" } = payload;
|
|
28400
|
-
const logger = type === "error" ? console.error : console.log;
|
|
28401
|
-
logger(`[Notification] ${title}${message ? ` \u2013 ${message}` : ""}`);
|
|
28402
|
-
return;
|
|
28403
|
-
}
|
|
28404
|
-
case "deepStringify": {
|
|
28405
|
-
return deepStringify(...args2);
|
|
28406
|
-
}
|
|
28407
|
-
default:
|
|
28408
|
-
return {};
|
|
28409
|
-
}
|
|
28376
|
+
const last2 = path[path.length - 1];
|
|
28377
|
+
if (META_KEYS.has(last2) && path.length >= 2) {
|
|
28378
|
+
const containerParent = path.slice(0, -2);
|
|
28379
|
+
if (containerParent.length) {
|
|
28380
|
+
const key2 = JSON.stringify(containerParent);
|
|
28381
|
+
if (!seen.has(key2)) {
|
|
28382
|
+
seen.add(key2);
|
|
28383
|
+
parents.push(containerParent);
|
|
28410
28384
|
}
|
|
28411
|
-
}
|
|
28385
|
+
}
|
|
28386
|
+
}
|
|
28387
|
+
for (let j = 0; j < path.length; j++) {
|
|
28388
|
+
const seg = path[j];
|
|
28389
|
+
if (!META_KEYS.has(seg)) {
|
|
28390
|
+
continue;
|
|
28391
|
+
}
|
|
28392
|
+
const containerParent2 = path.slice(0, j);
|
|
28393
|
+
if (!containerParent2.length) {
|
|
28394
|
+
continue;
|
|
28395
|
+
}
|
|
28396
|
+
const key3 = JSON.stringify(containerParent2);
|
|
28397
|
+
if (!seen.has(key3)) {
|
|
28398
|
+
seen.add(key3);
|
|
28399
|
+
parents.push(containerParent2);
|
|
28400
|
+
}
|
|
28412
28401
|
}
|
|
28413
28402
|
}
|
|
28414
|
-
|
|
28415
|
-
|
|
28416
|
-
|
|
28417
|
-
|
|
28418
|
-
|
|
28419
|
-
|
|
28403
|
+
return parents;
|
|
28404
|
+
}
|
|
28405
|
+
function computeOrdersFromState(root, parentPaths = []) {
|
|
28406
|
+
if (!root || typeof root.getByPath !== "function") {
|
|
28407
|
+
return [];
|
|
28408
|
+
}
|
|
28409
|
+
const orders = [];
|
|
28410
|
+
const EXCLUDE_KEYS = /* @__PURE__ */ new Set(["__order"]);
|
|
28411
|
+
for (let i = 0; i < parentPaths.length; i++) {
|
|
28412
|
+
const parentPath = parentPaths[i];
|
|
28413
|
+
const obj = (() => {
|
|
28414
|
+
try {
|
|
28415
|
+
return root.getByPath(parentPath);
|
|
28416
|
+
} catch {
|
|
28417
|
+
return null;
|
|
28418
|
+
}
|
|
28419
|
+
})();
|
|
28420
|
+
if (!isObjectLike(obj)) {
|
|
28421
|
+
continue;
|
|
28422
|
+
}
|
|
28423
|
+
const keys2 = Object.keys(obj).filter((k) => !EXCLUDE_KEYS.has(k));
|
|
28424
|
+
orders.push({ path: parentPath, keys: keys2 });
|
|
28425
|
+
}
|
|
28426
|
+
return orders;
|
|
28427
|
+
}
|
|
28428
|
+
function normaliseSchemaCode(code) {
|
|
28429
|
+
if (typeof code !== "string" || !code.length) {
|
|
28430
|
+
return "";
|
|
28431
|
+
}
|
|
28432
|
+
return code.replaceAll("/////n", "\n").replaceAll("/////tilde", "`");
|
|
28433
|
+
}
|
|
28434
|
+
function parseExportedObject(code) {
|
|
28435
|
+
const src = normaliseSchemaCode(code);
|
|
28436
|
+
if (!src) {
|
|
28437
|
+
return null;
|
|
28438
|
+
}
|
|
28439
|
+
const body = src.replace(/^\s*export\s+default\s*/u, "return ");
|
|
28440
|
+
try {
|
|
28441
|
+
return new Function(body)();
|
|
28442
|
+
} catch {
|
|
28443
|
+
return null;
|
|
28444
|
+
}
|
|
28445
|
+
}
|
|
28446
|
+
function extractTopLevelKeysFromCode(code) {
|
|
28447
|
+
const obj = parseExportedObject(code);
|
|
28448
|
+
if (!obj || typeof obj !== "object") {
|
|
28449
|
+
return [];
|
|
28450
|
+
}
|
|
28451
|
+
return Object.keys(obj);
|
|
28452
|
+
}
|
|
28453
|
+
function computeOrdersForTuples(root, tuples = []) {
|
|
28454
|
+
const pendingChildrenByContainer = /* @__PURE__ */ new Map();
|
|
28455
|
+
for (let i = 0; i < tuples.length; i++) {
|
|
28456
|
+
const t = tuples[i];
|
|
28457
|
+
if (!Array.isArray(t)) {
|
|
28458
|
+
continue;
|
|
28459
|
+
}
|
|
28460
|
+
const [action, path] = t;
|
|
28461
|
+
const p = normalizePath(path);
|
|
28462
|
+
if (!Array.isArray(p) || p.length < 3) {
|
|
28463
|
+
continue;
|
|
28464
|
+
}
|
|
28465
|
+
if (p[0] === "schema") {
|
|
28466
|
+
continue;
|
|
28467
|
+
}
|
|
28468
|
+
const [typeName, containerKey, childKey] = p;
|
|
28469
|
+
const containerPath = [typeName, containerKey];
|
|
28470
|
+
const key = JSON.stringify(containerPath);
|
|
28471
|
+
if (!pendingChildrenByContainer.has(key)) {
|
|
28472
|
+
pendingChildrenByContainer.set(key, /* @__PURE__ */ new Set());
|
|
28473
|
+
}
|
|
28474
|
+
if (action === "update" || action === "set") {
|
|
28475
|
+
pendingChildrenByContainer.get(key).add(childKey);
|
|
28476
|
+
}
|
|
28477
|
+
}
|
|
28478
|
+
const preferredOrderMap = /* @__PURE__ */ new Map();
|
|
28479
|
+
for (let i = 0; i < tuples.length; i++) {
|
|
28480
|
+
const t = tuples[i];
|
|
28481
|
+
if (!Array.isArray(t)) {
|
|
28482
|
+
continue;
|
|
28483
|
+
}
|
|
28484
|
+
const [action, path, value2] = t;
|
|
28485
|
+
const p = normalizePath(path);
|
|
28486
|
+
if (action !== "update" || !Array.isArray(p) || p.length < 3) {
|
|
28487
|
+
continue;
|
|
28488
|
+
}
|
|
28489
|
+
if (p[0] !== "schema") {
|
|
28490
|
+
continue;
|
|
28491
|
+
}
|
|
28492
|
+
const [, type, key] = p;
|
|
28493
|
+
const containerPath = [type, key];
|
|
28494
|
+
const uses = value2 && Array.isArray(value2.uses) ? value2.uses : null;
|
|
28495
|
+
const code = value2 && value2.code;
|
|
28496
|
+
const obj = (() => {
|
|
28497
|
+
try {
|
|
28498
|
+
return root && typeof root.getByPath === "function" ? root.getByPath(containerPath) : null;
|
|
28499
|
+
} catch {
|
|
28500
|
+
return null;
|
|
28501
|
+
}
|
|
28502
|
+
})();
|
|
28503
|
+
if (!obj) {
|
|
28504
|
+
continue;
|
|
28505
|
+
}
|
|
28506
|
+
const present = new Set(Object.keys(obj));
|
|
28507
|
+
const EXCLUDE_KEYS = /* @__PURE__ */ new Set(["__order"]);
|
|
28508
|
+
const codeKeys = extractTopLevelKeysFromCode(code);
|
|
28509
|
+
let resolved = [];
|
|
28510
|
+
const pendingKey = JSON.stringify(containerPath);
|
|
28511
|
+
const pendingChildren = pendingChildrenByContainer.get(pendingKey) || /* @__PURE__ */ new Set();
|
|
28512
|
+
const eligible = /* @__PURE__ */ new Set([...present, ...pendingChildren]);
|
|
28513
|
+
if (Array.isArray(codeKeys) && codeKeys.length) {
|
|
28514
|
+
resolved = codeKeys.filter((k) => eligible.has(k) && !EXCLUDE_KEYS.has(k));
|
|
28515
|
+
}
|
|
28516
|
+
if (Array.isArray(uses) && uses.length) {
|
|
28517
|
+
for (let u = 0; u < uses.length; u++) {
|
|
28518
|
+
const keyName = uses[u];
|
|
28519
|
+
if (eligible.has(keyName) && !EXCLUDE_KEYS.has(keyName) && !resolved.includes(keyName)) {
|
|
28520
|
+
resolved.push(keyName);
|
|
28521
|
+
}
|
|
28522
|
+
}
|
|
28523
|
+
}
|
|
28524
|
+
if (pendingChildren.size) {
|
|
28525
|
+
for (const child of pendingChildren) {
|
|
28526
|
+
if (!EXCLUDE_KEYS.has(child) && !resolved.includes(child)) {
|
|
28527
|
+
resolved.push(child);
|
|
28528
|
+
}
|
|
28529
|
+
}
|
|
28530
|
+
}
|
|
28531
|
+
if (resolved.length) {
|
|
28532
|
+
preferredOrderMap.set(JSON.stringify(containerPath), { path: containerPath, keys: resolved });
|
|
28533
|
+
}
|
|
28534
|
+
}
|
|
28535
|
+
const parents = getParentPathsFromTuples(tuples);
|
|
28536
|
+
const orders = [];
|
|
28537
|
+
const seen = /* @__PURE__ */ new Set();
|
|
28538
|
+
preferredOrderMap.forEach((v) => {
|
|
28539
|
+
const k = JSON.stringify(v.path);
|
|
28540
|
+
if (!seen.has(k)) {
|
|
28541
|
+
seen.add(k);
|
|
28542
|
+
orders.push(v);
|
|
28543
|
+
}
|
|
28544
|
+
});
|
|
28545
|
+
const fallbackOrders = computeOrdersFromState(root, parents);
|
|
28546
|
+
for (let i = 0; i < fallbackOrders.length; i++) {
|
|
28547
|
+
const v = fallbackOrders[i];
|
|
28548
|
+
const k = JSON.stringify(v.path);
|
|
28549
|
+
if (seen.has(k)) {
|
|
28550
|
+
continue;
|
|
28551
|
+
}
|
|
28552
|
+
const pending = pendingChildrenByContainer.get(k);
|
|
28553
|
+
if (pending && pending.size) {
|
|
28554
|
+
const existing = new Set(v.keys);
|
|
28555
|
+
for (const child of pending) {
|
|
28556
|
+
if (existing.has(child)) {
|
|
28557
|
+
continue;
|
|
28558
|
+
}
|
|
28559
|
+
v.keys.push(child);
|
|
28560
|
+
}
|
|
28561
|
+
}
|
|
28562
|
+
seen.add(k);
|
|
28563
|
+
orders.push(v);
|
|
28564
|
+
}
|
|
28565
|
+
return orders;
|
|
28566
|
+
}
|
|
28567
|
+
|
|
28568
|
+
// src/utils/changePreprocessor.js
|
|
28569
|
+
function isPlainObject2(val) {
|
|
28570
|
+
return val && typeof val === "object" && !Array.isArray(val);
|
|
28571
|
+
}
|
|
28572
|
+
function getByPathSafe(root, path) {
|
|
28573
|
+
if (!root || typeof root.getByPath !== "function") {
|
|
28574
|
+
return null;
|
|
28575
|
+
}
|
|
28576
|
+
try {
|
|
28577
|
+
return root.getByPath(path);
|
|
28578
|
+
} catch {
|
|
28579
|
+
return null;
|
|
28580
|
+
}
|
|
28581
|
+
}
|
|
28582
|
+
function preprocessChanges(root, tuples = [], options = {}) {
|
|
28583
|
+
const expandTuple = (t) => {
|
|
28584
|
+
const [action, path, value2] = t || [];
|
|
28585
|
+
const isSchemaPath = Array.isArray(path) && path[0] === "schema";
|
|
28586
|
+
if (action === "delete") {
|
|
28587
|
+
return [t];
|
|
28588
|
+
}
|
|
28589
|
+
const canConsiderExpansion = action === "update" && Array.isArray(path) && (path.length === 1 || path.length === 2 || isSchemaPath && path.length === 3) && isPlainObject2(value2);
|
|
28590
|
+
if (!canConsiderExpansion) {
|
|
28591
|
+
return [t];
|
|
28592
|
+
}
|
|
28593
|
+
const prev = getByPathSafe(root, path) || {};
|
|
28594
|
+
const next = value2 || {};
|
|
28595
|
+
if (!isPlainObject2(prev) || !isPlainObject2(next)) {
|
|
28596
|
+
return [t];
|
|
28597
|
+
}
|
|
28598
|
+
const ops = diffJson(prev, next, []);
|
|
28599
|
+
if (!ops.length) {
|
|
28600
|
+
return [t];
|
|
28601
|
+
}
|
|
28602
|
+
const out = [];
|
|
28603
|
+
for (let i = 0; i < ops.length; i++) {
|
|
28604
|
+
const op = ops[i];
|
|
28605
|
+
const fullPath = [...path, ...op.path];
|
|
28606
|
+
const last2 = fullPath[fullPath.length - 1];
|
|
28607
|
+
if (op.action === "set") {
|
|
28608
|
+
out.push(["update", fullPath, op.value]);
|
|
28609
|
+
} else if (op.action === "del") {
|
|
28610
|
+
if (last2 !== "__order") {
|
|
28611
|
+
out.push(["delete", fullPath]);
|
|
28612
|
+
}
|
|
28613
|
+
}
|
|
28614
|
+
}
|
|
28615
|
+
return out;
|
|
28616
|
+
};
|
|
28617
|
+
const minimizeTuples = (input) => {
|
|
28618
|
+
const out = [];
|
|
28619
|
+
const seen2 = /* @__PURE__ */ new Set();
|
|
28620
|
+
for (let i = 0; i < input.length; i++) {
|
|
28621
|
+
const expanded = expandTuple(input[i]);
|
|
28622
|
+
for (let k = 0; k < expanded.length; k++) {
|
|
28623
|
+
const tuple = expanded[k];
|
|
28624
|
+
const isDelete = Array.isArray(tuple) && tuple[0] === "delete";
|
|
28625
|
+
const isOrderKey = isDelete && Array.isArray(tuple[1]) && tuple[1][tuple[1].length - 1] === "__order";
|
|
28626
|
+
if (!isOrderKey) {
|
|
28627
|
+
const key = JSON.stringify(tuple);
|
|
28628
|
+
if (!seen2.has(key)) {
|
|
28629
|
+
seen2.add(key);
|
|
28630
|
+
out.push(tuple);
|
|
28631
|
+
}
|
|
28632
|
+
}
|
|
28633
|
+
}
|
|
28634
|
+
}
|
|
28635
|
+
return out;
|
|
28636
|
+
};
|
|
28637
|
+
const granularChanges = (() => {
|
|
28638
|
+
try {
|
|
28639
|
+
const res = minimizeTuples(tuples);
|
|
28640
|
+
if (options.append && options.append.length) {
|
|
28641
|
+
res.push(...options.append);
|
|
28642
|
+
}
|
|
28643
|
+
return res;
|
|
28644
|
+
} catch {
|
|
28645
|
+
return Array.isArray(tuples) ? tuples.slice() : [];
|
|
28646
|
+
}
|
|
28647
|
+
})();
|
|
28648
|
+
const baseOrders = computeOrdersForTuples(root, granularChanges);
|
|
28649
|
+
const preferOrdersMap = /* @__PURE__ */ new Map();
|
|
28650
|
+
for (let i = 0; i < tuples.length; i++) {
|
|
28651
|
+
const t = tuples[i];
|
|
28652
|
+
if (!Array.isArray(t) || t.length < 3) {
|
|
28653
|
+
continue;
|
|
28654
|
+
}
|
|
28655
|
+
const [action, path, value2] = t;
|
|
28656
|
+
if (action !== "update" || !Array.isArray(path) || path.length !== 1 && path.length !== 2 || !isPlainObject2(value2)) {
|
|
28657
|
+
continue;
|
|
28658
|
+
}
|
|
28659
|
+
const keys2 = Object.keys(value2).filter((k) => k !== "__order");
|
|
28660
|
+
const key = JSON.stringify(path);
|
|
28661
|
+
preferOrdersMap.set(key, { path, keys: keys2 });
|
|
28662
|
+
}
|
|
28663
|
+
const mergedOrders = [];
|
|
28664
|
+
const seen = /* @__PURE__ */ new Set();
|
|
28665
|
+
preferOrdersMap.forEach((v, k) => {
|
|
28666
|
+
seen.add(k);
|
|
28667
|
+
mergedOrders.push(v);
|
|
28668
|
+
});
|
|
28669
|
+
for (let i = 0; i < baseOrders.length; i++) {
|
|
28670
|
+
const v = baseOrders[i];
|
|
28671
|
+
const k = JSON.stringify(v.path);
|
|
28672
|
+
if (!seen.has(k)) {
|
|
28673
|
+
seen.add(k);
|
|
28674
|
+
mergedOrders.push(v);
|
|
28675
|
+
}
|
|
28676
|
+
}
|
|
28677
|
+
return { granularChanges, orders: mergedOrders };
|
|
28678
|
+
}
|
|
28679
|
+
|
|
28680
|
+
// src/services/CollabService.js
|
|
28681
|
+
var CollabService = class extends BaseService {
|
|
28682
|
+
constructor(config) {
|
|
28683
|
+
super(config);
|
|
28684
|
+
this._client = null;
|
|
28685
|
+
this._stateManager = null;
|
|
28686
|
+
this._connected = false;
|
|
28687
|
+
this._undoStack = [];
|
|
28688
|
+
this._redoStack = [];
|
|
28689
|
+
this._isUndoRedo = false;
|
|
28690
|
+
this._pendingOps = [];
|
|
28691
|
+
}
|
|
28692
|
+
init({ context }) {
|
|
28693
|
+
if (context == null ? void 0 : context.state) {
|
|
28694
|
+
try {
|
|
28695
|
+
this._stateManager = new RootStateManager(context.state);
|
|
28696
|
+
} catch (err) {
|
|
28697
|
+
this._setError(err);
|
|
28698
|
+
throw err;
|
|
28699
|
+
}
|
|
28700
|
+
}
|
|
28701
|
+
this._setReady();
|
|
28702
|
+
}
|
|
28703
|
+
/**
|
|
28704
|
+
* Overridden to re-initialise the state manager once the root state becomes
|
|
28705
|
+
* available via a subsequent SDK `updateContext()` call.
|
|
28706
|
+
*/
|
|
28707
|
+
updateContext(context = {}) {
|
|
28708
|
+
super.updateContext(context);
|
|
28709
|
+
if (context.state) {
|
|
28710
|
+
this._stateManager = new RootStateManager(context.state);
|
|
28711
|
+
}
|
|
28712
|
+
}
|
|
28713
|
+
/**
|
|
28714
|
+
* Ensure that the state manager exists. This is called right before any
|
|
28715
|
+
* operation that requires access to the root state (e.g. `connect()`).
|
|
28716
|
+
* Throws an explicit error if the root state is still missing so that the
|
|
28717
|
+
* caller can react accordingly.
|
|
28718
|
+
*/
|
|
28719
|
+
_ensureStateManager() {
|
|
28720
|
+
var _a, _b;
|
|
28721
|
+
if (!this._stateManager) {
|
|
28722
|
+
if (!((_a = this._context) == null ? void 0 : _a.state)) {
|
|
28723
|
+
throw new Error("[CollabService] Cannot operate without root state");
|
|
28724
|
+
}
|
|
28725
|
+
this._stateManager = new RootStateManager(this._context.state);
|
|
28726
|
+
}
|
|
28727
|
+
const root = (_b = this._stateManager) == null ? void 0 : _b.root;
|
|
28728
|
+
if (root && !root.__element) {
|
|
28729
|
+
root.__element = {
|
|
28730
|
+
/**
|
|
28731
|
+
* Very small subset of the DOMQL `call` API that we rely on inside the
|
|
28732
|
+
* CollabService for browser notifications and data helpers.
|
|
28733
|
+
* In a Node.js test context we simply log or return fallbacks.
|
|
28734
|
+
*/
|
|
28735
|
+
call: (method, ...args2) => {
|
|
28736
|
+
switch (method) {
|
|
28737
|
+
case "openNotification": {
|
|
28738
|
+
const [payload = {}] = args2;
|
|
28739
|
+
const { type = "info", title = "", message = "" } = payload;
|
|
28740
|
+
const logger = type === "error" ? console.error : console.log;
|
|
28741
|
+
logger(`[Notification] ${title}${message ? ` \u2013 ${message}` : ""}`);
|
|
28742
|
+
return;
|
|
28743
|
+
}
|
|
28744
|
+
case "deepStringifyFunctions": {
|
|
28745
|
+
return deepStringifyFunctions(...args2);
|
|
28746
|
+
}
|
|
28747
|
+
default:
|
|
28748
|
+
return {};
|
|
28749
|
+
}
|
|
28750
|
+
}
|
|
28751
|
+
};
|
|
28752
|
+
}
|
|
28753
|
+
}
|
|
28754
|
+
/* ---------- Connection Management ---------- */
|
|
28755
|
+
async connect(options = {}) {
|
|
28756
|
+
var _a, _b, _c, _d, _e, _f;
|
|
28757
|
+
this._ensureStateManager();
|
|
28758
|
+
const {
|
|
28759
|
+
authToken: jwt,
|
|
28420
28760
|
projectId,
|
|
28421
28761
|
branch = "main",
|
|
28422
28762
|
pro
|
|
@@ -28437,57 +28777,49 @@ var CollabService = class extends BaseService {
|
|
|
28437
28777
|
if (this._client) {
|
|
28438
28778
|
await this.disconnect();
|
|
28439
28779
|
}
|
|
28440
|
-
|
|
28441
|
-
|
|
28442
|
-
|
|
28443
|
-
|
|
28444
|
-
|
|
28445
|
-
|
|
28446
|
-
|
|
28447
|
-
|
|
28448
|
-
|
|
28449
|
-
|
|
28450
|
-
|
|
28451
|
-
|
|
28452
|
-
(_b2 = this._client.socket) == null ? void 0 : _b2.once("connect", resolve);
|
|
28453
|
-
}
|
|
28454
|
-
});
|
|
28455
|
-
console.log("[CollabService] socket connected");
|
|
28456
|
-
(_b = this._client.socket) == null ? void 0 : _b.on("ops", ({ changes }) => {
|
|
28457
|
-
console.log(`ops event`);
|
|
28458
|
-
console.log(changes);
|
|
28459
|
-
this._stateManager.applyChanges(changes, { fromSocket: true });
|
|
28460
|
-
});
|
|
28461
|
-
(_c = this._client.socket) == null ? void 0 : _c.on("commit", ({ version: version2 }) => {
|
|
28462
|
-
if (version2) {
|
|
28463
|
-
this._stateManager.setVersion(version2);
|
|
28464
|
-
}
|
|
28465
|
-
rootBus.emit("checkpoint:done", { version: version2, origin: "auto" });
|
|
28466
|
-
});
|
|
28467
|
-
(_d = this._client.socket) == null ? void 0 : _d.on("clients", this._handleClientsEvent.bind(this));
|
|
28468
|
-
(_e = this._client.socket) == null ? void 0 : _e.on(
|
|
28469
|
-
"bundle:done",
|
|
28470
|
-
this._handleBundleDoneEvent.bind(this)
|
|
28471
|
-
);
|
|
28472
|
-
(_f = this._client.socket) == null ? void 0 : _f.on(
|
|
28473
|
-
"bundle:error",
|
|
28474
|
-
this._handleBundleErrorEvent.bind(this)
|
|
28475
|
-
);
|
|
28476
|
-
if (this._pendingOps.length) {
|
|
28477
|
-
console.log(
|
|
28478
|
-
`[CollabService] Flushing ${this._pendingOps.length} offline operation batch(es)`
|
|
28479
|
-
);
|
|
28480
|
-
this._pendingOps.forEach(({ tuples }) => {
|
|
28481
|
-
this.socket.emit("ops", { changes: tuples, ts: Date.now() });
|
|
28482
|
-
});
|
|
28483
|
-
this._pendingOps.length = 0;
|
|
28780
|
+
this._client = new CollabClient({
|
|
28781
|
+
jwt,
|
|
28782
|
+
projectId,
|
|
28783
|
+
branch,
|
|
28784
|
+
live: Boolean(pro)
|
|
28785
|
+
});
|
|
28786
|
+
await new Promise((resolve) => {
|
|
28787
|
+
var _a2, _b2;
|
|
28788
|
+
if ((_a2 = this._client.socket) == null ? void 0 : _a2.connected) {
|
|
28789
|
+
resolve();
|
|
28790
|
+
} else {
|
|
28791
|
+
(_b2 = this._client.socket) == null ? void 0 : _b2.once("connect", resolve);
|
|
28484
28792
|
}
|
|
28485
|
-
|
|
28486
|
-
|
|
28487
|
-
|
|
28488
|
-
|
|
28489
|
-
|
|
28793
|
+
});
|
|
28794
|
+
(_b = this._client.socket) == null ? void 0 : _b.on("ops", ({ changes }) => {
|
|
28795
|
+
console.log(`ops event`);
|
|
28796
|
+
this._stateManager.applyChanges(changes, { fromSocket: true });
|
|
28797
|
+
});
|
|
28798
|
+
(_c = this._client.socket) == null ? void 0 : _c.on("commit", ({ version: version2 }) => {
|
|
28799
|
+
if (version2) {
|
|
28800
|
+
this._stateManager.setVersion(version2);
|
|
28801
|
+
}
|
|
28802
|
+
rootBus.emit("checkpoint:done", { version: version2, origin: "auto" });
|
|
28803
|
+
});
|
|
28804
|
+
(_d = this._client.socket) == null ? void 0 : _d.on("clients", this._handleClientsEvent.bind(this));
|
|
28805
|
+
(_e = this._client.socket) == null ? void 0 : _e.on(
|
|
28806
|
+
"bundle:done",
|
|
28807
|
+
this._handleBundleDoneEvent.bind(this)
|
|
28808
|
+
);
|
|
28809
|
+
(_f = this._client.socket) == null ? void 0 : _f.on(
|
|
28810
|
+
"bundle:error",
|
|
28811
|
+
this._handleBundleErrorEvent.bind(this)
|
|
28812
|
+
);
|
|
28813
|
+
if (this._pendingOps.length) {
|
|
28814
|
+
console.log(
|
|
28815
|
+
`[CollabService] Flushing ${this._pendingOps.length} offline operation batch(es)`
|
|
28816
|
+
);
|
|
28817
|
+
this._pendingOps.forEach(({ changes, granularChanges, orders }) => {
|
|
28818
|
+
this.socket.emit("ops", { changes, granularChanges, orders, ts: Date.now() });
|
|
28819
|
+
});
|
|
28820
|
+
this._pendingOps.length = 0;
|
|
28490
28821
|
}
|
|
28822
|
+
this._connected = true;
|
|
28491
28823
|
}
|
|
28492
28824
|
disconnect() {
|
|
28493
28825
|
var _a;
|
|
@@ -28525,24 +28857,60 @@ var CollabService = class extends BaseService {
|
|
|
28525
28857
|
}
|
|
28526
28858
|
/* ---------- data helpers ---------- */
|
|
28527
28859
|
updateData(tuples, options = {}) {
|
|
28528
|
-
var _a;
|
|
28860
|
+
var _a, _b, _c;
|
|
28529
28861
|
this._ensureStateManager();
|
|
28530
28862
|
const { isUndo = false, isRedo = false } = options;
|
|
28531
28863
|
if (!isUndo && !isRedo && !this._isUndoRedo) {
|
|
28532
28864
|
this._trackForUndo(tuples, options);
|
|
28533
28865
|
}
|
|
28866
|
+
const root = (_a = this._stateManager) == null ? void 0 : _a.root;
|
|
28867
|
+
const { granularChanges: processedTuples, orders } = preprocessChanges(
|
|
28868
|
+
root,
|
|
28869
|
+
tuples,
|
|
28870
|
+
options
|
|
28871
|
+
);
|
|
28534
28872
|
if (options.append && options.append.length) {
|
|
28535
|
-
|
|
28873
|
+
processedTuples.push(...options.append);
|
|
28536
28874
|
}
|
|
28537
28875
|
this._stateManager.applyChanges(tuples, { ...options });
|
|
28538
|
-
|
|
28876
|
+
const state = (_b = this._stateManager) == null ? void 0 : _b.root;
|
|
28877
|
+
const el = state == null ? void 0 : state.__element;
|
|
28878
|
+
const stringifiedGranularTuples = (el == null ? void 0 : el.call) ? el.call(
|
|
28879
|
+
"deepStringifyFunctions",
|
|
28880
|
+
processedTuples,
|
|
28881
|
+
Array.isArray(processedTuples) ? [] : {}
|
|
28882
|
+
) : deepStringifyFunctions(
|
|
28883
|
+
processedTuples,
|
|
28884
|
+
Array.isArray(processedTuples) ? [] : {}
|
|
28885
|
+
);
|
|
28886
|
+
const stringifiedTuples = (el == null ? void 0 : el.call) ? el.call(
|
|
28887
|
+
"deepStringifyFunctions",
|
|
28888
|
+
tuples,
|
|
28889
|
+
Array.isArray(tuples) ? [] : {}
|
|
28890
|
+
) : deepStringifyFunctions(tuples, Array.isArray(tuples) ? [] : {});
|
|
28539
28891
|
if (!this.isConnected()) {
|
|
28540
28892
|
console.warn("[CollabService] Not connected, queuing real-time update");
|
|
28541
|
-
this._pendingOps.push({
|
|
28893
|
+
this._pendingOps.push({
|
|
28894
|
+
changes: stringifiedTuples,
|
|
28895
|
+
granularChanges: stringifiedGranularTuples,
|
|
28896
|
+
orders,
|
|
28897
|
+
options
|
|
28898
|
+
});
|
|
28542
28899
|
return;
|
|
28543
28900
|
}
|
|
28544
|
-
if ((
|
|
28545
|
-
|
|
28901
|
+
if ((_c = this.socket) == null ? void 0 : _c.connected) {
|
|
28902
|
+
console.log("[CollabService] Sending operations to the backend", {
|
|
28903
|
+
changes: stringifiedTuples,
|
|
28904
|
+
granularChanges: stringifiedGranularTuples,
|
|
28905
|
+
orders,
|
|
28906
|
+
ts: Date.now()
|
|
28907
|
+
});
|
|
28908
|
+
this.socket.emit("ops", {
|
|
28909
|
+
changes: stringifiedTuples,
|
|
28910
|
+
granularChanges: stringifiedGranularTuples,
|
|
28911
|
+
orders,
|
|
28912
|
+
ts: Date.now()
|
|
28913
|
+
});
|
|
28546
28914
|
}
|
|
28547
28915
|
return { success: true };
|
|
28548
28916
|
}
|
|
@@ -28683,7 +29051,7 @@ var CollabService = class extends BaseService {
|
|
|
28683
29051
|
const updatedOpts = { ...opts, skipComponentsChangedEvent: true };
|
|
28684
29052
|
return this.updateData(tuples, updatedOpts);
|
|
28685
29053
|
} catch (error) {
|
|
28686
|
-
throw new Error(`Failed to add item: ${error.message}
|
|
29054
|
+
throw new Error(`Failed to add item: ${error.message}`, { cause: error });
|
|
28687
29055
|
}
|
|
28688
29056
|
}
|
|
28689
29057
|
addMultipleItems(items, opts = {}) {
|
|
@@ -28712,7 +29080,7 @@ var CollabService = class extends BaseService {
|
|
|
28712
29080
|
title: "Failed to add item",
|
|
28713
29081
|
message: error.message
|
|
28714
29082
|
});
|
|
28715
|
-
throw new Error(`Failed to add item: ${error.message}
|
|
29083
|
+
throw new Error(`Failed to add item: ${error.message}`, { cause: error });
|
|
28716
29084
|
}
|
|
28717
29085
|
}
|
|
28718
29086
|
updateItem(type, data2, opts = {}) {
|
|
@@ -28734,7 +29102,9 @@ var CollabService = class extends BaseService {
|
|
|
28734
29102
|
title: "Failed to update item",
|
|
28735
29103
|
message: error.message
|
|
28736
29104
|
});
|
|
28737
|
-
throw new Error(`Failed to update item: ${error.message}
|
|
29105
|
+
throw new Error(`Failed to update item: ${error.message}`, {
|
|
29106
|
+
cause: error
|
|
29107
|
+
});
|
|
28738
29108
|
}
|
|
28739
29109
|
}
|
|
28740
29110
|
deleteItem(type, key, opts = {}) {
|
|
@@ -28759,7 +29129,9 @@ var CollabService = class extends BaseService {
|
|
|
28759
29129
|
title: "Failed to delete item",
|
|
28760
29130
|
message: error.message
|
|
28761
29131
|
});
|
|
28762
|
-
throw new Error(`Failed to delete item: ${error.message}
|
|
29132
|
+
throw new Error(`Failed to delete item: ${error.message}`, {
|
|
29133
|
+
cause: error
|
|
29134
|
+
});
|
|
28763
29135
|
}
|
|
28764
29136
|
}
|
|
28765
29137
|
/* ---------- socket event helpers ---------- */
|
|
@@ -28852,6 +29224,7 @@ var CollabService = class extends BaseService {
|
|
|
28852
29224
|
};
|
|
28853
29225
|
|
|
28854
29226
|
// src/services/ProjectService.js
|
|
29227
|
+
import { deepStringifyFunctions as deepStringifyFunctions2 } from "@domql/utils";
|
|
28855
29228
|
var ProjectService = class extends BaseService {
|
|
28856
29229
|
// ==================== PROJECT METHODS ====================
|
|
28857
29230
|
async createProject(projectData) {
|
|
@@ -28867,7 +29240,7 @@ var ProjectService = class extends BaseService {
|
|
|
28867
29240
|
}
|
|
28868
29241
|
throw new Error(response.message);
|
|
28869
29242
|
} catch (error) {
|
|
28870
|
-
throw new Error(`Failed to create project: ${error.message}
|
|
29243
|
+
throw new Error(`Failed to create project: ${error.message}`, { cause: error });
|
|
28871
29244
|
}
|
|
28872
29245
|
}
|
|
28873
29246
|
async getProjects(params2 = {}) {
|
|
@@ -28890,7 +29263,7 @@ var ProjectService = class extends BaseService {
|
|
|
28890
29263
|
}
|
|
28891
29264
|
throw new Error(response.message);
|
|
28892
29265
|
} catch (error) {
|
|
28893
|
-
throw new Error(`Failed to get projects: ${error.message}
|
|
29266
|
+
throw new Error(`Failed to get projects: ${error.message}`, { cause: error });
|
|
28894
29267
|
}
|
|
28895
29268
|
}
|
|
28896
29269
|
/**
|
|
@@ -28921,7 +29294,7 @@ var ProjectService = class extends BaseService {
|
|
|
28921
29294
|
}
|
|
28922
29295
|
throw new Error(response.message);
|
|
28923
29296
|
} catch (error) {
|
|
28924
|
-
throw new Error(`Failed to list public projects: ${error.message}
|
|
29297
|
+
throw new Error(`Failed to list public projects: ${error.message}`, { cause: error });
|
|
28925
29298
|
}
|
|
28926
29299
|
}
|
|
28927
29300
|
async getProject(projectId) {
|
|
@@ -28943,7 +29316,7 @@ var ProjectService = class extends BaseService {
|
|
|
28943
29316
|
}
|
|
28944
29317
|
throw new Error(response.message);
|
|
28945
29318
|
} catch (error) {
|
|
28946
|
-
throw new Error(`Failed to get project: ${error.message}
|
|
29319
|
+
throw new Error(`Failed to get project: ${error.message}`, { cause: error });
|
|
28947
29320
|
}
|
|
28948
29321
|
}
|
|
28949
29322
|
/**
|
|
@@ -28968,7 +29341,7 @@ var ProjectService = class extends BaseService {
|
|
|
28968
29341
|
}
|
|
28969
29342
|
throw new Error(response.message);
|
|
28970
29343
|
} catch (error) {
|
|
28971
|
-
throw new Error(`Failed to get public project: ${error.message}
|
|
29344
|
+
throw new Error(`Failed to get public project: ${error.message}`, { cause: error });
|
|
28972
29345
|
}
|
|
28973
29346
|
}
|
|
28974
29347
|
async getProjectByKey(key) {
|
|
@@ -28990,7 +29363,7 @@ var ProjectService = class extends BaseService {
|
|
|
28990
29363
|
}
|
|
28991
29364
|
throw new Error(response.message);
|
|
28992
29365
|
} catch (error) {
|
|
28993
|
-
throw new Error(`Failed to get project by key: ${error.message}
|
|
29366
|
+
throw new Error(`Failed to get project by key: ${error.message}`, { cause: error });
|
|
28994
29367
|
}
|
|
28995
29368
|
}
|
|
28996
29369
|
/**
|
|
@@ -29024,7 +29397,7 @@ var ProjectService = class extends BaseService {
|
|
|
29024
29397
|
}
|
|
29025
29398
|
throw new Error(response.message);
|
|
29026
29399
|
} catch (error) {
|
|
29027
|
-
throw new Error(`Failed to get project data by key: ${error.message}
|
|
29400
|
+
throw new Error(`Failed to get project data by key: ${error.message}`, { cause: error });
|
|
29028
29401
|
}
|
|
29029
29402
|
}
|
|
29030
29403
|
async updateProject(projectId, data2) {
|
|
@@ -29043,7 +29416,7 @@ var ProjectService = class extends BaseService {
|
|
|
29043
29416
|
}
|
|
29044
29417
|
throw new Error(response.message);
|
|
29045
29418
|
} catch (error) {
|
|
29046
|
-
throw new Error(`Failed to update project: ${error.message}
|
|
29419
|
+
throw new Error(`Failed to update project: ${error.message}`, { cause: error });
|
|
29047
29420
|
}
|
|
29048
29421
|
}
|
|
29049
29422
|
async updateProjectComponents(projectId, components) {
|
|
@@ -29065,7 +29438,7 @@ var ProjectService = class extends BaseService {
|
|
|
29065
29438
|
}
|
|
29066
29439
|
throw new Error(response.message);
|
|
29067
29440
|
} catch (error) {
|
|
29068
|
-
throw new Error(`Failed to update project components: ${error.message}
|
|
29441
|
+
throw new Error(`Failed to update project components: ${error.message}`, { cause: error });
|
|
29069
29442
|
}
|
|
29070
29443
|
}
|
|
29071
29444
|
async updateProjectSettings(projectId, settings) {
|
|
@@ -29084,7 +29457,7 @@ var ProjectService = class extends BaseService {
|
|
|
29084
29457
|
}
|
|
29085
29458
|
throw new Error(response.message);
|
|
29086
29459
|
} catch (error) {
|
|
29087
|
-
throw new Error(`Failed to update project settings: ${error.message}
|
|
29460
|
+
throw new Error(`Failed to update project settings: ${error.message}`, { cause: error });
|
|
29088
29461
|
}
|
|
29089
29462
|
}
|
|
29090
29463
|
async updateProjectName(projectId, name) {
|
|
@@ -29103,7 +29476,7 @@ var ProjectService = class extends BaseService {
|
|
|
29103
29476
|
}
|
|
29104
29477
|
throw new Error(response.message);
|
|
29105
29478
|
} catch (error) {
|
|
29106
|
-
throw new Error(`Failed to update project name: ${error.message}
|
|
29479
|
+
throw new Error(`Failed to update project name: ${error.message}`, { cause: error });
|
|
29107
29480
|
}
|
|
29108
29481
|
}
|
|
29109
29482
|
async updateProjectPackage(projectId, pkg) {
|
|
@@ -29122,7 +29495,7 @@ var ProjectService = class extends BaseService {
|
|
|
29122
29495
|
}
|
|
29123
29496
|
throw new Error(response.message);
|
|
29124
29497
|
} catch (error) {
|
|
29125
|
-
throw new Error(`Failed to update project package: ${error.message}
|
|
29498
|
+
throw new Error(`Failed to update project package: ${error.message}`, { cause: error });
|
|
29126
29499
|
}
|
|
29127
29500
|
}
|
|
29128
29501
|
async duplicateProject(projectId, newName, newKey, targetUserId) {
|
|
@@ -29141,7 +29514,7 @@ var ProjectService = class extends BaseService {
|
|
|
29141
29514
|
}
|
|
29142
29515
|
throw new Error(response.message);
|
|
29143
29516
|
} catch (error) {
|
|
29144
|
-
throw new Error(`Failed to duplicate project: ${error.message}
|
|
29517
|
+
throw new Error(`Failed to duplicate project: ${error.message}`, { cause: error });
|
|
29145
29518
|
}
|
|
29146
29519
|
}
|
|
29147
29520
|
async removeProject(projectId) {
|
|
@@ -29159,7 +29532,7 @@ var ProjectService = class extends BaseService {
|
|
|
29159
29532
|
}
|
|
29160
29533
|
throw new Error(response.message);
|
|
29161
29534
|
} catch (error) {
|
|
29162
|
-
throw new Error(`Failed to remove project: ${error.message}
|
|
29535
|
+
throw new Error(`Failed to remove project: ${error.message}`, { cause: error });
|
|
29163
29536
|
}
|
|
29164
29537
|
}
|
|
29165
29538
|
async checkProjectKeyAvailability(key) {
|
|
@@ -29178,7 +29551,8 @@ var ProjectService = class extends BaseService {
|
|
|
29178
29551
|
throw new Error(response.message);
|
|
29179
29552
|
} catch (error) {
|
|
29180
29553
|
throw new Error(
|
|
29181
|
-
`Failed to check project key availability: ${error.message}
|
|
29554
|
+
`Failed to check project key availability: ${error.message}`,
|
|
29555
|
+
{ cause: error }
|
|
29182
29556
|
);
|
|
29183
29557
|
}
|
|
29184
29558
|
}
|
|
@@ -29198,7 +29572,7 @@ var ProjectService = class extends BaseService {
|
|
|
29198
29572
|
}
|
|
29199
29573
|
throw new Error(response.message);
|
|
29200
29574
|
} catch (error) {
|
|
29201
|
-
throw new Error(`Failed to get project members: ${error.message}
|
|
29575
|
+
throw new Error(`Failed to get project members: ${error.message}`, { cause: error });
|
|
29202
29576
|
}
|
|
29203
29577
|
}
|
|
29204
29578
|
async inviteMember(projectId, email, role = "guest", options = {}) {
|
|
@@ -29227,7 +29601,7 @@ var ProjectService = class extends BaseService {
|
|
|
29227
29601
|
}
|
|
29228
29602
|
throw new Error(response.message);
|
|
29229
29603
|
} catch (error) {
|
|
29230
|
-
throw new Error(`Failed to invite member: ${error.message}
|
|
29604
|
+
throw new Error(`Failed to invite member: ${error.message}`, { cause: error });
|
|
29231
29605
|
}
|
|
29232
29606
|
}
|
|
29233
29607
|
async acceptInvite(token) {
|
|
@@ -29246,7 +29620,7 @@ var ProjectService = class extends BaseService {
|
|
|
29246
29620
|
}
|
|
29247
29621
|
throw new Error(response.message);
|
|
29248
29622
|
} catch (error) {
|
|
29249
|
-
throw new Error(`Failed to accept invite: ${error.message}
|
|
29623
|
+
throw new Error(`Failed to accept invite: ${error.message}`, { cause: error });
|
|
29250
29624
|
}
|
|
29251
29625
|
}
|
|
29252
29626
|
async updateMemberRole(projectId, memberId, role) {
|
|
@@ -29268,7 +29642,7 @@ var ProjectService = class extends BaseService {
|
|
|
29268
29642
|
}
|
|
29269
29643
|
throw new Error(response.message);
|
|
29270
29644
|
} catch (error) {
|
|
29271
|
-
throw new Error(`Failed to update member role: ${error.message}
|
|
29645
|
+
throw new Error(`Failed to update member role: ${error.message}`, { cause: error });
|
|
29272
29646
|
}
|
|
29273
29647
|
}
|
|
29274
29648
|
async removeMember(projectId, memberId) {
|
|
@@ -29289,7 +29663,7 @@ var ProjectService = class extends BaseService {
|
|
|
29289
29663
|
}
|
|
29290
29664
|
throw new Error(response.message);
|
|
29291
29665
|
} catch (error) {
|
|
29292
|
-
throw new Error(`Failed to remove member: ${error.message}
|
|
29666
|
+
throw new Error(`Failed to remove member: ${error.message}`, { cause: error });
|
|
29293
29667
|
}
|
|
29294
29668
|
}
|
|
29295
29669
|
// ==================== PROJECT LIBRARY METHODS ====================
|
|
@@ -29309,7 +29683,7 @@ var ProjectService = class extends BaseService {
|
|
|
29309
29683
|
}
|
|
29310
29684
|
throw new Error(response.message);
|
|
29311
29685
|
} catch (error) {
|
|
29312
|
-
throw new Error(`Failed to get available libraries: ${error.message}
|
|
29686
|
+
throw new Error(`Failed to get available libraries: ${error.message}`, { cause: error });
|
|
29313
29687
|
}
|
|
29314
29688
|
}
|
|
29315
29689
|
async getProjectLibraries(projectId) {
|
|
@@ -29327,7 +29701,7 @@ var ProjectService = class extends BaseService {
|
|
|
29327
29701
|
}
|
|
29328
29702
|
throw new Error(response.message);
|
|
29329
29703
|
} catch (error) {
|
|
29330
|
-
throw new Error(`Failed to get project libraries: ${error.message}
|
|
29704
|
+
throw new Error(`Failed to get project libraries: ${error.message}`, { cause: error });
|
|
29331
29705
|
}
|
|
29332
29706
|
}
|
|
29333
29707
|
async addProjectLibraries(projectId, libraryIds) {
|
|
@@ -29342,11 +29716,11 @@ var ProjectService = class extends BaseService {
|
|
|
29342
29716
|
methodName: "addProjectLibraries"
|
|
29343
29717
|
});
|
|
29344
29718
|
if (response.success) {
|
|
29345
|
-
return response
|
|
29719
|
+
return response;
|
|
29346
29720
|
}
|
|
29347
29721
|
throw new Error(response.message);
|
|
29348
29722
|
} catch (error) {
|
|
29349
|
-
throw new Error(`Failed to add project libraries: ${error.message}
|
|
29723
|
+
throw new Error(`Failed to add project libraries: ${error.message}`, { cause: error });
|
|
29350
29724
|
}
|
|
29351
29725
|
}
|
|
29352
29726
|
async removeProjectLibraries(projectId, libraryIds) {
|
|
@@ -29365,7 +29739,7 @@ var ProjectService = class extends BaseService {
|
|
|
29365
29739
|
}
|
|
29366
29740
|
throw new Error(response.message);
|
|
29367
29741
|
} catch (error) {
|
|
29368
|
-
throw new Error(`Failed to remove project libraries: ${error.message}
|
|
29742
|
+
throw new Error(`Failed to remove project libraries: ${error.message}`, { cause: error });
|
|
29369
29743
|
}
|
|
29370
29744
|
}
|
|
29371
29745
|
// ==================== PROJECT DATA METHODS (SYMSTORY REPLACEMENT) ====================
|
|
@@ -29382,14 +29756,20 @@ var ProjectService = class extends BaseService {
|
|
|
29382
29756
|
throw new Error("Changes must be an array");
|
|
29383
29757
|
}
|
|
29384
29758
|
const { message, branch = "main", type = "patch" } = options;
|
|
29759
|
+
const state = this._context && this._context.state;
|
|
29760
|
+
const { granularChanges, orders: preprocessorOrders } = preprocessChanges(state, changes, options);
|
|
29761
|
+
const derivedOrders = options.orders || (preprocessorOrders && preprocessorOrders.length ? preprocessorOrders : state ? computeOrdersForTuples(state, granularChanges) : []);
|
|
29762
|
+
const stringify = (val) => deepStringifyFunctions2(val, Array.isArray(val) ? [] : {});
|
|
29385
29763
|
try {
|
|
29386
29764
|
const response = await this._request(`/projects/${projectId}/changes`, {
|
|
29387
29765
|
method: "POST",
|
|
29388
29766
|
body: JSON.stringify({
|
|
29389
|
-
changes,
|
|
29767
|
+
changes: stringify(changes),
|
|
29768
|
+
granularChanges: stringify(granularChanges),
|
|
29390
29769
|
message,
|
|
29391
29770
|
branch,
|
|
29392
|
-
type
|
|
29771
|
+
type,
|
|
29772
|
+
...derivedOrders && derivedOrders.length ? { orders: derivedOrders } : {}
|
|
29393
29773
|
}),
|
|
29394
29774
|
methodName: "applyProjectChanges"
|
|
29395
29775
|
});
|
|
@@ -29398,7 +29778,7 @@ var ProjectService = class extends BaseService {
|
|
|
29398
29778
|
}
|
|
29399
29779
|
throw new Error(response.message);
|
|
29400
29780
|
} catch (error) {
|
|
29401
|
-
throw new Error(`Failed to apply project changes: ${error.message}
|
|
29781
|
+
throw new Error(`Failed to apply project changes: ${error.message}`, { cause: error });
|
|
29402
29782
|
}
|
|
29403
29783
|
}
|
|
29404
29784
|
/**
|
|
@@ -29433,7 +29813,7 @@ var ProjectService = class extends BaseService {
|
|
|
29433
29813
|
}
|
|
29434
29814
|
throw new Error(response.message);
|
|
29435
29815
|
} catch (error) {
|
|
29436
|
-
throw new Error(`Failed to get project data: ${error.message}
|
|
29816
|
+
throw new Error(`Failed to get project data: ${error.message}`, { cause: error });
|
|
29437
29817
|
}
|
|
29438
29818
|
}
|
|
29439
29819
|
/**
|
|
@@ -29463,7 +29843,7 @@ var ProjectService = class extends BaseService {
|
|
|
29463
29843
|
}
|
|
29464
29844
|
throw new Error(response.message);
|
|
29465
29845
|
} catch (error) {
|
|
29466
|
-
throw new Error(`Failed to get project versions: ${error.message}
|
|
29846
|
+
throw new Error(`Failed to get project versions: ${error.message}`, { cause: error });
|
|
29467
29847
|
}
|
|
29468
29848
|
}
|
|
29469
29849
|
/**
|
|
@@ -29495,7 +29875,7 @@ var ProjectService = class extends BaseService {
|
|
|
29495
29875
|
}
|
|
29496
29876
|
throw new Error(response.message);
|
|
29497
29877
|
} catch (error) {
|
|
29498
|
-
throw new Error(`Failed to restore project version: ${error.message}
|
|
29878
|
+
throw new Error(`Failed to restore project version: ${error.message}`, { cause: error });
|
|
29499
29879
|
}
|
|
29500
29880
|
}
|
|
29501
29881
|
/**
|
|
@@ -29595,7 +29975,7 @@ var ProjectService = class extends BaseService {
|
|
|
29595
29975
|
}
|
|
29596
29976
|
throw new Error(response.message);
|
|
29597
29977
|
} catch (error) {
|
|
29598
|
-
throw new Error(`Failed to get favorite projects: ${error.message}
|
|
29978
|
+
throw new Error(`Failed to get favorite projects: ${error.message}`, { cause: error });
|
|
29599
29979
|
}
|
|
29600
29980
|
}
|
|
29601
29981
|
async addFavoriteProject(projectId) {
|
|
@@ -29613,7 +29993,7 @@ var ProjectService = class extends BaseService {
|
|
|
29613
29993
|
}
|
|
29614
29994
|
throw new Error(response.message);
|
|
29615
29995
|
} catch (error) {
|
|
29616
|
-
throw new Error(`Failed to add favorite project: ${error.message}
|
|
29996
|
+
throw new Error(`Failed to add favorite project: ${error.message}`, { cause: error });
|
|
29617
29997
|
}
|
|
29618
29998
|
}
|
|
29619
29999
|
async removeFavoriteProject(projectId) {
|
|
@@ -29631,7 +30011,7 @@ var ProjectService = class extends BaseService {
|
|
|
29631
30011
|
}
|
|
29632
30012
|
throw new Error(response.message);
|
|
29633
30013
|
} catch (error) {
|
|
29634
|
-
throw new Error(`Failed to remove favorite project: ${error.message}
|
|
30014
|
+
throw new Error(`Failed to remove favorite project: ${error.message}`, { cause: error });
|
|
29635
30015
|
}
|
|
29636
30016
|
}
|
|
29637
30017
|
// ==================== RECENT PROJECT METHODS ====================
|
|
@@ -29660,7 +30040,7 @@ var ProjectService = class extends BaseService {
|
|
|
29660
30040
|
}
|
|
29661
30041
|
throw new Error(response.message);
|
|
29662
30042
|
} catch (error) {
|
|
29663
|
-
throw new Error(`Failed to get recent projects: ${error.message}
|
|
30043
|
+
throw new Error(`Failed to get recent projects: ${error.message}`, { cause: error });
|
|
29664
30044
|
}
|
|
29665
30045
|
}
|
|
29666
30046
|
};
|
|
@@ -29682,7 +30062,7 @@ var PlanService = class extends BaseService {
|
|
|
29682
30062
|
}
|
|
29683
30063
|
throw new Error(response.message);
|
|
29684
30064
|
} catch (error) {
|
|
29685
|
-
throw new Error(`Failed to get plans: ${error.message}
|
|
30065
|
+
throw new Error(`Failed to get plans: ${error.message}`, { cause: error });
|
|
29686
30066
|
}
|
|
29687
30067
|
}
|
|
29688
30068
|
/**
|
|
@@ -29702,7 +30082,7 @@ var PlanService = class extends BaseService {
|
|
|
29702
30082
|
}
|
|
29703
30083
|
throw new Error(response.message);
|
|
29704
30084
|
} catch (error) {
|
|
29705
|
-
throw new Error(`Failed to get plan: ${error.message}
|
|
30085
|
+
throw new Error(`Failed to get plan: ${error.message}`, { cause: error });
|
|
29706
30086
|
}
|
|
29707
30087
|
}
|
|
29708
30088
|
// ==================== ADMIN PLAN METHODS ====================
|
|
@@ -29721,7 +30101,7 @@ var PlanService = class extends BaseService {
|
|
|
29721
30101
|
}
|
|
29722
30102
|
throw new Error(response.message);
|
|
29723
30103
|
} catch (error) {
|
|
29724
|
-
throw new Error(`Failed to get admin plans: ${error.message}
|
|
30104
|
+
throw new Error(`Failed to get admin plans: ${error.message}`, { cause: error });
|
|
29725
30105
|
}
|
|
29726
30106
|
}
|
|
29727
30107
|
/**
|
|
@@ -29743,7 +30123,7 @@ var PlanService = class extends BaseService {
|
|
|
29743
30123
|
}
|
|
29744
30124
|
throw new Error(response.message);
|
|
29745
30125
|
} catch (error) {
|
|
29746
|
-
throw new Error(`Failed to create plan: ${error.message}
|
|
30126
|
+
throw new Error(`Failed to create plan: ${error.message}`, { cause: error });
|
|
29747
30127
|
}
|
|
29748
30128
|
}
|
|
29749
30129
|
/**
|
|
@@ -29768,7 +30148,7 @@ var PlanService = class extends BaseService {
|
|
|
29768
30148
|
}
|
|
29769
30149
|
throw new Error(response.message);
|
|
29770
30150
|
} catch (error) {
|
|
29771
|
-
throw new Error(`Failed to update plan: ${error.message}
|
|
30151
|
+
throw new Error(`Failed to update plan: ${error.message}`, { cause: error });
|
|
29772
30152
|
}
|
|
29773
30153
|
}
|
|
29774
30154
|
/**
|
|
@@ -29789,7 +30169,7 @@ var PlanService = class extends BaseService {
|
|
|
29789
30169
|
}
|
|
29790
30170
|
throw new Error(response.message);
|
|
29791
30171
|
} catch (error) {
|
|
29792
|
-
throw new Error(`Failed to delete plan: ${error.message}
|
|
30172
|
+
throw new Error(`Failed to delete plan: ${error.message}`, { cause: error });
|
|
29793
30173
|
}
|
|
29794
30174
|
}
|
|
29795
30175
|
/**
|
|
@@ -29807,7 +30187,7 @@ var PlanService = class extends BaseService {
|
|
|
29807
30187
|
}
|
|
29808
30188
|
throw new Error(response.message);
|
|
29809
30189
|
} catch (error) {
|
|
29810
|
-
throw new Error(`Failed to initialize plans: ${error.message}
|
|
30190
|
+
throw new Error(`Failed to initialize plans: ${error.message}`, { cause: error });
|
|
29811
30191
|
}
|
|
29812
30192
|
}
|
|
29813
30193
|
// ==================== PLAN HELPER METHODS ====================
|
|
@@ -29822,7 +30202,7 @@ var PlanService = class extends BaseService {
|
|
|
29822
30202
|
}
|
|
29823
30203
|
return plans;
|
|
29824
30204
|
} catch (error) {
|
|
29825
|
-
throw new Error(`Failed to get plans with validation: ${error.message}
|
|
30205
|
+
throw new Error(`Failed to get plans with validation: ${error.message}`, { cause: error });
|
|
29826
30206
|
}
|
|
29827
30207
|
}
|
|
29828
30208
|
/**
|
|
@@ -29839,7 +30219,7 @@ var PlanService = class extends BaseService {
|
|
|
29839
30219
|
}
|
|
29840
30220
|
return plan;
|
|
29841
30221
|
} catch (error) {
|
|
29842
|
-
throw new Error(`Failed to get plan with validation: ${error.message}
|
|
30222
|
+
throw new Error(`Failed to get plan with validation: ${error.message}`, { cause: error });
|
|
29843
30223
|
}
|
|
29844
30224
|
}
|
|
29845
30225
|
/**
|
|
@@ -29891,7 +30271,7 @@ var PlanService = class extends BaseService {
|
|
|
29891
30271
|
const plans = await this.getPlans();
|
|
29892
30272
|
return plans.filter((plan) => plan.active !== false);
|
|
29893
30273
|
} catch (error) {
|
|
29894
|
-
throw new Error(`Failed to get active plans: ${error.message}
|
|
30274
|
+
throw new Error(`Failed to get active plans: ${error.message}`, { cause: error });
|
|
29895
30275
|
}
|
|
29896
30276
|
}
|
|
29897
30277
|
/**
|
|
@@ -29905,7 +30285,7 @@ var PlanService = class extends BaseService {
|
|
|
29905
30285
|
return price >= minPrice && price <= maxPrice;
|
|
29906
30286
|
});
|
|
29907
30287
|
} catch (error) {
|
|
29908
|
-
throw new Error(`Failed to get plans by price range: ${error.message}
|
|
30288
|
+
throw new Error(`Failed to get plans by price range: ${error.message}`, { cause: error });
|
|
29909
30289
|
}
|
|
29910
30290
|
}
|
|
29911
30291
|
/**
|
|
@@ -29923,7 +30303,7 @@ var PlanService = class extends BaseService {
|
|
|
29923
30303
|
}
|
|
29924
30304
|
return plan;
|
|
29925
30305
|
} catch (error) {
|
|
29926
|
-
throw new Error(`Failed to get plan by key: ${error.message}
|
|
30306
|
+
throw new Error(`Failed to get plan by key: ${error.message}`, { cause: error });
|
|
29927
30307
|
}
|
|
29928
30308
|
}
|
|
29929
30309
|
};
|
|
@@ -29964,7 +30344,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
29964
30344
|
}
|
|
29965
30345
|
throw new Error(response.message);
|
|
29966
30346
|
} catch (error) {
|
|
29967
|
-
throw new Error(`Failed to create subscription: ${error.message}
|
|
30347
|
+
throw new Error(`Failed to create subscription: ${error.message}`, { cause: error });
|
|
29968
30348
|
}
|
|
29969
30349
|
}
|
|
29970
30350
|
/**
|
|
@@ -29985,7 +30365,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
29985
30365
|
}
|
|
29986
30366
|
throw new Error(response.message);
|
|
29987
30367
|
} catch (error) {
|
|
29988
|
-
throw new Error(`Failed to get project subscription status: ${error.message}
|
|
30368
|
+
throw new Error(`Failed to get project subscription status: ${error.message}`, { cause: error });
|
|
29989
30369
|
}
|
|
29990
30370
|
}
|
|
29991
30371
|
/**
|
|
@@ -30006,7 +30386,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30006
30386
|
}
|
|
30007
30387
|
throw new Error(response.message);
|
|
30008
30388
|
} catch (error) {
|
|
30009
|
-
throw new Error(`Failed to get subscription usage: ${error.message}
|
|
30389
|
+
throw new Error(`Failed to get subscription usage: ${error.message}`, { cause: error });
|
|
30010
30390
|
}
|
|
30011
30391
|
}
|
|
30012
30392
|
/**
|
|
@@ -30027,7 +30407,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30027
30407
|
}
|
|
30028
30408
|
throw new Error(response.message);
|
|
30029
30409
|
} catch (error) {
|
|
30030
|
-
throw new Error(`Failed to cancel subscription: ${error.message}
|
|
30410
|
+
throw new Error(`Failed to cancel subscription: ${error.message}`, { cause: error });
|
|
30031
30411
|
}
|
|
30032
30412
|
}
|
|
30033
30413
|
/**
|
|
@@ -30064,7 +30444,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30064
30444
|
}
|
|
30065
30445
|
throw new Error(response.message);
|
|
30066
30446
|
} catch (error) {
|
|
30067
|
-
throw new Error(`Failed to list invoices: ${error.message}
|
|
30447
|
+
throw new Error(`Failed to list invoices: ${error.message}`, { cause: error });
|
|
30068
30448
|
}
|
|
30069
30449
|
}
|
|
30070
30450
|
/**
|
|
@@ -30091,7 +30471,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30091
30471
|
}
|
|
30092
30472
|
throw new Error(response.message);
|
|
30093
30473
|
} catch (error) {
|
|
30094
|
-
throw new Error(`Failed to get portal URL: ${error.message}
|
|
30474
|
+
throw new Error(`Failed to get portal URL: ${error.message}`, { cause: error });
|
|
30095
30475
|
}
|
|
30096
30476
|
}
|
|
30097
30477
|
// ==================== SUBSCRIPTION HELPER METHODS ====================
|
|
@@ -30126,7 +30506,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30126
30506
|
const status = await this.getProjectStatus(projectId);
|
|
30127
30507
|
return status.hasSubscription === true;
|
|
30128
30508
|
} catch (error) {
|
|
30129
|
-
throw new Error(`Failed to check subscription status: ${error.message}
|
|
30509
|
+
throw new Error(`Failed to check subscription status: ${error.message}`, { cause: error });
|
|
30130
30510
|
}
|
|
30131
30511
|
}
|
|
30132
30512
|
/**
|
|
@@ -30140,7 +30520,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30140
30520
|
}
|
|
30141
30521
|
return status.subscription;
|
|
30142
30522
|
} catch (error) {
|
|
30143
|
-
throw new Error(`Failed to get project subscription: ${error.message}
|
|
30523
|
+
throw new Error(`Failed to get project subscription: ${error.message}`, { cause: error });
|
|
30144
30524
|
}
|
|
30145
30525
|
}
|
|
30146
30526
|
/**
|
|
@@ -30154,7 +30534,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30154
30534
|
}
|
|
30155
30535
|
return status.usage;
|
|
30156
30536
|
} catch (error) {
|
|
30157
|
-
throw new Error(`Failed to get project usage: ${error.message}
|
|
30537
|
+
throw new Error(`Failed to get project usage: ${error.message}`, { cause: error });
|
|
30158
30538
|
}
|
|
30159
30539
|
}
|
|
30160
30540
|
/**
|
|
@@ -30168,7 +30548,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30168
30548
|
pagination: result.pagination || {}
|
|
30169
30549
|
};
|
|
30170
30550
|
} catch (error) {
|
|
30171
|
-
throw new Error(`Failed to get invoices with pagination: ${error.message}
|
|
30551
|
+
throw new Error(`Failed to get invoices with pagination: ${error.message}`, { cause: error });
|
|
30172
30552
|
}
|
|
30173
30553
|
}
|
|
30174
30554
|
/**
|
|
@@ -30179,7 +30559,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30179
30559
|
const usage = await this.getUsage(subscriptionId);
|
|
30180
30560
|
return usage && usage.subscription && usage.subscription.status === "active";
|
|
30181
30561
|
} catch (error) {
|
|
30182
|
-
throw new Error(`Failed to check subscription status: ${error.message}
|
|
30562
|
+
throw new Error(`Failed to check subscription status: ${error.message}`, { cause: error });
|
|
30183
30563
|
}
|
|
30184
30564
|
}
|
|
30185
30565
|
/**
|
|
@@ -30190,7 +30570,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30190
30570
|
const usage = await this.getUsage(subscriptionId);
|
|
30191
30571
|
return usage.limits || {};
|
|
30192
30572
|
} catch (error) {
|
|
30193
|
-
throw new Error(`Failed to get subscription limits: ${error.message}
|
|
30573
|
+
throw new Error(`Failed to get subscription limits: ${error.message}`, { cause: error });
|
|
30194
30574
|
}
|
|
30195
30575
|
}
|
|
30196
30576
|
/**
|
|
@@ -30226,7 +30606,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30226
30606
|
}
|
|
30227
30607
|
throw new Error(response.message);
|
|
30228
30608
|
} catch (error) {
|
|
30229
|
-
throw new Error(`Failed to change subscription: ${error.message}
|
|
30609
|
+
throw new Error(`Failed to change subscription: ${error.message}`, { cause: error });
|
|
30230
30610
|
}
|
|
30231
30611
|
}
|
|
30232
30612
|
/**
|
|
@@ -30254,7 +30634,7 @@ var SubscriptionService = class extends BaseService {
|
|
|
30254
30634
|
}
|
|
30255
30635
|
throw new Error(response.message);
|
|
30256
30636
|
} catch (error) {
|
|
30257
|
-
throw new Error(`Failed to downgrade subscription: ${error.message}
|
|
30637
|
+
throw new Error(`Failed to downgrade subscription: ${error.message}`, { cause: error });
|
|
30258
30638
|
}
|
|
30259
30639
|
}
|
|
30260
30640
|
/**
|
|
@@ -30343,7 +30723,7 @@ var FileService = class extends BaseService {
|
|
|
30343
30723
|
message: response.message
|
|
30344
30724
|
};
|
|
30345
30725
|
} catch (error) {
|
|
30346
|
-
throw new Error(`File upload failed: ${error.message}
|
|
30726
|
+
throw new Error(`File upload failed: ${error.message}`, { cause: error });
|
|
30347
30727
|
}
|
|
30348
30728
|
}
|
|
30349
30729
|
async updateProjectIcon(projectId, iconFile) {
|
|
@@ -30367,7 +30747,7 @@ var FileService = class extends BaseService {
|
|
|
30367
30747
|
}
|
|
30368
30748
|
throw new Error(response.message);
|
|
30369
30749
|
} catch (error) {
|
|
30370
|
-
throw new Error(`Failed to update project icon: ${error.message}
|
|
30750
|
+
throw new Error(`Failed to update project icon: ${error.message}`, { cause: error });
|
|
30371
30751
|
}
|
|
30372
30752
|
}
|
|
30373
30753
|
// ==================== FILE HELPER METHODS ====================
|
|
@@ -30517,7 +30897,7 @@ var PaymentService = class extends BaseService {
|
|
|
30517
30897
|
}
|
|
30518
30898
|
throw new Error(response.message);
|
|
30519
30899
|
} catch (error) {
|
|
30520
|
-
throw new Error(`Failed to checkout: ${error.message}
|
|
30900
|
+
throw new Error(`Failed to checkout: ${error.message}`, { cause: error });
|
|
30521
30901
|
}
|
|
30522
30902
|
}
|
|
30523
30903
|
async getSubscriptionStatus(projectId) {
|
|
@@ -30538,7 +30918,7 @@ var PaymentService = class extends BaseService {
|
|
|
30538
30918
|
}
|
|
30539
30919
|
throw new Error(response.message);
|
|
30540
30920
|
} catch (error) {
|
|
30541
|
-
throw new Error(`Failed to get subscription status: ${error.message}
|
|
30921
|
+
throw new Error(`Failed to get subscription status: ${error.message}`, { cause: error });
|
|
30542
30922
|
}
|
|
30543
30923
|
}
|
|
30544
30924
|
// ==================== PAYMENT HELPER METHODS ====================
|
|
@@ -30754,7 +31134,7 @@ var DnsService = class extends BaseService {
|
|
|
30754
31134
|
}
|
|
30755
31135
|
throw new Error(response.message);
|
|
30756
31136
|
} catch (error) {
|
|
30757
|
-
throw new Error(`Failed to create DNS record: ${error.message}
|
|
31137
|
+
throw new Error(`Failed to create DNS record: ${error.message}`, { cause: error });
|
|
30758
31138
|
}
|
|
30759
31139
|
}
|
|
30760
31140
|
async getDnsRecord(domain) {
|
|
@@ -30772,7 +31152,7 @@ var DnsService = class extends BaseService {
|
|
|
30772
31152
|
}
|
|
30773
31153
|
throw new Error(response.message);
|
|
30774
31154
|
} catch (error) {
|
|
30775
|
-
throw new Error(`Failed to get DNS record: ${error.message}
|
|
31155
|
+
throw new Error(`Failed to get DNS record: ${error.message}`, { cause: error });
|
|
30776
31156
|
}
|
|
30777
31157
|
}
|
|
30778
31158
|
async getCustomHost(hostname) {
|
|
@@ -30808,7 +31188,7 @@ var DnsService = class extends BaseService {
|
|
|
30808
31188
|
}
|
|
30809
31189
|
throw new Error(response.message);
|
|
30810
31190
|
} catch (error) {
|
|
30811
|
-
throw new Error(`Failed to remove DNS record: ${error.message}
|
|
31191
|
+
throw new Error(`Failed to remove DNS record: ${error.message}`, { cause: error });
|
|
30812
31192
|
}
|
|
30813
31193
|
}
|
|
30814
31194
|
// Deprecated, use addProjectCustomDomains instead
|
|
@@ -30832,7 +31212,7 @@ var DnsService = class extends BaseService {
|
|
|
30832
31212
|
}
|
|
30833
31213
|
throw new Error(response.message);
|
|
30834
31214
|
} catch (error) {
|
|
30835
|
-
throw new Error(`Failed to set project domains: ${error.message}
|
|
31215
|
+
throw new Error(`Failed to set project domains: ${error.message}`, { cause: error });
|
|
30836
31216
|
}
|
|
30837
31217
|
}
|
|
30838
31218
|
// customDomains could be a string or an array of strings
|
|
@@ -31108,7 +31488,7 @@ var BranchService = class extends BaseService {
|
|
|
31108
31488
|
}
|
|
31109
31489
|
throw new Error(response.message);
|
|
31110
31490
|
} catch (error) {
|
|
31111
|
-
throw new Error(`Failed to list branches: ${error.message}
|
|
31491
|
+
throw new Error(`Failed to list branches: ${error.message}`, { cause: error });
|
|
31112
31492
|
}
|
|
31113
31493
|
}
|
|
31114
31494
|
/**
|
|
@@ -31134,7 +31514,7 @@ var BranchService = class extends BaseService {
|
|
|
31134
31514
|
}
|
|
31135
31515
|
throw new Error(response.message);
|
|
31136
31516
|
} catch (error) {
|
|
31137
|
-
throw new Error(`Failed to create branch: ${error.message}
|
|
31517
|
+
throw new Error(`Failed to create branch: ${error.message}`, { cause: error });
|
|
31138
31518
|
}
|
|
31139
31519
|
}
|
|
31140
31520
|
/**
|
|
@@ -31164,7 +31544,7 @@ var BranchService = class extends BaseService {
|
|
|
31164
31544
|
}
|
|
31165
31545
|
throw new Error(response.message);
|
|
31166
31546
|
} catch (error) {
|
|
31167
|
-
throw new Error(`Failed to delete branch: ${error.message}
|
|
31547
|
+
throw new Error(`Failed to delete branch: ${error.message}`, { cause: error });
|
|
31168
31548
|
}
|
|
31169
31549
|
}
|
|
31170
31550
|
/**
|
|
@@ -31200,7 +31580,7 @@ var BranchService = class extends BaseService {
|
|
|
31200
31580
|
}
|
|
31201
31581
|
throw new Error(response.message);
|
|
31202
31582
|
} catch (error) {
|
|
31203
|
-
throw new Error(`Failed to rename branch: ${error.message}
|
|
31583
|
+
throw new Error(`Failed to rename branch: ${error.message}`, { cause: error });
|
|
31204
31584
|
}
|
|
31205
31585
|
}
|
|
31206
31586
|
/**
|
|
@@ -31239,7 +31619,7 @@ var BranchService = class extends BaseService {
|
|
|
31239
31619
|
}
|
|
31240
31620
|
throw new Error(response.message);
|
|
31241
31621
|
} catch (error) {
|
|
31242
|
-
throw new Error(`Failed to get branch changes: ${error.message}
|
|
31622
|
+
throw new Error(`Failed to get branch changes: ${error.message}`, { cause: error });
|
|
31243
31623
|
}
|
|
31244
31624
|
}
|
|
31245
31625
|
/**
|
|
@@ -31286,7 +31666,7 @@ var BranchService = class extends BaseService {
|
|
|
31286
31666
|
if (error.message.includes("conflicts") || error.message.includes("409")) {
|
|
31287
31667
|
throw new Error(`Merge conflicts detected: ${error.message}`);
|
|
31288
31668
|
}
|
|
31289
|
-
throw new Error(`Failed to merge branch: ${error.message}
|
|
31669
|
+
throw new Error(`Failed to merge branch: ${error.message}`, { cause: error });
|
|
31290
31670
|
}
|
|
31291
31671
|
}
|
|
31292
31672
|
/**
|
|
@@ -31315,7 +31695,7 @@ var BranchService = class extends BaseService {
|
|
|
31315
31695
|
}
|
|
31316
31696
|
throw new Error(response.message);
|
|
31317
31697
|
} catch (error) {
|
|
31318
|
-
throw new Error(`Failed to reset branch: ${error.message}
|
|
31698
|
+
throw new Error(`Failed to reset branch: ${error.message}`, { cause: error });
|
|
31319
31699
|
}
|
|
31320
31700
|
}
|
|
31321
31701
|
/**
|
|
@@ -31341,7 +31721,7 @@ var BranchService = class extends BaseService {
|
|
|
31341
31721
|
}
|
|
31342
31722
|
throw new Error(response.message);
|
|
31343
31723
|
} catch (error) {
|
|
31344
|
-
throw new Error(`Failed to publish version: ${error.message}
|
|
31724
|
+
throw new Error(`Failed to publish version: ${error.message}`, { cause: error });
|
|
31345
31725
|
}
|
|
31346
31726
|
}
|
|
31347
31727
|
// ==================== BRANCH HELPER METHODS ====================
|
|
@@ -31373,7 +31753,7 @@ var BranchService = class extends BaseService {
|
|
|
31373
31753
|
const branches = await this.listBranches(projectId);
|
|
31374
31754
|
return ((_a = branches == null ? void 0 : branches.data) == null ? void 0 : _a.includes(branchName)) || false;
|
|
31375
31755
|
} catch (error) {
|
|
31376
|
-
throw new Error(`Failed to check if branch exists: ${error.message}
|
|
31756
|
+
throw new Error(`Failed to check if branch exists: ${error.message}`, { cause: error });
|
|
31377
31757
|
}
|
|
31378
31758
|
}
|
|
31379
31759
|
/**
|
|
@@ -31443,7 +31823,7 @@ var BranchService = class extends BaseService {
|
|
|
31443
31823
|
canRename: exists && branchName !== "main"
|
|
31444
31824
|
};
|
|
31445
31825
|
} catch (error) {
|
|
31446
|
-
throw new Error(`Failed to get branch status: ${error.message}
|
|
31826
|
+
throw new Error(`Failed to get branch status: ${error.message}`, { cause: error });
|
|
31447
31827
|
}
|
|
31448
31828
|
}
|
|
31449
31829
|
/**
|
|
@@ -31578,7 +31958,7 @@ var PullRequestService = class extends BaseService {
|
|
|
31578
31958
|
}
|
|
31579
31959
|
throw new Error(response.message);
|
|
31580
31960
|
} catch (error) {
|
|
31581
|
-
throw new Error(`Failed to create pull request: ${error.message}
|
|
31961
|
+
throw new Error(`Failed to create pull request: ${error.message}`, { cause: error });
|
|
31582
31962
|
}
|
|
31583
31963
|
}
|
|
31584
31964
|
/**
|
|
@@ -31614,7 +31994,7 @@ var PullRequestService = class extends BaseService {
|
|
|
31614
31994
|
}
|
|
31615
31995
|
throw new Error(response.message);
|
|
31616
31996
|
} catch (error) {
|
|
31617
|
-
throw new Error(`Failed to list pull requests: ${error.message}
|
|
31997
|
+
throw new Error(`Failed to list pull requests: ${error.message}`, { cause: error });
|
|
31618
31998
|
}
|
|
31619
31999
|
}
|
|
31620
32000
|
/**
|
|
@@ -31641,7 +32021,7 @@ var PullRequestService = class extends BaseService {
|
|
|
31641
32021
|
}
|
|
31642
32022
|
throw new Error(response.message);
|
|
31643
32023
|
} catch (error) {
|
|
31644
|
-
throw new Error(`Failed to get pull request: ${error.message}
|
|
32024
|
+
throw new Error(`Failed to get pull request: ${error.message}`, { cause: error });
|
|
31645
32025
|
}
|
|
31646
32026
|
}
|
|
31647
32027
|
/**
|
|
@@ -31675,7 +32055,7 @@ var PullRequestService = class extends BaseService {
|
|
|
31675
32055
|
}
|
|
31676
32056
|
throw new Error(response.message);
|
|
31677
32057
|
} catch (error) {
|
|
31678
|
-
throw new Error(`Failed to review pull request: ${error.message}
|
|
32058
|
+
throw new Error(`Failed to review pull request: ${error.message}`, { cause: error });
|
|
31679
32059
|
}
|
|
31680
32060
|
}
|
|
31681
32061
|
/**
|
|
@@ -31706,7 +32086,7 @@ var PullRequestService = class extends BaseService {
|
|
|
31706
32086
|
}
|
|
31707
32087
|
throw new Error(response.message);
|
|
31708
32088
|
} catch (error) {
|
|
31709
|
-
throw new Error(`Failed to add pull request comment: ${error.message}
|
|
32089
|
+
throw new Error(`Failed to add pull request comment: ${error.message}`, { cause: error });
|
|
31710
32090
|
}
|
|
31711
32091
|
}
|
|
31712
32092
|
/**
|
|
@@ -31736,7 +32116,7 @@ var PullRequestService = class extends BaseService {
|
|
|
31736
32116
|
if (error.message.includes("conflicts") || error.message.includes("409")) {
|
|
31737
32117
|
throw new Error(`Pull request has merge conflicts: ${error.message}`);
|
|
31738
32118
|
}
|
|
31739
|
-
throw new Error(`Failed to merge pull request: ${error.message}
|
|
32119
|
+
throw new Error(`Failed to merge pull request: ${error.message}`, { cause: error });
|
|
31740
32120
|
}
|
|
31741
32121
|
}
|
|
31742
32122
|
/**
|
|
@@ -31763,7 +32143,7 @@ var PullRequestService = class extends BaseService {
|
|
|
31763
32143
|
}
|
|
31764
32144
|
throw new Error(response.message);
|
|
31765
32145
|
} catch (error) {
|
|
31766
|
-
throw new Error(`Failed to get pull request diff: ${error.message}
|
|
32146
|
+
throw new Error(`Failed to get pull request diff: ${error.message}`, { cause: error });
|
|
31767
32147
|
}
|
|
31768
32148
|
}
|
|
31769
32149
|
// ==================== PULL REQUEST HELPER METHODS ====================
|
|
@@ -32083,7 +32463,7 @@ var AdminService = class extends BaseService {
|
|
|
32083
32463
|
}
|
|
32084
32464
|
throw new Error(response.message);
|
|
32085
32465
|
} catch (error) {
|
|
32086
|
-
throw new Error(`Failed to get admin users: ${error.message}
|
|
32466
|
+
throw new Error(`Failed to get admin users: ${error.message}`, { cause: error });
|
|
32087
32467
|
}
|
|
32088
32468
|
}
|
|
32089
32469
|
/**
|
|
@@ -32114,7 +32494,7 @@ var AdminService = class extends BaseService {
|
|
|
32114
32494
|
}
|
|
32115
32495
|
throw new Error(response.message);
|
|
32116
32496
|
} catch (error) {
|
|
32117
|
-
throw new Error(`Failed to assign projects to user: ${error.message}
|
|
32497
|
+
throw new Error(`Failed to assign projects to user: ${error.message}`, { cause: error });
|
|
32118
32498
|
}
|
|
32119
32499
|
}
|
|
32120
32500
|
/**
|
|
@@ -32143,7 +32523,7 @@ var AdminService = class extends BaseService {
|
|
|
32143
32523
|
if ((_a = error.message) == null ? void 0 : _a.includes("Duplicate")) {
|
|
32144
32524
|
throw new Error("Username already exists");
|
|
32145
32525
|
}
|
|
32146
|
-
throw new Error(`Failed to update user: ${error.message}
|
|
32526
|
+
throw new Error(`Failed to update user: ${error.message}`, { cause: error });
|
|
32147
32527
|
}
|
|
32148
32528
|
}
|
|
32149
32529
|
// ==================== ADMIN HELPER METHODS ====================
|
|
@@ -32273,7 +32653,7 @@ var AdminService = class extends BaseService {
|
|
|
32273
32653
|
});
|
|
32274
32654
|
return stats;
|
|
32275
32655
|
} catch (error) {
|
|
32276
|
-
throw new Error(`Failed to get user stats: ${error.message}
|
|
32656
|
+
throw new Error(`Failed to get user stats: ${error.message}`, { cause: error });
|
|
32277
32657
|
}
|
|
32278
32658
|
}
|
|
32279
32659
|
/**
|
|
@@ -32360,6 +32740,287 @@ var AdminService = class extends BaseService {
|
|
|
32360
32740
|
}
|
|
32361
32741
|
};
|
|
32362
32742
|
|
|
32743
|
+
// src/services/ScreenshotService.js
|
|
32744
|
+
var ScreenshotService = class extends BaseService {
|
|
32745
|
+
constructor(config) {
|
|
32746
|
+
super(config);
|
|
32747
|
+
this._debounceTimers = /* @__PURE__ */ new Map();
|
|
32748
|
+
this._inflightRefreshes = /* @__PURE__ */ new Map();
|
|
32749
|
+
}
|
|
32750
|
+
// ==================== PROJECT-LEVEL OPERATIONS ====================
|
|
32751
|
+
async createScreenshotProject(payload) {
|
|
32752
|
+
this._requireReady("createScreenshotProject");
|
|
32753
|
+
try {
|
|
32754
|
+
const response = await this._request("/screenshots/projects", {
|
|
32755
|
+
method: "POST",
|
|
32756
|
+
body: JSON.stringify(payload),
|
|
32757
|
+
methodName: "createScreenshotProject"
|
|
32758
|
+
});
|
|
32759
|
+
if (response.success) {
|
|
32760
|
+
return response;
|
|
32761
|
+
}
|
|
32762
|
+
throw new Error(response.message);
|
|
32763
|
+
} catch (error) {
|
|
32764
|
+
throw new Error(`Failed to create screenshot project: ${error.message}`, { cause: error });
|
|
32765
|
+
}
|
|
32766
|
+
}
|
|
32767
|
+
async getProjectScreenshots(projectKey, params2 = {}) {
|
|
32768
|
+
this._requireReady("getProjectScreenshots");
|
|
32769
|
+
if (!projectKey) {
|
|
32770
|
+
throw new Error("projectKey is required");
|
|
32771
|
+
}
|
|
32772
|
+
const { type = "all", status, limit = 50, offset: offset2 = 0 } = params2;
|
|
32773
|
+
const qs = new URLSearchParams();
|
|
32774
|
+
if (type) {
|
|
32775
|
+
qs.set("type", type);
|
|
32776
|
+
}
|
|
32777
|
+
if (status) {
|
|
32778
|
+
qs.set("status", status);
|
|
32779
|
+
}
|
|
32780
|
+
if (limit != null) {
|
|
32781
|
+
qs.set("limit", String(limit));
|
|
32782
|
+
}
|
|
32783
|
+
if (offset2 != null) {
|
|
32784
|
+
qs.set("offset", String(offset2));
|
|
32785
|
+
}
|
|
32786
|
+
try {
|
|
32787
|
+
const response = await this._request(
|
|
32788
|
+
`/screenshots/projects/${encodeURIComponent(projectKey)}${qs.toString() ? `?${qs.toString()}` : ""}`,
|
|
32789
|
+
{ method: "GET", methodName: "getProjectScreenshots" }
|
|
32790
|
+
);
|
|
32791
|
+
if (response.success) {
|
|
32792
|
+
return response;
|
|
32793
|
+
}
|
|
32794
|
+
throw new Error(response.message);
|
|
32795
|
+
} catch (error) {
|
|
32796
|
+
throw new Error(`Failed to get project screenshots: ${error.message}`, { cause: error });
|
|
32797
|
+
}
|
|
32798
|
+
}
|
|
32799
|
+
async reprocessProjectScreenshots(projectKey, body = {}) {
|
|
32800
|
+
this._requireReady("reprocessProjectScreenshots");
|
|
32801
|
+
if (!projectKey) {
|
|
32802
|
+
throw new Error("projectKey is required");
|
|
32803
|
+
}
|
|
32804
|
+
try {
|
|
32805
|
+
const response = await this._request(
|
|
32806
|
+
`/screenshots/projects/${encodeURIComponent(projectKey)}/reprocess`,
|
|
32807
|
+
{ method: "POST", body: JSON.stringify(body), methodName: "reprocessProjectScreenshots" }
|
|
32808
|
+
);
|
|
32809
|
+
if (response.success) {
|
|
32810
|
+
return response;
|
|
32811
|
+
}
|
|
32812
|
+
throw new Error(response.message);
|
|
32813
|
+
} catch (error) {
|
|
32814
|
+
throw new Error(`Failed to reprocess screenshots: ${error.message}`, { cause: error });
|
|
32815
|
+
}
|
|
32816
|
+
}
|
|
32817
|
+
async recreateProjectScreenshots(projectKey, body = {}) {
|
|
32818
|
+
this._requireReady("recreateProjectScreenshots");
|
|
32819
|
+
if (!projectKey) {
|
|
32820
|
+
throw new Error("projectKey is required");
|
|
32821
|
+
}
|
|
32822
|
+
try {
|
|
32823
|
+
const response = await this._request(
|
|
32824
|
+
`/screenshots/projects/${encodeURIComponent(projectKey)}/recreate`,
|
|
32825
|
+
{ method: "POST", body: JSON.stringify(body), methodName: "recreateProjectScreenshots" }
|
|
32826
|
+
);
|
|
32827
|
+
if (response.success) {
|
|
32828
|
+
return response;
|
|
32829
|
+
}
|
|
32830
|
+
throw new Error(response.message);
|
|
32831
|
+
} catch (error) {
|
|
32832
|
+
throw new Error(`Failed to recreate screenshots: ${error.message}`, { cause: error });
|
|
32833
|
+
}
|
|
32834
|
+
}
|
|
32835
|
+
async deleteProjectScreenshots(projectKey) {
|
|
32836
|
+
this._requireReady("deleteProjectScreenshots");
|
|
32837
|
+
if (!projectKey) {
|
|
32838
|
+
throw new Error("projectKey is required");
|
|
32839
|
+
}
|
|
32840
|
+
try {
|
|
32841
|
+
const response = await this._request(
|
|
32842
|
+
`/screenshots/projects/${encodeURIComponent(projectKey)}`,
|
|
32843
|
+
{ method: "DELETE", methodName: "deleteProjectScreenshots" }
|
|
32844
|
+
);
|
|
32845
|
+
if (response.success) {
|
|
32846
|
+
return response;
|
|
32847
|
+
}
|
|
32848
|
+
throw new Error(response.message);
|
|
32849
|
+
} catch (error) {
|
|
32850
|
+
throw new Error(`Failed to delete project screenshots: ${error.message}`, { cause: error });
|
|
32851
|
+
}
|
|
32852
|
+
}
|
|
32853
|
+
// ==================== THUMBNAIL ====================
|
|
32854
|
+
async getThumbnailCandidate(projectKey, options = {}) {
|
|
32855
|
+
this._requireReady("getThumbnailCandidate");
|
|
32856
|
+
if (!projectKey) {
|
|
32857
|
+
throw new Error("projectKey is required");
|
|
32858
|
+
}
|
|
32859
|
+
const { includeData = false } = options;
|
|
32860
|
+
const qs = new URLSearchParams();
|
|
32861
|
+
if (includeData) {
|
|
32862
|
+
qs.set("include_data", "true");
|
|
32863
|
+
}
|
|
32864
|
+
try {
|
|
32865
|
+
const response = await this._request(
|
|
32866
|
+
`/screenshots/projects/${encodeURIComponent(projectKey)}/thumbnail/candidate${qs.toString() ? `?${qs.toString()}` : ""}`,
|
|
32867
|
+
{ method: "GET", methodName: "getThumbnailCandidate" }
|
|
32868
|
+
);
|
|
32869
|
+
if (response.success) {
|
|
32870
|
+
return response;
|
|
32871
|
+
}
|
|
32872
|
+
throw new Error(response.message);
|
|
32873
|
+
} catch (error) {
|
|
32874
|
+
throw new Error(`Failed to get thumbnail candidate: ${error.message}`, { cause: error });
|
|
32875
|
+
}
|
|
32876
|
+
}
|
|
32877
|
+
async updateProjectThumbnail(projectKey, body = {}) {
|
|
32878
|
+
this._requireReady("updateProjectThumbnail");
|
|
32879
|
+
if (!projectKey) {
|
|
32880
|
+
throw new Error("projectKey is required");
|
|
32881
|
+
}
|
|
32882
|
+
try {
|
|
32883
|
+
const response = await this._request(
|
|
32884
|
+
`/screenshots/projects/${encodeURIComponent(projectKey)}/thumbnail`,
|
|
32885
|
+
{ method: "POST", body: JSON.stringify(body), methodName: "updateProjectThumbnail" }
|
|
32886
|
+
);
|
|
32887
|
+
if (response.success) {
|
|
32888
|
+
return response;
|
|
32889
|
+
}
|
|
32890
|
+
throw new Error(response.message);
|
|
32891
|
+
} catch (error) {
|
|
32892
|
+
throw new Error(`Failed to update project thumbnail: ${error.message}`, { cause: error });
|
|
32893
|
+
}
|
|
32894
|
+
}
|
|
32895
|
+
// ==================== INDIVIDUAL SHOTS ====================
|
|
32896
|
+
async getPageScreenshot(screenshotId, format = "json") {
|
|
32897
|
+
this._requireReady("getPageScreenshot");
|
|
32898
|
+
if (!screenshotId) {
|
|
32899
|
+
throw new Error("screenshotId is required");
|
|
32900
|
+
}
|
|
32901
|
+
const qs = new URLSearchParams();
|
|
32902
|
+
if (format) {
|
|
32903
|
+
qs.set("format", format);
|
|
32904
|
+
}
|
|
32905
|
+
try {
|
|
32906
|
+
return await this._request(
|
|
32907
|
+
`/screenshots/pages/${encodeURIComponent(screenshotId)}${qs.toString() ? `?${qs.toString()}` : ""}`,
|
|
32908
|
+
{ method: "GET", methodName: "getPageScreenshot" }
|
|
32909
|
+
);
|
|
32910
|
+
} catch (error) {
|
|
32911
|
+
throw new Error(`Failed to get page screenshot: ${error.message}`, { cause: error });
|
|
32912
|
+
}
|
|
32913
|
+
}
|
|
32914
|
+
async getComponentScreenshot(screenshotId, format = "json") {
|
|
32915
|
+
this._requireReady("getComponentScreenshot");
|
|
32916
|
+
if (!screenshotId) {
|
|
32917
|
+
throw new Error("screenshotId is required");
|
|
32918
|
+
}
|
|
32919
|
+
const qs = new URLSearchParams();
|
|
32920
|
+
if (format) {
|
|
32921
|
+
qs.set("format", format);
|
|
32922
|
+
}
|
|
32923
|
+
try {
|
|
32924
|
+
return await this._request(
|
|
32925
|
+
`/screenshots/components/${encodeURIComponent(screenshotId)}${qs.toString() ? `?${qs.toString()}` : ""}`,
|
|
32926
|
+
{ method: "GET", methodName: "getComponentScreenshot" }
|
|
32927
|
+
);
|
|
32928
|
+
} catch (error) {
|
|
32929
|
+
throw new Error(`Failed to get component screenshot: ${error.message}`, { cause: error });
|
|
32930
|
+
}
|
|
32931
|
+
}
|
|
32932
|
+
async getScreenshotByKey(projectKey, type, key, format = "json") {
|
|
32933
|
+
this._requireReady("getScreenshotByKey");
|
|
32934
|
+
if (!projectKey) {
|
|
32935
|
+
throw new Error("projectKey is required");
|
|
32936
|
+
}
|
|
32937
|
+
if (!type || !["component", "page"].includes(String(type))) {
|
|
32938
|
+
throw new Error("type must be 'component' or 'page'");
|
|
32939
|
+
}
|
|
32940
|
+
if (!key) {
|
|
32941
|
+
throw new Error("key is required");
|
|
32942
|
+
}
|
|
32943
|
+
const qs = new URLSearchParams();
|
|
32944
|
+
if (format) {
|
|
32945
|
+
qs.set("format", format);
|
|
32946
|
+
}
|
|
32947
|
+
const sub = type === "component" ? "components" : "pages";
|
|
32948
|
+
try {
|
|
32949
|
+
return await this._request(
|
|
32950
|
+
`/screenshots/projects/${encodeURIComponent(projectKey)}/${sub}/${encodeURIComponent(key)}${qs.toString() ? `?${qs.toString()}` : ""}`,
|
|
32951
|
+
{ method: "GET", methodName: "getScreenshotByKey" }
|
|
32952
|
+
);
|
|
32953
|
+
} catch (error) {
|
|
32954
|
+
throw new Error(`Failed to get screenshot by key: ${error.message}`, { cause: error });
|
|
32955
|
+
}
|
|
32956
|
+
}
|
|
32957
|
+
async getQueueStatistics() {
|
|
32958
|
+
this._requireReady("getQueueStatistics");
|
|
32959
|
+
try {
|
|
32960
|
+
const response = await this._request("/screenshots/queue/stats", {
|
|
32961
|
+
method: "GET",
|
|
32962
|
+
methodName: "getQueueStatistics"
|
|
32963
|
+
});
|
|
32964
|
+
if (response.success) {
|
|
32965
|
+
return response;
|
|
32966
|
+
}
|
|
32967
|
+
throw new Error(response.message);
|
|
32968
|
+
} catch (error) {
|
|
32969
|
+
throw new Error(`Failed to get queue statistics: ${error.message}`, { cause: error });
|
|
32970
|
+
}
|
|
32971
|
+
}
|
|
32972
|
+
// ==================== COMBINATION/DEBOUNCED ====================
|
|
32973
|
+
/**
|
|
32974
|
+
* Debounced thumbnail refresh that recreates screenshots and then updates thumbnail.
|
|
32975
|
+
* Subsequent calls within debounce window reset the timer.
|
|
32976
|
+
*/
|
|
32977
|
+
async refreshThumbnail(projectKey, options = {}) {
|
|
32978
|
+
this._requireReady("refreshThumbnail");
|
|
32979
|
+
if (!projectKey) {
|
|
32980
|
+
throw new Error("projectKey is required");
|
|
32981
|
+
}
|
|
32982
|
+
const {
|
|
32983
|
+
debounceMs = 15e3,
|
|
32984
|
+
waitAfterRecreateMs = 2e4,
|
|
32985
|
+
recreate = {
|
|
32986
|
+
process_pages: true,
|
|
32987
|
+
process_components: false,
|
|
32988
|
+
process_descriptions: false,
|
|
32989
|
+
force: false,
|
|
32990
|
+
priority: 5
|
|
32991
|
+
},
|
|
32992
|
+
thumbnail = {
|
|
32993
|
+
strategy: "auto",
|
|
32994
|
+
force: true
|
|
32995
|
+
}
|
|
32996
|
+
} = options;
|
|
32997
|
+
const existingTimer = this._debounceTimers.get(projectKey);
|
|
32998
|
+
if (existingTimer) {
|
|
32999
|
+
clearTimeout(existingTimer);
|
|
33000
|
+
}
|
|
33001
|
+
const executionPromise = await new Promise((resolve) => {
|
|
33002
|
+
const timer = setTimeout(async () => {
|
|
33003
|
+
try {
|
|
33004
|
+
await this.recreateProjectScreenshots(projectKey, recreate);
|
|
33005
|
+
await new Promise((resolveDelay) => {
|
|
33006
|
+
setTimeout(resolveDelay, waitAfterRecreateMs);
|
|
33007
|
+
});
|
|
33008
|
+
const result = await this.updateProjectThumbnail(projectKey, thumbnail);
|
|
33009
|
+
resolve(result);
|
|
33010
|
+
} catch (e) {
|
|
33011
|
+
resolve({ success: false, error: (e == null ? void 0 : e.message) || String(e) });
|
|
33012
|
+
} finally {
|
|
33013
|
+
this._debounceTimers.delete(projectKey);
|
|
33014
|
+
this._inflightRefreshes.delete(projectKey);
|
|
33015
|
+
}
|
|
33016
|
+
}, debounceMs);
|
|
33017
|
+
this._debounceTimers.set(projectKey, timer);
|
|
33018
|
+
});
|
|
33019
|
+
this._inflightRefreshes.set(projectKey, executionPromise);
|
|
33020
|
+
return executionPromise;
|
|
33021
|
+
}
|
|
33022
|
+
};
|
|
33023
|
+
|
|
32363
33024
|
// src/services/index.js
|
|
32364
33025
|
var createService = (ServiceClass, config) => new ServiceClass(config);
|
|
32365
33026
|
var createAuthService = (config) => createService(AuthService, config);
|
|
@@ -32374,6 +33035,7 @@ var createDnsService = (config) => createService(DnsService, config);
|
|
|
32374
33035
|
var createBranchService = (config) => createService(BranchService, config);
|
|
32375
33036
|
var createPullRequestService = (config) => createService(PullRequestService, config);
|
|
32376
33037
|
var createAdminService = (config) => createService(AdminService, config);
|
|
33038
|
+
var createScreenshotService = (config) => createService(ScreenshotService, config);
|
|
32377
33039
|
|
|
32378
33040
|
// src/utils/services.js
|
|
32379
33041
|
var SERVICE_METHODS = {
|
|
@@ -32601,7 +33263,20 @@ var SERVICE_METHODS = {
|
|
|
32601
33263
|
promoteToAdmin: "admin",
|
|
32602
33264
|
demoteFromAdmin: "admin",
|
|
32603
33265
|
// Utility methods
|
|
32604
|
-
getHealthStatus: "core"
|
|
33266
|
+
getHealthStatus: "core",
|
|
33267
|
+
// Screenshot methods
|
|
33268
|
+
createScreenshotProject: "screenshot",
|
|
33269
|
+
getProjectScreenshots: "screenshot",
|
|
33270
|
+
reprocessProjectScreenshots: "screenshot",
|
|
33271
|
+
recreateProjectScreenshots: "screenshot",
|
|
33272
|
+
deleteProjectScreenshots: "screenshot",
|
|
33273
|
+
getThumbnailCandidate: "screenshot",
|
|
33274
|
+
updateProjectThumbnail: "screenshot",
|
|
33275
|
+
getPageScreenshot: "screenshot",
|
|
33276
|
+
getComponentScreenshot: "screenshot",
|
|
33277
|
+
getScreenshotByKey: "screenshot",
|
|
33278
|
+
getQueueStatistics: "screenshot",
|
|
33279
|
+
refreshThumbnail: "screenshot"
|
|
32605
33280
|
};
|
|
32606
33281
|
|
|
32607
33282
|
// src/index.js
|
|
@@ -32610,6 +33285,7 @@ var SDK = class {
|
|
|
32610
33285
|
this._services = /* @__PURE__ */ new Map();
|
|
32611
33286
|
this._context = {};
|
|
32612
33287
|
this._options = this._validateOptions(options);
|
|
33288
|
+
this.rootBus = rootBus;
|
|
32613
33289
|
this._createServiceProxies();
|
|
32614
33290
|
}
|
|
32615
33291
|
// Initialize SDK with context
|
|
@@ -32703,6 +33379,13 @@ var SDK = class {
|
|
|
32703
33379
|
context: this._context,
|
|
32704
33380
|
options: this._options
|
|
32705
33381
|
})
|
|
33382
|
+
),
|
|
33383
|
+
this._initService(
|
|
33384
|
+
"screenshot",
|
|
33385
|
+
createScreenshotService({
|
|
33386
|
+
context: this._context,
|
|
33387
|
+
options: this._options
|
|
33388
|
+
})
|
|
32706
33389
|
)
|
|
32707
33390
|
]);
|
|
32708
33391
|
return this;
|
|
@@ -32740,9 +33423,10 @@ var SDK = class {
|
|
|
32740
33423
|
}
|
|
32741
33424
|
// Update context
|
|
32742
33425
|
updateContext(newContext) {
|
|
33426
|
+
const { authToken, ...sanitized } = newContext || {};
|
|
32743
33427
|
this._context = {
|
|
32744
33428
|
...this._context,
|
|
32745
|
-
...
|
|
33429
|
+
...sanitized
|
|
32746
33430
|
};
|
|
32747
33431
|
for (const service of this._services.values()) {
|
|
32748
33432
|
service.updateContext(this._context);
|
|
@@ -32751,9 +33435,7 @@ var SDK = class {
|
|
|
32751
33435
|
// Check if SDK is ready
|
|
32752
33436
|
isReady() {
|
|
32753
33437
|
const sdkServices = Array.from(this._services.values());
|
|
32754
|
-
return sdkServices.length > 0 && sdkServices.every(
|
|
32755
|
-
(service) => service.isReady()
|
|
32756
|
-
);
|
|
33438
|
+
return sdkServices.length > 0 && sdkServices.every((service) => service.isReady());
|
|
32757
33439
|
}
|
|
32758
33440
|
// Get SDK status
|
|
32759
33441
|
getStatus() {
|