@hitch42/applet 0.1.1-beta.1 → 0.1.1-beta.11
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/_internal/client.js +120 -11
- package/dist/_internal/log-context.d.ts +34 -0
- package/dist/_internal/log-context.js +2 -0
- package/dist/_internal/server.d.ts +14 -1
- package/dist/_internal/server.js +122 -118
- package/dist/applet.js +53 -29
- package/dist/build-Bh_S5BUv.js +2 -0
- package/dist/{build-Rk3xDZV7.js → build-CEfFoIZZ.js} +30 -14
- package/dist/ci-BKw14X2h.js +69 -0
- package/dist/client.d.ts +3 -3
- package/dist/{contract-DMrpbaLJ.d.ts → contract-CsUpTBe0.d.ts} +1 -1
- package/dist/{deploy-D3BGDqgC.js → deploy-wGYjwXrx.js} +249 -35
- package/dist/email-DBTVhNB_.js +62 -0
- package/dist/{generate-CH0VQmUi.js → generate-BEIYs17x.js} +79 -25
- package/dist/generate-Dox-OYt6.js +2 -0
- package/dist/headers-DkNr9MLJ.js +17 -0
- package/dist/index.d.ts +123 -11
- package/dist/index.js +142 -26
- package/dist/{init-BS1Y-eNL.js → init-6oGPM46R.js} +17 -18
- package/dist/load-config-xEdTXs0y.js +27 -0
- package/dist/log-context-zu8U9Sjm.js +73 -0
- package/dist/login-CUx3TmFQ.js +12 -0
- package/dist/{logs-m00pzr_O.js → logs-DSjuEN0Q.js} +20 -22
- package/dist/{manifest-BQCAxATS.d.ts → manifest-C6_F4bL8.d.ts} +9 -0
- package/dist/{manifest-DyoJ1MIL.js → manifest-CJSL9GuC.js} +25 -3
- package/dist/me-BW7Paary.js +32 -0
- package/dist/{project-CxN-Dtc7.js → project-BRZGd6xq.js} +227 -34
- package/dist/prompt-ChS-grYO.js +29 -0
- package/dist/query-cache-CXmAyLv3.js +82 -0
- package/dist/react.d.ts +3 -2
- package/dist/react.js +98 -80
- package/dist/schedules-C8_Svr4h.js +42 -0
- package/dist/server.d.ts +9 -4
- package/dist/server.js +29 -8
- package/dist/telephony-protocol-D-nf3Gca.d.ts +76 -0
- package/dist/telephony.d.ts +97 -0
- package/dist/telephony.js +726 -0
- package/dist/{upload-YbRKEqR6.d.ts → upload-DKZzz5kW.d.ts} +6 -6
- package/dist/{variables-CP7Ce3Np.js → variables-DT5RyHdH.js} +14 -39
- package/dist/vite.d.ts +3 -60
- package/dist/vite.js +503 -34
- package/dist/workflow-engine-BOTzURKM.js +111 -0
- package/dist/{auth-DaVK0k5R.js → workspace-D0dnnlxL.js} +75 -40
- package/package.json +19 -6
- package/scaffold/.agents/skills/hitch-applets/SKILL.md +60 -15
- package/scaffold/.agents/skills/hitch-applets/references/email-tracking.md +49 -0
- package/scaffold/.agents/skills/hitch-applets/references/files.md +3 -3
- package/scaffold/.agents/skills/hitch-applets/references/manifest.md +29 -2
- package/scaffold/.agents/skills/hitch-applets/references/markdown.md +2 -0
- package/scaffold/.agents/skills/hitch-applets/references/performance.md +74 -0
- package/scaffold/.agents/skills/hitch-applets/references/records.md +32 -8
- package/scaffold/.agents/skills/hitch-applets/references/schedules.md +7 -2
- package/scaffold/.agents/skills/hitch-applets/references/server.md +0 -3
- package/scaffold/.agents/skills/hitch-applets/references/workflows.md +11 -3
- package/scaffold/.agents/skills/hitch-cli/SKILL.md +129 -0
- package/scaffold/.agents/skills/hitch-data/SKILL.md +52 -0
- package/scaffold/.agents/skills/hitch-data/references/attributes.md +127 -0
- package/scaffold/.agents/skills/hitch-data/references/limits.md +64 -0
- package/scaffold/.agents/skills/hitch-theory/SKILL.md +151 -0
- package/scaffold/.agents/skills/react-best-practices/SKILL.md +127 -0
- package/scaffold/.agents/skills/react-best-practices/rules/advanced-effect-event-deps.md +50 -0
- package/scaffold/.agents/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/scaffold/.agents/skills/react-best-practices/rules/advanced-init-once.md +42 -0
- package/scaffold/.agents/skills/react-best-practices/rules/advanced-use-latest.md +39 -0
- package/scaffold/.agents/skills/react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/scaffold/.agents/skills/react-best-practices/rules/async-defer-await.md +82 -0
- package/scaffold/.agents/skills/react-best-practices/rules/async-dependencies.md +48 -0
- package/scaffold/.agents/skills/react-best-practices/rules/async-parallel.md +24 -0
- package/scaffold/.agents/skills/react-best-practices/rules/bundle-analyzable-paths.md +42 -0
- package/scaffold/.agents/skills/react-best-practices/rules/bundle-barrel-imports.md +39 -0
- package/scaffold/.agents/skills/react-best-practices/rules/bundle-conditional.md +35 -0
- package/scaffold/.agents/skills/react-best-practices/rules/bundle-defer-third-party.md +46 -0
- package/scaffold/.agents/skills/react-best-practices/rules/bundle-dynamic-imports.md +38 -0
- package/scaffold/.agents/skills/react-best-practices/rules/bundle-preload.md +40 -0
- package/scaffold/.agents/skills/react-best-practices/rules/client-event-listeners.md +78 -0
- package/scaffold/.agents/skills/react-best-practices/rules/client-localstorage-schema.md +74 -0
- package/scaffold/.agents/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-batch-dom-css.md +110 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-cache-function-results.md +58 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-cache-storage.md +56 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-flatmap-filter.md +51 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-length-check-first.md +50 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-request-idle-callback.md +104 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/scaffold/.agents/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +38 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rendering-conditional-render.md +32 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rendering-hoist-jsx.md +36 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rendering-resource-hints.md +81 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rendering-script-defer-async.md +36 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rendering-usetransition-loading.md +43 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-functional-setstate.md +77 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-lazy-state-init.md +56 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-memo-with-default-value.md +36 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-no-inline-components.md +75 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/scaffold/.agents/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/scaffold/.agents/skills/tanstack-query/SKILL.md +136 -0
- package/scaffold/.agents/skills/tanstack-query/references/compositions/automatic-invalidation-after-mutations.md +124 -0
- package/scaffold/.agents/skills/tanstack-query/references/compositions/broadcast-realtime-and-multi-tab-synchronization.md +150 -0
- package/scaffold/.agents/skills/tanstack-query/references/compositions/compose-query-with-tanstack-router-and-start.md +248 -0
- package/scaffold/.agents/skills/tanstack-query/references/compositions/enforce-query-best-practices-with-eslint.md +167 -0
- package/scaffold/.agents/skills/tanstack-query/references/compositions/persist-offline-and-restore-caches.md +181 -0
- package/scaffold/.agents/skills/tanstack-query/references/compositions/query-data-and-forms.md +156 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/build-query-abstractions.md +130 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/cancel-queries-and-consume-abort-signals.md +176 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/concurrent-optimistic-updates.md +135 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/coordinate-query-execution.md +188 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/design-query-keys-and-options.md +182 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/fetch-and-observe-queries.md +193 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/implement-optimistic-updates-and-cache-writes.md +168 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/paginate-and-build-infinite-queries.md +188 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/seed-placeholder-select-and-transform-data.md +188 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/selectors-and-derived-state.md +145 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/tune-defaults-freshness-retries-and-refetching.md +172 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/understand-query-internals-and-observers.md +104 -0
- package/scaffold/.agents/skills/tanstack-query/references/core/write-mutations-and-invalidate-related-queries.md +183 -0
- package/scaffold/.agents/skills/tanstack-query/references/framework/debug-with-devtools.md +169 -0
- package/scaffold/.agents/skills/tanstack-query/references/framework/handle-status-and-errors.md +119 -0
- package/scaffold/.agents/skills/tanstack-query/references/framework/shape-data-and-render-efficiently.md +184 -0
- package/scaffold/.agents/skills/tanstack-query/references/framework/use-framework-adapter-reactivity.md +185 -0
- package/scaffold/.agents/skills/tanstack-query/references/framework/use-suspense-and-error-boundaries.md +208 -0
- package/scaffold/.agents/skills/tanstack-query/references/lifecycle/migrate-major-versions-and-codemods.md +169 -0
- package/scaffold/.agents/skills/tanstack-query/references/lifecycle/prefetch-and-remove-request-waterfalls.md +228 -0
- package/scaffold/.agents/skills/tanstack-query/references/lifecycle/setup-query-client-and-providers.md +161 -0
- package/scaffold/.agents/skills/tanstack-query/references/lifecycle/ssr-hydration-and-streaming.md +209 -0
- package/scaffold/.agents/skills/tanstack-query/references/lifecycle/test-query-code.md +160 -0
- package/scaffold/.agents/skills/tanstack-router/SKILL.md +134 -0
- package/scaffold/.agents/skills/tanstack-router/references/compositions/router-query.md +412 -0
- package/scaffold/.agents/skills/tanstack-router/references/react-router.md +495 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-core/auth-and-guards.md +495 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-core/code-splitting.md +318 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-core/data-loading.md +490 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-core/index.md +158 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-core/navigation.md +433 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-core/not-found-and-errors.md +436 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-core/path-params.md +383 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-core/search-params.md +343 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-core/ssr.md +462 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-core/type-safety.md +493 -0
- package/scaffold/.agents/skills/tanstack-router/references/router-plugin.md +250 -0
- package/scaffold/.agents/skills/tanstack-router/references/virtual-file-routes.md +215 -0
- package/scaffold/.agents/skills/web-design-guidelines/SKILL.md +184 -0
- package/scaffold/.github/workflows/hitch.yml +15 -0
- package/scaffold/AGENTS.md +2 -2
- package/scaffold/applet/src/client/components/ui/alert.tsx +1 -1
- package/scaffold/applet/src/client/components/ui/button.tsx +1 -1
- package/scaffold/applet/src/client/components/ui/checkbox.tsx +1 -1
- package/scaffold/applet/src/client/components/ui/dialog.tsx +2 -2
- package/scaffold/applet/src/client/components/ui/dropdown-menu.tsx +2 -2
- package/scaffold/applet/src/client/components/ui/input-group.tsx +2 -2
- package/scaffold/applet/src/client/components/ui/select.tsx +2 -2
- package/scaffold/applet/src/client/components/ui/sheet.tsx +2 -2
- package/scaffold/applet/src/client/components/ui/spinner.tsx +2 -1
- package/scaffold/applet/src/client/components/ui/tabs.tsx +1 -1
- package/scaffold/applet/src/client/lib/utils.ts +1 -6
- package/scaffold/applet/src/client/styles/globals.css +2 -0
- package/dist/build-CEku1lyb.js +0 -2
- package/dist/generate-6Nbt7uii.js +0 -2
- package/dist/load-config-BnxocLAQ.js +0 -56
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { r as prepareAppletProject } from "./project-
|
|
1
|
+
import { f as resolveInstanceUrl, l as organizationInstanceUrl, n as fetchWithOrgAuth } from "./workspace-D0dnnlxL.js";
|
|
2
|
+
import { i as loadGitHubActionsBuildInputs, n as githubActionsContext } from "./ci-BKw14X2h.js";
|
|
3
|
+
import { r as prepareAppletProject } from "./project-BRZGd6xq.js";
|
|
4
|
+
import { t as loadAppletConfig } from "./load-config-xEdTXs0y.js";
|
|
4
5
|
import { createRequire } from "node:module";
|
|
5
6
|
import { existsSync } from "node:fs";
|
|
6
7
|
import { access, mkdir, mkdtemp, readFile, readdir, rename, rm, writeFile } from "node:fs/promises";
|
|
@@ -54,7 +55,7 @@ export default createWorkerEntry(server, { code: ${JSON.stringify(appletCode)} }
|
|
|
54
55
|
}
|
|
55
56
|
//#endregion
|
|
56
57
|
//#region src/typegen/operations.ts
|
|
57
|
-
const RECORD_ROUTE = /^\/v1\/([^/]+)(?:\/(\{id\}
|
|
58
|
+
const RECORD_ROUTE = /^\/v1\/([^/]+)(?:\/(\{id\}(?:\/history)?|query|update|aggregate))?$/;
|
|
58
59
|
const COMPONENT_REF_PREFIX$1 = "#/components/schemas/";
|
|
59
60
|
const BATCH_PATH = "/v1/batch";
|
|
60
61
|
const BATCH_ITEM_PATH = "paths./v1/batch.post.requestBody.content.application/json.schema.properties.requests.items";
|
|
@@ -63,6 +64,7 @@ const VERBS = {
|
|
|
63
64
|
"get:": "list",
|
|
64
65
|
"post:": "create",
|
|
65
66
|
"get:{id}": "get",
|
|
67
|
+
"get:{id}/history": "history",
|
|
66
68
|
"patch:{id}": "update",
|
|
67
69
|
"delete:{id}": "delete",
|
|
68
70
|
"post:query": "query",
|
|
@@ -73,6 +75,7 @@ const COMPONENT_RESPONSE_STATUS = {
|
|
|
73
75
|
list: "200",
|
|
74
76
|
create: "201",
|
|
75
77
|
get: "200",
|
|
78
|
+
history: "200",
|
|
76
79
|
update: "200",
|
|
77
80
|
query: "200"
|
|
78
81
|
};
|
|
@@ -148,10 +151,13 @@ function prepareBatchOperation(operation, manifest) {
|
|
|
148
151
|
if (manifest === void 0) return true;
|
|
149
152
|
const object = manifest.objects.find(({ code }) => code === objectCode);
|
|
150
153
|
if (object === void 0) return false;
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
154
|
+
switch (verb) {
|
|
155
|
+
case "create": return object.canCreate;
|
|
156
|
+
case "delete": return object.canDelete;
|
|
157
|
+
case "update":
|
|
158
|
+
case "updateWhere": return object.readWrite.length > 0;
|
|
159
|
+
default: return true;
|
|
160
|
+
}
|
|
155
161
|
});
|
|
156
162
|
if (entries.length === 0) return void 0;
|
|
157
163
|
items.oneOf = entries;
|
|
@@ -165,7 +171,7 @@ function prepareRecordSpec(spec, manifest) {
|
|
|
165
171
|
const prepared = structuredClone(spec);
|
|
166
172
|
prepared.paths = Object.fromEntries(Object.entries(prepared.paths).flatMap(([path, pathItem]) => {
|
|
167
173
|
if (path === BATCH_PATH) {
|
|
168
|
-
if (!isObject$2(pathItem)
|
|
174
|
+
if (!isObject$2(pathItem)) return [];
|
|
169
175
|
const operation = prepareBatchOperation(pathItem.post, manifest);
|
|
170
176
|
return operation === void 0 ? [] : [[path, { post: operation }]];
|
|
171
177
|
}
|
|
@@ -193,6 +199,37 @@ function prepareRecordSpec(spec, manifest) {
|
|
|
193
199
|
});
|
|
194
200
|
return operations.length > 0 ? [[path, Object.fromEntries(operations)]] : [];
|
|
195
201
|
}));
|
|
202
|
+
manifest?.objects.forEach(({ code, optionalAttributes }) => {
|
|
203
|
+
if (optionalAttributes === void 0 || optionalAttributes.length === 0) return;
|
|
204
|
+
const responsePath = `/v1/${code}/{id}`;
|
|
205
|
+
const response = prepared.paths[responsePath]?.get?.responses;
|
|
206
|
+
const schema = isObject$2(response) && isObject$2(response["200"]) ? response["200"].content : void 0;
|
|
207
|
+
const mediaType = isObject$2(schema) && isObject$2(schema["application/json"]) ? schema["application/json"] : void 0;
|
|
208
|
+
const ref = isObject$2(mediaType) && isObject$2(mediaType.schema) ? mediaType.schema.$ref : void 0;
|
|
209
|
+
const recordPath = `paths.${responsePath}.get.responses.200.content.application/json.schema`;
|
|
210
|
+
if (typeof ref !== "string" || !ref.startsWith(COMPONENT_REF_PREFIX$1)) throw new Error(`object "${code}": ${recordPath} expected a component schema $ref, found ${describeValue$1(mediaType)}`);
|
|
211
|
+
const componentName = ref.slice(21);
|
|
212
|
+
const components = isObject$2(prepared.components) ? prepared.components : void 0;
|
|
213
|
+
const record = (isObject$2(components?.schemas) ? components.schemas : void 0)?.[componentName];
|
|
214
|
+
const componentPath = `components.schemas.${componentName}`;
|
|
215
|
+
if (!isObject$2(record) || !isObject$2(record.properties)) throw new Error(`object "${code}": ${componentPath}.properties expected an object, found ${describeValue$1(isObject$2(record) ? record.properties : record)}`);
|
|
216
|
+
const properties = record.properties;
|
|
217
|
+
optionalAttributes.forEach((attributeCode) => {
|
|
218
|
+
const property = properties[attributeCode];
|
|
219
|
+
const propertyPath = `${componentPath}.properties.${attributeCode}`;
|
|
220
|
+
if (!isObject$2(property)) throw new Error(`object "${code}": ${propertyPath} expected an object, found ${describeValue$1(property)}`);
|
|
221
|
+
const types = Array.isArray(property.type) ? property.type : [property.type];
|
|
222
|
+
properties[attributeCode] = property.type !== void 0 ? {
|
|
223
|
+
...property,
|
|
224
|
+
type: types.includes("null") ? types : [...types, "null"],
|
|
225
|
+
...Array.isArray(property.enum) && !property.enum.includes(null) ? { enum: [...property.enum, null] } : {}
|
|
226
|
+
} : Array.isArray(property.oneOf) ? {
|
|
227
|
+
...property,
|
|
228
|
+
oneOf: [...property.oneOf, { type: "null" }]
|
|
229
|
+
} : Array.isArray(property.anyOf) && property.anyOf.some((item) => isObject$2(item) && item.type === "null") ? property : { anyOf: [property, { type: "null" }] };
|
|
230
|
+
});
|
|
231
|
+
if (Array.isArray(record.required)) record.required = record.required.filter((name) => !optionalAttributes.includes(name));
|
|
232
|
+
});
|
|
196
233
|
return prepared;
|
|
197
234
|
}
|
|
198
235
|
function describeValue$1(value, expectedRef = false) {
|
|
@@ -273,7 +310,7 @@ ${Object.entries(catalog).map(([objectCode, attributeCodes]) => ` ${JSON.string
|
|
|
273
310
|
};`;
|
|
274
311
|
return `// Generated by @hitch42/applet — do not edit.
|
|
275
312
|
import type manifest from "./manifest.gen.ts";
|
|
276
|
-
${options.hasServer ? "import type server from \"../src/server/main.ts\";\nimport type * as serverModule from \"../src/server/main.ts\";\n" : ""}${options.hasClient ? "import type { Route as indexRoute } from \"../src/client/routes/index.tsx\";\n" : ""}${options.hasServer ? "import type { AnyRouter } from \"@orpc/server\";\n" : ""}${options.hasClient ? "import type { AnyRoute } from \"@tanstack/react-router\";\n" : ""}${options.hasServer ? "import type { WorkflowDefinition } from \"@hitch42/applet/server\";\n" : ""}
|
|
313
|
+
${options.hasServer ? "import type server from \"../src/server/main.ts\";\nimport type * as serverModule from \"../src/server/main.ts\";\n" : ""}${options.hasClient ? "import type { Route as indexRoute } from \"../src/client/routes/index.tsx\";\n" : ""}${options.hasServer ? "import type { AnyRouter } from \"@orpc/server\";\n" : ""}${options.hasClient ? "import type { AnyRoute } from \"@tanstack/react-router\";\n" : ""}${options.hasServer ? "import type { WorkflowDefinition } from \"@hitch42/applet/server\";\nimport type { TelephonyMessageReceivedEvent } from \"@hitch42/applet\";\n" : ""}
|
|
277
314
|
${catalogType}
|
|
278
315
|
|
|
279
316
|
type Expect<T extends true> = T;
|
|
@@ -286,6 +323,7 @@ type _SrcServerMainMustDefaultExportRouterAndValidWorkflows = Expect<
|
|
|
286
323
|
typeof server extends {
|
|
287
324
|
router: AnyRouter;
|
|
288
325
|
workflows?: Record<string, WorkflowDefinition<any, any>>;
|
|
326
|
+
telephony?: { onMessageReceived?: (event: TelephonyMessageReceivedEvent) => void | Promise<void> };
|
|
289
327
|
}
|
|
290
328
|
? true
|
|
291
329
|
: false
|
|
@@ -351,19 +389,33 @@ async function responseJson(response) {
|
|
|
351
389
|
throw new Error("Failed to parse the organization's OpenAPI spec.", { cause: error });
|
|
352
390
|
}
|
|
353
391
|
}
|
|
354
|
-
async function loadAuthenticatedSpec(
|
|
355
|
-
const
|
|
356
|
-
|
|
392
|
+
async function loadAuthenticatedSpec(manifest) {
|
|
393
|
+
const github = githubActionsContext();
|
|
394
|
+
if (github !== void 0) return (await loadGitHubActionsBuildInputs(github, manifest.requiresChangeset)).openapi;
|
|
395
|
+
const response = await fetchWithOrgAuth(manifest.org, (instanceUrl, accessToken) => globalThis.fetch(`${instanceUrl}/api/v1/openapi.json${manifest.requiresChangeset === void 0 ? "" : `?changeset_id=${encodeURIComponent(manifest.requiresChangeset)}`}`, { headers: { Authorization: `Bearer ${accessToken}` } }));
|
|
357
396
|
if (!response.ok) throw new Error(`Failed to load the organization's OpenAPI spec (${response.status}).`);
|
|
358
397
|
return responseJson(response);
|
|
359
398
|
}
|
|
360
|
-
async function loadThemeStylesheet(orgCode
|
|
361
|
-
const
|
|
362
|
-
const
|
|
363
|
-
const response = await fetcher(`${organizationInstanceUrl(instanceUrl, orgCode)}/theme.css`);
|
|
399
|
+
async function loadThemeStylesheet(orgCode) {
|
|
400
|
+
const instanceUrl = await resolveInstanceUrl();
|
|
401
|
+
const response = await globalThis.fetch(`${organizationInstanceUrl(instanceUrl, orgCode)}/theme.css`);
|
|
364
402
|
if (!response.ok) throw new Error(`Failed to load the organization's theme (${response.status}).`);
|
|
365
403
|
return response.text();
|
|
366
404
|
}
|
|
405
|
+
async function loadBuildInputs(manifest) {
|
|
406
|
+
const github = githubActionsContext();
|
|
407
|
+
if (github !== void 0) {
|
|
408
|
+
const inputs = await loadGitHubActionsBuildInputs(github, manifest.requiresChangeset);
|
|
409
|
+
return {
|
|
410
|
+
spec: inputs.openapi,
|
|
411
|
+
theme: inputs.theme
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
return {
|
|
415
|
+
spec: await loadAuthenticatedSpec(manifest),
|
|
416
|
+
theme: await loadThemeStylesheet(manifest.org)
|
|
417
|
+
};
|
|
418
|
+
}
|
|
367
419
|
async function generateContract(spec, outDir) {
|
|
368
420
|
await mkdir(outDir, { recursive: true });
|
|
369
421
|
const paths = spec !== null && typeof spec === "object" && "paths" in spec ? spec.paths : void 0;
|
|
@@ -403,16 +455,16 @@ async function writeContractFiles(outDir, manifest, spec) {
|
|
|
403
455
|
await writeManifestGen(outDir, manifest);
|
|
404
456
|
await writeRegisterDeclaration(outDir, catalog);
|
|
405
457
|
await writeFile(resolve(outDir, "index.ts"), `// Generated by applet generate — do not edit.
|
|
406
|
-
import { filesContract as files, meContract as me, pruneContract, registerHitchContract, teamsContract as teams } from "@hitch42/applet";
|
|
458
|
+
import { emailContract, filesContract as files, meContract as me, pruneContract, registerHitchContract, teamsContract as teams, telephonyContract as telephony } from "@hitch42/applet";
|
|
407
459
|
import manifest from "./manifest.gen.ts";
|
|
408
460
|
|
|
409
461
|
${Object.hasOwn(preparedSpec.paths, "/v1/batch") ? `import { contract as generated } from "./orpc.gen.ts";
|
|
410
462
|
|
|
411
463
|
const { batch, ...records } = generated;
|
|
412
464
|
|
|
413
|
-
export const contract = { records, batch, files, me, teams } as const;` : `import { contract as records } from "./orpc.gen.ts";
|
|
465
|
+
export const contract = { records, batch, email: emailContract(manifest.code), files, me, teams, telephony } as const;` : `import { contract as records } from "./orpc.gen.ts";
|
|
414
466
|
|
|
415
|
-
export const contract = { records, files, me, teams } as const;`}
|
|
467
|
+
export const contract = { records, email: emailContract(manifest.code), files, me, teams, telephony } as const;`}
|
|
416
468
|
registerHitchContract(pruneContract(contract, manifest));
|
|
417
469
|
|
|
418
470
|
declare module "@hitch42/applet" {
|
|
@@ -424,16 +476,18 @@ declare module "@hitch42/applet" {
|
|
|
424
476
|
export type * from "./zod.gen.ts";
|
|
425
477
|
`);
|
|
426
478
|
}
|
|
427
|
-
async function syncContract(outDir, manifest
|
|
428
|
-
await writeContractFiles(outDir, manifest,
|
|
479
|
+
async function syncContract(outDir, manifest) {
|
|
480
|
+
await writeContractFiles(outDir, manifest, manifest.objects.length === 0 ? {
|
|
481
|
+
paths: {},
|
|
482
|
+
components: { schemas: {} }
|
|
483
|
+
} : await loadAuthenticatedSpec(manifest));
|
|
429
484
|
}
|
|
430
|
-
async function runGenerate(
|
|
485
|
+
async function runGenerate() {
|
|
431
486
|
await prepareAppletProject();
|
|
432
487
|
const root = process.cwd();
|
|
433
488
|
const outDir = resolve("./.hitch");
|
|
434
489
|
const manifest = await loadAppletConfig(process.cwd());
|
|
435
|
-
const spec = await
|
|
436
|
-
const themeStylesheet = await loadThemeStylesheet(manifest.org, options);
|
|
490
|
+
const { spec, theme: themeStylesheet } = await loadBuildInputs(manifest);
|
|
437
491
|
const stagedDir = await mkdtemp(resolve("./.hitch.tmp-"));
|
|
438
492
|
const backupDir = `${stagedDir}.backup`;
|
|
439
493
|
let staged = true;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/headers.ts
|
|
2
|
+
const HITCH_USER_HEADER = "x-hitch-user";
|
|
3
|
+
const HITCH_SESSION_HEADER = "x-hitch-session";
|
|
4
|
+
const HITCH_APPLET_HEADER = "x-hitch-applet";
|
|
5
|
+
const HITCH_APPLET_CODE_HEADER = "x-hitch-applet-code";
|
|
6
|
+
const HITCH_APPLET_TOKEN_HEADER = "x-hitch-applet-token";
|
|
7
|
+
const HITCH_SCHEDULE_RUN_HEADER = "x-hitch-schedule-run";
|
|
8
|
+
const HITCH_SCHEDULE_HEADER = "x-hitch-schedule";
|
|
9
|
+
const HITCH_ORG_CODE_HEADER = "x-hitch-org-code";
|
|
10
|
+
const HITCH_ORGANIZATION_HEADER = "x-hitch-organization";
|
|
11
|
+
const HITCH_RELEASE_HEADER = "x-hitch-release";
|
|
12
|
+
const HITCH_REQUEST_HOST_HEADER = "x-hitch-request-host";
|
|
13
|
+
const HITCH_WORKFLOW_RUN_HEADER = "x-hitch-workflow-run";
|
|
14
|
+
const HITCH_WORKFLOW_HEADER = "x-hitch-workflow";
|
|
15
|
+
const HITCH_WORKFLOW_INVOCATION_HEADER = "x-hitch-workflow-invocation";
|
|
16
|
+
//#endregion
|
|
17
|
+
export { HITCH_ORG_CODE_HEADER as a, HITCH_SCHEDULE_HEADER as c, HITCH_USER_HEADER as d, HITCH_WORKFLOW_HEADER as f, HITCH_ORGANIZATION_HEADER as i, HITCH_SCHEDULE_RUN_HEADER as l, HITCH_WORKFLOW_RUN_HEADER as m, HITCH_APPLET_HEADER as n, HITCH_RELEASE_HEADER as o, HITCH_WORKFLOW_INVOCATION_HEADER as p, HITCH_APPLET_TOKEN_HEADER as r, HITCH_REQUEST_HOST_HEADER as s, HITCH_APPLET_CODE_HEADER as t, HITCH_SESSION_HEADER as u };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { _ as RegisteredWorkflows, a as AppletSourceDefinition, c as appletManifestSchema, d as RegisteredCatalog, f as RegisteredContract, g as RegisteredVariables, h as RegisteredVariableKeys, i as AppletPackages, l as appletSourceDefinitionSchema, m as RegisteredRouter, n as AppletManifest, o as RegisteredAppletSourceDefinition, p as RegisteredManifest, r as AppletManifestObject, s as appletDefinitionSchema, t as AppletDefinition, u as HitchRegister, v as registerHitchContract } from "./manifest-
|
|
2
|
-
import { n as pruneContract, t as NarrowContract } from "./contract-
|
|
3
|
-
import { a as UploadedHitchFile, c as createFileOutputSchema, d as getFileOutputSchema, i as UploadProgress, l as fileSchema, n as FilesUpload, r as UploadFileOptions, s as uploadFile, t as FilesClient, u as filesContract } from "./upload-
|
|
1
|
+
import { _ as RegisteredWorkflows, a as AppletSourceDefinition, c as appletManifestSchema, d as RegisteredCatalog, f as RegisteredContract, g as RegisteredVariables, h as RegisteredVariableKeys, i as AppletPackages, l as appletSourceDefinitionSchema, m as RegisteredRouter, n as AppletManifest, o as RegisteredAppletSourceDefinition, p as RegisteredManifest, r as AppletManifestObject, s as appletDefinitionSchema, t as AppletDefinition, u as HitchRegister, v as registerHitchContract } from "./manifest-C6_F4bL8.js";
|
|
2
|
+
import { n as pruneContract, t as NarrowContract } from "./contract-CsUpTBe0.js";
|
|
3
|
+
import { a as UploadedHitchFile, c as createFileOutputSchema, d as getFileOutputSchema, i as UploadProgress, l as fileSchema, n as FilesUpload, r as UploadFileOptions, s as uploadFile, t as FilesClient, u as filesContract } from "./upload-DKZzz5kW.js";
|
|
4
|
+
import { a as createEmailPixelOutputSchema, c as emailTagsSchema, d as listEmailTrackersInputSchema, f as listEmailTrackersOutputSchema, i as createEmailPixelInputSchema, l as emailTrackerSchema, m as markEmailTrackerSentInputSchema, n as EmailTracker, o as emailContract, r as ListEmailTrackersOutput, s as emailTagKeySchema, t as TelephonyMessageReceivedEvent, u as getEmailTrackerInputSchema } from "./telephony-protocol-D-nf3Gca.js";
|
|
4
5
|
import { ContractProcedure, Meta } from "@orpc/contract";
|
|
5
6
|
import { z } from "zod";
|
|
6
|
-
//#region src/workspace.d.
|
|
7
|
+
//#region ../shared/auth/src/workspace.d.mts
|
|
7
8
|
interface HitchConfig {
|
|
8
9
|
sdk: string;
|
|
9
10
|
org: string;
|
|
11
|
+
githubWorkflow?: boolean;
|
|
10
12
|
}
|
|
11
13
|
//#endregion
|
|
12
14
|
//#region src/hitch/me.d.ts
|
|
@@ -33,12 +35,122 @@ type HitchMe = {
|
|
|
33
35
|
} | null;
|
|
34
36
|
multiOrg: boolean;
|
|
35
37
|
};
|
|
36
|
-
declare const meSchema: z.ZodType<HitchMe>;
|
|
38
|
+
declare const meSchema: z.ZodType<HitchMe, HitchMe>;
|
|
37
39
|
type MeContract = {
|
|
38
|
-
get: ContractProcedure<z.ZodType<void>, z.ZodType<HitchMe>, Record<never, never>, Meta>;
|
|
40
|
+
get: ContractProcedure<z.ZodType<void, void>, z.ZodType<HitchMe, HitchMe>, Record<never, never>, Meta>;
|
|
39
41
|
};
|
|
40
42
|
declare const meContract: MeContract;
|
|
41
43
|
//#endregion
|
|
44
|
+
//#region src/hitch/telephony.d.ts
|
|
45
|
+
type HitchPhoneNumber = {
|
|
46
|
+
id: string;
|
|
47
|
+
e164: string;
|
|
48
|
+
label: string;
|
|
49
|
+
enabled: boolean;
|
|
50
|
+
assignedTo: string | null;
|
|
51
|
+
canRead: boolean;
|
|
52
|
+
canSend: boolean;
|
|
53
|
+
canCall: boolean;
|
|
54
|
+
voiceEnabled: boolean;
|
|
55
|
+
};
|
|
56
|
+
type HitchCall = {
|
|
57
|
+
id: string;
|
|
58
|
+
numberId: string;
|
|
59
|
+
direction: "inbound" | "outbound";
|
|
60
|
+
status: "starting" | "ringing" | "active" | "ended" | "missed" | "failed";
|
|
61
|
+
from: string;
|
|
62
|
+
to: string;
|
|
63
|
+
userId: string | null;
|
|
64
|
+
answeredAt: string | null;
|
|
65
|
+
endedAt: string | null;
|
|
66
|
+
durationSeconds: number | null;
|
|
67
|
+
voicemailSeconds: number | null;
|
|
68
|
+
hangupCause: string | null;
|
|
69
|
+
record: boolean;
|
|
70
|
+
hasRecording: boolean;
|
|
71
|
+
transcriptStatus: "pending" | "done" | "failed" | null;
|
|
72
|
+
transcript: {
|
|
73
|
+
segments: {
|
|
74
|
+
side: "member" | "customer";
|
|
75
|
+
speaker: number;
|
|
76
|
+
start: number;
|
|
77
|
+
end: number;
|
|
78
|
+
text: string;
|
|
79
|
+
}[];
|
|
80
|
+
} | null;
|
|
81
|
+
createdAt: string;
|
|
82
|
+
};
|
|
83
|
+
type ListHitchCallsInput = ListHitchMessagesInput & {
|
|
84
|
+
status?: HitchCall["status"];
|
|
85
|
+
};
|
|
86
|
+
type HitchMessage = {
|
|
87
|
+
id: string;
|
|
88
|
+
numberId: string;
|
|
89
|
+
direction: "inbound" | "outbound";
|
|
90
|
+
status: "pending" | "unknown" | "accepted" | "sent" | "delivered" | "unconfirmed" | "failed" | "received";
|
|
91
|
+
from: string;
|
|
92
|
+
to: string;
|
|
93
|
+
body: string | null;
|
|
94
|
+
redacted: boolean;
|
|
95
|
+
userId: string | null;
|
|
96
|
+
appletId: string | null;
|
|
97
|
+
requestId: string | null;
|
|
98
|
+
errorCode: string | null;
|
|
99
|
+
errorDetail: string | null;
|
|
100
|
+
statusAt: string | null;
|
|
101
|
+
createdAt: string;
|
|
102
|
+
};
|
|
103
|
+
type ListHitchMessagesInput = {
|
|
104
|
+
numberId?: string;
|
|
105
|
+
userId?: string;
|
|
106
|
+
direction?: "inbound" | "outbound";
|
|
107
|
+
since?: string;
|
|
108
|
+
until?: string;
|
|
109
|
+
cursor?: string;
|
|
110
|
+
limit?: number;
|
|
111
|
+
};
|
|
112
|
+
type SendHitchMessageInput = {
|
|
113
|
+
numberId: string;
|
|
114
|
+
to: string;
|
|
115
|
+
body: string;
|
|
116
|
+
requestId?: string;
|
|
117
|
+
};
|
|
118
|
+
type MessageIdInput = {
|
|
119
|
+
id: string;
|
|
120
|
+
};
|
|
121
|
+
type NumbersOutput = {
|
|
122
|
+
data: HitchPhoneNumber[];
|
|
123
|
+
};
|
|
124
|
+
type MessagesOutput = {
|
|
125
|
+
data: HitchMessage[];
|
|
126
|
+
nextCursor: string | null;
|
|
127
|
+
};
|
|
128
|
+
type CallsOutput = {
|
|
129
|
+
data: HitchCall[];
|
|
130
|
+
nextCursor: string | null;
|
|
131
|
+
};
|
|
132
|
+
declare const hitchPhoneNumberSchema: z.ZodType<HitchPhoneNumber, HitchPhoneNumber>;
|
|
133
|
+
declare const hitchMessageSchema: z.ZodType<HitchMessage, HitchMessage>;
|
|
134
|
+
declare const listHitchNumbersOutputSchema: z.ZodType<NumbersOutput, NumbersOutput>;
|
|
135
|
+
declare const listHitchMessagesOutputSchema: z.ZodType<MessagesOutput, MessagesOutput>;
|
|
136
|
+
declare const listHitchMessagesInputSchema: z.ZodType<ListHitchMessagesInput, ListHitchMessagesInput>;
|
|
137
|
+
declare const sendHitchMessageInputSchema: z.ZodType<SendHitchMessageInput, SendHitchMessageInput>;
|
|
138
|
+
type TelephonyContract = {
|
|
139
|
+
calls: {
|
|
140
|
+
get: ContractProcedure<z.ZodType<MessageIdInput, MessageIdInput>, z.ZodType<HitchCall, HitchCall>, Record<never, never>, Meta>;
|
|
141
|
+
list: ContractProcedure<z.ZodType<ListHitchCallsInput, ListHitchCallsInput>, z.ZodType<CallsOutput, CallsOutput>, Record<never, never>, Meta>;
|
|
142
|
+
};
|
|
143
|
+
numbers: {
|
|
144
|
+
list: ContractProcedure<z.ZodType<void, void>, z.ZodType<NumbersOutput, NumbersOutput>, Record<never, never>, Meta>;
|
|
145
|
+
};
|
|
146
|
+
messages: {
|
|
147
|
+
get: ContractProcedure<z.ZodType<MessageIdInput, MessageIdInput>, z.ZodType<HitchMessage, HitchMessage>, Record<never, never>, Meta>;
|
|
148
|
+
list: ContractProcedure<z.ZodType<ListHitchMessagesInput, ListHitchMessagesInput>, z.ZodType<MessagesOutput, MessagesOutput>, Record<never, never>, Meta>;
|
|
149
|
+
send: ContractProcedure<z.ZodType<SendHitchMessageInput, SendHitchMessageInput>, z.ZodType<HitchMessage, HitchMessage>, Record<never, never>, Meta>;
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
declare const telephonyContract: TelephonyContract;
|
|
153
|
+
//#endregion
|
|
42
154
|
//#region src/hitch/teams.d.ts
|
|
43
155
|
type HitchTeam = {
|
|
44
156
|
id: string;
|
|
@@ -61,14 +173,14 @@ type TeamsOutput = {
|
|
|
61
173
|
type TeamMembersOutput = {
|
|
62
174
|
data: HitchTeamMember[];
|
|
63
175
|
};
|
|
64
|
-
declare const teamSchema: z.ZodType<HitchTeam>;
|
|
65
|
-
declare const teamMemberSchema: z.ZodType<HitchTeamMember>;
|
|
176
|
+
declare const teamSchema: z.ZodType<HitchTeam, HitchTeam>;
|
|
177
|
+
declare const teamMemberSchema: z.ZodType<HitchTeamMember, HitchTeamMember>;
|
|
66
178
|
type TeamsContract = {
|
|
67
|
-
list: ContractProcedure<z.ZodType<void>, z.ZodType<TeamsOutput>, Record<never, never>, Meta>;
|
|
179
|
+
list: ContractProcedure<z.ZodType<void, void>, z.ZodType<TeamsOutput, TeamsOutput>, Record<never, never>, Meta>;
|
|
68
180
|
members: {
|
|
69
|
-
list: ContractProcedure<z.ZodType<TeamIdInput>, z.ZodType<TeamMembersOutput>, Record<never, never>, Meta>;
|
|
181
|
+
list: ContractProcedure<z.ZodType<TeamIdInput, TeamIdInput>, z.ZodType<TeamMembersOutput, TeamMembersOutput>, Record<never, never>, Meta>;
|
|
70
182
|
};
|
|
71
183
|
};
|
|
72
184
|
declare const teamsContract: TeamsContract;
|
|
73
185
|
//#endregion
|
|
74
|
-
export { type AppletDefinition, type AppletManifest, type AppletManifestObject, type AppletPackages, type AppletSourceDefinition, type FilesClient, type FilesUpload, type HitchConfig, type HitchMe, type HitchRegister, type HitchTeam, type HitchTeamMember, type NarrowContract, type RegisteredAppletSourceDefinition, type RegisteredCatalog, type RegisteredContract, type RegisteredManifest, type RegisteredRouter, type RegisteredVariableKeys, type RegisteredVariables, type RegisteredWorkflows, type UploadFileOptions, type UploadProgress, type UploadedHitchFile, appletDefinitionSchema, appletManifestSchema, appletSourceDefinitionSchema, createFileOutputSchema, fileSchema, filesContract, getFileOutputSchema, meContract, meSchema, pruneContract, registerHitchContract, teamMemberSchema, teamSchema, teamsContract, uploadFile };
|
|
186
|
+
export { type AppletDefinition, type AppletManifest, type AppletManifestObject, type AppletPackages, type AppletSourceDefinition, type EmailTracker, type FilesClient, type FilesUpload, type HitchConfig, type HitchMe, type HitchMessage, type HitchPhoneNumber, type HitchRegister, type HitchTeam, type HitchTeamMember, type ListEmailTrackersOutput, type ListHitchMessagesInput, type NarrowContract, type RegisteredAppletSourceDefinition, type RegisteredCatalog, type RegisteredContract, type RegisteredManifest, type RegisteredRouter, type RegisteredVariableKeys, type RegisteredVariables, type RegisteredWorkflows, type SendHitchMessageInput, type TelephonyContract, type TelephonyMessageReceivedEvent, type UploadFileOptions, type UploadProgress, type UploadedHitchFile, appletDefinitionSchema, appletManifestSchema, appletSourceDefinitionSchema, createEmailPixelInputSchema, createEmailPixelOutputSchema, createFileOutputSchema, emailContract, emailTagKeySchema, emailTagsSchema, emailTrackerSchema, fileSchema, filesContract, getEmailTrackerInputSchema, getFileOutputSchema, hitchMessageSchema, hitchPhoneNumberSchema, listEmailTrackersInputSchema, listEmailTrackersOutputSchema, listHitchMessagesInputSchema, listHitchMessagesOutputSchema, listHitchNumbersOutputSchema, markEmailTrackerSentInputSchema, meContract, meSchema, pruneContract, registerHitchContract, sendHitchMessageInputSchema, teamMemberSchema, teamSchema, teamsContract, telephonyContract, uploadFile };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { i as registerHitchContract, t as uploadFile } from "./upload-DRbVhuDm.js";
|
|
2
|
-
import { n as
|
|
2
|
+
import { a as emailTagsSchema, c as listEmailTrackersInputSchema, d as markEmailTrackerSentInputSchema, i as emailTagKeySchema, l as listEmailTrackersOutputSchema, n as createEmailPixelOutputSchema, o as emailTrackerSchema, r as emailContract, s as getEmailTrackerInputSchema, t as createEmailPixelInputSchema } from "./email-DBTVhNB_.js";
|
|
3
|
+
import { n as meSchema, t as meContract } from "./me-BW7Paary.js";
|
|
4
|
+
import { n as appletManifestSchema, r as appletSourceDefinitionSchema, t as appletDefinitionSchema } from "./manifest-CJSL9GuC.js";
|
|
3
5
|
import { oc } from "@orpc/contract";
|
|
4
6
|
import { z } from "zod";
|
|
5
7
|
//#region src/hitch/contract.ts
|
|
@@ -78,34 +80,148 @@ const filesContract = {
|
|
|
78
80
|
}).input(fileIdInputSchema).output(getFileOutputSchema)
|
|
79
81
|
};
|
|
80
82
|
//#endregion
|
|
81
|
-
//#region src/hitch/
|
|
82
|
-
const
|
|
83
|
+
//#region src/hitch/telephony.ts
|
|
84
|
+
const hitchPhoneNumberSchema = z.object({
|
|
83
85
|
id: z.uuid(),
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
e164: z.string(),
|
|
87
|
+
label: z.string(),
|
|
88
|
+
enabled: z.boolean(),
|
|
89
|
+
assignedTo: z.uuid().nullable(),
|
|
90
|
+
canRead: z.boolean(),
|
|
91
|
+
canSend: z.boolean(),
|
|
92
|
+
canCall: z.boolean(),
|
|
93
|
+
voiceEnabled: z.boolean()
|
|
94
|
+
});
|
|
95
|
+
const hitchCallSchema = z.object({
|
|
96
|
+
id: z.uuid(),
|
|
97
|
+
numberId: z.uuid(),
|
|
98
|
+
direction: z.enum(["inbound", "outbound"]),
|
|
99
|
+
status: z.enum([
|
|
100
|
+
"starting",
|
|
101
|
+
"ringing",
|
|
102
|
+
"active",
|
|
103
|
+
"ended",
|
|
104
|
+
"missed",
|
|
105
|
+
"failed"
|
|
106
|
+
]),
|
|
107
|
+
from: z.string(),
|
|
108
|
+
to: z.string(),
|
|
109
|
+
userId: z.uuid().nullable(),
|
|
110
|
+
answeredAt: z.string().nullable(),
|
|
111
|
+
endedAt: z.string().nullable(),
|
|
112
|
+
durationSeconds: z.number().nullable(),
|
|
113
|
+
voicemailSeconds: z.number().nullable(),
|
|
114
|
+
hangupCause: z.string().nullable(),
|
|
115
|
+
record: z.boolean(),
|
|
116
|
+
hasRecording: z.boolean(),
|
|
117
|
+
transcriptStatus: z.enum([
|
|
118
|
+
"pending",
|
|
119
|
+
"done",
|
|
120
|
+
"failed"
|
|
121
|
+
]).nullable(),
|
|
122
|
+
transcript: z.object({ segments: z.array(z.object({
|
|
123
|
+
side: z.enum(["member", "customer"]),
|
|
124
|
+
speaker: z.number(),
|
|
125
|
+
start: z.number(),
|
|
126
|
+
end: z.number(),
|
|
127
|
+
text: z.string()
|
|
128
|
+
})) }).nullable(),
|
|
129
|
+
createdAt: z.string()
|
|
130
|
+
});
|
|
131
|
+
const hitchMessageSchema = z.object({
|
|
132
|
+
id: z.uuid(),
|
|
133
|
+
numberId: z.uuid(),
|
|
134
|
+
direction: z.enum(["inbound", "outbound"]),
|
|
135
|
+
status: z.enum([
|
|
136
|
+
"pending",
|
|
137
|
+
"unknown",
|
|
138
|
+
"accepted",
|
|
139
|
+
"sent",
|
|
140
|
+
"delivered",
|
|
141
|
+
"unconfirmed",
|
|
142
|
+
"failed",
|
|
143
|
+
"received"
|
|
144
|
+
]),
|
|
145
|
+
from: z.string(),
|
|
146
|
+
to: z.string(),
|
|
147
|
+
body: z.string().nullable(),
|
|
148
|
+
redacted: z.boolean(),
|
|
149
|
+
userId: z.uuid().nullable(),
|
|
150
|
+
appletId: z.uuid().nullable(),
|
|
151
|
+
requestId: z.string().nullable(),
|
|
152
|
+
errorCode: z.string().nullable(),
|
|
153
|
+
errorDetail: z.string().nullable(),
|
|
154
|
+
statusAt: z.string().nullable(),
|
|
155
|
+
createdAt: z.string()
|
|
156
|
+
});
|
|
157
|
+
const listHitchNumbersOutputSchema = z.object({ data: z.array(hitchPhoneNumberSchema) });
|
|
158
|
+
const listHitchMessagesOutputSchema = z.object({
|
|
159
|
+
data: z.array(hitchMessageSchema),
|
|
160
|
+
nextCursor: z.string().nullable()
|
|
161
|
+
});
|
|
162
|
+
const listHitchCallsOutputSchema = z.object({
|
|
163
|
+
data: z.array(hitchCallSchema),
|
|
164
|
+
nextCursor: z.string().nullable()
|
|
87
165
|
});
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
166
|
+
const idInputSchema = z.object({ id: z.uuid() });
|
|
167
|
+
const listInputFields = {
|
|
168
|
+
numberId: z.uuid().optional(),
|
|
169
|
+
userId: z.uuid().optional(),
|
|
170
|
+
direction: z.enum(["inbound", "outbound"]).optional(),
|
|
171
|
+
since: z.iso.datetime().optional(),
|
|
172
|
+
until: z.iso.datetime().optional(),
|
|
173
|
+
cursor: z.string().optional(),
|
|
174
|
+
limit: z.number().int().min(1).max(200).optional()
|
|
175
|
+
};
|
|
176
|
+
const listHitchMessagesInputSchema = z.object(listInputFields);
|
|
177
|
+
const listHitchCallsInputSchema = z.object({
|
|
178
|
+
...listInputFields,
|
|
179
|
+
status: z.enum([
|
|
180
|
+
"starting",
|
|
181
|
+
"ringing",
|
|
182
|
+
"active",
|
|
183
|
+
"ended",
|
|
184
|
+
"missed",
|
|
185
|
+
"failed"
|
|
186
|
+
]).optional()
|
|
95
187
|
});
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
code: z.string()
|
|
102
|
-
}).nullable(),
|
|
103
|
-
multiOrg: z.boolean()
|
|
188
|
+
const sendHitchMessageInputSchema = z.object({
|
|
189
|
+
numberId: z.uuid(),
|
|
190
|
+
to: z.string(),
|
|
191
|
+
body: z.string().min(1).max(1600),
|
|
192
|
+
requestId: z.string().min(1).max(200).optional()
|
|
104
193
|
});
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
194
|
+
const telephonyContract = {
|
|
195
|
+
calls: {
|
|
196
|
+
get: oc.route({
|
|
197
|
+
method: "GET",
|
|
198
|
+
path: "/v1/telephony/calls/{id}"
|
|
199
|
+
}).input(idInputSchema).output(hitchCallSchema),
|
|
200
|
+
list: oc.route({
|
|
201
|
+
method: "GET",
|
|
202
|
+
path: "/v1/telephony/calls"
|
|
203
|
+
}).input(listHitchCallsInputSchema).output(listHitchCallsOutputSchema)
|
|
204
|
+
},
|
|
205
|
+
numbers: { list: oc.route({
|
|
206
|
+
method: "GET",
|
|
207
|
+
path: "/v1/telephony/numbers"
|
|
208
|
+
}).input(z.void()).output(listHitchNumbersOutputSchema) },
|
|
209
|
+
messages: {
|
|
210
|
+
get: oc.route({
|
|
211
|
+
method: "GET",
|
|
212
|
+
path: "/v1/telephony/messages/{id}"
|
|
213
|
+
}).input(idInputSchema).output(hitchMessageSchema),
|
|
214
|
+
list: oc.route({
|
|
215
|
+
method: "GET",
|
|
216
|
+
path: "/v1/telephony/messages"
|
|
217
|
+
}).input(listHitchMessagesInputSchema).output(listHitchMessagesOutputSchema),
|
|
218
|
+
send: oc.route({
|
|
219
|
+
method: "POST",
|
|
220
|
+
path: "/v1/telephony/messages",
|
|
221
|
+
successStatus: 201
|
|
222
|
+
}).input(sendHitchMessageInputSchema).output(hitchMessageSchema)
|
|
223
|
+
}
|
|
224
|
+
};
|
|
109
225
|
//#endregion
|
|
110
226
|
//#region src/hitch/teams.ts
|
|
111
227
|
const teamSchema = z.object({
|
|
@@ -133,4 +249,4 @@ const teamsContract = {
|
|
|
133
249
|
}).input(teamIdInputSchema).output(teamMembersOutputSchema) }
|
|
134
250
|
};
|
|
135
251
|
//#endregion
|
|
136
|
-
export { appletDefinitionSchema, appletManifestSchema, appletSourceDefinitionSchema, createFileOutputSchema, fileSchema, filesContract, getFileOutputSchema, meContract, meSchema, pruneContract, registerHitchContract, teamMemberSchema, teamSchema, teamsContract, uploadFile };
|
|
252
|
+
export { appletDefinitionSchema, appletManifestSchema, appletSourceDefinitionSchema, createEmailPixelInputSchema, createEmailPixelOutputSchema, createFileOutputSchema, emailContract, emailTagKeySchema, emailTagsSchema, emailTrackerSchema, fileSchema, filesContract, getEmailTrackerInputSchema, getFileOutputSchema, hitchMessageSchema, hitchPhoneNumberSchema, listEmailTrackersInputSchema, listEmailTrackersOutputSchema, listHitchMessagesInputSchema, listHitchMessagesOutputSchema, listHitchNumbersOutputSchema, markEmailTrackerSentInputSchema, meContract, meSchema, pruneContract, registerHitchContract, sendHitchMessageInputSchema, teamMemberSchema, teamSchema, teamsContract, telephonyContract, uploadFile };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as ORG_CODE_PATTERN, i as APPLET_CODE_PATTERN } from "./manifest-
|
|
2
|
-
import {
|
|
3
|
-
import { n as runGenerate } from "./generate-
|
|
4
|
-
import { n as
|
|
5
|
-
import {
|
|
1
|
+
import { a as ORG_CODE_PATTERN, i as APPLET_CODE_PATTERN } from "./manifest-CJSL9GuC.js";
|
|
2
|
+
import { d as resolveAuthForOrg, f as resolveInstanceUrl, i as readWorkspaceConfig } from "./workspace-D0dnnlxL.js";
|
|
3
|
+
import { n as runGenerate } from "./generate-BEIYs17x.js";
|
|
4
|
+
import { a as writeAppletSupport, n as loadCliManifest, o as writeWorkspaceSupport, t as assertWorkspaceCli } from "./project-BRZGd6xq.js";
|
|
5
|
+
import { n as loadAppletSourceDefinition } from "./load-config-xEdTXs0y.js";
|
|
6
6
|
import { access, cp, mkdir, readdir, writeFile } from "node:fs/promises";
|
|
7
7
|
import { relative, resolve } from "node:path";
|
|
8
8
|
import { spawn } from "node:child_process";
|
|
@@ -23,8 +23,11 @@ async function assertTargetIsAvailable(paths, targetType) {
|
|
|
23
23
|
if (existingPath !== void 0) throw new Error(`Refusing to initialize ${targetType}: ${existingPath} already exists.`);
|
|
24
24
|
}
|
|
25
25
|
async function assertDirectoryIsEmpty(path) {
|
|
26
|
-
const
|
|
27
|
-
if (
|
|
26
|
+
const entries = await readdir(path);
|
|
27
|
+
if (entries.length > 0) {
|
|
28
|
+
const [entry] = entries;
|
|
29
|
+
throw new Error(`Refusing to initialize a workspace: ${path} is not empty (${entry} exists).`);
|
|
30
|
+
}
|
|
28
31
|
}
|
|
29
32
|
async function installDependencies(target, install) {
|
|
30
33
|
if (!install) return "skipped";
|
|
@@ -33,7 +36,8 @@ async function installDependencies(target, install) {
|
|
|
33
36
|
let finished = false;
|
|
34
37
|
const child = spawn("pnpm", ["install"], {
|
|
35
38
|
cwd: target,
|
|
36
|
-
stdio: "inherit"
|
|
39
|
+
stdio: "inherit",
|
|
40
|
+
shell: process.platform === "win32"
|
|
37
41
|
});
|
|
38
42
|
child.once("error", (error) => {
|
|
39
43
|
finished = true;
|
|
@@ -91,22 +95,17 @@ async function runGit(cwd, args) {
|
|
|
91
95
|
});
|
|
92
96
|
});
|
|
93
97
|
}
|
|
94
|
-
async function generateAppletFiles(target, org,
|
|
98
|
+
async function generateAppletFiles(target, org, installResult) {
|
|
95
99
|
if (installResult === "failed") return false;
|
|
96
100
|
const previousCwd = process.cwd();
|
|
97
101
|
try {
|
|
98
|
-
const instanceUrl = await resolveInstanceUrl(
|
|
99
|
-
if (await resolveAuthForOrg(instanceUrl, org
|
|
102
|
+
const instanceUrl = await resolveInstanceUrl();
|
|
103
|
+
if (await resolveAuthForOrg(instanceUrl, org) === void 0) {
|
|
100
104
|
console.log("Not logged in. Run applet generate to pull the organization's generated files; it will prompt a login.");
|
|
101
105
|
return false;
|
|
102
106
|
}
|
|
103
107
|
process.chdir(target);
|
|
104
|
-
await runGenerate(
|
|
105
|
-
fetch: options.fetch,
|
|
106
|
-
login: options.login,
|
|
107
|
-
stdinIsTTY: options.stdinIsTTY,
|
|
108
|
-
store: options.store
|
|
109
|
-
});
|
|
108
|
+
await runGenerate();
|
|
110
109
|
return true;
|
|
111
110
|
} catch (error) {
|
|
112
111
|
console.warn(`Generation skipped: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -227,7 +226,7 @@ export default { router };
|
|
|
227
226
|
]);
|
|
228
227
|
await Promise.all([writeAppletSupport(appletTarget, definition), cli === void 0 ? void 0 : writeWorkspaceSupport(workspaceRoot, config, cli)]);
|
|
229
228
|
const installResult = await installDependencies(workspaceRoot, options.install ?? true);
|
|
230
|
-
const generateSucceeded = await generateAppletFiles(appletTarget, config.org,
|
|
229
|
+
const generateSucceeded = await generateAppletFiles(appletTarget, config.org, installResult);
|
|
231
230
|
const relativeTarget = relative(workspaceRoot, appletTarget);
|
|
232
231
|
const nextSteps = [
|
|
233
232
|
...installResult === "succeeded" ? [`cd ${JSON.stringify(relativeTarget)}`] : ["pnpm install", `cd ${JSON.stringify(relativeTarget)}`],
|