@hitch42/applet 0.1.1-beta.7 → 0.1.1-beta.9
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 +22 -11
- package/dist/build-Bh_S5BUv.js +2 -0
- package/dist/{build-DauirTcY.js → build-CEfFoIZZ.js} +1 -1
- package/dist/{ci-gPrwo6C0.js → ci-BKw14X2h.js} +14 -13
- package/dist/client.d.ts +3 -3
- package/dist/{contract-DB9QQhD9.d.ts → contract-CsUpTBe0.d.ts} +1 -1
- package/dist/{deploy-CqrtNJ1x.js → deploy-wGYjwXrx.js} +139 -88
- package/dist/email-DBTVhNB_.js +62 -0
- package/dist/{generate-BIifT6PK.js → generate-BEIYs17x.js} +70 -32
- package/dist/generate-Dox-OYt6.js +2 -0
- package/dist/headers-DkNr9MLJ.js +17 -0
- package/dist/index.d.ts +122 -10
- package/dist/index.js +142 -26
- package/dist/{init-Wu6XmyVc.js → init-6oGPM46R.js} +15 -17
- package/dist/{load-config-BknBkdRs.js → load-config-xEdTXs0y.js} +2 -2
- package/dist/log-context-zu8U9Sjm.js +73 -0
- package/dist/{login-iT9MRuaw.js → login-CUx3TmFQ.js} +1 -1
- package/dist/{logs-B-qZGXSK.js → logs-DSjuEN0Q.js} +20 -22
- package/dist/{manifest-C489nYUy.d.ts → manifest-C6_F4bL8.d.ts} +7 -0
- package/dist/{manifest-Bd04cWhu.js → manifest-CJSL9GuC.js} +22 -3
- package/dist/me-BW7Paary.js +32 -0
- package/dist/{project-C_rtpjp8.js → project-BRZGd6xq.js} +202 -20
- 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-DcwMeIau.js → variables-DT5RyHdH.js} +14 -39
- package/dist/vite.d.ts +3 -60
- package/dist/vite.js +497 -27
- package/dist/workflow-engine-BOTzURKM.js +111 -0
- package/dist/{workspace-B6lenAS5.js → workspace-D0dnnlxL.js} +37 -39
- package/package.json +18 -5
- package/scaffold/.agents/skills/hitch-applets/SKILL.md +50 -18
- 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 +12 -2
- package/scaffold/.agents/skills/hitch-applets/references/markdown.md +2 -0
- package/scaffold/.agents/skills/hitch-applets/references/performance.md +1 -1
- package/scaffold/.agents/skills/hitch-applets/references/records.md +27 -4
- 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 +20 -20
- package/scaffold/.agents/skills/hitch-data/SKILL.md +3 -2
- package/scaffold/.agents/skills/hitch-data/references/attributes.md +7 -1
- package/scaffold/.agents/skills/hitch-data/references/limits.md +23 -23
- 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 +1 -1
- 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-DhNDp7ji.js +0 -2
- package/dist/generate-DSk8ihsC.js +0 -2
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
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";
|
|
@@ -92,22 +95,17 @@ async function runGit(cwd, args) {
|
|
|
92
95
|
});
|
|
93
96
|
});
|
|
94
97
|
}
|
|
95
|
-
async function generateAppletFiles(target, org,
|
|
98
|
+
async function generateAppletFiles(target, org, installResult) {
|
|
96
99
|
if (installResult === "failed") return false;
|
|
97
100
|
const previousCwd = process.cwd();
|
|
98
101
|
try {
|
|
99
|
-
const instanceUrl = await resolveInstanceUrl(
|
|
100
|
-
if (await resolveAuthForOrg(instanceUrl, org
|
|
102
|
+
const instanceUrl = await resolveInstanceUrl();
|
|
103
|
+
if (await resolveAuthForOrg(instanceUrl, org) === void 0) {
|
|
101
104
|
console.log("Not logged in. Run applet generate to pull the organization's generated files; it will prompt a login.");
|
|
102
105
|
return false;
|
|
103
106
|
}
|
|
104
107
|
process.chdir(target);
|
|
105
|
-
await runGenerate(
|
|
106
|
-
fetch: options.fetch,
|
|
107
|
-
login: options.login,
|
|
108
|
-
stdinIsTTY: options.stdinIsTTY,
|
|
109
|
-
store: options.store
|
|
110
|
-
});
|
|
108
|
+
await runGenerate();
|
|
111
109
|
return true;
|
|
112
110
|
} catch (error) {
|
|
113
111
|
console.warn(`Generation skipped: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -228,7 +226,7 @@ export default { router };
|
|
|
228
226
|
]);
|
|
229
227
|
await Promise.all([writeAppletSupport(appletTarget, definition), cli === void 0 ? void 0 : writeWorkspaceSupport(workspaceRoot, config, cli)]);
|
|
230
228
|
const installResult = await installDependencies(workspaceRoot, options.install ?? true);
|
|
231
|
-
const generateSucceeded = await generateAppletFiles(appletTarget, config.org,
|
|
229
|
+
const generateSucceeded = await generateAppletFiles(appletTarget, config.org, installResult);
|
|
232
230
|
const relativeTarget = relative(workspaceRoot, appletTarget);
|
|
233
231
|
const nextSteps = [
|
|
234
232
|
...installResult === "succeeded" ? [`cd ${JSON.stringify(relativeTarget)}`] : ["pnpm install", `cd ${JSON.stringify(relativeTarget)}`],
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as appletSourceDefinitionSchema } from "./manifest-
|
|
2
|
-
import { t as resolveWorkspaceOrg } from "./workspace-
|
|
1
|
+
import { r as appletSourceDefinitionSchema } from "./manifest-CJSL9GuC.js";
|
|
2
|
+
import { t as resolveWorkspaceOrg } from "./workspace-D0dnnlxL.js";
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
import { loadConfigFromFile } from "vite";
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { channel } from "node:diagnostics_channel";
|
|
2
|
+
//#region src/server/log-context.ts
|
|
3
|
+
const REQUEST_CONTEXT_CHANNEL = "hitch.request.context";
|
|
4
|
+
const APP_CONTEXT_CHANNEL = "hitch.request.app";
|
|
5
|
+
const isUuid = (value) => typeof value === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value);
|
|
6
|
+
function requestIdFrom(headers) {
|
|
7
|
+
const requestId = headers.get("x-request-id");
|
|
8
|
+
return isUuid(requestId) ? requestId : crypto.randomUUID();
|
|
9
|
+
}
|
|
10
|
+
function publishNote(requestId, fields, channelName = REQUEST_CONTEXT_CHANNEL) {
|
|
11
|
+
const note = Object.fromEntries(Object.entries(fields).filter(([, value]) => value !== void 0));
|
|
12
|
+
if (Object.keys(note).length === 0) return;
|
|
13
|
+
const serialized = JSON.stringify({
|
|
14
|
+
requestId,
|
|
15
|
+
...note
|
|
16
|
+
});
|
|
17
|
+
channel(channelName).publish(serialized.length > 16384 ? {
|
|
18
|
+
requestId,
|
|
19
|
+
noteDropped: true,
|
|
20
|
+
noteBytes: serialized.length,
|
|
21
|
+
noteKeys: Object.keys(note)
|
|
22
|
+
} : {
|
|
23
|
+
requestId,
|
|
24
|
+
...note
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function errorNote(error) {
|
|
28
|
+
return { error: error instanceof Error ? {
|
|
29
|
+
name: error.name,
|
|
30
|
+
message: error.message,
|
|
31
|
+
stack: error.stack?.slice(0, 8192),
|
|
32
|
+
...error.cause instanceof Error && { cause: {
|
|
33
|
+
name: error.cause.name,
|
|
34
|
+
message: error.cause.message
|
|
35
|
+
} }
|
|
36
|
+
} : {
|
|
37
|
+
name: "Error",
|
|
38
|
+
message: String(error)
|
|
39
|
+
} };
|
|
40
|
+
}
|
|
41
|
+
function cloudflareRequestFields(request) {
|
|
42
|
+
const cf = Reflect.get(request, "cf");
|
|
43
|
+
const field = (key) => typeof cf === "object" && cf !== null && key in cf ? Reflect.get(cf, key) : void 0;
|
|
44
|
+
const colo = field("colo");
|
|
45
|
+
const country = field("country");
|
|
46
|
+
const asn = field("asn");
|
|
47
|
+
return {
|
|
48
|
+
cfRay: request.headers.get("cf-ray") ?? void 0,
|
|
49
|
+
traceparent: request.headers.get("traceparent") ?? void 0,
|
|
50
|
+
colo: typeof colo === "string" ? colo : void 0,
|
|
51
|
+
country: typeof country === "string" ? country : void 0,
|
|
52
|
+
asn: typeof asn === "number" ? asn : void 0
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function createNoteLog(initial) {
|
|
56
|
+
const context = { ...initial };
|
|
57
|
+
const log = {
|
|
58
|
+
set(fields) {
|
|
59
|
+
Object.assign(context, fields);
|
|
60
|
+
publishNote(initial.requestId, fields);
|
|
61
|
+
},
|
|
62
|
+
error(error) {
|
|
63
|
+
log.set(errorNote(error));
|
|
64
|
+
},
|
|
65
|
+
getContext() {
|
|
66
|
+
return { ...context };
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
publishNote(initial.requestId, initial);
|
|
70
|
+
return log;
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export { errorNote as a, requestIdFrom as c, createNoteLog as i, REQUEST_CONTEXT_CHANNEL as n, isUuid as o, cloudflareRequestFields as r, publishNote as s, APP_CONTEXT_CHANNEL as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as loginWithDevice,
|
|
1
|
+
import { a as loginWithDevice, f as resolveInstanceUrl, o as AuthenticationError, r as findWorkspaceConfig } from "./workspace-D0dnnlxL.js";
|
|
2
2
|
//#region src/login.ts
|
|
3
3
|
async function runLogin(options) {
|
|
4
4
|
if (process.env.HITCH_API_KEY !== void 0) throw new AuthenticationError("HITCH_API_KEY is set — unset it to manage stored logins.");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { i as APPLET_CODE_PATTERN } from "./manifest-
|
|
2
|
-
import { i as readWorkspaceConfig, n as fetchWithOrgAuth, t as resolveWorkspaceOrg } from "./workspace-
|
|
3
|
-
import { t as loadAppletConfig } from "./load-config-
|
|
1
|
+
import { i as APPLET_CODE_PATTERN } from "./manifest-CJSL9GuC.js";
|
|
2
|
+
import { i as readWorkspaceConfig, n as fetchWithOrgAuth, t as resolveWorkspaceOrg } from "./workspace-D0dnnlxL.js";
|
|
3
|
+
import { t as loadAppletConfig } from "./load-config-xEdTXs0y.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
//#region src/logs.ts
|
|
6
6
|
const LOG_LEVELS = [
|
|
@@ -19,6 +19,16 @@ const logSchema = z.object({
|
|
|
19
19
|
timestamp: z.number(),
|
|
20
20
|
level: z.string(),
|
|
21
21
|
message: z.string(),
|
|
22
|
+
context: z.record(z.string(), z.unknown()).optional(),
|
|
23
|
+
error: z.object({
|
|
24
|
+
name: z.string(),
|
|
25
|
+
message: z.string(),
|
|
26
|
+
stack: z.string().optional(),
|
|
27
|
+
cause: z.object({
|
|
28
|
+
name: z.string(),
|
|
29
|
+
message: z.string()
|
|
30
|
+
}).optional()
|
|
31
|
+
}).optional(),
|
|
22
32
|
releaseId: z.string(),
|
|
23
33
|
type: z.string().optional(),
|
|
24
34
|
runId: z.string().optional(),
|
|
@@ -93,20 +103,6 @@ async function readErrorDetails(response) {
|
|
|
93
103
|
}
|
|
94
104
|
return "";
|
|
95
105
|
}
|
|
96
|
-
function waitForPoll(signal) {
|
|
97
|
-
if (signal?.aborted === true) return Promise.resolve(false);
|
|
98
|
-
return new Promise((resolve) => {
|
|
99
|
-
const timeout = setTimeout(() => {
|
|
100
|
-
signal?.removeEventListener("abort", onAbort);
|
|
101
|
-
resolve(true);
|
|
102
|
-
}, POLL_INTERVAL_MS);
|
|
103
|
-
const onAbort = () => {
|
|
104
|
-
clearTimeout(timeout);
|
|
105
|
-
resolve(false);
|
|
106
|
-
};
|
|
107
|
-
signal?.addEventListener("abort", onAbort, { once: true });
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
106
|
function printLog(log) {
|
|
111
107
|
const details = log.type === "invocation" ? [
|
|
112
108
|
log.statusCode === void 0 ? void 0 : `status=${log.statusCode}`,
|
|
@@ -114,7 +110,9 @@ function printLog(log) {
|
|
|
114
110
|
log.wallTimeMs === void 0 ? void 0 : `wall=${log.wallTimeMs}ms`,
|
|
115
111
|
log.cpuTimeMs === void 0 ? void 0 : `cpu=${log.cpuTimeMs}ms`
|
|
116
112
|
].filter((value) => value !== void 0) : [];
|
|
117
|
-
console.log(`${new Date(log.timestamp).toISOString()} ${log.level.toUpperCase().padEnd(5)} ${log.type === "workflow" ? `[${log.workflow} ${log.runId?.slice(0, 8)}#${log.invocation}] ` : ""}${log.message}${details.length === 0 ? "" : ` [${details.join(" ")}]`}`);
|
|
113
|
+
console.log(`${new Date(log.timestamp).toISOString()} ${log.level.toUpperCase().padEnd(5)} ${log.type === "workflow" ? `[${log.workflow} ${log.runId?.slice(0, 8)}#${log.invocation}] ` : ""}${log.message}${details.length === 0 ? "" : ` [${details.join(" ")}]`}${log.context === void 0 ? "" : ` ${JSON.stringify(log.context)}`}`);
|
|
114
|
+
if (log.error) console.log(log.error.stack ?? `${log.error.name}: ${log.error.message}`);
|
|
115
|
+
if (log.error?.cause) console.log(`Caused by ${log.error.cause.name}: ${log.error.cause.message}`);
|
|
118
116
|
}
|
|
119
117
|
async function runLogs(options) {
|
|
120
118
|
const [{ code, org }, since, limit, level, userFilter, search] = await Promise.all([
|
|
@@ -127,13 +125,12 @@ async function runLogs(options) {
|
|
|
127
125
|
]);
|
|
128
126
|
const runFilter = options.run === void 0 ? void 0 : { runId: { $eq: options.run } };
|
|
129
127
|
const filter = runFilter === void 0 ? userFilter : userFilter === void 0 ? runFilter : { $and: [runFilter, userFilter] };
|
|
130
|
-
const fetcher = options.fetch ?? globalThis.fetch;
|
|
131
128
|
const startedAt = Date.now();
|
|
132
129
|
const requestLogs = async (from, to) => {
|
|
133
|
-
const response = await fetchWithOrgAuth(org,
|
|
130
|
+
const response = await fetchWithOrgAuth(org, (instanceUrl, accessToken) => {
|
|
134
131
|
const url = new URL(`/api/v1/applets/${encodeURIComponent(code)}/logs/query`, `${instanceUrl}/`);
|
|
135
132
|
const levelFilter = level === void 0 ? void 0 : { level: { $in: LOG_LEVELS.slice(LOG_LEVELS.indexOf(level)) } };
|
|
136
|
-
return
|
|
133
|
+
return fetch(url, {
|
|
137
134
|
method: "POST",
|
|
138
135
|
headers: {
|
|
139
136
|
Authorization: `Bearer ${accessToken}`,
|
|
@@ -172,7 +169,8 @@ async function runLogs(options) {
|
|
|
172
169
|
return;
|
|
173
170
|
}
|
|
174
171
|
let lastTimestamp = initialLogs.at(-1)?.timestamp ?? startedAt;
|
|
175
|
-
|
|
172
|
+
for (;;) {
|
|
173
|
+
await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
|
|
176
174
|
const to = Date.now();
|
|
177
175
|
const logs = await requestLogs(Math.max(startedAt - since, lastTimestamp - LIVE_OVERLAP_MS), to);
|
|
178
176
|
printNewLogs(logs);
|
|
@@ -34,6 +34,11 @@ interface AppletManifest {
|
|
|
34
34
|
code: string;
|
|
35
35
|
/** This code needs the schema as of this changeset. */
|
|
36
36
|
requiresChangeset?: string;
|
|
37
|
+
telephony?: {
|
|
38
|
+
read?: boolean;
|
|
39
|
+
send?: boolean;
|
|
40
|
+
events?: readonly "message.received"[];
|
|
41
|
+
};
|
|
37
42
|
schedules?: readonly {
|
|
38
43
|
code: string;
|
|
39
44
|
name: string;
|
|
@@ -50,6 +55,8 @@ interface AppletManifest {
|
|
|
50
55
|
canDelete: boolean;
|
|
51
56
|
readOnly: readonly string[];
|
|
52
57
|
readWrite: readonly string[];
|
|
58
|
+
optional?: boolean;
|
|
59
|
+
optionalAttributes?: readonly string[];
|
|
53
60
|
}[];
|
|
54
61
|
}
|
|
55
62
|
type AppletDefinition = Omit<AppletManifest, "org">;
|