@imagina-build/ias-cli 0.0.0 → 0.1.0

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 (78) hide show
  1. package/README.md +406 -2
  2. package/bin/ias.mjs +19 -0
  3. package/package.json +31 -12
  4. package/schema/ias.schema.json +535 -0
  5. package/shared/credentials/cms.mjs +105 -0
  6. package/shared/credentials/index.mjs +354 -0
  7. package/shared/credentials/plist.mjs +93 -0
  8. package/shared/vault/approvers-vectors.mjs +188 -0
  9. package/shared/vault/approvers.mjs +234 -0
  10. package/shared/vault/index.mjs +583 -0
  11. package/shared/vault/plaintext.mjs +115 -0
  12. package/shared/vault/test-vectors/ias-vault-2/approvers.json +2122 -0
  13. package/shared/vault/test-vectors/ias-vault-2/keys.json +43 -0
  14. package/shared/vault/test-vectors/ias-vault-2/malformed.json +1739 -0
  15. package/shared/vault/test-vectors/ias-vault-2/plaintexts.json +149 -0
  16. package/shared/vault/test-vectors/ias-vault-2/runners.json +580 -0
  17. package/shared/vault/test-vectors/ias-vault-2/sealed.json +567 -0
  18. package/shared/vault/test-vectors/ias-vault-2/tampered.json +989 -0
  19. package/shared/vault/test-vectors/keys.json +31 -0
  20. package/shared/vault/test-vectors/malformed.json +1341 -0
  21. package/shared/vault/test-vectors/sealed.json +384 -0
  22. package/shared/vault/test-vectors/tampered.json +610 -0
  23. package/shared/vault/vectors.mjs +720 -0
  24. package/src/cli.mjs +231 -0
  25. package/src/commands/apps/index.mjs +36 -0
  26. package/src/commands/auth/index.mjs +141 -0
  27. package/src/commands/build/follow.mjs +168 -0
  28. package/src/commands/build/index.mjs +110 -0
  29. package/src/commands/build/local.mjs +69 -0
  30. package/src/commands/build/profile.mjs +50 -0
  31. package/src/commands/build/source.mjs +71 -0
  32. package/src/commands/builds/index.mjs +148 -0
  33. package/src/commands/credentials/index.mjs +256 -0
  34. package/src/commands/credentials/material.mjs +159 -0
  35. package/src/commands/devices/asc.mjs +116 -0
  36. package/src/commands/devices/index.mjs +65 -0
  37. package/src/commands/devices/sync.mjs +223 -0
  38. package/src/commands/dist/index.mjs +108 -0
  39. package/src/commands/doctor/index.mjs +158 -0
  40. package/src/commands/env/index.mjs +163 -0
  41. package/src/commands/github/index.mjs +53 -0
  42. package/src/commands/init/index.mjs +224 -0
  43. package/src/commands/migrate/credentials.mjs +213 -0
  44. package/src/commands/migrate/eas-cli.mjs +153 -0
  45. package/src/commands/migrate/index.mjs +73 -0
  46. package/src/commands/migrate/numbers.mjs +85 -0
  47. package/src/commands/migrate/profiles.mjs +174 -0
  48. package/src/commands/migrate/project.mjs +249 -0
  49. package/src/commands/migrate/survey.mjs +205 -0
  50. package/src/commands/migrate/variables.mjs +183 -0
  51. package/src/commands/push/index.mjs +334 -0
  52. package/src/commands/sdk/index.mjs +81 -0
  53. package/src/commands/submit/index.mjs +85 -0
  54. package/src/commands/update/index.mjs +526 -0
  55. package/src/commands/usage/index.mjs +57 -0
  56. package/src/commands/vault/approvers.mjs +129 -0
  57. package/src/commands/vault/index.mjs +159 -0
  58. package/src/commands/vault/runners.mjs +115 -0
  59. package/src/commands/vault/team.mjs +111 -0
  60. package/src/commands/version/index.mjs +71 -0
  61. package/src/commands/webhooks/index.mjs +104 -0
  62. package/src/commands/workflows/index.mjs +88 -0
  63. package/src/config.mjs +261 -0
  64. package/src/dist.mjs +99 -0
  65. package/src/errors.mjs +158 -0
  66. package/src/http.mjs +45 -0
  67. package/src/legacy.mjs +73 -0
  68. package/src/manage.mjs +120 -0
  69. package/src/ota.mjs +122 -0
  70. package/src/output.mjs +36 -0
  71. package/src/process.mjs +45 -0
  72. package/src/schema.mjs +131 -0
  73. package/src/sdk.mjs +120 -0
  74. package/src/secret-input.mjs +27 -0
  75. package/src/secrets.mjs +37 -0
  76. package/src/shared.mjs +5 -0
  77. package/src/team-vault.mjs +152 -0
  78. package/src/token-store.mjs +93 -0
@@ -0,0 +1,149 @@
1
+ {
2
+ "format": "ias-vault-2",
3
+ "description": "What an envelope holds for each credential type (docs/technical/vault.md §3.5): good has one plaintext per type, with fake files; bad must be refused with code by validatePlaintext(type, bytes). text is the UTF-8 of the plaintext; plaintext, its bytes in base64url.",
4
+ "warning": "Test vectors: the keys are public. Never use them for anything else.",
5
+ "good": [
6
+ {
7
+ "type": "apple_distribution_certificate",
8
+ "scope": "team",
9
+ "text": "{\"type\":\"apple_distribution_certificate\",\"p12\":\"bm90IGEgcmVhbCBwMTI6ILHzqRYEKDaZOuWFAuPckU7HfyHhKFhP5ZA2iKwRhN3K\",\"password\":\"not-a-real-p12-password\"}",
10
+ "plaintext": "eyJ0eXBlIjoiYXBwbGVfZGlzdHJpYnV0aW9uX2NlcnRpZmljYXRlIiwicDEyIjoiYm05MElHRWdjbVZoYkNCd01USTZJTEh6cVJZRUtEYVpPdVdGQXVQY2tVN0hmeUhoS0ZoUDVaQTJpS3dSaE4zSyIsInBhc3N3b3JkIjoibm90LWEtcmVhbC1wMTItcGFzc3dvcmQifQ"
11
+ },
12
+ {
13
+ "type": "apple_provisioning_profile",
14
+ "scope": "application",
15
+ "text": "{\"type\":\"apple_provisioning_profile\",\"application\":\"jscheduler\",\"mobileprovision\":\"bm90IGEgcmVhbCBtb2JpbGVwcm92aXNpb246IIDrY0XB8PVcacIIcw-xNptlAHE7I5Lm7FoXmd9BDQ-_\"}",
16
+ "plaintext": "eyJ0eXBlIjoiYXBwbGVfcHJvdmlzaW9uaW5nX3Byb2ZpbGUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJtb2JpbGVwcm92aXNpb24iOiJibTkwSUdFZ2NtVmhiQ0J0YjJKcGJHVndjbTkyYVhOcGIyNDZJSURyWTBYQjhQVmNhY0lJY3cteE5wdGxBSEU3STVMbTdGb1htZDlCRFEtXyJ9"
17
+ },
18
+ {
19
+ "type": "android_upload_keystore",
20
+ "scope": "application",
21
+ "text": "{\"type\":\"android_upload_keystore\",\"application\":\"jscheduler\",\"keystore\":\"bm90IGEgcmVhbCBrZXlzdG9yZTogMO71fmTakhtYsX8RWMg43IvFFkhqSsTD7KXa_TJeqws\",\"store_password\":\"not-a-real-store-password\",\"key_alias\":\"upload\",\"key_password\":\"not-a-real-key-password\"}",
22
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnJaWGx6ZEc5eVpUb2dNTzcxZm1UYWtodFlzWDhSV01nNDNJdkZGa2hxU3NURDdLWGFfVEplcXdzIiwic3RvcmVfcGFzc3dvcmQiOiJub3QtYS1yZWFsLXN0b3JlLXBhc3N3b3JkIiwia2V5X2FsaWFzIjoidXBsb2FkIiwia2V5X3Bhc3N3b3JkIjoibm90LWEtcmVhbC1rZXktcGFzc3dvcmQifQ"
23
+ },
24
+ {
25
+ "type": "apns_key",
26
+ "scope": "team",
27
+ "text": "{\"type\":\"apns_key\",\"p8\":\"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tClVla1hBNC9rL0ovR2dwcy9wUE54UHArKytoVlduU0VONGVIbG1UK2t0NjQ9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K\",\"key_id\":\"ABCDE12345\",\"team_id\":\"CF798UCN8C\"}",
28
+ "plaintext": "eyJ0eXBlIjoiYXBuc19rZXkiLCJwOCI6IkxTMHRMUzFDUlVkSlRpQlFVa2xXUVZSRklFdEZXUzB0TFMwdENsVmxhMWhCTkM5ckwwb3ZSMmR3Y3k5d1VFNTRVSEFyS3l0b1ZsZHVVMFZPTkdWSWJHMVVLMnQwTmpROUNpMHRMUzB0UlU1RUlGQlNTVlpCVkVVZ1MwVlpMUzB0TFMwSyIsImtleV9pZCI6IkFCQ0RFMTIzNDUiLCJ0ZWFtX2lkIjoiQ0Y3OThVQ044QyJ9"
29
+ },
30
+ {
31
+ "type": "asc_api_key",
32
+ "scope": "team",
33
+ "text": "{\"type\":\"asc_api_key\",\"p8\":\"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCjRzNTNMZjU3aUl6TnUxY1lVeW1HTFN0bzRwM3UrSkJKOTVGS1N4R0JPdlU9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K\",\"key_id\":\"FGHIJ67890\",\"issuer_id\":\"6a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d\"}",
34
+ "plaintext": "eyJ0eXBlIjoiYXNjX2FwaV9rZXkiLCJwOCI6IkxTMHRMUzFDUlVkSlRpQlFVa2xXUVZSRklFdEZXUzB0TFMwdENqUnpOVE5NWmpVM2FVbDZUblV4WTFsVmVXMUhURk4wYnpSd00zVXJTa0pLT1RWR1MxTjRSMEpQZGxVOUNpMHRMUzB0UlU1RUlGQlNTVlpCVkVVZ1MwVlpMUzB0TFMwSyIsImtleV9pZCI6IkZHSElKNjc4OTAiLCJpc3N1ZXJfaWQiOiI2YTFiMmMzZC00ZTVmLTRhNmItOGM3ZC05ZTBmMWEyYjNjNGQifQ"
35
+ },
36
+ {
37
+ "type": "google_service_account",
38
+ "scope": "application",
39
+ "text": "{\"type\":\"google_service_account\",\"application\":\"jscheduler\",\"json\":\"eyJ0eXBlIjoic2VydmljZV9hY2NvdW50IiwicHJvamVjdF9pZCI6Im5vdC1hLXJlYWwtcHJvamVjdCJ9Cg\"}",
40
+ "plaintext": "eyJ0eXBlIjoiZ29vZ2xlX3NlcnZpY2VfYWNjb3VudCIsImFwcGxpY2F0aW9uIjoianNjaGVkdWxlciIsImpzb24iOiJleUowZVhCbElqb2ljMlZ5ZG1salpWOWhZMk52ZFc1MElpd2ljSEp2YW1WamRGOXBaQ0k2SW01dmRDMWhMWEpsWVd3dGNISnZhbVZqZENKOUNnIn0"
41
+ },
42
+ {
43
+ "type": "environment_variable",
44
+ "scope": "application",
45
+ "text": "{\"type\":\"environment_variable\",\"application\":\"jscheduler\",\"environment\":\"production\",\"name\":\"SENTRY_AUTH_TOKEN\",\"value\":\"not-a-real-sentry-token\"}",
46
+ "plaintext": "eyJ0eXBlIjoiZW52aXJvbm1lbnRfdmFyaWFibGUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJlbnZpcm9ubWVudCI6InByb2R1Y3Rpb24iLCJuYW1lIjoiU0VOVFJZX0FVVEhfVE9LRU4iLCJ2YWx1ZSI6Im5vdC1hLXJlYWwtc2VudHJ5LXRva2VuIn0"
47
+ }
48
+ ],
49
+ "bad": [
50
+ {
51
+ "name": "not-json",
52
+ "type": "android_upload_keystore",
53
+ "code": "plaintext.json",
54
+ "description": "Not JSON.",
55
+ "text": "{\"type\":\"android_upload_keystore\","
56
+ },
57
+ {
58
+ "name": "not-utf-8",
59
+ "type": "android_upload_keystore",
60
+ "code": "plaintext.json",
61
+ "description": "Bytes that are not UTF-8.",
62
+ "plaintext": "e_99"
63
+ },
64
+ {
65
+ "name": "array",
66
+ "type": "android_upload_keystore",
67
+ "code": "plaintext.json",
68
+ "description": "A JSON list.",
69
+ "text": "[{\"type\":\"android_upload_keystore\",\"application\":\"jscheduler\",\"keystore\":\"bm90IGEgcmVhbCBrZXlzdG9yZTogMO71fmTakhtYsX8RWMg43IvFFkhqSsTD7KXa_TJeqws\",\"store_password\":\"not-a-real-store-password\",\"key_alias\":\"upload\",\"key_password\":\"not-a-real-key-password\"}]"
70
+ },
71
+ {
72
+ "name": "missing-field",
73
+ "type": "android_upload_keystore",
74
+ "code": "plaintext.fields",
75
+ "description": "Without key_password.",
76
+ "text": "{\"type\":\"android_upload_keystore\",\"application\":\"jscheduler\",\"keystore\":\"bm90IGEgcmVhbCBrZXlzdG9yZTogMO71fmTakhtYsX8RWMg43IvFFkhqSsTD7KXa_TJeqws\",\"store_password\":\"not-a-real-store-password\",\"key_alias\":\"upload\"}"
77
+ },
78
+ {
79
+ "name": "extra-field",
80
+ "type": "android_upload_keystore",
81
+ "code": "plaintext.fields",
82
+ "description": "A field the type does not have.",
83
+ "text": "{\"type\":\"android_upload_keystore\",\"application\":\"jscheduler\",\"keystore\":\"bm90IGEgcmVhbCBrZXlzdG9yZTogMO71fmTakhtYsX8RWMg43IvFFkhqSsTD7KXa_TJeqws\",\"store_password\":\"not-a-real-store-password\",\"key_alias\":\"upload\",\"key_password\":\"not-a-real-key-password\",\"sha256\":\"AA\"}"
84
+ },
85
+ {
86
+ "name": "other-type",
87
+ "type": "android_upload_keystore",
88
+ "code": "plaintext.type",
89
+ "description": "The fields of a keystore under another type field.",
90
+ "text": "{\"type\":\"apple_provisioning_profile\",\"application\":\"jscheduler\",\"keystore\":\"bm90IGEgcmVhbCBrZXlzdG9yZTogMO71fmTakhtYsX8RWMg43IvFFkhqSsTD7KXa_TJeqws\",\"store_password\":\"not-a-real-store-password\",\"key_alias\":\"upload\",\"key_password\":\"not-a-real-key-password\"}"
91
+ },
92
+ {
93
+ "name": "file-empty",
94
+ "type": "android_upload_keystore",
95
+ "code": "plaintext.keystore",
96
+ "description": "An empty keystore.",
97
+ "text": "{\"type\":\"android_upload_keystore\",\"application\":\"jscheduler\",\"keystore\":\"\",\"store_password\":\"not-a-real-store-password\",\"key_alias\":\"upload\",\"key_password\":\"not-a-real-key-password\"}"
98
+ },
99
+ {
100
+ "name": "file-standard-base64",
101
+ "type": "android_upload_keystore",
102
+ "code": "plaintext.keystore",
103
+ "description": "The keystore in standard base64 with padding.",
104
+ "text": "{\"type\":\"android_upload_keystore\",\"application\":\"jscheduler\",\"keystore\":\"bm90IGEgcmVhbCBrZXlzdG9yZTogMO71fmTakhtYsX8RWMg43IvFFkhqSsTD7KXa/TJeqws=\",\"store_password\":\"not-a-real-store-password\",\"key_alias\":\"upload\",\"key_password\":\"not-a-real-key-password\"}"
105
+ },
106
+ {
107
+ "name": "password-number",
108
+ "type": "android_upload_keystore",
109
+ "code": "plaintext.store_password",
110
+ "description": "A password that is a number.",
111
+ "text": "{\"type\":\"android_upload_keystore\",\"application\":\"jscheduler\",\"keystore\":\"bm90IGEgcmVhbCBrZXlzdG9yZTogMO71fmTakhtYsX8RWMg43IvFFkhqSsTD7KXa_TJeqws\",\"store_password\":123456,\"key_alias\":\"upload\",\"key_password\":\"not-a-real-key-password\"}"
112
+ },
113
+ {
114
+ "name": "application-uppercase",
115
+ "type": "android_upload_keystore",
116
+ "code": "plaintext.application",
117
+ "description": "An application code in capitals.",
118
+ "text": "{\"type\":\"android_upload_keystore\",\"application\":\"jScheduler\",\"keystore\":\"bm90IGEgcmVhbCBrZXlzdG9yZTogMO71fmTakhtYsX8RWMg43IvFFkhqSsTD7KXa_TJeqws\",\"store_password\":\"not-a-real-store-password\",\"key_alias\":\"upload\",\"key_password\":\"not-a-real-key-password\"}"
119
+ },
120
+ {
121
+ "name": "variable-expo-public",
122
+ "type": "environment_variable",
123
+ "code": "plaintext.name",
124
+ "description": "An EXPO_PUBLIC_ variable: those are always plain, never sealed.",
125
+ "text": "{\"type\":\"environment_variable\",\"application\":\"jscheduler\",\"environment\":\"production\",\"name\":\"EXPO_PUBLIC_API_KEY\",\"value\":\"not-a-real-sentry-token\"}"
126
+ },
127
+ {
128
+ "name": "variable-environment",
129
+ "type": "environment_variable",
130
+ "code": "plaintext.environment",
131
+ "description": "An environment that is not one of the three.",
132
+ "text": "{\"type\":\"environment_variable\",\"application\":\"jscheduler\",\"environment\":\"staging\",\"name\":\"SENTRY_AUTH_TOKEN\",\"value\":\"not-a-real-sentry-token\"}"
133
+ },
134
+ {
135
+ "name": "asc-issuer",
136
+ "type": "asc_api_key",
137
+ "code": "plaintext.issuer_id",
138
+ "description": "An issuer id that is not a UUID.",
139
+ "text": "{\"type\":\"asc_api_key\",\"p8\":\"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCjRzNTNMZjU3aUl6TnUxY1lVeW1HTFN0bzRwM3UrSkJKOTVGS1N4R0JPdlU9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K\",\"key_id\":\"FGHIJ67890\",\"issuer_id\":\"not-a-uuid\"}"
140
+ },
141
+ {
142
+ "name": "unknown-type",
143
+ "type": "build_secret",
144
+ "code": "plaintext.type",
145
+ "description": "A type without a plaintext.",
146
+ "text": "{\"type\":\"build_secret\",\"value\":\"x\"}"
147
+ }
148
+ ]
149
+ }