@zintrust/core 0.1.41 → 0.1.42
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/package.json +17 -1
- package/src/boot/bootstrap.js +27 -11
- package/src/boot/registry/runtime.d.ts.map +1 -1
- package/src/boot/registry/runtime.js +11 -0
- package/src/cli/CLI.d.ts.map +1 -1
- package/src/cli/CLI.js +12 -0
- package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
- package/src/cli/commands/ConfigCommand.js +3 -5
- package/src/cli/commands/D1LearnCommand.d.ts +9 -0
- package/src/cli/commands/D1LearnCommand.d.ts.map +1 -0
- package/src/cli/commands/D1LearnCommand.js +143 -0
- package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/D1MigrateCommand.js +55 -16
- package/src/cli/commands/InitContainerCommand.d.ts.map +1 -1
- package/src/cli/commands/InitContainerCommand.js +21 -6
- package/src/cli/commands/InitEcosystemCommand.d.ts +6 -0
- package/src/cli/commands/InitEcosystemCommand.d.ts.map +1 -0
- package/src/cli/commands/InitEcosystemCommand.js +51 -0
- package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateCommand.js +78 -36
- package/src/cli/commands/MigrateWorkerCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateWorkerCommand.js +36 -2
- package/src/cli/commands/PutCommand.d.ts +6 -0
- package/src/cli/commands/PutCommand.d.ts.map +1 -0
- package/src/cli/commands/PutCommand.js +173 -0
- package/src/cli/commands/QueueRecoveryCommand.d.ts.map +1 -1
- package/src/cli/commands/QueueRecoveryCommand.js +113 -14
- package/src/cli/commands/ScheduleListCommand.d.ts +6 -0
- package/src/cli/commands/ScheduleListCommand.d.ts.map +1 -0
- package/src/cli/commands/ScheduleListCommand.js +62 -0
- package/src/cli/commands/ScheduleRunCommand.d.ts +6 -0
- package/src/cli/commands/ScheduleRunCommand.d.ts.map +1 -0
- package/src/cli/commands/ScheduleRunCommand.js +32 -0
- package/src/cli/commands/ScheduleStartCommand.d.ts +6 -0
- package/src/cli/commands/ScheduleStartCommand.d.ts.map +1 -0
- package/src/cli/commands/ScheduleStartCommand.js +40 -0
- package/src/cli/commands/SecretsCommand.d.ts.map +1 -1
- package/src/cli/commands/SecretsCommand.js +2 -2
- package/src/cli/commands/schedule/ScheduleCliSupport.d.ts +6 -0
- package/src/cli/commands/schedule/ScheduleCliSupport.d.ts.map +1 -0
- package/src/cli/commands/schedule/ScheduleCliSupport.js +55 -0
- package/src/cli/config/ConfigManager.d.ts.map +1 -1
- package/src/cli/config/ConfigManager.js +8 -1
- package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -1
- package/src/cli/d1/D1SqlMigrations.js +11 -1
- package/src/cli/d1/WranglerConfig.d.ts.map +1 -1
- package/src/cli/d1/WranglerConfig.js +34 -2
- package/src/cli/services/VersionChecker.d.ts.map +1 -1
- package/src/cli/services/VersionChecker.js +5 -1
- package/src/cli/utils/DatabaseCliUtils.d.ts.map +1 -1
- package/src/cli/utils/DatabaseCliUtils.js +6 -1
- package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
- package/src/cli/utils/EnvFileLoader.js +33 -14
- package/src/cli.d.ts +5 -0
- package/src/cli.d.ts.map +1 -0
- package/src/cli.js +4 -0
- package/src/collections/index.d.ts +2 -2
- package/src/collections/index.d.ts.map +1 -1
- package/src/collections/index.js +1 -1
- package/src/common/RemoteSignedJson.d.ts.map +1 -1
- package/src/common/RemoteSignedJson.js +49 -23
- package/src/common/utility.d.ts.map +1 -1
- package/src/common/utility.js +2 -6
- package/src/config/cloudflare.d.ts.map +1 -1
- package/src/config/cloudflare.js +19 -8
- package/src/config/env.js +2 -2
- package/src/helper/index.d.ts +225 -0
- package/src/helper/index.d.ts.map +1 -0
- package/src/helper/index.js +347 -0
- package/src/index.d.ts +3 -6
- package/src/index.d.ts.map +1 -1
- package/src/index.js +7 -9
- package/src/migrations/MigrationDiscovery.d.ts.map +1 -1
- package/src/migrations/MigrationDiscovery.js +2 -1
- package/src/orm/DatabaseAdapter.d.ts +1 -0
- package/src/orm/DatabaseAdapter.d.ts.map +1 -1
- package/src/orm/SchemaStatemenWriter.d.ts +15 -0
- package/src/orm/SchemaStatemenWriter.d.ts.map +1 -0
- package/src/orm/SchemaStatemenWriter.js +78 -0
- package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
- package/src/orm/adapters/D1Adapter.js +52 -2
- package/src/orm/adapters/D1RemoteAdapter.d.ts.map +1 -1
- package/src/orm/adapters/D1RemoteAdapter.js +137 -89
- package/src/orm/adapters/MySQLProxyAdapter.d.ts.map +1 -1
- package/src/orm/adapters/MySQLProxyAdapter.js +100 -81
- package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts.map +1 -1
- package/src/orm/adapters/PostgreSQLProxyAdapter.js +26 -10
- package/src/orm/adapters/SqlProxyAdapterUtils.d.ts.map +1 -1
- package/src/orm/adapters/SqlProxyAdapterUtils.js +2 -1
- package/src/orm/adapters/SqlProxyRegistryMode.d.ts +12 -0
- package/src/orm/adapters/SqlProxyRegistryMode.d.ts.map +1 -0
- package/src/orm/adapters/SqlProxyRegistryMode.js +24 -0
- package/src/orm/adapters/SqlServerProxyAdapter.d.ts +3 -0
- package/src/orm/adapters/SqlServerProxyAdapter.d.ts.map +1 -1
- package/src/orm/adapters/SqlServerProxyAdapter.js +125 -117
- package/src/orm/migrations/MigrationStore.js +1 -1
- package/src/proxy/ProxyRequestParsing.d.ts +9 -0
- package/src/proxy/ProxyRequestParsing.d.ts.map +1 -0
- package/src/proxy/ProxyRequestParsing.js +16 -0
- package/src/proxy/RequestValidator.d.ts.map +1 -1
- package/src/proxy/RequestValidator.js +2 -1
- package/src/proxy/SigningService.js +2 -2
- package/src/proxy/SqlProxyDbOverrides.d.ts +17 -0
- package/src/proxy/SqlProxyDbOverrides.d.ts.map +1 -0
- package/src/proxy/SqlProxyDbOverrides.js +1 -0
- package/src/proxy/SqlProxyServerDeps.d.ts +12 -0
- package/src/proxy/SqlProxyServerDeps.d.ts.map +1 -0
- package/src/proxy/SqlProxyServerDeps.js +9 -0
- package/src/proxy/StatementPayloadValidator.d.ts +13 -0
- package/src/proxy/StatementPayloadValidator.d.ts.map +1 -0
- package/src/proxy/StatementPayloadValidator.js +18 -0
- package/src/proxy/StatementRegistryLoader.d.ts +2 -0
- package/src/proxy/StatementRegistryLoader.d.ts.map +1 -0
- package/src/proxy/StatementRegistryLoader.js +36 -0
- package/src/proxy/StatementRegistryResolver.d.ts +15 -0
- package/src/proxy/StatementRegistryResolver.d.ts.map +1 -0
- package/src/proxy/StatementRegistryResolver.js +34 -0
- package/src/proxy/d1/ZintrustD1Proxy.d.ts +2 -1
- package/src/proxy/d1/ZintrustD1Proxy.d.ts.map +1 -1
- package/src/proxy/d1/ZintrustD1Proxy.js +2 -1
- package/src/proxy/isMutatingSql.d.ts +2 -0
- package/src/proxy/isMutatingSql.d.ts.map +1 -0
- package/src/proxy/isMutatingSql.js +12 -0
- package/src/proxy/kv/ZintrustKvProxy.d.ts +2 -1
- package/src/proxy/kv/ZintrustKvProxy.d.ts.map +1 -1
- package/src/proxy/kv/ZintrustKvProxy.js +2 -1
- package/src/proxy/mysql/MySqlProxyServer.d.ts +2 -8
- package/src/proxy/mysql/MySqlProxyServer.d.ts.map +1 -1
- package/src/proxy/mysql/MySqlProxyServer.js +84 -51
- package/src/proxy/postgres/PostgresProxyServer.d.ts +2 -8
- package/src/proxy/postgres/PostgresProxyServer.d.ts.map +1 -1
- package/src/proxy/postgres/PostgresProxyServer.js +86 -48
- package/src/proxy/smtp/SmtpProxyServer.d.ts.map +1 -1
- package/src/proxy/smtp/SmtpProxyServer.js +6 -5
- package/src/proxy/sqlserver/SqlServerProxyServer.d.ts +2 -8
- package/src/proxy/sqlserver/SqlServerProxyServer.d.ts.map +1 -1
- package/src/proxy/sqlserver/SqlServerProxyServer.js +84 -49
- package/src/proxy.d.ts +4 -0
- package/src/proxy.d.ts.map +1 -0
- package/src/proxy.js +3 -0
- package/src/scheduler/Schedule.d.ts +36 -0
- package/src/scheduler/Schedule.d.ts.map +1 -0
- package/src/scheduler/Schedule.js +197 -0
- package/src/scheduler/ScheduleHttpGateway.d.ts +8 -0
- package/src/scheduler/ScheduleHttpGateway.d.ts.map +1 -0
- package/src/scheduler/ScheduleHttpGateway.js +196 -0
- package/src/scheduler/ScheduleRunner.d.ts +6 -0
- package/src/scheduler/ScheduleRunner.d.ts.map +1 -1
- package/src/scheduler/ScheduleRunner.js +166 -29
- package/src/scheduler/SchedulerRuntime.d.ts +15 -0
- package/src/scheduler/SchedulerRuntime.d.ts.map +1 -0
- package/src/scheduler/SchedulerRuntime.js +79 -0
- package/src/scheduler/cron/Cron.d.ts +19 -0
- package/src/scheduler/cron/Cron.d.ts.map +1 -0
- package/src/scheduler/cron/Cron.js +200 -0
- package/src/scheduler/leader/SchedulerLeader.d.ts +14 -0
- package/src/scheduler/leader/SchedulerLeader.d.ts.map +1 -0
- package/src/scheduler/leader/SchedulerLeader.js +187 -0
- package/src/scheduler/state/ScheduleStateStore.d.ts +27 -0
- package/src/scheduler/state/ScheduleStateStore.d.ts.map +1 -0
- package/src/scheduler/state/ScheduleStateStore.js +27 -0
- package/src/scheduler/types.d.ts +10 -0
- package/src/scheduler/types.d.ts.map +1 -1
- package/src/schedules/index.d.ts +1 -0
- package/src/schedules/index.d.ts.map +1 -1
- package/src/schedules/index.js +1 -0
- package/src/schedules/job-tracking-cleanup.d.ts +4 -0
- package/src/schedules/job-tracking-cleanup.d.ts.map +1 -0
- package/src/schedules/job-tracking-cleanup.js +116 -0
- package/src/schedules/log-cleanup.d.ts +1 -2
- package/src/schedules/log-cleanup.d.ts.map +1 -1
- package/src/schedules/log-cleanup.js +12 -15
- package/src/security/Sanitizer.d.ts.map +1 -1
- package/src/security/Sanitizer.js +1 -9
- package/src/security/SignedRequest.d.ts.map +1 -1
- package/src/security/SignedRequest.js +2 -2
- package/src/templates/docker/docker-compose.ecosystem.yml.tpl +301 -0
- package/src/templates/docker/docker-compose.schedules.yml.tpl +84 -0
- package/src/templates/project/basic/app/Schedules/index.ts.tpl +0 -0
- package/src/templates/project/basic/config/database.ts.tpl +1 -1
- package/src/toolkit/Secrets/Manifest.d.ts.map +1 -1
- package/src/toolkit/Secrets/Manifest.js +5 -7
- package/src/tools/mail/drivers/Smtp.d.ts.map +1 -1
- package/src/tools/mail/drivers/Smtp.js +7 -1
- package/src/tools/queue/JobReconciliationRunner.d.ts.map +1 -1
- package/src/tools/queue/JobReconciliationRunner.js +7 -39
- package/src/tools/queue/JobRecoveryDaemon.d.ts.map +1 -1
- package/src/tools/queue/JobRecoveryDaemon.js +116 -18
- package/src/tools/queue/JobStateTracker.d.ts +10 -1
- package/src/tools/queue/JobStateTracker.d.ts.map +1 -1
- package/src/tools/queue/JobStateTracker.js +24 -2
- package/src/tools/queue/JobStateTrackerDbPersistence.d.ts.map +1 -1
- package/src/tools/queue/JobStateTrackerDbPersistence.js +93 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
2
|
+
import { isObject } from '../helper/index.js';
|
|
2
3
|
import { normalizeSigningCredentials } from '../proxy/SigningService.js';
|
|
3
4
|
import { SignedRequest } from '../security/SignedRequest.js';
|
|
4
5
|
const joinUrl = (baseUrl, path) => {
|
|
@@ -20,6 +21,22 @@ const asJson = async (resp) => {
|
|
|
20
21
|
return { message: text };
|
|
21
22
|
}
|
|
22
23
|
};
|
|
24
|
+
const isRecord = (value) => isObject(value);
|
|
25
|
+
const describeProxyError = (details) => {
|
|
26
|
+
// Expected Worker proxy error shape: { status: number, body: { code: string, message: string } }
|
|
27
|
+
if (!isRecord(details))
|
|
28
|
+
return '';
|
|
29
|
+
const body = details['body'];
|
|
30
|
+
if (!isRecord(body))
|
|
31
|
+
return '';
|
|
32
|
+
const code = typeof body['code'] === 'string' ? body['code'] : '';
|
|
33
|
+
const message = typeof body['message'] === 'string' ? body['message'] : '';
|
|
34
|
+
if (code === '' && message === '')
|
|
35
|
+
return '';
|
|
36
|
+
if (code !== '' && message !== '')
|
|
37
|
+
return `${code}: ${message}`;
|
|
38
|
+
return code === '' ? message : code;
|
|
39
|
+
};
|
|
23
40
|
const normalizeSettings = (settings) => {
|
|
24
41
|
const creds = normalizeSigningCredentials({
|
|
25
42
|
keyId: settings.keyId,
|
|
@@ -57,6 +74,36 @@ const buildSigningUrl = (url, settings) => {
|
|
|
57
74
|
}
|
|
58
75
|
return signingUrl;
|
|
59
76
|
};
|
|
77
|
+
const throwForNonOkResponse = async (resp, settings) => {
|
|
78
|
+
const details = await asJson(resp);
|
|
79
|
+
switch (resp.status) {
|
|
80
|
+
case 401:
|
|
81
|
+
throw ErrorFactory.createUnauthorizedError(settings.messages.unauthorized, details);
|
|
82
|
+
case 403:
|
|
83
|
+
throw ErrorFactory.createForbiddenError(settings.messages.forbidden, details);
|
|
84
|
+
case 429:
|
|
85
|
+
throw ErrorFactory.createSecurityError(settings.messages.rateLimited, details);
|
|
86
|
+
default: {
|
|
87
|
+
if (resp.status >= 400 && resp.status < 500) {
|
|
88
|
+
throw ErrorFactory.createValidationError(settings.messages.rejected, details);
|
|
89
|
+
}
|
|
90
|
+
const extra = describeProxyError(details);
|
|
91
|
+
const msg = extra === '' ? settings.messages.error : `${settings.messages.error} (${extra})`;
|
|
92
|
+
throw ErrorFactory.createConnectionError(msg, {
|
|
93
|
+
status: resp.status,
|
|
94
|
+
details,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const rethrowRequestError = (error, settings) => {
|
|
100
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
101
|
+
throw ErrorFactory.createConnectionError(settings.messages.timedOut, {
|
|
102
|
+
timeoutMs: settings.timeoutMs,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
throw error;
|
|
106
|
+
};
|
|
60
107
|
export const RemoteSignedJson = Object.freeze({
|
|
61
108
|
async request(settings, path, payload) {
|
|
62
109
|
const normalized = normalizeSettings(settings);
|
|
@@ -79,33 +126,12 @@ export const RemoteSignedJson = Object.freeze({
|
|
|
79
126
|
signal: createTimeoutSignal(normalized.timeoutMs),
|
|
80
127
|
});
|
|
81
128
|
if (!resp.ok) {
|
|
82
|
-
|
|
83
|
-
if (resp.status === 401) {
|
|
84
|
-
throw ErrorFactory.createUnauthorizedError(normalized.messages.unauthorized, details);
|
|
85
|
-
}
|
|
86
|
-
if (resp.status === 403) {
|
|
87
|
-
throw ErrorFactory.createForbiddenError(normalized.messages.forbidden, details);
|
|
88
|
-
}
|
|
89
|
-
if (resp.status === 429) {
|
|
90
|
-
throw ErrorFactory.createSecurityError(normalized.messages.rateLimited, details);
|
|
91
|
-
}
|
|
92
|
-
if (resp.status >= 400 && resp.status < 500) {
|
|
93
|
-
throw ErrorFactory.createValidationError(normalized.messages.rejected, details);
|
|
94
|
-
}
|
|
95
|
-
throw ErrorFactory.createConnectionError(normalized.messages.error, {
|
|
96
|
-
status: resp.status,
|
|
97
|
-
details,
|
|
98
|
-
});
|
|
129
|
+
await throwForNonOkResponse(resp, normalized);
|
|
99
130
|
}
|
|
100
131
|
return (await asJson(resp));
|
|
101
132
|
}
|
|
102
133
|
catch (error) {
|
|
103
|
-
|
|
104
|
-
throw ErrorFactory.createConnectionError(normalized.messages.timedOut, {
|
|
105
|
-
timeoutMs: normalized.timeoutMs,
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
throw error;
|
|
134
|
+
return rethrowRequestError(error, normalized);
|
|
109
135
|
}
|
|
110
136
|
},
|
|
111
137
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../../src/common/utility.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../../src/common/utility.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,QAAO,MAG/B,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,MAAM,GAAE,MAAgE,GACvE,MAAM,CAoBR;AAED,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,MAAkD,CAAC;AAQ9F,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE5C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAElD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,MAAM,CAGpF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKtD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,SAAI,GAAG,MAAM,CAqB3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,SAAI,GAAG,MAAM,CAe5D;AAED,eAAO,MAAM,MAAM,QAAO,MAAkC,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACtC,mBAAmB,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IAClC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5E,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,aAAa,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD,MAAM,EAAE,MAAM,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,SAAS;wBArHU,MAAM;uBA6BL,OAAO,KAAG,MAAM;;;;;;;;;kBAwEvB,MAAM;EA4B9B,CAAC"}
|
package/src/common/utility.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
2
|
+
import { isEmpty as isEmptyHelper } from '../helper/index.js';
|
|
2
3
|
import { randomBytes } from '../node-singletons/crypto.js';
|
|
3
4
|
export const generateUuid = () => {
|
|
4
5
|
if (typeof globalThis?.crypto?.randomUUID === 'function')
|
|
@@ -30,12 +31,7 @@ function bytesToHex(bytes) {
|
|
|
30
31
|
return out;
|
|
31
32
|
}
|
|
32
33
|
export function isEmpty(value) {
|
|
33
|
-
return (value
|
|
34
|
-
value === undefined ||
|
|
35
|
-
value === false ||
|
|
36
|
-
value === 0 ||
|
|
37
|
-
value === '' ||
|
|
38
|
-
value === '0');
|
|
34
|
+
return isEmptyHelper(value);
|
|
39
35
|
}
|
|
40
36
|
export function toStr(value) {
|
|
41
37
|
return String(value ?? '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/config/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/config/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAwFxE,eAAO,MAAM,UAAU;yBAtFG,UAAU,GAAG,IAAI;2BAOb,cAAc,KAAG,WAAW,GAAG,IAAI;iCAwB7B,MAAM,KAAG,WAAW,GAAG,IAAI;iCAa3B,MAAM,KAAG,OAAO;4BA0BvB,aAAa,GAAG,IAAI;yBATrB,MAAM,KAAG,MAAM,GAAG,IAAI;sCAiBX,OAAO;EAgB5C,CAAC"}
|
package/src/config/cloudflare.js
CHANGED
|
@@ -16,19 +16,30 @@ const getD1Binding = (config) => {
|
|
|
16
16
|
if (config.d1 !== undefined && config.d1 !== null)
|
|
17
17
|
return config.d1;
|
|
18
18
|
const env = getWorkersEnv();
|
|
19
|
-
const
|
|
20
|
-
if (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
const candidateNames = ['DB', 'zintrust_db', getWorkersVar('D1_BINDING') ?? ''].filter((name, idx, arr) => name.trim() !== '' && arr.indexOf(name) === idx);
|
|
20
|
+
if (env !== null) {
|
|
21
|
+
for (const name of candidateNames) {
|
|
22
|
+
const binding = env[name];
|
|
23
|
+
if (binding !== undefined && binding !== null)
|
|
24
|
+
return binding;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const globalRef = globalThis;
|
|
28
|
+
for (const name of candidateNames) {
|
|
29
|
+
const binding = globalRef[name];
|
|
30
|
+
if (binding !== undefined && binding !== null)
|
|
31
|
+
return binding;
|
|
32
|
+
}
|
|
25
33
|
return null;
|
|
26
34
|
};
|
|
27
|
-
const getKVBinding = (bindingName
|
|
35
|
+
const getKVBinding = (bindingName) => {
|
|
28
36
|
const env = getWorkersEnv();
|
|
29
37
|
if (env === null)
|
|
30
38
|
return null;
|
|
31
|
-
const
|
|
39
|
+
const resolvedName = typeof bindingName === 'string' && bindingName.trim() !== ''
|
|
40
|
+
? bindingName
|
|
41
|
+
: (getWorkersVar('KV_NAMESPACE') ?? 'CACHE');
|
|
42
|
+
const kv = env[resolvedName];
|
|
32
43
|
return kv ?? null;
|
|
33
44
|
};
|
|
34
45
|
const getR2Binding = (bindingName) => {
|
package/src/config/env.js
CHANGED
|
@@ -138,8 +138,8 @@ export const Env = Object.freeze({
|
|
|
138
138
|
KV_NAMESPACE_ID: get('KV_NAMESPACE_ID'),
|
|
139
139
|
// Cloudflare proxy services (D1/KV outside Cloudflare)
|
|
140
140
|
D1_REMOTE_URL: get('D1_REMOTE_URL', ''),
|
|
141
|
-
D1_REMOTE_KEY_ID: get('D1_REMOTE_KEY_ID',
|
|
142
|
-
D1_REMOTE_SECRET: get('D1_REMOTE_SECRET',
|
|
141
|
+
D1_REMOTE_KEY_ID: get('D1_REMOTE_KEY_ID', PROXY_KEY_ID_FALLBACK),
|
|
142
|
+
D1_REMOTE_SECRET: get('D1_REMOTE_SECRET', PROXY_SECRET_FALLBACK),
|
|
143
143
|
D1_REMOTE_MODE: get('D1_REMOTE_MODE', 'registry'),
|
|
144
144
|
MYSQL_PROXY_URL: get('MYSQL_PROXY_URL', ''),
|
|
145
145
|
MYSQL_PROXY_HOST: get('MYSQL_PROXY_HOST', '127.0.0.1'),
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight validation / type helper utilities used across the codebase.
|
|
3
|
+
* Keep implementations small and dependency-free so they work in both
|
|
4
|
+
* Node and Cloudflare Worker runtimes.
|
|
5
|
+
*/
|
|
6
|
+
/** Check whether value is a string primitive */
|
|
7
|
+
export declare const isString: (value: unknown) => value is string;
|
|
8
|
+
/** Check whether value is an array */
|
|
9
|
+
export declare const isArray: (value: unknown) => value is unknown[];
|
|
10
|
+
/** Check whether value is an object (and not null/array) */
|
|
11
|
+
export declare const isObject: (value: unknown) => value is Record<string, unknown>;
|
|
12
|
+
/** Check whether value is a function */
|
|
13
|
+
export declare const isFunction: (value: unknown) => value is (...args: unknown[]) => unknown;
|
|
14
|
+
/** Check whether value is a valid Date object */
|
|
15
|
+
export declare const isDate: (value: unknown) => value is Date;
|
|
16
|
+
/**
|
|
17
|
+
* Check if value is "empty".
|
|
18
|
+
* Matches legacy behavior: null, undefined, false, 0, '', '0' are all considered empty.
|
|
19
|
+
*/
|
|
20
|
+
export declare const isEmpty: (value: unknown) => boolean;
|
|
21
|
+
/** Check if value is null or string 'null'/'NULL' or empty string */
|
|
22
|
+
export declare const isNull: (value: unknown) => boolean;
|
|
23
|
+
/** Check if value is undefined */
|
|
24
|
+
export declare const isUndefined: (value: unknown) => boolean;
|
|
25
|
+
/** Check if value is undefined or satisfies isNull() */
|
|
26
|
+
export declare const isUndefinedOrNull: (value: unknown) => boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Check whether value is a boolean primitive.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isBoolean(value: unknown, allowString?: false): value is boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Check whether value is a boolean primitive OR a boolean-like string.
|
|
33
|
+
*/
|
|
34
|
+
export declare function isBoolean(value: unknown, allowString: true): value is boolean | string;
|
|
35
|
+
/** Check if value is a string representation of a boolean (true/false/1/0) */
|
|
36
|
+
export declare const isBooleanString: (value: unknown) => boolean;
|
|
37
|
+
/** Check if value is a valid number or numeric string */
|
|
38
|
+
export declare const isNumeric: (value: unknown) => boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Check if value is an integer.
|
|
41
|
+
*/
|
|
42
|
+
export declare function isInt(value: unknown, allowString?: false, conditions?: {
|
|
43
|
+
min?: number;
|
|
44
|
+
max?: number;
|
|
45
|
+
}): value is number;
|
|
46
|
+
/**
|
|
47
|
+
* Check if value is an integer OR a string representing an integer.
|
|
48
|
+
*/
|
|
49
|
+
export declare function isInt(value: unknown, allowString: true, conditions?: {
|
|
50
|
+
min?: number;
|
|
51
|
+
max?: number;
|
|
52
|
+
}): value is number | string;
|
|
53
|
+
/**
|
|
54
|
+
* Check if value is a float (finite number).
|
|
55
|
+
*/
|
|
56
|
+
export declare function isFloat(value: unknown, allowString?: false, conditions?: {
|
|
57
|
+
min?: number;
|
|
58
|
+
max?: number;
|
|
59
|
+
}): value is number;
|
|
60
|
+
/**
|
|
61
|
+
* Check if value is a float OR a string representing a float.
|
|
62
|
+
*/
|
|
63
|
+
export declare function isFloat(value: unknown, allowString: true, conditions?: {
|
|
64
|
+
min?: number;
|
|
65
|
+
max?: number;
|
|
66
|
+
}): value is number | string;
|
|
67
|
+
/** Check if value is a valid integer string (supports min/max) */
|
|
68
|
+
export declare const isIntString: (value: unknown, conditions?: {
|
|
69
|
+
min?: number;
|
|
70
|
+
max?: number;
|
|
71
|
+
}) => boolean;
|
|
72
|
+
/** Check if value is a valid float string (supports min/max) */
|
|
73
|
+
export declare const isFloatString: (value: unknown, conditions?: {
|
|
74
|
+
min?: number;
|
|
75
|
+
max?: number;
|
|
76
|
+
}) => boolean;
|
|
77
|
+
/** Check if value is a valid email string */
|
|
78
|
+
export declare const isEmail: (value: unknown) => boolean;
|
|
79
|
+
/** Check if value is a valid URL string (http/https) */
|
|
80
|
+
export declare const isUrl: (value: unknown) => boolean;
|
|
81
|
+
/** Check if string contains only letters */
|
|
82
|
+
export declare const isAlpha: (value: unknown) => boolean;
|
|
83
|
+
/** Check if string contains only letters and numbers */
|
|
84
|
+
export declare const isAlphanumeric: (value: unknown) => boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Check if string matches regex.
|
|
87
|
+
*
|
|
88
|
+
* Security/perf: Regex evaluation can be expensive for some patterns.
|
|
89
|
+
* This helper defensively caps the input length to reduce ReDoS risk
|
|
90
|
+
* when used on untrusted strings.
|
|
91
|
+
*/
|
|
92
|
+
export declare const isMatch: (value: unknown, regex: RegExp, options?: {
|
|
93
|
+
maxLength?: number;
|
|
94
|
+
}) => boolean;
|
|
95
|
+
/** Check if value exists in array */
|
|
96
|
+
export declare const isIn: (value: unknown, array: unknown[]) => boolean;
|
|
97
|
+
/** Check if value does not exist in array */
|
|
98
|
+
export declare const isNotIn: (value: unknown, array: unknown[]) => boolean;
|
|
99
|
+
/** Check if string or array has exact length */
|
|
100
|
+
export declare const isLength: (value: unknown, length: number) => boolean;
|
|
101
|
+
/** Check if string or array has minimum length */
|
|
102
|
+
export declare const isMinLength: (value: unknown, min: number) => boolean;
|
|
103
|
+
/** Check if string or array has maximum length */
|
|
104
|
+
export declare const isMaxLength: (value: unknown, max: number) => boolean;
|
|
105
|
+
/** Check if value is a string with length > 0 (after trim) */
|
|
106
|
+
export declare const isNonEmptyString: (value: unknown) => value is string;
|
|
107
|
+
/** Check if value is an array with items */
|
|
108
|
+
export declare const isNonEmptyArray: (value: unknown) => value is unknown[];
|
|
109
|
+
/** Check if value is an object with keys */
|
|
110
|
+
export declare const isNonEmptyObject: (value: unknown) => value is Record<string, unknown>;
|
|
111
|
+
/**
|
|
112
|
+
* Check if value is a string containing only whitespace.
|
|
113
|
+
* Useful for distinguishing between truly empty and whitespace-only strings.
|
|
114
|
+
*/
|
|
115
|
+
export declare const isWhitespaceOnly: (value: unknown) => boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Check if value is a valid UUID v4 string.
|
|
118
|
+
* Format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|
|
119
|
+
*/
|
|
120
|
+
export declare const isUUID: (value: unknown) => boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Check if value is a valid JSON string (parses without error).
|
|
123
|
+
*/
|
|
124
|
+
export declare const isJSON: (value: unknown) => boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Check if value is a valid Base64-encoded string.
|
|
127
|
+
*/
|
|
128
|
+
export declare const isBase64: (value: unknown) => boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Check if value is a valid hexadecimal color string.
|
|
131
|
+
* Accepts #RGB, #RGBA, #RRGGBB, #RRGGBBAA formats.
|
|
132
|
+
*/
|
|
133
|
+
export declare const isHexColor: (value: unknown) => boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Check if value is a valid URL slug (lowercase alphanumeric with hyphens).
|
|
136
|
+
* Example: "my-blog-post", "user-profile-page"
|
|
137
|
+
*/
|
|
138
|
+
export declare const isSlug: (value: unknown) => boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Check if value is a string with uppercase letters.
|
|
141
|
+
*/
|
|
142
|
+
export declare const isUpperCase: (value: unknown) => boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Check if value is a string with lowercase letters.
|
|
145
|
+
*/
|
|
146
|
+
export declare const isLowerCase: (value: unknown) => boolean;
|
|
147
|
+
/** Check if number is positive (> 0) */
|
|
148
|
+
export declare const isPositive: (value: unknown) => boolean;
|
|
149
|
+
/** Check if number is negative (< 0) */
|
|
150
|
+
export declare const isNegative: (value: unknown) => boolean;
|
|
151
|
+
/** Check if number is zero */
|
|
152
|
+
export declare const isZero: (value: unknown) => boolean;
|
|
153
|
+
/** Check if number is even */
|
|
154
|
+
export declare const isEven: (value: unknown) => boolean;
|
|
155
|
+
/** Check if number is odd */
|
|
156
|
+
export declare const isOdd: (value: unknown) => boolean;
|
|
157
|
+
/**
|
|
158
|
+
* Check if number has decimal places.
|
|
159
|
+
* Examples: 1.5 → true, 1.0 → false, 1 → false
|
|
160
|
+
*/
|
|
161
|
+
export declare const isDecimal: (value: unknown) => boolean;
|
|
162
|
+
/**
|
|
163
|
+
* Check if number is between min and max (inclusive).
|
|
164
|
+
*/
|
|
165
|
+
export declare const isBetween: (value: unknown, min: number, max: number) => boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Check if number is divisible by divisor.
|
|
168
|
+
*/
|
|
169
|
+
export declare const isDivisibleBy: (value: unknown, divisor: number) => boolean;
|
|
170
|
+
export declare const Helpers: Readonly<{
|
|
171
|
+
isString: (value: unknown) => value is string;
|
|
172
|
+
isBoolean: typeof isBoolean;
|
|
173
|
+
isBooleanString: (value: unknown) => boolean;
|
|
174
|
+
isEmpty: (value: unknown) => boolean;
|
|
175
|
+
isNull: (value: unknown) => boolean;
|
|
176
|
+
isUndefined: (value: unknown) => boolean;
|
|
177
|
+
isUndefinedOrNull: (value: unknown) => boolean;
|
|
178
|
+
isArray: (value: unknown) => value is unknown[];
|
|
179
|
+
isObject: (value: unknown) => value is Record<string, unknown>;
|
|
180
|
+
isFunction: (value: unknown) => value is (...args: unknown[]) => unknown;
|
|
181
|
+
isDate: (value: unknown) => value is Date;
|
|
182
|
+
isEmail: (value: unknown) => boolean;
|
|
183
|
+
isUrl: (value: unknown) => boolean;
|
|
184
|
+
isIn: (value: unknown, array: unknown[]) => boolean;
|
|
185
|
+
isNotIn: (value: unknown, array: unknown[]) => boolean;
|
|
186
|
+
isLength: (value: unknown, length: number) => boolean;
|
|
187
|
+
isMinLength: (value: unknown, min: number) => boolean;
|
|
188
|
+
isMaxLength: (value: unknown, max: number) => boolean;
|
|
189
|
+
isMatch: (value: unknown, regex: RegExp, options?: {
|
|
190
|
+
maxLength?: number;
|
|
191
|
+
}) => boolean;
|
|
192
|
+
isAlpha: (value: unknown) => boolean;
|
|
193
|
+
isAlphanumeric: (value: unknown) => boolean;
|
|
194
|
+
isNumeric: (value: unknown) => boolean;
|
|
195
|
+
isInt: typeof isInt;
|
|
196
|
+
isFloat: typeof isFloat;
|
|
197
|
+
isIntString: (value: unknown, conditions?: {
|
|
198
|
+
min?: number;
|
|
199
|
+
max?: number;
|
|
200
|
+
}) => boolean;
|
|
201
|
+
isFloatString: (value: unknown, conditions?: {
|
|
202
|
+
min?: number;
|
|
203
|
+
max?: number;
|
|
204
|
+
}) => boolean;
|
|
205
|
+
isNonEmptyString: (value: unknown) => value is string;
|
|
206
|
+
isNonEmptyArray: (value: unknown) => value is unknown[];
|
|
207
|
+
isNonEmptyObject: (value: unknown) => value is Record<string, unknown>;
|
|
208
|
+
isWhitespaceOnly: (value: unknown) => boolean;
|
|
209
|
+
isUUID: (value: unknown) => boolean;
|
|
210
|
+
isJSON: (value: unknown) => boolean;
|
|
211
|
+
isBase64: (value: unknown) => boolean;
|
|
212
|
+
isHexColor: (value: unknown) => boolean;
|
|
213
|
+
isSlug: (value: unknown) => boolean;
|
|
214
|
+
isUpperCase: (value: unknown) => boolean;
|
|
215
|
+
isLowerCase: (value: unknown) => boolean;
|
|
216
|
+
isPositive: (value: unknown) => boolean;
|
|
217
|
+
isNegative: (value: unknown) => boolean;
|
|
218
|
+
isZero: (value: unknown) => boolean;
|
|
219
|
+
isEven: (value: unknown) => boolean;
|
|
220
|
+
isOdd: (value: unknown) => boolean;
|
|
221
|
+
isDecimal: (value: unknown) => boolean;
|
|
222
|
+
isBetween: (value: unknown, min: number, max: number) => boolean;
|
|
223
|
+
isDivisibleBy: (value: unknown, divisor: number) => boolean;
|
|
224
|
+
}>;
|
|
225
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helper/index.ts"],"names":[],"mappings":"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"}
|