@payloadcms/figma 0.0.1-alpha.29 → 0.0.1-alpha.30

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 (90) hide show
  1. package/dist/api/figma-api.d.ts.map +1 -1
  2. package/dist/api/figma-api.js +4 -0
  3. package/dist/api/figma-api.js.map +1 -1
  4. package/dist/commands/deploy.d.ts.map +1 -1
  5. package/dist/commands/deploy.js +32 -50
  6. package/dist/commands/deploy.js.map +1 -1
  7. package/dist/db-content-api/README.md +108 -0
  8. package/dist/db-content-api/generated/content-api-types.d.ts +763 -190
  9. package/dist/db-content-api/generated/content-api-types.d.ts.map +1 -1
  10. package/dist/db-content-api/generated/content-api-types.js.map +1 -1
  11. package/dist/db-content-api/index.d.ts +6 -19
  12. package/dist/db-content-api/index.d.ts.map +1 -1
  13. package/dist/db-content-api/index.js +396 -687
  14. package/dist/db-content-api/index.js.map +1 -1
  15. package/dist/db-content-api/temp-utilities/pagination.d.ts +13 -0
  16. package/dist/db-content-api/temp-utilities/pagination.d.ts.map +1 -0
  17. package/dist/db-content-api/temp-utilities/pagination.js +45 -0
  18. package/dist/db-content-api/temp-utilities/pagination.js.map +1 -0
  19. package/dist/db-content-api/temp-utilities/slug.d.ts +2 -0
  20. package/dist/db-content-api/temp-utilities/slug.d.ts.map +1 -0
  21. package/dist/db-content-api/temp-utilities/slug.js +3 -0
  22. package/dist/db-content-api/temp-utilities/slug.js.map +1 -0
  23. package/dist/db-content-api/temp-utilities/sorting.d.ts +7 -0
  24. package/dist/db-content-api/temp-utilities/sorting.d.ts.map +1 -0
  25. package/dist/db-content-api/temp-utilities/sorting.js +71 -0
  26. package/dist/db-content-api/temp-utilities/sorting.js.map +1 -0
  27. package/dist/db-content-api/temp-utilities/unwrapDocument.d.ts +4 -0
  28. package/dist/db-content-api/temp-utilities/unwrapDocument.d.ts.map +1 -0
  29. package/dist/db-content-api/temp-utilities/unwrapDocument.js +45 -0
  30. package/dist/db-content-api/temp-utilities/unwrapDocument.js.map +1 -0
  31. package/dist/db-content-api/utilities/auth.d.ts +30 -0
  32. package/dist/db-content-api/utilities/auth.d.ts.map +1 -0
  33. package/dist/db-content-api/utilities/auth.js +81 -0
  34. package/dist/db-content-api/utilities/auth.js.map +1 -0
  35. package/dist/db-content-api/utilities/data.d.ts +24 -0
  36. package/dist/db-content-api/utilities/data.d.ts.map +1 -0
  37. package/dist/db-content-api/utilities/data.js +118 -0
  38. package/dist/db-content-api/utilities/data.js.map +1 -0
  39. package/dist/db-content-api/utilities/joins.d.ts +55 -0
  40. package/dist/db-content-api/utilities/joins.d.ts.map +1 -0
  41. package/dist/db-content-api/utilities/joins.js +130 -0
  42. package/dist/db-content-api/utilities/joins.js.map +1 -0
  43. package/dist/db-content-api/utilities/where.d.ts +12 -0
  44. package/dist/db-content-api/utilities/where.d.ts.map +1 -0
  45. package/dist/db-content-api/utilities/where.js +63 -0
  46. package/dist/db-content-api/utilities/where.js.map +1 -0
  47. package/dist/plugin/build-config.d.ts +1 -0
  48. package/dist/plugin/build-config.d.ts.map +1 -1
  49. package/dist/plugin/build-config.js +38 -0
  50. package/dist/plugin/build-config.js.map +1 -1
  51. package/dist/storage-content-api/api-types.d.ts +161 -0
  52. package/dist/storage-content-api/api-types.d.ts.map +1 -0
  53. package/dist/storage-content-api/api-types.js +6 -0
  54. package/dist/storage-content-api/api-types.js.map +1 -0
  55. package/dist/storage-content-api/client.d.ts +6 -0
  56. package/dist/storage-content-api/client.d.ts.map +1 -0
  57. package/dist/storage-content-api/client.js +36 -0
  58. package/dist/storage-content-api/client.js.map +1 -0
  59. package/dist/storage-content-api/generateURL.d.ts +7 -0
  60. package/dist/storage-content-api/generateURL.d.ts.map +1 -0
  61. package/dist/storage-content-api/generateURL.js +7 -0
  62. package/dist/storage-content-api/generateURL.js.map +1 -0
  63. package/dist/storage-content-api/handleDelete.d.ts +8 -0
  64. package/dist/storage-content-api/handleDelete.d.ts.map +1 -0
  65. package/dist/storage-content-api/handleDelete.js +15 -0
  66. package/dist/storage-content-api/handleDelete.js.map +1 -0
  67. package/dist/storage-content-api/handleUpload.d.ts +11 -0
  68. package/dist/storage-content-api/handleUpload.d.ts.map +1 -0
  69. package/dist/storage-content-api/handleUpload.js +126 -0
  70. package/dist/storage-content-api/handleUpload.js.map +1 -0
  71. package/dist/storage-content-api/index.d.ts +5 -0
  72. package/dist/storage-content-api/index.d.ts.map +1 -0
  73. package/dist/storage-content-api/index.js +31 -0
  74. package/dist/storage-content-api/index.js.map +1 -0
  75. package/dist/storage-content-api/staticHandler.d.ts +10 -0
  76. package/dist/storage-content-api/staticHandler.d.ts.map +1 -0
  77. package/dist/storage-content-api/staticHandler.js +35 -0
  78. package/dist/storage-content-api/staticHandler.js.map +1 -0
  79. package/dist/storage-content-api/types.d.ts +10 -0
  80. package/dist/storage-content-api/types.d.ts.map +1 -0
  81. package/dist/storage-content-api/types.js +3 -0
  82. package/dist/storage-content-api/types.js.map +1 -0
  83. package/dist/utils/lambda-config.d.ts.map +1 -1
  84. package/dist/utils/lambda-config.js +1 -0
  85. package/dist/utils/lambda-config.js.map +1 -1
  86. package/package.json +5 -2
  87. package/dist/db-content-api/types.d.ts +0 -31
  88. package/dist/db-content-api/types.d.ts.map +0 -1
  89. package/dist/db-content-api/types.js +0 -7
  90. package/dist/db-content-api/types.js.map +0 -1
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Upload API types extracted from Content API OpenAPI spec.
3
+ * These are kept separate to avoid breaking changes when the main spec is regenerated.
4
+ */
5
+ export type UploadPaths = {
6
+ '/api/v0/uploads/{filename}': {
7
+ delete: {
8
+ parameters: {
9
+ path: {
10
+ filename: string;
11
+ };
12
+ };
13
+ responses: {
14
+ 200: {
15
+ content: {
16
+ 'application/json': {
17
+ success: true;
18
+ };
19
+ };
20
+ };
21
+ };
22
+ };
23
+ };
24
+ '/api/v0/uploads/download/sign': {
25
+ post: {
26
+ requestBody: {
27
+ content: {
28
+ 'application/json': {
29
+ expiresIn: number;
30
+ filename: string;
31
+ };
32
+ };
33
+ };
34
+ responses: {
35
+ 200: {
36
+ content: {
37
+ 'application/json': {
38
+ url: string;
39
+ };
40
+ };
41
+ };
42
+ };
43
+ };
44
+ };
45
+ '/api/v0/uploads/multipart/abort': {
46
+ post: {
47
+ requestBody: {
48
+ content: {
49
+ 'application/json': {
50
+ filename: string;
51
+ uploadId: string;
52
+ };
53
+ };
54
+ };
55
+ responses: {
56
+ 200: {
57
+ content: {
58
+ 'application/json': {
59
+ success: true;
60
+ };
61
+ };
62
+ };
63
+ };
64
+ };
65
+ };
66
+ '/api/v0/uploads/multipart/complete': {
67
+ post: {
68
+ requestBody: {
69
+ content: {
70
+ 'application/json': {
71
+ filename: string;
72
+ parts: Array<{
73
+ ETag: string;
74
+ PartNumber: number;
75
+ }>;
76
+ uploadId: string;
77
+ };
78
+ };
79
+ };
80
+ responses: {
81
+ 200: {
82
+ content: {
83
+ 'application/json': {
84
+ success: true;
85
+ };
86
+ };
87
+ };
88
+ };
89
+ };
90
+ };
91
+ '/api/v0/uploads/multipart/initiate': {
92
+ post: {
93
+ requestBody: {
94
+ content: {
95
+ 'application/json': {
96
+ contentType: string;
97
+ filename: string;
98
+ };
99
+ };
100
+ };
101
+ responses: {
102
+ 200: {
103
+ content: {
104
+ 'application/json': {
105
+ uploadId: string;
106
+ };
107
+ };
108
+ };
109
+ };
110
+ };
111
+ };
112
+ '/api/v0/uploads/multipart/parts': {
113
+ post: {
114
+ requestBody: {
115
+ content: {
116
+ 'application/json': {
117
+ expiresIn: number;
118
+ filename: string;
119
+ partNumbers: number[];
120
+ uploadId: string;
121
+ };
122
+ };
123
+ };
124
+ responses: {
125
+ 200: {
126
+ content: {
127
+ 'application/json': {
128
+ parts: Array<{
129
+ partNumber: number;
130
+ url: string;
131
+ }>;
132
+ };
133
+ };
134
+ };
135
+ };
136
+ };
137
+ };
138
+ '/api/v0/uploads/sign': {
139
+ post: {
140
+ requestBody: {
141
+ content: {
142
+ 'application/json': {
143
+ contentType?: string;
144
+ expiresIn: number;
145
+ filename: string;
146
+ };
147
+ };
148
+ };
149
+ responses: {
150
+ 200: {
151
+ content: {
152
+ 'application/json': {
153
+ url: string;
154
+ };
155
+ };
156
+ };
157
+ };
158
+ };
159
+ };
160
+ };
161
+ //# sourceMappingURL=api-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-types.d.ts","sourceRoot":"","sources":["../../src/storage-content-api/api-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Upload API types extracted from Content API OpenAPI spec.
3
+ * These are kept separate to avoid breaking changes when the main spec is regenerated.
4
+ */ export { };
5
+
6
+ //# sourceMappingURL=api-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/storage-content-api/api-types.ts"],"sourcesContent":["/**\n * Upload API types extracted from Content API OpenAPI spec.\n * These are kept separate to avoid breaking changes when the main spec is regenerated.\n */\n\nexport type UploadPaths = {\n '/api/v0/uploads/{filename}': {\n delete: {\n parameters: {\n path: {\n filename: string\n }\n }\n responses: {\n 200: {\n content: {\n 'application/json': { success: true }\n }\n }\n }\n }\n }\n '/api/v0/uploads/download/sign': {\n post: {\n requestBody: {\n content: {\n 'application/json': {\n expiresIn: number\n filename: string\n }\n }\n }\n responses: {\n 200: {\n content: {\n 'application/json': { url: string }\n }\n }\n }\n }\n }\n '/api/v0/uploads/multipart/abort': {\n post: {\n requestBody: {\n content: {\n 'application/json': {\n filename: string\n uploadId: string\n }\n }\n }\n responses: {\n 200: {\n content: {\n 'application/json': { success: true }\n }\n }\n }\n }\n }\n '/api/v0/uploads/multipart/complete': {\n post: {\n requestBody: {\n content: {\n 'application/json': {\n filename: string\n parts: Array<{ ETag: string; PartNumber: number }>\n uploadId: string\n }\n }\n }\n responses: {\n 200: {\n content: {\n 'application/json': { success: true }\n }\n }\n }\n }\n }\n '/api/v0/uploads/multipart/initiate': {\n post: {\n requestBody: {\n content: {\n 'application/json': {\n contentType: string\n filename: string\n }\n }\n }\n responses: {\n 200: {\n content: {\n 'application/json': { uploadId: string }\n }\n }\n }\n }\n }\n '/api/v0/uploads/multipart/parts': {\n post: {\n requestBody: {\n content: {\n 'application/json': {\n expiresIn: number\n filename: string\n partNumbers: number[]\n uploadId: string\n }\n }\n }\n responses: {\n 200: {\n content: {\n 'application/json': {\n parts: Array<{ partNumber: number; url: string }>\n }\n }\n }\n }\n }\n }\n '/api/v0/uploads/sign': {\n post: {\n requestBody: {\n content: {\n 'application/json': {\n contentType?: string\n expiresIn: number\n filename: string\n }\n }\n }\n responses: {\n 200: {\n content: {\n 'application/json': { url: string }\n }\n }\n }\n }\n }\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED,WAyIC"}
@@ -0,0 +1,6 @@
1
+ import createClient from 'openapi-fetch';
2
+ import type { UploadPaths } from './api-types.js';
3
+ import type { StorageClientConfig } from './types.js';
4
+ export type StorageClient = ReturnType<typeof createClient<UploadPaths>>;
5
+ export declare function createStorageClient(config: StorageClientConfig): StorageClient;
6
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/storage-content-api/client.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,eAAe,CAAA;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAKrD,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,WAAW,CAAC,CAAC,CAAA;AAExE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAM9E"}
@@ -0,0 +1,36 @@
1
+ import createClient from 'openapi-fetch';
2
+ import { getValidProjectToken } from '../auth/project-token.js';
3
+ import { fetchDevJwt } from '../db-content-api/utilities/auth.js';
4
+ export function createStorageClient(config) {
5
+ const client = createClient({
6
+ baseUrl: config.baseUrl
7
+ });
8
+ client.use(createStorageAuthMiddleware(config));
9
+ return client;
10
+ }
11
+ function createStorageAuthMiddleware(config) {
12
+ return {
13
+ async onRequest ({ request }) {
14
+ if ('contentApiKey' in config) {
15
+ request.headers.set('X-Api-Key', config.contentApiKey);
16
+ } else {
17
+ const { auth, contentSystemId } = config;
18
+ if (auth.mode === 'apiKey') {
19
+ request.headers.set('X-Api-Key', auth.apiKey);
20
+ } else if (auth.mode === 'tokenStore') {
21
+ const token = await getValidProjectToken(auth.tokenStore, contentSystemId);
22
+ if (!token) {
23
+ throw new Error('Authentication required. Run `npx @payloadcms/figma login` to authenticate.');
24
+ }
25
+ request.headers.set('Authorization', `Bearer ${token}`);
26
+ } else {
27
+ const token = await fetchDevJwt(config.baseUrl, contentSystemId);
28
+ request.headers.set('Authorization', `Bearer ${token}`);
29
+ }
30
+ }
31
+ return request;
32
+ }
33
+ };
34
+ }
35
+
36
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/storage-content-api/client.ts"],"sourcesContent":["import type { Middleware } from 'openapi-fetch'\n\nimport createClient from 'openapi-fetch'\n\nimport type { UploadPaths } from './api-types.js'\nimport type { StorageClientConfig } from './types.js'\n\nimport { getValidProjectToken } from '../auth/project-token.js'\nimport { fetchDevJwt } from '../db-content-api/utilities/auth.js'\n\nexport type StorageClient = ReturnType<typeof createClient<UploadPaths>>\n\nexport function createStorageClient(config: StorageClientConfig): StorageClient {\n const client = createClient<UploadPaths>({ baseUrl: config.baseUrl })\n\n client.use(createStorageAuthMiddleware(config))\n\n return client\n}\n\nfunction createStorageAuthMiddleware(config: StorageClientConfig): Middleware {\n return {\n async onRequest({ request }) {\n if ('contentApiKey' in config) {\n request.headers.set('X-Api-Key', config.contentApiKey)\n } else {\n const { auth, contentSystemId } = config\n\n if (auth.mode === 'apiKey') {\n request.headers.set('X-Api-Key', auth.apiKey)\n } else if (auth.mode === 'tokenStore') {\n const token = await getValidProjectToken(auth.tokenStore, contentSystemId)\n if (!token) {\n throw new Error(\n 'Authentication required. Run `npx @payloadcms/figma login` to authenticate.',\n )\n }\n request.headers.set('Authorization', `Bearer ${token}`)\n } else {\n const token = await fetchDevJwt(config.baseUrl, contentSystemId)\n request.headers.set('Authorization', `Bearer ${token}`)\n }\n }\n return request\n },\n }\n}\n"],"names":["createClient","getValidProjectToken","fetchDevJwt","createStorageClient","config","client","baseUrl","use","createStorageAuthMiddleware","onRequest","request","headers","set","contentApiKey","auth","contentSystemId","mode","apiKey","token","tokenStore","Error"],"mappings":"AAEA,OAAOA,kBAAkB,gBAAe;AAKxC,SAASC,oBAAoB,QAAQ,2BAA0B;AAC/D,SAASC,WAAW,QAAQ,sCAAqC;AAIjE,OAAO,SAASC,oBAAoBC,MAA2B;IAC7D,MAAMC,SAASL,aAA0B;QAAEM,SAASF,OAAOE,OAAO;IAAC;IAEnED,OAAOE,GAAG,CAACC,4BAA4BJ;IAEvC,OAAOC;AACT;AAEA,SAASG,4BAA4BJ,MAA2B;IAC9D,OAAO;QACL,MAAMK,WAAU,EAAEC,OAAO,EAAE;YACzB,IAAI,mBAAmBN,QAAQ;gBAC7BM,QAAQC,OAAO,CAACC,GAAG,CAAC,aAAaR,OAAOS,aAAa;YACvD,OAAO;gBACL,MAAM,EAAEC,IAAI,EAAEC,eAAe,EAAE,GAAGX;gBAElC,IAAIU,KAAKE,IAAI,KAAK,UAAU;oBAC1BN,QAAQC,OAAO,CAACC,GAAG,CAAC,aAAaE,KAAKG,MAAM;gBAC9C,OAAO,IAAIH,KAAKE,IAAI,KAAK,cAAc;oBACrC,MAAME,QAAQ,MAAMjB,qBAAqBa,KAAKK,UAAU,EAAEJ;oBAC1D,IAAI,CAACG,OAAO;wBACV,MAAM,IAAIE,MACR;oBAEJ;oBACAV,QAAQC,OAAO,CAACC,GAAG,CAAC,iBAAiB,CAAC,OAAO,EAAEM,OAAO;gBACxD,OAAO;oBACL,MAAMA,QAAQ,MAAMhB,YAAYE,OAAOE,OAAO,EAAES;oBAChDL,QAAQC,OAAO,CAACC,GAAG,CAAC,iBAAiB,CAAC,OAAO,EAAEM,OAAO;gBACxD;YACF;YACA,OAAOR;QACT;IACF;AACF"}
@@ -0,0 +1,7 @@
1
+ import type { GenerateURL } from '@payloadcms/plugin-cloud-storage/types';
2
+ type Args = {
3
+ baseUrl: string;
4
+ };
5
+ export declare const getGenerateURL: ({ baseUrl }: Args) => GenerateURL;
6
+ export {};
7
+ //# sourceMappingURL=generateURL.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateURL.d.ts","sourceRoot":"","sources":["../../src/storage-content-api/generateURL.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AAIzE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,cAAc,gBACX,IAAI,KAAG,WAIpB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import path from 'path';
2
+ export const getGenerateURL = ({ baseUrl })=>({ filename, prefix = '' })=>{
3
+ const fileKey = path.posix.join(prefix, filename);
4
+ return `${baseUrl}/api/v0/uploads/download/${encodeURIComponent(fileKey)}`;
5
+ };
6
+
7
+ //# sourceMappingURL=generateURL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/storage-content-api/generateURL.ts"],"sourcesContent":["import type { GenerateURL } from '@payloadcms/plugin-cloud-storage/types'\n\nimport path from 'path'\n\ntype Args = {\n baseUrl: string\n}\n\nexport const getGenerateURL =\n ({ baseUrl }: Args): GenerateURL =>\n ({ filename, prefix = '' }) => {\n const fileKey = path.posix.join(prefix, filename)\n return `${baseUrl}/api/v0/uploads/download/${encodeURIComponent(fileKey)}`\n }\n"],"names":["path","getGenerateURL","baseUrl","filename","prefix","fileKey","posix","join","encodeURIComponent"],"mappings":"AAEA,OAAOA,UAAU,OAAM;AAMvB,OAAO,MAAMC,iBACX,CAAC,EAAEC,OAAO,EAAQ,GAClB,CAAC,EAAEC,QAAQ,EAAEC,SAAS,EAAE,EAAE;QACxB,MAAMC,UAAUL,KAAKM,KAAK,CAACC,IAAI,CAACH,QAAQD;QACxC,OAAO,GAAGD,QAAQ,yBAAyB,EAAEM,mBAAmBH,UAAU;IAC5E,EAAC"}
@@ -0,0 +1,8 @@
1
+ import type { HandleDelete } from '@payloadcms/plugin-cloud-storage/types';
2
+ import type { StorageClient } from './client.js';
3
+ type Args = {
4
+ client: StorageClient;
5
+ };
6
+ export declare const getHandleDelete: ({ client }: Args) => HandleDelete;
7
+ export {};
8
+ //# sourceMappingURL=handleDelete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleDelete.d.ts","sourceRoot":"","sources":["../../src/storage-content-api/handleDelete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AAI1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,aAAa,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,eAAe,eAAgB,IAAI,KAAG,YAOlD,CAAA"}
@@ -0,0 +1,15 @@
1
+ import path from 'path';
2
+ export const getHandleDelete = ({ client })=>{
3
+ return async ({ doc: { prefix = '' }, filename })=>{
4
+ const fileKey = path.posix.join(prefix, filename);
5
+ await client.DELETE('/api/v0/uploads/{filename}', {
6
+ params: {
7
+ path: {
8
+ filename: fileKey
9
+ }
10
+ }
11
+ });
12
+ };
13
+ };
14
+
15
+ //# sourceMappingURL=handleDelete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/storage-content-api/handleDelete.ts"],"sourcesContent":["import type { HandleDelete } from '@payloadcms/plugin-cloud-storage/types'\n\nimport path from 'path'\n\nimport type { StorageClient } from './client.js'\n\ntype Args = {\n client: StorageClient\n}\n\nexport const getHandleDelete = ({ client }: Args): HandleDelete => {\n return async ({ doc: { prefix = '' }, filename }) => {\n const fileKey = path.posix.join(prefix, filename)\n await client.DELETE('/api/v0/uploads/{filename}', {\n params: { path: { filename: fileKey } },\n })\n }\n}\n"],"names":["path","getHandleDelete","client","doc","prefix","filename","fileKey","posix","join","DELETE","params"],"mappings":"AAEA,OAAOA,UAAU,OAAM;AAQvB,OAAO,MAAMC,kBAAkB,CAAC,EAAEC,MAAM,EAAQ;IAC9C,OAAO,OAAO,EAAEC,KAAK,EAAEC,SAAS,EAAE,EAAE,EAAEC,QAAQ,EAAE;QAC9C,MAAMC,UAAUN,KAAKO,KAAK,CAACC,IAAI,CAACJ,QAAQC;QACxC,MAAMH,OAAOO,MAAM,CAAC,8BAA8B;YAChDC,QAAQ;gBAAEV,MAAM;oBAAEK,UAAUC;gBAAQ;YAAE;QACxC;IACF;AACF,EAAC"}
@@ -0,0 +1,11 @@
1
+ import type { HandleUpload } from '@payloadcms/plugin-cloud-storage/types';
2
+ import type { CollectionConfig } from 'payload';
3
+ import type { StorageClient } from './client.js';
4
+ type Args = {
5
+ client: StorageClient;
6
+ collection: CollectionConfig;
7
+ prefix?: string;
8
+ };
9
+ export declare const getHandleUpload: ({ client, prefix }: Args) => HandleUpload;
10
+ export {};
11
+ //# sourceMappingURL=handleUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleUpload.d.ts","sourceRoot":"","sources":["../../src/storage-content-api/handleUpload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAK/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAID,eAAO,MAAM,eAAe,uBAA6B,IAAI,KAAG,YAc/D,CAAA"}
@@ -0,0 +1,126 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ const PART_SIZE = 5 * 1024 * 1024 // 5MB per part
4
+ ;
5
+ export const getHandleUpload = ({ client, prefix = '' })=>{
6
+ return async ({ data, file })=>{
7
+ const fileKey = path.posix.join(data.prefix || prefix, file.filename);
8
+ const fileData = file.tempFilePath ? fs.readFileSync(file.tempFilePath) : file.buffer;
9
+ const fileSize = file.filesize || fileData.length;
10
+ if (fileSize > PART_SIZE) {
11
+ await uploadMultipart({
12
+ client,
13
+ fileData,
14
+ fileKey,
15
+ mimeType: file.mimeType
16
+ });
17
+ } else {
18
+ await uploadSingleFile({
19
+ client,
20
+ fileData,
21
+ fileKey,
22
+ mimeType: file.mimeType
23
+ });
24
+ }
25
+ return data;
26
+ };
27
+ };
28
+ async function uploadSingleFile({ client, fileData, fileKey, mimeType }) {
29
+ const { data, error } = await client.POST('/api/v0/uploads/sign', {
30
+ body: {
31
+ contentType: mimeType,
32
+ expiresIn: 3600,
33
+ filename: fileKey
34
+ }
35
+ });
36
+ if (error || !data) {
37
+ throw new Error(`Failed to get presigned upload URL: ${JSON.stringify(error)}`);
38
+ }
39
+ const uploadResponse = await fetch(data.url, {
40
+ body: fileData,
41
+ headers: {
42
+ 'Content-Type': mimeType
43
+ },
44
+ method: 'PUT'
45
+ });
46
+ if (!uploadResponse.ok) {
47
+ throw new Error(`Failed to upload to S3: ${uploadResponse.status} ${uploadResponse.statusText}`);
48
+ }
49
+ }
50
+ async function uploadMultipart({ client, fileData, fileKey, mimeType }) {
51
+ const { data: initiateData, error: initiateError } = await client.POST('/api/v0/uploads/multipart/initiate', {
52
+ body: {
53
+ contentType: mimeType,
54
+ filename: fileKey
55
+ }
56
+ });
57
+ if (initiateError || !initiateData) {
58
+ throw new Error(`Failed to initiate multipart upload: ${JSON.stringify(initiateError)}`);
59
+ }
60
+ const { uploadId } = initiateData;
61
+ try {
62
+ const numParts = Math.ceil(fileData.length / PART_SIZE);
63
+ const partNumbers = Array.from({
64
+ length: numParts
65
+ }, (_, i)=>i + 1);
66
+ const { data: partsData, error: partsError } = await client.POST('/api/v0/uploads/multipart/parts', {
67
+ body: {
68
+ expiresIn: 3600,
69
+ filename: fileKey,
70
+ partNumbers,
71
+ uploadId
72
+ }
73
+ });
74
+ if (partsError || !partsData) {
75
+ throw new Error(`Failed to get part URLs: ${JSON.stringify(partsError)}`);
76
+ }
77
+ const { parts } = partsData;
78
+ if (!parts || !Array.isArray(parts)) {
79
+ throw new Error('Invalid response from part URLs endpoint: parts is not an array');
80
+ }
81
+ const uploadedParts = await Promise.all(parts.map(async ({ partNumber, url })=>{
82
+ const start = (partNumber - 1) * PART_SIZE;
83
+ const end = Math.min(start + PART_SIZE, fileData.length);
84
+ const partData = fileData.slice(start, end);
85
+ const uploadResponse = await fetch(url, {
86
+ body: partData,
87
+ headers: {
88
+ 'Content-Type': mimeType
89
+ },
90
+ method: 'PUT'
91
+ });
92
+ const etag = uploadResponse.headers.get('ETag');
93
+ if (!etag) {
94
+ throw new Error(`No ETag returned for part ${partNumber}`);
95
+ }
96
+ return {
97
+ ETag: etag,
98
+ PartNumber: partNumber
99
+ };
100
+ }));
101
+ const { error: completeError } = await client.POST('/api/v0/uploads/multipart/complete', {
102
+ body: {
103
+ filename: fileKey,
104
+ parts: uploadedParts,
105
+ uploadId
106
+ }
107
+ });
108
+ if (completeError) {
109
+ throw new Error(`Failed to complete multipart upload: ${JSON.stringify(completeError)}`);
110
+ }
111
+ } catch (error) {
112
+ try {
113
+ await client.POST('/api/v0/uploads/multipart/abort', {
114
+ body: {
115
+ filename: fileKey,
116
+ uploadId
117
+ }
118
+ });
119
+ } catch {
120
+ // Ignore abort errors
121
+ }
122
+ throw error;
123
+ }
124
+ }
125
+
126
+ //# sourceMappingURL=handleUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/storage-content-api/handleUpload.ts"],"sourcesContent":["import type { HandleUpload } from '@payloadcms/plugin-cloud-storage/types'\nimport type { CollectionConfig } from 'payload'\n\nimport fs from 'fs'\nimport path from 'path'\n\nimport type { StorageClient } from './client.js'\n\ntype Args = {\n client: StorageClient\n collection: CollectionConfig\n prefix?: string\n}\n\nconst PART_SIZE = 5 * 1024 * 1024 // 5MB per part\n\nexport const getHandleUpload = ({ client, prefix = '' }: Args): HandleUpload => {\n return async ({ data, file }) => {\n const fileKey = path.posix.join(data.prefix || prefix, file.filename)\n const fileData = file.tempFilePath ? fs.readFileSync(file.tempFilePath) : file.buffer\n const fileSize = file.filesize || fileData.length\n\n if (fileSize > PART_SIZE) {\n await uploadMultipart({ client, fileData, fileKey, mimeType: file.mimeType })\n } else {\n await uploadSingleFile({ client, fileData, fileKey, mimeType: file.mimeType })\n }\n\n return data\n }\n}\n\nasync function uploadSingleFile({\n client,\n fileData,\n fileKey,\n mimeType,\n}: {\n client: StorageClient\n fileData: Buffer\n fileKey: string\n mimeType: string\n}): Promise<void> {\n const { data, error } = await client.POST('/api/v0/uploads/sign', {\n body: { contentType: mimeType, expiresIn: 3600, filename: fileKey },\n })\n\n if (error || !data) {\n throw new Error(`Failed to get presigned upload URL: ${JSON.stringify(error)}`)\n }\n\n const uploadResponse = await fetch(data.url, {\n body: fileData,\n headers: { 'Content-Type': mimeType },\n method: 'PUT',\n })\n\n if (!uploadResponse.ok) {\n throw new Error(`Failed to upload to S3: ${uploadResponse.status} ${uploadResponse.statusText}`)\n }\n}\n\nasync function uploadMultipart({\n client,\n fileData,\n fileKey,\n mimeType,\n}: {\n client: StorageClient\n fileData: Buffer\n fileKey: string\n mimeType: string\n}): Promise<void> {\n const { data: initiateData, error: initiateError } = await client.POST(\n '/api/v0/uploads/multipart/initiate',\n {\n body: { contentType: mimeType, filename: fileKey },\n },\n )\n\n if (initiateError || !initiateData) {\n throw new Error(`Failed to initiate multipart upload: ${JSON.stringify(initiateError)}`)\n }\n\n const { uploadId } = initiateData\n\n try {\n const numParts = Math.ceil(fileData.length / PART_SIZE)\n const partNumbers = Array.from({ length: numParts }, (_, i) => i + 1)\n\n const { data: partsData, error: partsError } = await client.POST(\n '/api/v0/uploads/multipart/parts',\n {\n body: { expiresIn: 3600, filename: fileKey, partNumbers, uploadId },\n },\n )\n\n if (partsError || !partsData) {\n throw new Error(`Failed to get part URLs: ${JSON.stringify(partsError)}`)\n }\n\n const { parts } = partsData\n\n if (!parts || !Array.isArray(parts)) {\n throw new Error('Invalid response from part URLs endpoint: parts is not an array')\n }\n\n const uploadedParts = await Promise.all(\n parts.map(async ({ partNumber, url }) => {\n const start = (partNumber - 1) * PART_SIZE\n const end = Math.min(start + PART_SIZE, fileData.length)\n const partData = fileData.slice(start, end)\n\n const uploadResponse = await fetch(url, {\n body: partData,\n headers: { 'Content-Type': mimeType },\n method: 'PUT',\n })\n\n const etag = uploadResponse.headers.get('ETag')\n if (!etag) {\n throw new Error(`No ETag returned for part ${partNumber}`)\n }\n\n return { ETag: etag, PartNumber: partNumber }\n }),\n )\n\n const { error: completeError } = await client.POST('/api/v0/uploads/multipart/complete', {\n body: { filename: fileKey, parts: uploadedParts, uploadId },\n })\n\n if (completeError) {\n throw new Error(`Failed to complete multipart upload: ${JSON.stringify(completeError)}`)\n }\n } catch (error) {\n try {\n await client.POST('/api/v0/uploads/multipart/abort', {\n body: { filename: fileKey, uploadId },\n })\n } catch {\n // Ignore abort errors\n }\n throw error\n }\n}\n"],"names":["fs","path","PART_SIZE","getHandleUpload","client","prefix","data","file","fileKey","posix","join","filename","fileData","tempFilePath","readFileSync","buffer","fileSize","filesize","length","uploadMultipart","mimeType","uploadSingleFile","error","POST","body","contentType","expiresIn","Error","JSON","stringify","uploadResponse","fetch","url","headers","method","ok","status","statusText","initiateData","initiateError","uploadId","numParts","Math","ceil","partNumbers","Array","from","_","i","partsData","partsError","parts","isArray","uploadedParts","Promise","all","map","partNumber","start","end","min","partData","slice","etag","get","ETag","PartNumber","completeError"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Adapter } from '@payloadcms/plugin-cloud-storage/types';
2
+ import type { StorageClientConfig } from './types.js';
3
+ export type { StorageClientConfig } from './types.js';
4
+ export declare function contentApiStorageAdapter(config: StorageClientConfig): Adapter;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage-content-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAoB,MAAM,wCAAwC,CAAA;AAEvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAQrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAErD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAa7E"}
@@ -0,0 +1,31 @@
1
+ import { createStorageClient } from './client.js';
2
+ import { getGenerateURL } from './generateURL.js';
3
+ import { getHandleDelete } from './handleDelete.js';
4
+ import { getHandleUpload } from './handleUpload.js';
5
+ import { getHandler } from './staticHandler.js';
6
+ export function contentApiStorageAdapter(config) {
7
+ return ({ collection, prefix })=>{
8
+ const client = createStorageClient(config);
9
+ const baseUrl = config.baseUrl;
10
+ return {
11
+ name: 'content-api',
12
+ generateURL: getGenerateURL({
13
+ baseUrl
14
+ }),
15
+ handleDelete: getHandleDelete({
16
+ client
17
+ }),
18
+ handleUpload: getHandleUpload({
19
+ client,
20
+ collection,
21
+ prefix
22
+ }),
23
+ staticHandler: getHandler({
24
+ client,
25
+ collection
26
+ })
27
+ };
28
+ };
29
+ }
30
+
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/storage-content-api/index.ts"],"sourcesContent":["import type { Adapter, GeneratedAdapter } from '@payloadcms/plugin-cloud-storage/types'\n\nimport type { StorageClientConfig } from './types.js'\n\nimport { createStorageClient } from './client.js'\nimport { getGenerateURL } from './generateURL.js'\nimport { getHandleDelete } from './handleDelete.js'\nimport { getHandleUpload } from './handleUpload.js'\nimport { getHandler } from './staticHandler.js'\n\nexport type { StorageClientConfig } from './types.js'\n\nexport function contentApiStorageAdapter(config: StorageClientConfig): Adapter {\n return ({ collection, prefix }): GeneratedAdapter => {\n const client = createStorageClient(config)\n const baseUrl = config.baseUrl\n\n return {\n name: 'content-api',\n generateURL: getGenerateURL({ baseUrl }),\n handleDelete: getHandleDelete({ client }),\n handleUpload: getHandleUpload({ client, collection, prefix }),\n staticHandler: getHandler({ client, collection }),\n }\n }\n}\n"],"names":["createStorageClient","getGenerateURL","getHandleDelete","getHandleUpload","getHandler","contentApiStorageAdapter","config","collection","prefix","client","baseUrl","name","generateURL","handleDelete","handleUpload","staticHandler"],"mappings":"AAIA,SAASA,mBAAmB,QAAQ,cAAa;AACjD,SAASC,cAAc,QAAQ,mBAAkB;AACjD,SAASC,eAAe,QAAQ,oBAAmB;AACnD,SAASC,eAAe,QAAQ,oBAAmB;AACnD,SAASC,UAAU,QAAQ,qBAAoB;AAI/C,OAAO,SAASC,yBAAyBC,MAA2B;IAClE,OAAO,CAAC,EAAEC,UAAU,EAAEC,MAAM,EAAE;QAC5B,MAAMC,SAAST,oBAAoBM;QACnC,MAAMI,UAAUJ,OAAOI,OAAO;QAE9B,OAAO;YACLC,MAAM;YACNC,aAAaX,eAAe;gBAAES;YAAQ;YACtCG,cAAcX,gBAAgB;gBAAEO;YAAO;YACvCK,cAAcX,gBAAgB;gBAAEM;gBAAQF;gBAAYC;YAAO;YAC3DO,eAAeX,WAAW;gBAAEK;gBAAQF;YAAW;QACjD;IACF;AACF"}
@@ -0,0 +1,10 @@
1
+ import type { StaticHandler } from '@payloadcms/plugin-cloud-storage/types';
2
+ import type { CollectionConfig } from 'payload';
3
+ import type { StorageClient } from './client.js';
4
+ type Args = {
5
+ client: StorageClient;
6
+ collection: CollectionConfig;
7
+ };
8
+ export declare const getHandler: ({ client, collection }: Args) => StaticHandler;
9
+ export {};
10
+ //# sourceMappingURL=staticHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staticHandler.d.ts","sourceRoot":"","sources":["../../src/storage-content-api/staticHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAK/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,gBAAgB,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,UAAU,2BAA4B,IAAI,KAAG,aAqBzD,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { getFilePrefix } from '@payloadcms/plugin-cloud-storage/utilities';
2
+ import path from 'path';
3
+ export const getHandler = ({ client, collection })=>{
4
+ return async (req, { params: { clientUploadContext, filename } })=>{
5
+ try {
6
+ const prefix = await getFilePrefix({
7
+ clientUploadContext,
8
+ collection,
9
+ filename,
10
+ req
11
+ });
12
+ const key = path.posix.join(prefix, filename);
13
+ const { data, error } = await client.POST('/api/v0/uploads/download/sign', {
14
+ body: {
15
+ expiresIn: 7200,
16
+ filename: key
17
+ }
18
+ });
19
+ if (error || !data) {
20
+ req.payload.logger.error(`Failed to get signed download URL: ${JSON.stringify(error)}`);
21
+ return new Response('Internal Server Error', {
22
+ status: 500
23
+ });
24
+ }
25
+ return Response.redirect(data.url, 302);
26
+ } catch (err) {
27
+ req.payload.logger.error(err);
28
+ return new Response('Internal Server Error', {
29
+ status: 500
30
+ });
31
+ }
32
+ };
33
+ };
34
+
35
+ //# sourceMappingURL=staticHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/storage-content-api/staticHandler.ts"],"sourcesContent":["import type { StaticHandler } from '@payloadcms/plugin-cloud-storage/types'\nimport type { CollectionConfig } from 'payload'\n\nimport { getFilePrefix } from '@payloadcms/plugin-cloud-storage/utilities'\nimport path from 'path'\n\nimport type { StorageClient } from './client.js'\n\ntype Args = {\n client: StorageClient\n collection: CollectionConfig\n}\n\nexport const getHandler = ({ client, collection }: Args): StaticHandler => {\n return async (req, { params: { clientUploadContext, filename } }) => {\n try {\n const prefix = await getFilePrefix({ clientUploadContext, collection, filename, req })\n const key = path.posix.join(prefix, filename)\n\n const { data, error } = await client.POST('/api/v0/uploads/download/sign', {\n body: { expiresIn: 7200, filename: key },\n })\n\n if (error || !data) {\n req.payload.logger.error(`Failed to get signed download URL: ${JSON.stringify(error)}`)\n return new Response('Internal Server Error', { status: 500 })\n }\n\n return Response.redirect(data.url, 302)\n } catch (err) {\n req.payload.logger.error(err)\n return new Response('Internal Server Error', { status: 500 })\n }\n }\n}\n"],"names":["getFilePrefix","path","getHandler","client","collection","req","params","clientUploadContext","filename","prefix","key","posix","join","data","error","POST","body","expiresIn","payload","logger","JSON","stringify","Response","status","redirect","url","err"],"mappings":"AAGA,SAASA,aAAa,QAAQ,6CAA4C;AAC1E,OAAOC,UAAU,OAAM;AASvB,OAAO,MAAMC,aAAa,CAAC,EAAEC,MAAM,EAAEC,UAAU,EAAQ;IACrD,OAAO,OAAOC,KAAK,EAAEC,QAAQ,EAAEC,mBAAmB,EAAEC,QAAQ,EAAE,EAAE;QAC9D,IAAI;YACF,MAAMC,SAAS,MAAMT,cAAc;gBAAEO;gBAAqBH;gBAAYI;gBAAUH;YAAI;YACpF,MAAMK,MAAMT,KAAKU,KAAK,CAACC,IAAI,CAACH,QAAQD;YAEpC,MAAM,EAAEK,IAAI,EAAEC,KAAK,EAAE,GAAG,MAAMX,OAAOY,IAAI,CAAC,iCAAiC;gBACzEC,MAAM;oBAAEC,WAAW;oBAAMT,UAAUE;gBAAI;YACzC;YAEA,IAAII,SAAS,CAACD,MAAM;gBAClBR,IAAIa,OAAO,CAACC,MAAM,CAACL,KAAK,CAAC,CAAC,mCAAmC,EAAEM,KAAKC,SAAS,CAACP,QAAQ;gBACtF,OAAO,IAAIQ,SAAS,yBAAyB;oBAAEC,QAAQ;gBAAI;YAC7D;YAEA,OAAOD,SAASE,QAAQ,CAACX,KAAKY,GAAG,EAAE;QACrC,EAAE,OAAOC,KAAK;YACZrB,IAAIa,OAAO,CAACC,MAAM,CAACL,KAAK,CAACY;YACzB,OAAO,IAAIJ,SAAS,yBAAyB;gBAAEC,QAAQ;YAAI;QAC7D;IACF;AACF,EAAC"}
@@ -0,0 +1,10 @@
1
+ import type { AuthMode } from '../db-content-api/utilities/auth.js';
2
+ export type StorageClientConfig = {
3
+ auth: AuthMode;
4
+ baseUrl: string;
5
+ contentSystemId: string;
6
+ } | {
7
+ baseUrl: string;
8
+ contentApiKey: string;
9
+ };
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage-content-api/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAEnE,MAAM,MAAM,mBAAmB,GAC3B;IACE,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;CACxB,GACD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/storage-content-api/types.ts"],"sourcesContent":["import type { AuthMode } from '../db-content-api/utilities/auth.js'\n\nexport type StorageClientConfig =\n | {\n auth: AuthMode\n baseUrl: string\n contentSystemId: string\n }\n | { baseUrl: string; contentApiKey: string }\n"],"names":[],"mappings":"AAEA,WAM8C"}
@@ -1 +1 @@
1
- {"version":3,"file":"lambda-config.d.ts","sourceRoot":"","sources":["../../src/utils/lambda-config.ts"],"names":[],"mappings":"AAoBA;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCjF"}
1
+ {"version":3,"file":"lambda-config.d.ts","sourceRoot":"","sources":["../../src/utils/lambda-config.ts"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCjF"}
@@ -11,6 +11,7 @@ const BUILD_FOR_LAMBDA_SH_CONTENT = `#!/bin/bash
11
11
 
12
12
  cp -r .next/static .next/standalone/.next/static
13
13
  cp run.sh .next/standalone/run.sh
14
+ [ -d public ] && cp -r public .next/standalone/public
14
15
  cd .next/standalone
15
16
  zip -r --symlinks lambda.zip .
16
17
  mv lambda.zip ../..