@voobase/cli 0.1.1-nonprod.2039 → 0.1.1-nonprod.2050

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.
Files changed (109) hide show
  1. package/dist-bundle/index.mjs +69 -61
  2. package/package.json +9 -6
  3. package/runtime-sdk/dist/auth/client.d.ts +14 -0
  4. package/runtime-sdk/dist/auth/client.js +28 -0
  5. package/runtime-sdk/dist/blob/client.d.ts +39 -0
  6. package/runtime-sdk/dist/blob/client.js +148 -0
  7. package/runtime-sdk/dist/blob/client.test.d.ts +1 -0
  8. package/runtime-sdk/dist/blob/client.test.js +494 -0
  9. package/runtime-sdk/dist/browser/app.d.ts +142 -0
  10. package/runtime-sdk/dist/browser/app.js +256 -0
  11. package/runtime-sdk/dist/browser/app.test.d.ts +1 -0
  12. package/runtime-sdk/dist/browser/app.test.js +81 -0
  13. package/runtime-sdk/dist/browser/errors.d.ts +39 -0
  14. package/runtime-sdk/dist/browser/errors.js +265 -0
  15. package/runtime-sdk/dist/browser/errors.test.d.ts +1 -0
  16. package/runtime-sdk/dist/browser/errors.test.js +41 -0
  17. package/runtime-sdk/dist/browser.d.ts +5 -0
  18. package/runtime-sdk/dist/browser.js +5 -0
  19. package/runtime-sdk/dist/client.d.ts +16 -0
  20. package/runtime-sdk/dist/client.js +22 -0
  21. package/runtime-sdk/dist/cms/client.d.ts +39 -0
  22. package/runtime-sdk/dist/cms/client.js +56 -0
  23. package/runtime-sdk/dist/cms/client.test.d.ts +1 -0
  24. package/runtime-sdk/dist/cms/client.test.js +56 -0
  25. package/runtime-sdk/dist/cms/media.d.ts +10 -0
  26. package/runtime-sdk/dist/cms/media.js +113 -0
  27. package/runtime-sdk/dist/cms/media.test.d.ts +1 -0
  28. package/runtime-sdk/dist/cms/media.test.js +76 -0
  29. package/runtime-sdk/dist/cms/taxonomy.d.ts +8 -0
  30. package/runtime-sdk/dist/cms/taxonomy.js +77 -0
  31. package/runtime-sdk/dist/cms/taxonomy.test.d.ts +1 -0
  32. package/runtime-sdk/dist/cms/taxonomy.test.js +65 -0
  33. package/runtime-sdk/dist/data-form/client.d.ts +19 -0
  34. package/runtime-sdk/dist/data-form/client.js +118 -0
  35. package/runtime-sdk/dist/data-form/client.test.d.ts +1 -0
  36. package/runtime-sdk/dist/data-form/client.test.js +210 -0
  37. package/runtime-sdk/dist/data-form/contracts.d.ts +10 -0
  38. package/runtime-sdk/dist/data-form/contracts.js +33 -0
  39. package/runtime-sdk/dist/data-form/index.d.ts +3 -0
  40. package/runtime-sdk/dist/data-form/index.js +2 -0
  41. package/runtime-sdk/dist/data-form/types.d.ts +110 -0
  42. package/runtime-sdk/dist/data-form/types.js +1 -0
  43. package/runtime-sdk/dist/http.d.ts +27 -0
  44. package/runtime-sdk/dist/http.js +126 -0
  45. package/runtime-sdk/dist/index.d.ts +19 -0
  46. package/runtime-sdk/dist/index.js +14 -0
  47. package/runtime-sdk/dist/notification/client.d.ts +16 -0
  48. package/runtime-sdk/dist/notification/client.js +39 -0
  49. package/runtime-sdk/dist/notification/index.d.ts +1 -0
  50. package/runtime-sdk/dist/notification/index.js +1 -0
  51. package/runtime-sdk/dist/react/context.d.ts +18 -0
  52. package/runtime-sdk/dist/react/context.js +28 -0
  53. package/runtime-sdk/dist/react/hooks.d.ts +90 -0
  54. package/runtime-sdk/dist/react/hooks.js +172 -0
  55. package/runtime-sdk/dist/react.d.ts +2 -0
  56. package/runtime-sdk/dist/react.js +2 -0
  57. package/runtime-sdk/dist/session/browser.d.ts +25 -0
  58. package/runtime-sdk/dist/session/browser.js +60 -0
  59. package/runtime-sdk/dist/types/auth.d.ts +38 -0
  60. package/runtime-sdk/dist/types/auth.js +1 -0
  61. package/runtime-sdk/dist/types/cms.d.ts +93 -0
  62. package/runtime-sdk/dist/types/cms.js +1 -0
  63. package/runtime-sdk/dist/types/notification.d.ts +37 -0
  64. package/runtime-sdk/dist/types/notification.js +1 -0
  65. package/runtime-sdk/dist/types/object-storage.d.ts +58 -0
  66. package/runtime-sdk/dist/types/object-storage.js +1 -0
  67. package/runtime-sdk/dist/types/workflow.d.ts +52 -0
  68. package/runtime-sdk/dist/types/workflow.js +1 -0
  69. package/runtime-sdk/dist/workflow/client.d.ts +30 -0
  70. package/runtime-sdk/dist/workflow/client.js +45 -0
  71. package/scaffold-assets-manifest.json +429 -0
  72. package/template-blocks/assets.ts +95 -0
  73. package/template-blocks/contract/capabilities.ts +33 -0
  74. package/template-blocks/contract/facade-contract.ts +59 -0
  75. package/template-blocks/contract/index.ts +4 -0
  76. package/template-blocks/contract/path-builders.ts +76 -0
  77. package/template-blocks/contract/route-path-patterns-source.ts +222 -0
  78. package/template-blocks/contract/route-path-patterns.ts +210 -0
  79. package/template-blocks/contract/runtime-config.ts +256 -0
  80. package/template-blocks/dev-support/index.ts +2 -0
  81. package/template-blocks/dev-support/node/auth-shell.ts +31 -0
  82. package/template-blocks/dev-support/node/index.ts +3 -0
  83. package/template-blocks/dev-support/node/proxy.ts +133 -0
  84. package/template-blocks/dev-support/node/runtime-config.ts +163 -0
  85. package/template-blocks/dev-support/vite/auth-shell.ts +23 -0
  86. package/template-blocks/dev-support/vite/index.ts +3 -0
  87. package/template-blocks/dev-support/vite/proxy.ts +451 -0
  88. package/template-blocks/dev-support/vite/runtime-config.ts +107 -0
  89. package/template-blocks/legacy/app-core.ts +153 -0
  90. package/template-blocks/legacy/index.ts +10 -0
  91. package/template-blocks/legacy/lifecycle.ts +38 -0
  92. package/template-blocks/legacy/metadata.ts +59 -0
  93. package/template-blocks/legacy/pages.ts +156 -0
  94. package/template-blocks/legacy/react-lock.ts +1599 -0
  95. package/template-blocks/legacy/react.ts +823 -0
  96. package/template-blocks/legacy/tailwind.ts +1138 -0
  97. package/template-blocks/legacy/wrappers/auth.ts +105 -0
  98. package/template-blocks/legacy/wrappers/proxy.ts +250 -0
  99. package/template-blocks/legacy/wrappers/runtime.ts +535 -0
  100. package/template-blocks/protocol/auth-routes.ts +82 -0
  101. package/template-blocks/protocol/cms-routes.ts +81 -0
  102. package/template-blocks/protocol/index.ts +4 -0
  103. package/template-blocks/protocol/public-app-routes.ts +48 -0
  104. package/template-blocks/protocol/route-map.ts +75 -0
  105. package/template-blocks/routing.ts +62 -0
  106. package/template-blocks/server/html-injection.ts +45 -0
  107. package/template-blocks/server/proxy-routing.ts +65 -0
  108. package/template-blocks/server/request-context.ts +103 -0
  109. package/template-blocks/server/route-strip.ts +47 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voobase/cli",
3
- "version": "0.1.1-nonprod.2039",
3
+ "version": "0.1.1-nonprod.2050",
4
4
  "private": false,
5
5
  "platformDistributionProfile": {
6
6
  "name": "nonprod",
@@ -20,6 +20,9 @@
20
20
  "bin": {
21
21
  "platform": "dist-bundle/index.mjs"
22
22
  },
23
+ "engines": {
24
+ "node": ">=20.0.0"
25
+ },
23
26
  "scripts": {
24
27
  "dev": "tsx watch src/index.ts --help",
25
28
  "build": "corepack pnpm --filter @platform/sdk build && corepack pnpm --filter @platform/capability-auth build && corepack pnpm --filter @platform/capability-cms build && corepack pnpm --filter @platform/capability-data-form build && tsc -p tsconfig.json",
@@ -53,10 +56,10 @@
53
56
  "bundleDependencies": [],
54
57
  "platformDistributionBuild": {
55
58
  "channel": "nonprod",
56
- "version": "0.1.1-nonprod.2039",
57
- "sequence": 2039,
58
- "gitSha": "e5d1c1f",
59
- "fullGitSha": "e5d1c1f21da6f231f3c7d42fe227ae44b4b16ca1",
60
- "buildId": "0.1.1-nonprod.2039+e5d1c1f"
59
+ "version": "0.1.1-nonprod.2050",
60
+ "sequence": 2050,
61
+ "gitSha": "d865074",
62
+ "fullGitSha": "d865074bb73db991855af0e2f8f722e88db00655",
63
+ "buildId": "0.1.1-nonprod.2050+d865074"
61
64
  }
62
65
  }
@@ -0,0 +1,14 @@
1
+ import { BaseRuntimeSdk, type RuntimeSdkOptions } from "../http.js";
2
+ import type { RuntimeEndUserAuthMe, RuntimeEndUserRoleRecord } from "../types/auth.js";
3
+ export declare class RuntimeAuthClient extends BaseRuntimeSdk {
4
+ constructor(options: RuntimeSdkOptions);
5
+ getCurrentEndUser(): Promise<RuntimeEndUserAuthMe>;
6
+ getCurrentEndUserRoles(): Promise<RuntimeEndUserRoleRecord[]>;
7
+ isSignedIn(): Promise<boolean>;
8
+ getMe(): Promise<RuntimeEndUserAuthMe>;
9
+ listMyRoles(): Promise<RuntimeEndUserRoleRecord[]>;
10
+ signOut(): Promise<{
11
+ app_id: string;
12
+ signed_out: true;
13
+ }>;
14
+ }
@@ -0,0 +1,28 @@
1
+ import { BaseRuntimeSdk } from "../http.js";
2
+ export class RuntimeAuthClient extends BaseRuntimeSdk {
3
+ constructor(options) {
4
+ super(options);
5
+ }
6
+ async getCurrentEndUser() {
7
+ return this.requestApp("/end-user-auth/me");
8
+ }
9
+ async getCurrentEndUserRoles() {
10
+ const result = await this.requestApp("/end-user-auth/roles");
11
+ return result.items;
12
+ }
13
+ async isSignedIn() {
14
+ const me = await this.getCurrentEndUser();
15
+ return me.access_state === "authenticated_and_ready";
16
+ }
17
+ async getMe() {
18
+ return this.getCurrentEndUser();
19
+ }
20
+ async listMyRoles() {
21
+ return this.getCurrentEndUserRoles();
22
+ }
23
+ async signOut() {
24
+ return this.requestApp("/end-user-auth/sign-out", {
25
+ method: "POST"
26
+ });
27
+ }
28
+ }
@@ -0,0 +1,39 @@
1
+ import { BaseRuntimeSdk, type RuntimeSdkOptions } from "../http.js";
2
+ import type { RuntimeBlobHydrateResponse, RuntimeBlobUploadSession, RuntimeCompleteBlobUploadInput, RuntimeCompleteBlobUploadResult, RuntimeCreateBlobUploadSessionInput, RuntimeHydrateBlobRefsInput, RuntimeHydrateRecordBlobsInput } from "../types/object-storage.js";
3
+ export type RuntimeBlobBinaryBody = Blob | ArrayBuffer | ArrayBufferView;
4
+ export declare class RuntimeBlobClient extends BaseRuntimeSdk {
5
+ private cachedUploadTicket;
6
+ constructor(options: RuntimeSdkOptions);
7
+ createUploadSession(input: RuntimeCreateBlobUploadSessionInput): Promise<RuntimeBlobUploadSession>;
8
+ uploadBinary(args: {
9
+ uploadUrl: string;
10
+ body: RuntimeBlobBinaryBody;
11
+ contentType: string;
12
+ headers?: Record<string, string>;
13
+ }): Promise<void>;
14
+ completeUpload(uploadSessionId: string, input?: RuntimeCompleteBlobUploadInput): Promise<RuntimeCompleteBlobUploadResult>;
15
+ upload(args: RuntimeCreateBlobUploadSessionInput & {
16
+ body: RuntimeBlobBinaryBody;
17
+ sha256?: string;
18
+ }): Promise<RuntimeCompleteBlobUploadResult>;
19
+ uploadFile(file: Blob & {
20
+ name?: string;
21
+ }, args?: Omit<RuntimeCreateBlobUploadSessionInput, "original_filename" | "content_type" | "size_bytes"> & {
22
+ original_filename?: string;
23
+ content_type?: string;
24
+ sha256?: string;
25
+ }): Promise<RuntimeCompleteBlobUploadResult>;
26
+ uploadFiles(files: Array<Blob & {
27
+ name?: string;
28
+ }>, args?: Omit<RuntimeCreateBlobUploadSessionInput, "original_filename" | "content_type" | "size_bytes"> & {
29
+ original_filenames?: string[];
30
+ content_types?: string[];
31
+ sha256_list?: Array<string | undefined>;
32
+ }): Promise<RuntimeCompleteBlobUploadResult[]>;
33
+ hydrateBlobRefs(args: RuntimeHydrateBlobRefsInput): Promise<RuntimeBlobHydrateResponse>;
34
+ hydrateRecordBlobs(args: RuntimeHydrateRecordBlobsInput): Promise<RuntimeBlobHydrateResponse>;
35
+ private createUploadTicket;
36
+ private withUploadTicket;
37
+ private clearUploadTicket;
38
+ private ensureUploadTicket;
39
+ }
@@ -0,0 +1,148 @@
1
+ import { BaseRuntimeSdk, RuntimeApiError } from "../http.js";
2
+ const UPLOAD_TICKET_REFRESH_SKEW_MS = 30_000;
3
+ const UPLOAD_TICKET_RETRYABLE_CODES = new Set(["missing_credentials", "ticket_invalid"]);
4
+ export class RuntimeBlobClient extends BaseRuntimeSdk {
5
+ cachedUploadTicket = null;
6
+ constructor(options) {
7
+ super(options);
8
+ }
9
+ async createUploadSession(input) {
10
+ return this.withUploadTicket((ticket) => this.requestApp("/blobs/upload-sessions", {
11
+ method: "POST",
12
+ headers: {
13
+ Authorization: `Ticket ${ticket}`
14
+ },
15
+ body: JSON.stringify(input)
16
+ }));
17
+ }
18
+ async uploadBinary(args) {
19
+ await this.withUploadTicket(async (ticket) => {
20
+ const url = /^https?:\/\//i.test(args.uploadUrl)
21
+ ? new URL(args.uploadUrl)
22
+ : this.buildRequestUrl(args.uploadUrl);
23
+ const headers = new Headers(args.headers);
24
+ headers.set("Authorization", `Ticket ${ticket}`);
25
+ headers.set("Content-Type", args.contentType);
26
+ await this.requestVoidUrl(url, {
27
+ method: "PUT",
28
+ headers,
29
+ body: toRequestBody(args.body)
30
+ });
31
+ });
32
+ }
33
+ async completeUpload(uploadSessionId, input = {}) {
34
+ return this.withUploadTicket((ticket) => this.requestApp(`/blobs/upload-sessions/${encodeURIComponent(uploadSessionId)}/complete`, {
35
+ method: "POST",
36
+ headers: {
37
+ Authorization: `Ticket ${ticket}`
38
+ },
39
+ body: JSON.stringify(input)
40
+ }));
41
+ }
42
+ async upload(args) {
43
+ const { body, sha256, ...createInput } = args;
44
+ const session = await this.createUploadSession(createInput);
45
+ const contentType = args.content_type?.trim();
46
+ if (!contentType) {
47
+ throw new Error("content_type is required for runtime blob upload.");
48
+ }
49
+ await this.uploadBinary({
50
+ uploadUrl: session.upload_url,
51
+ body,
52
+ contentType,
53
+ headers: session.headers
54
+ });
55
+ return this.completeUpload(session.upload_session_id, {
56
+ ...(sha256 ? { sha256 } : {}),
57
+ ...(args.size_bytes !== undefined ? { size_bytes: args.size_bytes } : {})
58
+ });
59
+ }
60
+ async uploadFile(file, args = {}) {
61
+ const originalFilename = args.original_filename?.trim() || file.name?.trim() || "blob.bin";
62
+ const contentType = args.content_type?.trim() || file.type?.trim() || "application/octet-stream";
63
+ return this.upload({
64
+ ...args,
65
+ original_filename: originalFilename,
66
+ content_type: contentType,
67
+ size_bytes: Number.isFinite(file.size) ? file.size : undefined,
68
+ body: file
69
+ });
70
+ }
71
+ async uploadFiles(files, args = {}) {
72
+ const results = [];
73
+ for (const [index, file] of files.entries()) {
74
+ results.push(await this.uploadFile(file, {
75
+ ...args,
76
+ ...(args.original_filenames?.[index] ? { original_filename: args.original_filenames[index] } : {}),
77
+ ...(args.content_types?.[index] ? { content_type: args.content_types[index] } : {}),
78
+ ...(args.sha256_list?.[index] ? { sha256: args.sha256_list[index] } : {})
79
+ }));
80
+ }
81
+ return results;
82
+ }
83
+ async hydrateBlobRefs(args) {
84
+ return this.requestApp("/blobs/hydrate", {
85
+ method: "POST",
86
+ body: JSON.stringify({
87
+ items: args.items
88
+ })
89
+ });
90
+ }
91
+ async hydrateRecordBlobs(args) {
92
+ return this.requestApp("/blobs/hydrate", {
93
+ method: "POST",
94
+ body: JSON.stringify({
95
+ resource_key: args.resourceKey,
96
+ record_id: args.recordId
97
+ })
98
+ });
99
+ }
100
+ async createUploadTicket() {
101
+ return this.requestApp("/blobs/upload-ticket", {
102
+ method: "POST"
103
+ });
104
+ }
105
+ async withUploadTicket(runner) {
106
+ const ticket = await this.ensureUploadTicket();
107
+ try {
108
+ return await runner(ticket);
109
+ }
110
+ catch (error) {
111
+ if (!isUploadTicketRetryableError(error)) {
112
+ throw error;
113
+ }
114
+ this.clearUploadTicket();
115
+ return runner(await this.ensureUploadTicket());
116
+ }
117
+ }
118
+ clearUploadTicket() {
119
+ this.cachedUploadTicket = null;
120
+ }
121
+ async ensureUploadTicket() {
122
+ if (this.cachedUploadTicket && this.cachedUploadTicket.expiresAtMs - UPLOAD_TICKET_REFRESH_SKEW_MS > Date.now()) {
123
+ return this.cachedUploadTicket.value;
124
+ }
125
+ const next = await this.createUploadTicket();
126
+ const expiresAtMs = Date.parse(next.expires_at);
127
+ this.cachedUploadTicket = {
128
+ value: next.upload_ticket,
129
+ expiresAtMs: Number.isFinite(expiresAtMs) ? expiresAtMs : Date.now()
130
+ };
131
+ return next.upload_ticket;
132
+ }
133
+ }
134
+ function toRequestBody(body) {
135
+ if (body instanceof ArrayBuffer) {
136
+ return body;
137
+ }
138
+ if (ArrayBuffer.isView(body)) {
139
+ return new Uint8Array(body.buffer, body.byteOffset, body.byteLength);
140
+ }
141
+ return body;
142
+ }
143
+ function isUploadTicketRetryableError(error) {
144
+ return (error instanceof RuntimeApiError &&
145
+ error.status === 401 &&
146
+ typeof error.code === "string" &&
147
+ UPLOAD_TICKET_RETRYABLE_CODES.has(error.code));
148
+ }
@@ -0,0 +1 @@
1
+ export {};